From e92e5a924fcb4bbc471e09ef4e4df2d08c1f06f8 Mon Sep 17 00:00:00 2001 From: 2821744554@qq.com <2821744554@qq.com> Date: Mon, 13 Jul 2020 11:20:03 +0800 Subject: [PATCH] 增加网关负载 --- cloud/RibbonConsume/src/main/java/com/sincere/ribbon/RibbonApplication.java | 5 ++--- cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/FileRibbonControl.java | 4 ++-- cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/RibbonConsumeControl.java | 10 +++++----- cloud/RibbonConsume/src/main/resources/bootstrap.yml | 12 ++++++------ cloud/autho/pom.xml | 10 +++++----- cloud/autho/src/main/java/com/sincere/autho/Swagger2.java | 15 ++++++++------- cloud/autho/src/main/java/com/sincere/autho/control/LoginController.java | 14 +++++++------- cloud/autho/src/main/java/com/sincere/autho/dto/BaseDto.java | 8 ++++---- cloud/autho/src/main/java/com/sincere/autho/dto/req/LoginReqDto.java | 6 +++--- cloud/autho/src/main/java/com/sincere/autho/mapper/UserMapper.java | 4 ++-- cloud/autho/src/main/java/com/sincere/autho/service/impl/LoginServiceImpl.java | 10 +++++----- cloud/autho/src/main/resources/bootstrap.yml | 6 +++--- cloud/autho/src/main/resources/mapper/UserMapper.xml | 5 +++-- cloud/common/pom.xml | 22 +++++++++++----------- cloud/common/src/main/java/com/sincere/common/commons/CodeEnum.java | 3 ++- cloud/common/src/main/java/com/sincere/common/constants/CommonConstants.java | 1 - cloud/common/src/main/java/com/sincere/common/constants/MqQueueNameConstant.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/constants/SecurityConstants.java | 30 +++++++++++++++--------------- cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDetailDto.java | 14 +++++++------- cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDimensionalDto.java | 12 ++++++------ cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDto.java | 16 ++++++++-------- cloud/common/src/main/java/com/sincere/common/dto/independence/ChapterDto.java | 12 ++++++------ cloud/common/src/main/java/com/sincere/common/dto/independence/ClassCourseDto.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/dto/independence/CourseDto.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/dto/independence/GetLearnDto.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/dto/independence/JoinClassDto.java | 14 +++++++------- cloud/common/src/main/java/com/sincere/common/dto/independence/LeagueDto.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/dto/independence/ScheduleDto.java | 18 +++++++++--------- cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDetailDto.java | 20 ++++++++++---------- cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDto.java | 16 ++++++++-------- cloud/common/src/main/java/com/sincere/common/dto/independence/TeacherClassDto.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/AppDto.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/BindPushDto.java | 16 ++++++++-------- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/CensusKqDto.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/DeptRelationDto.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/GroupDto.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqDto.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqTeacherDto.java | 22 +++++++++++----------- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/ParentDto.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SchoolDto.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentBean.java | 2 +- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentCardDto.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncDeptDto.java | 14 +++++++------- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncSchoolDto.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java | 18 +++++++++--------- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/TemplateDto.java | 10 +++++----- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UpdateCardDto.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserDto.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserRelationDto.java | 10 +++++----- cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckInDto.java | 10 +++++----- cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckOutDto.java | 2 +- cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/dto/xiaoan/PassFailDto.java | 14 +++++++------- cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendFailDto.java | 52 ++++++++++++++++++++++++++-------------------------- cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendMessageDto.java | 18 +++++++++--------- cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendSuccessDto.java | 48 ++++++++++++++++++++++++------------------------ cloud/common/src/main/java/com/sincere/common/enums/ApiErrorCodeEnum.java | 3 ++- cloud/common/src/main/java/com/sincere/common/enums/DataStatusEnum.java | 2 +- cloud/common/src/main/java/com/sincere/common/enums/DifficultEnums.java | 21 +++++++++++---------- cloud/common/src/main/java/com/sincere/common/enums/DimensionalEnums.java | 13 +++++++------ cloud/common/src/main/java/com/sincere/common/enums/JobDataStatusEnum.java | 2 +- cloud/common/src/main/java/com/sincere/common/enums/OperationStatusEnum.java | 2 +- cloud/common/src/main/java/com/sincere/common/enums/PasswordEncoderEnum.java | 2 +- cloud/common/src/main/java/com/sincere/common/enums/PushTypeEnums.java | 18 +++++++++--------- cloud/common/src/main/java/com/sincere/common/enums/ResourceTypeEnum.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/enums/ResponseCodeEnum.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/enums/SmsMessageChannnelEnum.java | 2 +- cloud/common/src/main/java/com/sincere/common/enums/SmsTemplateEnum.java | 2 +- cloud/common/src/main/java/com/sincere/common/enums/SysLogTypeEnum.java | 2 +- cloud/common/src/main/java/com/sincere/common/enums/UserStatusEnum.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/exception/ResultEnums.java | 26 +++++++++++++------------- cloud/common/src/main/java/com/sincere/common/exception/ResultException.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/util/ApiResult.java | 2 +- cloud/common/src/main/java/com/sincere/common/util/AuthService.java | 3 +++ cloud/common/src/main/java/com/sincere/common/util/DateUtils.java | 40 ++++++++++++++++++++-------------------- cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java | 45 ++++++++++++++++++++++++--------------------- cloud/common/src/main/java/com/sincere/common/util/RedisUtils.java | 45 +++++++++++++++++++++------------------------ cloud/common/src/main/java/com/sincere/common/util/SerializeUtil.java | 2 +- cloud/common/src/main/java/com/sincere/common/util/SpringUtils.java | 33 ++++++++++++++++----------------- cloud/common/src/main/java/com/sincere/common/util/TokenUtils.java | 6 ++++-- cloud/common/src/main/java/com/sincere/common/util/Xml2JsonUtils.java | 68 +++++++++++++++++++++++++++++++++++--------------------------------- cloud/common/src/main/java/com/sincere/common/vo/BaseVo.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseDetailVo.java | 10 +++++----- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseVO.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassRepVo.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseClassReqVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseGroupReqVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseRepVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseTypeListVO.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/FirstReqVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetClassCourseReqVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseClassListRepVo.java | 10 +++++----- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseTypeListRepVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitRepVo.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitTeacherCourseReqVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinClassReqVo.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinDetail.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinRepVo.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/NoScheduleReqVo.java | 10 +++++----- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ParallelClassReqVo.java | 10 +++++----- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/RecallReqVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleIdReqVo.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleListRepVo.java | 5 +++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleRepVo.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SchoolIdReqVo.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SetTypeReqVo.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/TeacherCourseRepVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/paike/UpdateScheduleReqVo.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1.java | 12 ++++++------ cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1RepVO.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2.java | 28 ++++++++++++++-------------- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2RepVO.java | 4 ++-- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3.java | 32 ++++++++++++++++---------------- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3RepVO.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4.java | 20 ++++++++++---------- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4RepVO.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5.java | 48 ++++++++++++++++++++++++------------------------ cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5RepVO.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6.java | 50 +++++++++++++++++++++++++------------------------- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6RepVO.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7.java | 6 +++--- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7RepVO.java | 14 +++++++------- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8.java | 20 ++++++++++---------- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8RepVO.java | 2 +- cloud/common/src/main/java/com/sincere/common/vo/independence/school/SuggestRepVo.java | 24 ++++++++++++------------ cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table1.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2.java | 8 ++++---- cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2RepVO.java | 2 +- cloud/consumer/src/main/java/com/example/consumer/ConsumerApplication.java | 2 +- cloud/consumer/src/main/resources/META-INF/additional-spring-configuration-metadata.json | 3 ++- cloud/consumer/src/main/resources/application.properties | 6 +----- cloud/dahua/pom.xml | 87 ++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------- cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AddDeviceDialog.java | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AutoRegister.java | 3457 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/AutoRegister/DeviceConfigDialog.java | 606 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/AutoRegister/ModifyDeviceDialog.java | 239 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/DahuaApplication.java | 4 ++-- cloud/dahua/src/main/java/com/example/dahua/DeviceControl.java | 718 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/DeviceSearchAndInit.java | 1673 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/AddPersonDialog.java | 439 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DispositionOperateDialog.java | 635 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DownloadPictureDialog.java | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FaceRecognition.java | 2182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FindFaceEventRecordDialog.java | 422 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/GroupOperateDialog.java | 621 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/ModifyPersonDialog.java | 576 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/PersonOperateDialog.java | 1624 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/SearchByPicDialog.java | 1088 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/Gate/AddCardDialog.java | 583 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/Gate/CardManegerDialog.java | 728 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/Gate/Gate.java | 931 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/Gate/ModifyCardDialog.java | 598 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/MyTask.java | 24 ++++++++++++------------ cloud/dahua/src/main/java/com/example/dahua/Test.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ cloud/dahua/src/main/java/com/example/dahua/TestFrame.java | 4 ++-- cloud/dahua/src/main/java/com/example/dahua/alarmListen/AlarmListenModule.java | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/async/ImageUtils.java | 17 +++++++++-------- cloud/dahua/src/main/java/com/example/dahua/async/MyScheduledTask.java | 43 +++++++++++++++++++++++++++++++------------ cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java | 53 ++++++++++++++++++++++++++--------------------------- cloud/dahua/src/main/java/com/example/dahua/attendance/AddFingerPrintDialog.java | 338 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/attendance/Attendance.java | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceFunctionOperatePanel.java | 594 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceOperateShareDialog.java | 479 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceShowPanel.java | 647 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByFingerPrintIdDialog.java | 363 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByUserIdDialog.java | 497 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/attendance/SubscribePanel.java | 224 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/bean/DeviceInfoBean.java | 6 ++++++ cloud/dahua/src/main/java/com/example/dahua/bean/SendCards.java | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java | 24 +++++++++++++++++++++++- cloud/dahua/src/main/java/com/example/dahua/bean/UserInfoBean.java | 18 +++++++++++++++--- cloud/dahua/src/main/java/com/example/dahua/common/Base64.java | 93 +++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/common/BorderEx.java | 10 +++++----- cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButton.java | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButtonEx.java | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/common/DeviceManagerListener.java | 2 +- cloud/dahua/src/main/java/com/example/dahua/common/ErrorCode.java | 1723 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/common/FunctionList.java | 474 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/common/ListPictureShowDialog.java | 45 +++++++++++++++++++++++---------------------- cloud/dahua/src/main/java/com/example/dahua/common/LoginPanel.java | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/common/PaintPanel.java | 44 ++++++++++++++++++++++---------------------- cloud/dahua/src/main/java/com/example/dahua/common/Res.java | 4549 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/common/SavePath.java | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/common/SwitchLanguage.java | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/common/WindowCloseListener.java | 2 +- cloud/dahua/src/main/java/com/example/dahua/control/DeviceControl.java | 6 +++--- cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java | 11 +++++------ cloud/dahua/src/main/java/com/example/dahua/dao/TestDao.java | 17 ++++++++--------- cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java | 53 ++++++++++++++++++++++++++++++++++------------------- cloud/dahua/src/main/java/com/example/dahua/dbconfig/CampusDataSourceConfig.java | 8 ++++---- cloud/dahua/src/main/java/com/example/dahua/dbconfig/XiaoanDataSourceConfig.java | 6 +++--- cloud/dahua/src/main/java/com/example/dahua/lib/FilePath.java | 6 +++--- cloud/dahua/src/main/java/com/example/dahua/lib/ImageAlgLib.java | 32 ++++++++++++++++---------------- cloud/dahua/src/main/java/com/example/dahua/lib/JdbcTemplateExt.java | 2 +- cloud/dahua/src/main/java/com/example/dahua/lib/NativeString.java | 46 ++++++++++++++++++++++++---------------------- cloud/dahua/src/main/java/com/example/dahua/lib/NetSDKLib.java | 31997 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/lib/ToolKits.java | 1012 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/lib/Utils.java | 209 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/AlarmListenModule.java | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/AttendanceModule.java | 905 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/AutoRegisterModule.java | 631 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/DeviceInitModule.java | 62 +++++++++++++++++++++++++++++++------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/DeviceSearchModule.java | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/FaceRecognitionModule.java | 1682 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java | 1641 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/module/LoginModule.java | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------ cloud/dahua/src/main/java/com/example/dahua/module/RealPlayModule.java | 74 +++++++++++++++++++++++++++++++++++++------------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/SearchByPictureModule.java | 370 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/mqtt/MqttManager.java | 28 ++++++++++++++++++++++++---- cloud/dahua/src/main/java/com/example/dahua/service/AttendanceImp.java | 15 +++++++-------- cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java | 8 +++++--- cloud/dahua/src/main/java/com/example/dahua/service/DeviceService.java | 2 +- cloud/dahua/src/main/java/com/example/dahua/service/DeviceServiceImp.java | 6 +++--- cloud/dahua/src/main/java/com/example/dahua/service/UserService.java | 14 +++++++++----- cloud/dahua/src/main/java/com/example/dahua/utils/AuthService.java | 3 +++ cloud/dahua/src/main/java/com/example/dahua/utils/FileUtils.java | 8 ++++---- cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java | 32 ++++++++++++++++---------------- cloud/dahua/src/main/resources/application.yml | 31 ++++++++++++++++--------------- cloud/dahua/src/main/resources/bootstrap.yml | 28 ++++++++++++++-------------- cloud/dahua/src/main/resources/mapper/usermapper.xml | 8 ++++---- cloud/dahua/src/main/resources/mybatis-config.xml | 18 +++++++++--------- cloud/dahua/src/main/resources/res_en_US.properties | 74 ++++---------------------------------------------------------------------- cloud/dahua/src/main/resources/res_zh_CN.properties | 68 +------------------------------------------------------------------- cloud/dahua/src/main/resources/xiaoanmapper/usermapper.xml | 8 ++++---- cloud/dahua/src/test/java/com/example/dahua/DahuaApplicationTests.java | 247 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------- cloud/fIle-center/pom.xml | 1 + cloud/fIle-center/src/main/java/com/sincere/file/FileApplication.java | 2 +- cloud/fIle-center/src/main/java/com/sincere/file/Test.java | 3 ++- cloud/fIle-center/src/main/java/com/sincere/file/config/AliyunOSSConfig.java | 32 ++++++++++++++++---------------- cloud/fIle-center/src/main/java/com/sincere/file/config/SwaggerConfig.java | 97 ++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- cloud/fIle-center/src/main/java/com/sincere/file/control/FileControl.java | 2 +- cloud/fIle-center/src/main/java/com/sincere/file/model/FileInfo.java | 44 ++++++++++++++++++++++---------------------- cloud/fIle-center/src/main/java/com/sincere/file/service/FileService.java | 16 ++++++++-------- cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AbstractFileService.java | 76 +++++++++++++++++++++++++++++++++++++++------------------------------------- cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AliyunOssServiceImpl.java | 52 ++++++++++++++++++++++++++-------------------------- cloud/fIle-center/src/main/java/com/sincere/file/utils/FileUtil.java | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------- cloud/fIle-center/src/main/java/com/sincere/file/utils/HtmlUtil.java | 8 +------- cloud/fIle-center/src/main/java/com/sincere/file/utils/PoiUtils.java | 56 ++++++++++++++++++++++++++++---------------------------- cloud/fIle-center/src/main/resources/application.yml | 96 ++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------ cloud/fIle-center/src/main/resources/bootstrap.yml | 28 ++++++++++++++-------------- cloud/fIle-center/src/main/view/index.html | 2 +- cloud/getaway/src/main/java/com/sincere/getaway/client/config/CorsConfig.java | 74 +++++++++++++++++++++++++++++++++++++------------------------------------- cloud/getaway/src/main/java/com/sincere/getaway/client/config/PermitUrlProperties.java | 69 +++++++++++++++++++++++++++++++++++---------------------------------- cloud/getaway/src/main/java/com/sincere/getaway/client/config/SwaggerProvider.java | 8 ++++---- cloud/getaway/src/main/java/com/sincere/getaway/client/filter/AccessFilter.java | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------- cloud/getaway/src/main/java/com/sincere/getaway/client/filter/SwaggerHeaderFilter.java | 2 +- cloud/getaway/src/main/resources/application.yml | 26 +++++++++++++------------- cloud/getaway/src/main/resources/bootstrap.yml | 6 +++--- cloud/haikang/src/main/java/com/sincere/haikang/CMSServer.java | 257 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------- cloud/haikang/src/main/java/com/sincere/haikang/HaikangApplication.java | 4 ++-- cloud/haikang/src/main/java/com/sincere/haikang/SchduleTask.java | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------- cloud/haikang/src/main/java/com/sincere/haikang/async/SendUserAsync.java | 25 ++++++++++++------------- cloud/haikang/src/main/java/com/sincere/haikang/bean/SmsBean.java | 8 ++++---- cloud/haikang/src/main/java/com/sincere/haikang/bean/StudentBean.java | 3 +-- cloud/haikang/src/main/java/com/sincere/haikang/control/SmsControl.java | 22 +++++++++++----------- cloud/haikang/src/main/java/com/sincere/haikang/control/UserControl.java | 23 ++++++++++------------- cloud/haikang/src/main/java/com/sincere/haikang/dao/DeviceDao.java | 12 ++++++++---- cloud/haikang/src/main/java/com/sincere/haikang/dao/UserDao.java | 26 +++++++++++++++----------- cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeAlarm.java | 20 ++++++++++---------- cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeCMS.java | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------- cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeStream.java | 18 +++++++----------- cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceImp.java | 17 ++++++++--------- cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceService.java | 4 +++- cloud/haikang/src/main/java/com/sincere/haikang/utils/ApiHelper.java | 38 ++++++++++++++++++++------------------ cloud/haikang/src/main/java/com/sincere/haikang/utils/EncodeUtils.java | 6 +++--- cloud/haikang/src/main/java/com/sincere/haikang/utils/FileUtils.java | 6 +++--- cloud/haikang/src/main/java/com/sincere/haikang/utils/SmsHttpUtils.java | 15 ++++++++------- cloud/haikang/src/main/resources/application.yaml | 2 +- cloud/haikang/src/main/resources/mapper/usermapper.xml | 8 ++++---- cloud/haikang/src/main/resources/mybatis-config.xml | 18 +++++++++--------- cloud/haikang/src/test/java/com/sincere/haikang/HaikangApplicationTests.java | 3 +-- cloud/haikangface/pom.xml | 25 ++++++++++++++++--------- cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/QieTuClass.java | 2 +- cloud/haikangface/src/main/java/com/sincere/haikangface/admindao/ZuoyeAdminDao.java | 4 ++-- cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java | 29 +++++++++++++++-------------- cloud/haikangface/src/main/java/com/sincere/haikangface/bean/StudentBean.java | 34 +++++++++++++++++++++++++++++++++- cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/FaceRecoder.java | 14 +++++++------- cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/Homework.java | 2 +- cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/StudentBean.java | 2 +- cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCBaseBean.java | 43 +++++++++++++++++++++++++++++++++++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCData.java | 21 +++++++++++++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java | 17 +++++++++++++---- cloud/haikangface/src/main/java/com/sincere/haikangface/control/HelpControl.java | 12 ++++++------ cloud/haikangface/src/main/java/com/sincere/haikangface/control/QueControl21.java | 27 ++++++++++++++------------- cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/control/WGControl.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/control/WXControl.java | 8 ++++---- cloud/haikangface/src/main/java/com/sincere/haikangface/control/YouDaoControl.java | 4 ++-- cloud/haikangface/src/main/java/com/sincere/haikangface/control/ZuoYeControl.java | 740 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java | 18 ++++++++++-------- cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java | 67 ++++++++++++++++++++++++++++++++++++++----------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/dao/ZuoYeDao.java | 20 ++++++++++---------- cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/CampusDataSourceConfig.java | 8 ++++---- cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/MyadminDataSourceConfig.java | 6 +++--- cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/XiaoanDataSourceConfig.java | 6 +++--- cloud/haikangface/src/main/java/com/sincere/haikangface/fegin/HaikangfaceFegin.java | 13 +++++++------ cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeAlarm.java | 23 +++++++++++------------ cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeCMS.java | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeSS.java | 489 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqtUtils.java | 2 +- cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqttManager.java | 10 +++++----- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java | 42 +++++++++++++++++++++++++++++++----------- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiHelper.java | 38 ++++++++++++++++++++------------------ cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiUtil.java | 12 ++++++------ cloud/haikangface/src/main/java/com/sincere/haikangface/utils/BaiduApiUtiols.java | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java | 29 ++++++++++++++++------------- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/FileUtils.java | 21 ++++++++++----------- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HKXmlUtils.java | 34 ++++++++++++++++++---------------- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java | 48 ++++++++++++++++++++++++------------------------ cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ImageUtils.java | 42 ++++++++++++++++++++++-------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/SendRecoderUtils.java | 4 ++-- cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java | 30 +++++++++++++++++------------- cloud/haikangface/src/main/resources/adminmapper/adminmapper.xml | 8 ++++---- cloud/haikangface/src/main/resources/application.yaml | 9 +++++---- cloud/haikangface/src/main/resources/mapper/devicemapper.xml | 10 +++++----- cloud/haikangface/src/main/resources/mapper/usermapper.xml | 8 ++++---- cloud/haikangface/src/main/resources/mybatis-config.xml | 18 +++++++++--------- cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml | 8 ++++---- cloud/haikangface/src/test/java/com/sincere/haikangface/HaikangfaceApplicationTests.java | 36 +++++++++++++++++++++++++++++++++--- cloud/independence/src/main/java/com/sincere/independence/Swagger2.java | 15 ++++++++------- cloud/independence/src/main/java/com/sincere/independence/controller/LearnController.java | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------- cloud/independence/src/main/java/com/sincere/independence/controller/LearnStatController.java | 38 +++++++++++++++++++------------------- cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleController.java | 16 ++++++++-------- cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java | 22 +++++++++++----------- cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java | 48 ++++++++++++++++++++++++------------------------ cloud/independence/src/main/java/com/sincere/independence/feign/IndependenceFeign.java | 28 +++++++++++++--------------- cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReq.java | 6 +++--- cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReqVo.java | 10 +++++----- cloud/independence/src/main/java/com/sincere/independence/vo/CreateExamReqVo.java | 16 ++++++++-------- cloud/independence/src/main/java/com/sincere/independence/vo/CreateLeagueReqVo.java | 4 ++-- cloud/independence/src/main/java/com/sincere/independence/vo/GetLeague.java | 4 ++-- cloud/independence/src/main/java/com/sincere/independence/vo/GetLeagueRepVo.java | 2 +- cloud/independence/src/main/java/com/sincere/independence/vo/InitAnalyseReqVo.java | 4 ++-- cloud/independence/src/main/java/com/sincere/independence/vo/InitScoreReqVo.java | 2 +- cloud/independence/src/main/java/com/sincere/independence/vo/UpdateExamReqVo.java | 6 +++--- cloud/independence/src/main/java/com/sincere/independence/vo/excel/ExamExcelVo.java | 68 ++++++++++++++++++++++++++++++++++---------------------------------- cloud/independence/src/main/java/com/sincere/independence/vo/excel/ScoreExcelVo.java | 24 ++++++++++++------------ cloud/independence/src/main/resources/logback.xml | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- cloud/lapi/src/main/java/com/sincere/lapi/Swagger2.java | 15 ++++++++------- cloud/lapi/src/main/java/com/sincere/lapi/Utils/FileUtils.java | 48 ++++++++++++++++++++++++------------------------ cloud/lapi/src/main/java/com/sincere/lapi/Utils/SpringContextHolder.java | 4 ++-- cloud/lapi/src/main/java/com/sincere/lapi/controller/LapiController.java | 83 ++++++++++++++++++++++++++++++++++++++++++----------------------------------------- cloud/lapi/src/main/java/com/sincere/lapi/feign/ScFeign.java | 10 +++++----- cloud/lapi/src/main/java/com/sincere/lapi/feign/XaFeign.java | 6 +++--- cloud/lapi/src/main/java/com/sincere/lapi/pojo/HeartInfo.java | 10 +++++----- cloud/lapi/src/main/java/com/sincere/lapi/pojo/LAPI.java | 2 +- cloud/lapi/src/main/java/com/sincere/lapi/server/ServerRun.java | 4 ++-- cloud/lapi/src/main/java/com/sincere/lapi/server/UrlParam.java | 6 +++--- cloud/lapi/src/main/java/com/sincere/lapi/server/handler/HttpClientHandler.java | 52 ++++++++++++++++++++++++++-------------------------- cloud/lapi/src/main/java/com/sincere/lapi/server/init/NettyFactory.java | 2 +- cloud/lapi/src/main/java/com/sincere/lapi/server/pojo/HeartBack.java | 22 +++++++++++----------- cloud/lapi/src/main/java/com/sincere/lapi/service/request/AttendanceService.java | 84 ++++++++++++++++++++++++++++++++++++++++++------------------------------------------ cloud/lapi/src/main/java/com/sincere/lapi/service/request/TerminalHttpCall.java | 46 +++++++++++++++++++++++----------------------- cloud/lapi/src/main/resources/logback.xml | 13 ++++++++----- cloud/mypulsar/pom.xml | 30 ++++++++++++++++++------------ cloud/mypulsar/src/main/java/com/example/mypulsar/MyRunnerableInt.java | 10 +++++----- cloud/mypulsar/src/main/java/com/example/mypulsar/MypulsarApplication.java | 5 +++++ cloud/mypulsar/src/main/java/com/example/mypulsar/Test.java | 2 -- cloud/mypulsar/src/main/java/com/example/mypulsar/bean/CalDevContrl.java | 2 +- cloud/mypulsar/src/main/java/com/example/mypulsar/bean/ClassRoom.java | 35 +++++++++++++++++++++++++++++++++++ cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Command.java | 30 +++++++++++++++--------------- cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTime.java | 2 +- cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTimeList.java | 2 +- cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Wl_LinkModeBean.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ cloud/mypulsar/src/main/java/com/example/mypulsar/campusDao/CampusDao.java | 18 ++++++++++++++++++ cloud/mypulsar/src/main/java/com/example/mypulsar/control/UserControl.java | 4 ++-- cloud/mypulsar/src/main/java/com/example/mypulsar/dao/DeviceDao.java | 30 ++++++++++++++++-------------- cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/CampusDataSourceConfig.java | 43 +++++++++++++++++++++++++++++++++++++++++++ cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/IotplatDataSourceConfig.java | 38 ++++++++++++++++++++++++++++++++++++++ cloud/mypulsar/src/main/java/com/example/mypulsar/message/MessageDataVO.java | 1 + cloud/mypulsar/src/main/java/com/example/mypulsar/mq/AESBase64Utils.java | 6 +++--- cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MessageHandlerTask.java | 1 + cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthentication.java | 46 +++++++++++++++++++++++----------------------- cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthenticationDataProvider.java | 42 +++++++++++++++++++++--------------------- cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConfigs.java | 2 +- cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConstants.java | 4 ++-- cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConsumer.java | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------ cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqEnv.java | 38 +++++++++++++++++++------------------- cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSer.java | 1 - cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSerImp.java | 2 +- cloud/mypulsar/src/main/java/com/example/mypulsar/task/SchduledTasks.java | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------ cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ControlUtils.java | 64 ++++++++++++++++++++++++++++++++-------------------------------- cloud/mypulsar/src/main/java/com/example/mypulsar/utils/FileUtils.java | 21 ++++++++++----------- cloud/mypulsar/src/main/java/com/example/mypulsar/utils/HttpUtil.java | 6 +++--- cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ThreadPoolFactory.java | 1 - cloud/mypulsar/src/main/resources/application.yaml | 26 +++++++++++++++++--------- cloud/mypulsar/src/main/resources/iotmapper/iotmapper.xml | 37 +++++++++++++++++++++++++++++++++++++ cloud/mypulsar/src/main/resources/mapper/usermapper.xml | 18 +++++++----------- cloud/mypulsar/src/main/resources/mybatis-config.xml | 18 +++++++++--------- cloud/mypulsar/src/test/java/com/example/mypulsar/MypulsarApplicationTests.java | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- cloud/pom.xml | 54 +++++++++++++++++++++++++++--------------------------- cloud/quartz/pom.xml | 14 +++++++------- cloud/quartz/src/main/java/com/sincere/quartz/QuartzApplication.java | 2 +- cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceAspect.java | 43 ++++++++++++++++++++++--------------------- cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceConfig.java | 75 +++++++++++++++++++++++++++++++++++++-------------------------------------- cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceType.java | 26 +++++++++++++------------- cloud/quartz/src/main/java/com/sincere/quartz/datasource/DynamicDataSource.java | 10 +++++----- cloud/quartz/src/main/java/com/sincere/quartz/datasource/JdbcContextHolder.java | 24 +++++++++++++----------- cloud/quartz/src/main/java/com/sincere/quartz/datasource/MyDataSource.java | 8 ++++---- cloud/quartz/src/main/java/com/sincere/quartz/feign/ScFeign.java | 60 ++++++++++++++++++++++++++++++------------------------------ cloud/quartz/src/main/java/com/sincere/quartz/job/BindPushJob.java | 65 +++++++++++++++++++++++++++++++++-------------------------------- cloud/quartz/src/main/java/com/sincere/quartz/job/KQJob.java | 404 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/quartz/src/main/java/com/sincere/quartz/job/SyncJob.java | 6 +++--- cloud/quartz/src/main/java/com/sincere/quartz/mapper/YxyMapper.java | 12 ++++++------ cloud/quartz/src/main/java/com/sincere/quartz/model/YxyAgency.java | 6 +++--- cloud/quartz/src/main/java/com/sincere/quartz/model/YxyStudent.java | 12 ++++++------ cloud/quartz/src/main/java/com/sincere/quartz/model/YxyTeacher.java | 8 ++++---- cloud/quartz/src/main/java/com/sincere/quartz/service/YxyService.java | 12 ++++++------ cloud/quartz/src/main/java/com/sincere/quartz/service/impl/ManagerServiceImpl.java | 2 +- cloud/quartz/src/main/java/com/sincere/quartz/service/impl/YxyServiceImpl.java | 2 +- cloud/quartz/src/main/java/com/sincere/quartz/third/qiyehao/QYHUtils.java | 24 ++++++++++++------------ cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYReadService.java | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------- cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResult.java | 12 ++++++------ cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResultDetail.java | 18 +++++++++--------- cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYWriteService.java | 560 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/quartz/src/main/java/com/sincere/quartz/utils/ThreadUtils.java | 4 ++-- cloud/quartz/src/main/resources/application.yaml | 6 +++--- cloud/quartz/src/main/resources/mapper/ManagerMapper.xml | 2 +- cloud/quartz/src/main/resources/mapper/SmsMapper.xml | 8 ++++---- cloud/quartz/src/main/resources/mapper/YxyMapper.xml | 23 ++++++++++++----------- cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnController.java | 80 ++++++++++++++++++++++++++++++++++++++++---------------------------------------- cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnStatController.java | 904 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleController.java | 461 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------- cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------- cloud/search_independence/src/main/java/com/sincere/independence/mapper/StudentMapper.java | 5 +++++ cloud/search_independence/src/main/java/com/sincere/independence/model/Analyse.java | 20 ++++++++++---------- cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDetail.java | 14 +++++++------- cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDimensional.java | 12 ++++++------ cloud/search_independence/src/main/java/com/sincere/independence/model/Chapter.java | 14 +++++++------- cloud/search_independence/src/main/java/com/sincere/independence/model/ClassCourse.java | 4 ++-- cloud/search_independence/src/main/java/com/sincere/independence/model/Course.java | 8 ++++---- cloud/search_independence/src/main/java/com/sincere/independence/model/Dimensional.java | 8 ++++---- cloud/search_independence/src/main/java/com/sincere/independence/model/JoinClass.java | 14 +++++++------- cloud/search_independence/src/main/java/com/sincere/independence/model/Knowledge.java | 12 ++++++------ cloud/search_independence/src/main/java/com/sincere/independence/model/League.java | 8 ++++---- cloud/search_independence/src/main/java/com/sincere/independence/model/Schedule.java | 20 ++++++++++---------- cloud/search_independence/src/main/java/com/sincere/independence/model/Student.java | 24 ++++++++++++------------ cloud/search_independence/src/main/java/com/sincere/independence/model/StudentDetail.java | 26 +++++++++++++------------- cloud/search_independence/src/main/java/com/sincere/independence/model/Teacher.java | 8 ++++---- cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherClass.java | 4 ++-- cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherCourse.java | 2 +- cloud/search_independence/src/main/java/com/sincere/independence/service/StudentService.java | 3 +++ cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDetailServiceImpl.java | 12 ++++++------ cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDimensionalServiceImpl.java | 12 ++++++------ cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassCourseServiceImpl.java | 26 +++++++++++++------------- cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassModelServiceImpl.java | 2 +- cloud/search_independence/src/main/java/com/sincere/independence/service/impl/CourseServiceImpl.java | 18 +++++++++--------- cloud/search_independence/src/main/java/com/sincere/independence/service/impl/DimensionalServiceImpl.java | 2 +- cloud/search_independence/src/main/java/com/sincere/independence/service/impl/JoinCLassServiceImpl.java | 10 +++++----- cloud/search_independence/src/main/java/com/sincere/independence/service/impl/KnowledgeServiceImpl.java | 2 +- cloud/search_independence/src/main/java/com/sincere/independence/service/impl/LeagueServiceImpl.java | 24 ++++++++++++------------ cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentDetailServiceImpl.java | 16 ++++++++-------- cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentServiceImpl.java | 37 +++++++++++++++++++------------------ cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherClassServiceImpl.java | 18 +++++++++--------- cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherCourseServiceImpl.java | 11 ++++++----- cloud/search_independence/src/main/resources/application.yml | 2 +- cloud/search_independence/src/main/resources/logback.xml | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- cloud/search_independence/src/main/resources/mapper/AnalyseDetailMapper.xml | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------- cloud/search_independence/src/main/resources/mapper/AnalyseDimensionalMapper.xml | 41 +++++++++++++++++++++-------------------- cloud/search_independence/src/main/resources/mapper/AnalyseMapper.xml | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------- cloud/search_independence/src/main/resources/mapper/ChapterMapper.xml | 37 +++++++++++++++++++------------------ cloud/search_independence/src/main/resources/mapper/ClassCourseMapper.xml | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------- cloud/search_independence/src/main/resources/mapper/ClassModelMapper.xml | 92 +++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------- cloud/search_independence/src/main/resources/mapper/CourseMapper.xml | 98 +++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- cloud/search_independence/src/main/resources/mapper/DimensionalMapper.xml | 53 +++++++++++++++++++++++++++-------------------------- cloud/search_independence/src/main/resources/mapper/JoinClassMapper.xml | 88 ++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------- cloud/search_independence/src/main/resources/mapper/KnowledgeMapper.xml | 44 ++++++++++++++++++++++---------------------- cloud/search_independence/src/main/resources/mapper/LeagueMapper.xml | 79 ++++++++++++++++++++++++++++++++++++++++--------------------------------------- cloud/search_independence/src/main/resources/mapper/ScheduleMapper.xml | 94 ++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------- cloud/search_independence/src/main/resources/mapper/StudentDetailMapper.xml | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------- cloud/search_independence/src/main/resources/mapper/StudentMapper.xml | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------- cloud/search_independence/src/main/resources/mapper/TeacherClassMapper.xml | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------- cloud/search_independence/src/main/resources/mapper/TeacherCourseMapper.xml | 182 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------- cloud/search_independence/src/main/resources/mapper/TeacherMapper.xml | 56 ++++++++++++++++++++++++++++---------------------------- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java | 31 ++++++++++++++++--------------- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/KqController.java | 46 +++++++++++++++++++++++----------------------- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/RegisterPushController.java | 20 ++++++++++---------- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/SyncController.java | 62 +++++++++++++++++++++++++++++++------------------------------- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java | 35 +++++++++++++++++------------------ cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/WgController.java | 46 +++++++++++++++++++++++----------------------- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/KqTemplateMapper.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/RegisterPushMapper.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/SyncMapper.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java | 2 +- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceLink.java | 6 +++--- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceOrder.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqChamber.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqTemplate.java | 10 +++++----- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/School.java | 6 +++--- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/StudentCard.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/UpdateCard.java | 6 +++--- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/User.java | 6 +++--- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java | 2 +- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/KqService.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/RegisterPushService.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/SyncService.java | 4 ++-- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/DeviceServiceImpl.java | 8 ++++---- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/KqServiceImpl.java | 2 +- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/RegisterPushServiceImpl.java | 2 +- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/SyncServiceImpl.java | 2 +- cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java | 24 ++++++++++++------------ cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/WgUserSearchServiceImpl.java | 10 +++++----- cloud/search_smartCampus/src/main/resources/application.yml | 8 ++++---- cloud/search_smartCampus/src/main/resources/logback.xml | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml | 8 +++++--- cloud/search_smartCampus/src/main/resources/mapper/CwCheckMapper.xml | 26 +++++++++++++------------- cloud/search_smartCampus/src/main/resources/mapper/CwStutemperaturereocrdMapper.xml | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------- cloud/search_smartCampus/src/main/resources/mapper/DeviceMapper.xml | 29 +++++++++++++++-------------- cloud/search_smartCampus/src/main/resources/mapper/KqTemplateMapper.xml | 17 +++++++++-------- cloud/search_smartCampus/src/main/resources/mapper/RegisterPushMapper.xml | 64 +++++++++++++++++++++++++++++++++------------------------------- cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml | 203 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------- cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolStudentMapper.xml | 388 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolTeacherMapper.xml | 296 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------- cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml | 6 +++--- cloud/search_smartCampus/src/main/resources/mapper/WgUserSearchMapper.xml | 74 +++++++++++++++++++++++++++++++++++++------------------------------------- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/controller/FaceController.java | 14 +++++++------- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/controller/WgController.java | 58 +++++++++++++++++++++++++++++----------------------------- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/controller/ZkController.java | 10 +++++----- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/model/CheckIn.java | 18 +++++++++--------- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/model/PassFail.java | 18 +++++++++--------- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/model/SendFail.java | 44 ++++++++++++++++++++++---------------------- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/model/SendMessage.java | 20 ++++++++++---------- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/model/SendSuccess.java | 38 +++++++++++++++++++------------------- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/impl/FaceServiceImpl.java | 4 ++-- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/impl/WgServiceImpl.java | 2 +- cloud/search_xiaoan/src/main/java/com/sincere/xiaoanSearch/service/impl/ZkServiceImpl.java | 2 +- cloud/search_xiaoan/src/main/resources/application.yml | 6 +++--- cloud/search_xiaoan/src/main/resources/logback.xml | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- cloud/search_xiaoan/src/main/resources/mapper/FaceRecoderMapper.xml | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------ cloud/search_xiaoan/src/main/resources/mapper/FaceSendfailMapper.xml | 58 +++++++++++++++++++++++++++++----------------------------- cloud/search_xiaoan/src/main/resources/mapper/FaceSendsuccessMapper.xml | 50 +++++++++++++++++++++++++------------------------- cloud/search_xiaoan/src/main/resources/mapper/FingerMapper.xml | 2 +- cloud/search_xiaoan/src/main/resources/mapper/SearchMapper.xml | 10 +++++----- cloud/search_xiaoan/src/main/resources/mapper/SendMessageMapper.xml | 57 +++++++++++++++++++++++++++++---------------------------- cloud/search_xiaoan/src/main/resources/mapper/WgResultMapper.xml | 48 ++++++++++++++++++++++++++---------------------- cloud/server1/src/main/java/com/sincere/server1/FileUtils.java | 8 ++++---- cloud/server1/src/main/java/com/sincere/server1/listener/EurekaInstanceCanceledListener.java | 16 ++++++++-------- cloud/server1/src/main/resources/bootstrap.yml | 6 +++--- cloud/server1/src/main/view/templates/eureka/header.ftl | 43 ++++++++++++++++++++++--------------------- cloud/server1/src/main/view/templates/eureka/lastn.ftl | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------- cloud/server1/src/main/view/templates/eureka/navbar.ftl | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------ cloud/server1/src/main/view/templates/eureka/status.ftl | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------- cloud/server2/src/main/java/com/sincere/server2/FileUtils.java | 8 ++++---- cloud/server2/src/main/java/com/sincere/server2/listener/EurekaInstanceCanceledListener.java | 16 ++++++++-------- cloud/server2/src/main/resources/bootstrap.yml | 6 +++--- cloud/server2/src/main/view/templates/eureka/header.ftl | 43 ++++++++++++++++++++++--------------------- cloud/server2/src/main/view/templates/eureka/lastn.ftl | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------- cloud/server2/src/main/view/templates/eureka/navbar.ftl | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------ cloud/server2/src/main/view/templates/eureka/status.ftl | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------- cloud/user_search/src/main/java/com/sincere/userSearch/Swagger2.java | 15 ++++++++------- cloud/user_search/src/main/java/com/sincere/userSearch/access/MemberFilter.java | 10 +++++----- cloud/user_search/src/main/java/com/sincere/userSearch/access/ParameterRequestWrapper.java | 35 +++++++++++++++++++---------------- cloud/user_search/src/main/java/com/sincere/userSearch/controller/UserController.java | 42 +++++++++++++++++++++--------------------- cloud/user_search/src/main/java/com/sincere/userSearch/mapper/UserMapper.java | 8 ++++---- cloud/user_search/src/main/java/com/sincere/userSearch/model/StudentInfo.java | 32 ++++++++++++++++---------------- cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherClassInfo.java | 16 ++++++++-------- cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherGroup.java | 4 ++-- cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherInfo.java | 24 ++++++++++++------------ cloud/user_search/src/main/java/com/sincere/userSearch/service/UserService.java | 6 +++--- cloud/user_search/src/main/java/com/sincere/userSearch/service/impl/UserServiceImpl.java | 40 ++++++++++++++++++++-------------------- cloud/user_search/src/main/java/com/sincere/userSearch/vo/BaseVo.java | 8 ++++---- cloud/user_search/src/main/java/com/sincere/userSearch/vo/UserInfo.java | 2 +- cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/Info.java | 6 +++--- cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/ZnxwRepVo.java | 4 ++-- cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/UserInfoReqVo.java | 2 +- cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/ZnxwReqVo.java | 4 ++-- cloud/user_search/src/main/resources/logback.xml | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- cloud/user_search/src/main/resources/mapper/QyhApplyMapper.xml | 7 ++++--- cloud/user_search/src/main/resources/mapper/UserMapper.xml | 48 +++++++++++++++++++++++++----------------------- cloud/weigeng/pom.xml | 8 ++++---- cloud/weigeng/src/main/java/com/sincere/weigeng/Swagger2.java | 15 ++++++++------- cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1200.java | 8 ++++---- cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1300.java | 8 ++++---- cloud/weigeng/src/main/java/com/sincere/weigeng/controller/WgController.java | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------- cloud/weigeng/src/main/java/com/sincere/weigeng/feign/SmFeign.java | 14 +++++++------- cloud/weigeng/src/main/java/com/sincere/weigeng/feign/XaFeign.java | 22 +++++++++++----------- cloud/weigeng/src/main/java/com/sincere/weigeng/utils/UdpServerHandler.java | 34 +++++++++++++++++----------------- cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WGUtils.java | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------ cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WatchServer.java | 310 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WgUdpCommShort.java | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------- cloud/weigeng/src/main/java/com/sincere/weigeng/vo/AttendanceTimeVo.java | 31 ++++++++++++++++--------------- cloud/weigeng/src/main/java/com/sincere/weigeng/vo/CardInfo.java | 9 ++++----- cloud/weigeng/src/main/java/com/sincere/weigeng/vo/CleanShiDuanVo.java | 7 +++---- cloud/weigeng/src/main/java/com/sincere/weigeng/vo/OpenDoorVo.java | 9 +++++---- cloud/weigeng/src/main/java/com/sincere/weigeng/vo/SignalCardInfoVo.java | 17 +++++++++-------- cloud/weigeng/src/main/resources/application.yaml | 6 +++--- cloud/weigeng/src/main/resources/logback.xml | 30 ++++++++++++++++++------------ cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java | 2 +- cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java | 15 ++++++++------- cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------- cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java | 4 ++-- cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java | 4 ++-- cloud/zkAttendance/src/main/java/com/sincere/att/vo/FingerOrderVo.java | 7 ++++--- cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java | 9 +++++---- cloud/zkAttendance/src/main/resources/logback.xml | 30 ++++++++++++++++++------------ 599 files changed, 44289 insertions(+), 43807 deletions(-) create mode 100644 cloud/dahua/src/main/java/com/example/dahua/bean/SendCards.java create mode 100644 cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCBaseBean.java create mode 100644 cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCData.java create mode 100644 cloud/haikangface/src/main/java/com/sincere/haikangface/control/WGControl.java create mode 100644 cloud/mypulsar/src/main/java/com/example/mypulsar/bean/ClassRoom.java create mode 100644 cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Wl_LinkModeBean.java create mode 100644 cloud/mypulsar/src/main/java/com/example/mypulsar/campusDao/CampusDao.java create mode 100644 cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/CampusDataSourceConfig.java create mode 100644 cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/IotplatDataSourceConfig.java create mode 100644 cloud/mypulsar/src/main/resources/iotmapper/iotmapper.xml diff --git a/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/RibbonApplication.java b/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/RibbonApplication.java index 89be456..a2378eb 100644 --- a/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/RibbonApplication.java +++ b/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/RibbonApplication.java @@ -14,14 +14,13 @@ public class RibbonApplication { @Bean @LoadBalanced - RestTemplate restTemplate(){ + RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { - SpringApplication.run(RibbonApplication.class,args); + SpringApplication.run(RibbonApplication.class, args); } - } diff --git a/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/FileRibbonControl.java b/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/FileRibbonControl.java index d129fea..1cacecb 100644 --- a/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/FileRibbonControl.java +++ b/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/FileRibbonControl.java @@ -36,7 +36,7 @@ public class FileRibbonControl { // String value = request.getHeader(key); // requestHeaders.add(key, value); // } - requestHeaders.add("ossPath","ceshi"); + requestHeaders.add("ossPath", "ceshi"); Map params = new HashMap<>(); //获取parameter信息 if (params == null) { @@ -44,7 +44,7 @@ public class FileRibbonControl { } HttpEntity requestEntity = new HttpEntity(null, requestHeaders); - ResponseEntity rss = restTemplate.exchange("http://file-center/file/deleteFile/"+fileName, HttpMethod.DELETE, requestEntity, String.class, params); + ResponseEntity rss = restTemplate.exchange("http://file-center/file/deleteFile/" + fileName, HttpMethod.DELETE, requestEntity, String.class, params); logger.error("删除文件:" + rss.getStatusCodeValue()); return true; diff --git a/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/RibbonConsumeControl.java b/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/RibbonConsumeControl.java index 69ff6d4..62779e2 100644 --- a/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/RibbonConsumeControl.java +++ b/cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/RibbonConsumeControl.java @@ -29,9 +29,9 @@ public class RibbonConsumeControl { @Autowired private DiscoveryClient discoveryClient; - @RequestMapping(value = "login",method = RequestMethod.GET ) - public String login(@RequestParam("account")String account,@RequestParam("password")String password,@RequestParam("userType")String userType){ - LOG.error("登录中:"+account+password+userType); + @RequestMapping(value = "login", method = RequestMethod.GET) + public String login(@RequestParam("account") String account, @RequestParam("password") String password, @RequestParam("userType") String userType) { + LOG.error("登录中:" + account + password + userType); HttpHeaders headers = new HttpHeaders(); Login login = new Login(); @@ -39,8 +39,8 @@ public class RibbonConsumeControl { login.setPassword(password); login.setUserType(userType); - String result = restTemplate.postForEntity("http://authserver/login",login,String.class).getBody(); - LOG.error("登录结果:"+result); + String result = restTemplate.postForEntity("http://authserver/login", login, String.class).getBody(); + LOG.error("登录结果:" + result); return result; } diff --git a/cloud/RibbonConsume/src/main/resources/bootstrap.yml b/cloud/RibbonConsume/src/main/resources/bootstrap.yml index 134b541..edd8408 100644 --- a/cloud/RibbonConsume/src/main/resources/bootstrap.yml +++ b/cloud/RibbonConsume/src/main/resources/bootstrap.yml @@ -7,24 +7,24 @@ server: spring: application: name: ribbon-consume - + #eureka client配置 eureka: client: serviceUrl: defaultZone: http:// -# defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ -# defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/ + # defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ + # defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/ #http://134.224.249.33:1111/eureka/ 正式库 #http://134.224.249.33:1111/eureka/ 测试库 #http://127.0.0.1:8761/eureka,http://127.0.0.1:8762/eureka registry-fetch-interval-seconds: 5 instance-info-replication-interval-seconds: 10 instance: -# prefer-ip-address: true + # prefer-ip-address: true instance-id: ${spring.application.name} -# instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} #固定端口 -# instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${randomServerPort.value[5000,5005]}} #随机端口 + # instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} #固定端口 + # instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${randomServerPort.value[5000,5005]}} #随机端口 lease-renewal-interval-in-seconds: 10 #每隔几秒告诉eureka服务器我还存活,用于心跳检测 lease-expiration-duration-in-seconds: 10 #如果心跳检测一直没有发送,10秒后会从eureka服务器中将此服务剔除 status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/doc.html # ${server.port}为该服务的端口号 diff --git a/cloud/autho/pom.xml b/cloud/autho/pom.xml index 8ae9c2f..804ef18 100644 --- a/cloud/autho/pom.xml +++ b/cloud/autho/pom.xml @@ -19,11 +19,11 @@ common 1.0.0 - - - - - + + + + + org.springframework.cloud spring-cloud-starter-feign diff --git a/cloud/autho/src/main/java/com/sincere/autho/Swagger2.java b/cloud/autho/src/main/java/com/sincere/autho/Swagger2.java index 92d536c..a6b30eb 100644 --- a/cloud/autho/src/main/java/com/sincere/autho/Swagger2.java +++ b/cloud/autho/src/main/java/com/sincere/autho/Swagger2.java @@ -22,7 +22,7 @@ import java.util.List; public class Swagger2 { @Bean - public Docket createRestApi() { + public Docket createRestApi() { ParameterBuilder ticketPar = new ParameterBuilder(); List pars = new ArrayList(); ticketPar.name("X-Authorization").description("user token") @@ -41,12 +41,13 @@ public class Swagger2 { .build().globalOperationParameters(pars); } - private ApiInfo apiInfo() { + + private ApiInfo apiInfo() { return new ApiInfoBuilder() - .title("Spring Boot中使用Swagger2构建RESTful APIs") - .description("接口文档") - .termsOfServiceUrl("") + .title("Spring Boot中使用Swagger2构建RESTful APIs") + .description("接口文档") + .termsOfServiceUrl("") .version("1.0") - .build(); - } + .build(); + } } diff --git a/cloud/autho/src/main/java/com/sincere/autho/control/LoginController.java b/cloud/autho/src/main/java/com/sincere/autho/control/LoginController.java index d6b6493..f0748ff 100644 --- a/cloud/autho/src/main/java/com/sincere/autho/control/LoginController.java +++ b/cloud/autho/src/main/java/com/sincere/autho/control/LoginController.java @@ -16,21 +16,21 @@ import org.springframework.web.bind.annotation.RestController; public class LoginController { @Autowired - LoginService loginService ; + LoginService loginService; - @RequestMapping(value = "/login" , method = RequestMethod.POST) - public BaseDto login(@RequestBody LoginReqDto loginReqDto){ + @RequestMapping(value = "/login", method = RequestMethod.POST) + public BaseDto login(@RequestBody LoginReqDto loginReqDto) { System.out.println("登录接口"); - BaseDto result = new BaseDto<>() ; + BaseDto result = new BaseDto<>(); String userId = loginService.login(loginReqDto); - if(StringUtils.isNotBlank(userId)){ + if (StringUtils.isNotBlank(userId)) { result.setMessage("登录成功"); result.setData(TokenUtils.buildToken(userId)); - }else { + } else { result.setStatus(false); result.setMessage("账号密码错误"); } - return result ; + return result; } } diff --git a/cloud/autho/src/main/java/com/sincere/autho/dto/BaseDto.java b/cloud/autho/src/main/java/com/sincere/autho/dto/BaseDto.java index 8460a46..c10aca7 100644 --- a/cloud/autho/src/main/java/com/sincere/autho/dto/BaseDto.java +++ b/cloud/autho/src/main/java/com/sincere/autho/dto/BaseDto.java @@ -2,9 +2,9 @@ package com.sincere.autho.dto; public class BaseDto { - private String message ; - private boolean status ; - private T data ; + private String message; + private boolean status; + private T data; public String getMessage() { return message; @@ -31,6 +31,6 @@ public class BaseDto { } public BaseDto() { - this.status = true ; + this.status = true; } } diff --git a/cloud/autho/src/main/java/com/sincere/autho/dto/req/LoginReqDto.java b/cloud/autho/src/main/java/com/sincere/autho/dto/req/LoginReqDto.java index bafe7cc..8ac4b69 100644 --- a/cloud/autho/src/main/java/com/sincere/autho/dto/req/LoginReqDto.java +++ b/cloud/autho/src/main/java/com/sincere/autho/dto/req/LoginReqDto.java @@ -2,9 +2,9 @@ package com.sincere.autho.dto.req; public class LoginReqDto { - private String account ; - private String password ; - private int userType ; // 2:学生;3:家长;其他都是老师 + private String account; + private String password; + private int userType; // 2:学生;3:家长;其他都是老师 public String getAccount() { return account; diff --git a/cloud/autho/src/main/java/com/sincere/autho/mapper/UserMapper.java b/cloud/autho/src/main/java/com/sincere/autho/mapper/UserMapper.java index 7db8353..2ece3aa 100644 --- a/cloud/autho/src/main/java/com/sincere/autho/mapper/UserMapper.java +++ b/cloud/autho/src/main/java/com/sincere/autho/mapper/UserMapper.java @@ -4,9 +4,9 @@ import com.sincere.autho.dto.req.LoginReqDto; public interface UserMapper { - String loginTeacher(LoginReqDto loginReqDto) ; + String loginTeacher(LoginReqDto loginReqDto); - String loginStudent(LoginReqDto loginReqDto) ; + String loginStudent(LoginReqDto loginReqDto); String loginStudentOthName(LoginReqDto loginReqDto); } diff --git a/cloud/autho/src/main/java/com/sincere/autho/service/impl/LoginServiceImpl.java b/cloud/autho/src/main/java/com/sincere/autho/service/impl/LoginServiceImpl.java index 4816a46..2137bf1 100644 --- a/cloud/autho/src/main/java/com/sincere/autho/service/impl/LoginServiceImpl.java +++ b/cloud/autho/src/main/java/com/sincere/autho/service/impl/LoginServiceImpl.java @@ -11,17 +11,17 @@ import org.springframework.util.StringUtils; public class LoginServiceImpl implements LoginService { @Autowired - UserMapper userMapper ; + UserMapper userMapper; @Override public String login(LoginReqDto loginReqDto) { - String userId = "" ; - if(loginReqDto.getUserType() == 2){ + String userId = ""; + if (loginReqDto.getUserType() == 2) { userId = userMapper.loginStudent(loginReqDto); - if (StringUtils.isEmpty(userId)){//用othername登录 + if (StringUtils.isEmpty(userId)) {//用othername登录 userId = userMapper.loginStudentOthName(loginReqDto); } - }else { + } else { userId = userMapper.loginTeacher(loginReqDto); } return userId; diff --git a/cloud/autho/src/main/resources/bootstrap.yml b/cloud/autho/src/main/resources/bootstrap.yml index 2dca0e9..13010df 100644 --- a/cloud/autho/src/main/resources/bootstrap.yml +++ b/cloud/autho/src/main/resources/bootstrap.yml @@ -6,10 +6,10 @@ server: #服务名称 spring: application: - name: eureka-server1 + name: eureka-server1 main: - allow-bean-definition-overriding: true - + allow-bean-definition-overriding: true + management: endpoints: diff --git a/cloud/autho/src/main/resources/mapper/UserMapper.xml b/cloud/autho/src/main/resources/mapper/UserMapper.xml index 5789ebb..8e31653 100644 --- a/cloud/autho/src/main/resources/mapper/UserMapper.xml +++ b/cloud/autho/src/main/resources/mapper/UserMapper.xml @@ -7,11 +7,12 @@ select user_id from SZ_User where mobile = #{account} and pass = #{password} - select user_id from SZ_User where name = #{account} and pass = #{password} - select user_id from SZ_User where othername = #{account} and pass = #{password} diff --git a/cloud/common/pom.xml b/cloud/common/pom.xml index 5b701d5..7a163b6 100644 --- a/cloud/common/pom.xml +++ b/cloud/common/pom.xml @@ -110,16 +110,16 @@ - + diff --git a/cloud/common/src/main/java/com/sincere/common/commons/CodeEnum.java b/cloud/common/src/main/java/com/sincere/common/commons/CodeEnum.java index 60c6bf1..4a59719 100644 --- a/cloud/common/src/main/java/com/sincere/common/commons/CodeEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/commons/CodeEnum.java @@ -12,7 +12,8 @@ public enum CodeEnum { ERROR(1); private Integer code; - CodeEnum(Integer code){ + + CodeEnum(Integer code) { this.code = code; } diff --git a/cloud/common/src/main/java/com/sincere/common/constants/CommonConstants.java b/cloud/common/src/main/java/com/sincere/common/constants/CommonConstants.java index 0996772..52d249b 100644 --- a/cloud/common/src/main/java/com/sincere/common/constants/CommonConstants.java +++ b/cloud/common/src/main/java/com/sincere/common/constants/CommonConstants.java @@ -17,5 +17,4 @@ public interface CommonConstants { String DEFAULT_PARAMTER_KEY = "parameter"; - } diff --git a/cloud/common/src/main/java/com/sincere/common/constants/MqQueueNameConstant.java b/cloud/common/src/main/java/com/sincere/common/constants/MqQueueNameConstant.java index 4d4a9ec..6f64f8a 100644 --- a/cloud/common/src/main/java/com/sincere/common/constants/MqQueueNameConstant.java +++ b/cloud/common/src/main/java/com/sincere/common/constants/MqQueueNameConstant.java @@ -9,13 +9,13 @@ public interface MqQueueNameConstant { /** * 系统日志队列 */ - String SYS_LOG_QUEUE= "sys_log_queue"; + String SYS_LOG_QUEUE = "sys_log_queue"; /** * 短信验证码队列 */ - String MOBILE_CODE_QUEUE= "mobile_code_queue"; + String MOBILE_CODE_QUEUE = "mobile_code_queue"; /** * 邮件队列 */ - String MAIL_CODE_QUEUE= "mail_code_queue"; + String MAIL_CODE_QUEUE = "mail_code_queue"; } diff --git a/cloud/common/src/main/java/com/sincere/common/constants/SecurityConstants.java b/cloud/common/src/main/java/com/sincere/common/constants/SecurityConstants.java index d965302..a75911b 100644 --- a/cloud/common/src/main/java/com/sincere/common/constants/SecurityConstants.java +++ b/cloud/common/src/main/java/com/sincere/common/constants/SecurityConstants.java @@ -10,52 +10,52 @@ public interface SecurityConstants { /** * token的header key */ - String TOKEN_HEADER = "Authorization"; + String TOKEN_HEADER = "Authorization"; - String CLOUD = "panda"; + String CLOUD = "panda"; - String CLOUD_PREFIX = "panda_"; + String CLOUD_PREFIX = "panda_"; /** * jwt 加密key */ - String SIGN_KEY = "PANDA"; + String SIGN_KEY = "PANDA"; /** * sys_oauth_client_details 字段 */ - String CLIENT_FIELDS = "client_id, client_secret, resources_ids, scope, authorized_grant_types," - + "web_server_redirect_uri, authorities, access_token_validity," - + "refresh_token_validity, addition_information, autoapprove"; + String CLIENT_FIELDS = "client_id, client_secret, resources_ids, scope, authorized_grant_types," + + "web_server_redirect_uri, authorities, access_token_validity," + + "refresh_token_validity, addition_information, autoapprove"; /** * jdbcClientDetailsService查询sql */ - String BASE_FIND_STATEMENT = "select " + CLIENT_FIELDS + " from sys_oauth_client_details"; + String BASE_FIND_STATEMENT = "select " + CLIENT_FIELDS + " from sys_oauth_client_details"; /** * 默认查询语句 */ - String DEFAULT_FIND_STATEMENT = BASE_FIND_STATEMENT + " order by client_id"; + String DEFAULT_FIND_STATEMENT = BASE_FIND_STATEMENT + " order by client_id"; /** * 根据client_id查询 */ - String DEFAULT_FIND_STATEMENT_BY_CLIENT_ID = BASE_FIND_STATEMENT + " where client_id = ?"; + String DEFAULT_FIND_STATEMENT_BY_CLIENT_ID = BASE_FIND_STATEMENT + " where client_id = ?"; - String SPRING_SECURITY_MOBILE_KEY = "mobile"; + String SPRING_SECURITY_MOBILE_KEY = "mobile"; - String SPRING_SECURITY_CODE_KEY = "code"; + String SPRING_SECURITY_CODE_KEY = "code"; /** * 手机验证码登录的地址 */ - String SPRING_SECURITY_MOBILE_TOKEN_URL = "/mobile/token"; + String SPRING_SECURITY_MOBILE_TOKEN_URL = "/mobile/token"; - String REDIS_CODE_PREFIX = "panda_code:"; + String REDIS_CODE_PREFIX = "panda_code:"; - Integer REDIS_CODE_EXPIRE = 60; + Integer REDIS_CODE_EXPIRE = 60; } diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDetailDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDetailDto.java index f3503a6..c3b6fa5 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDetailDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDetailDto.java @@ -10,13 +10,13 @@ import java.util.Date; */ public class AnalyseDetailDto implements Serializable { - private int id ; - private int analyseId ; - private String questionNumber ; - private String questionType ; - private int difficult ; - private Double score ; - private Date createTime ; + private int id; + private int analyseId; + private String questionNumber; + private String questionType; + private int difficult; + private Double score; + private Date createTime; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDimensionalDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDimensionalDto.java index 45361b3..9e6b557 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDimensionalDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDimensionalDto.java @@ -10,12 +10,12 @@ import java.util.Date; */ public class AnalyseDimensionalDto implements Serializable { - private int id ; - private int analyseId ; - private String questionNumber ; - private int dimensionalId ; - private Double score ; - private Date createTime ; + private int id; + private int analyseId; + private String questionNumber; + private int dimensionalId; + private Double score; + private Date createTime; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDto.java index f6353ff..eeca7d9 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/AnalyseDto.java @@ -10,14 +10,14 @@ import java.util.Date; */ public class AnalyseDto implements Serializable { - private int id ; - private String examName ; - private String examTime ; - private String courseName ; - private Date createTime ; - private Double maxScore ; - private String grade ; - private String examScope ; + private int id; + private String examName; + private String examTime; + private String courseName; + private Date createTime; + private Double maxScore; + private String grade; + private String examScope; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/ChapterDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/ChapterDto.java index 8f2f614..8548d0f 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/ChapterDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/ChapterDto.java @@ -9,13 +9,13 @@ import java.io.Serializable; */ public class ChapterDto implements Serializable { - private int id ; - private int analyseId ; - private int chapterNumber ; - private String chapterName ; - private Double chapterScore ; + private int id; + private int analyseId; + private int chapterNumber; + private String chapterName; + private Double chapterScore; - private Double percent ; + private Double percent; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/ClassCourseDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/ClassCourseDto.java index a784c0a..5bb261e 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/ClassCourseDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/ClassCourseDto.java @@ -30,9 +30,9 @@ public class ClassCourseDto implements Serializable { private Date updateTime; - private String team ; + private String team; - private int courseOpenId ; + private int courseOpenId; public Integer getCourseId() { return courseId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/CourseDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/CourseDto.java index aac57b2..0ce5581 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/CourseDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/CourseDto.java @@ -9,10 +9,10 @@ import java.io.Serializable; */ public class CourseDto implements Serializable { - private int id ; - private int schoolId ; - private int courseId ; - private String courseName ; + private int id; + private int schoolId; + private int courseId; + private String courseName; private int courseType; public int getCourseId() { diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/GetLearnDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/GetLearnDto.java index e82a47c..68245ee 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/GetLearnDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/GetLearnDto.java @@ -9,8 +9,8 @@ import java.io.Serializable; */ public class GetLearnDto implements Serializable { - private int analyseId ; - private String schoolName ; + private int analyseId; + private String schoolName; public int getAnalyseId() { return analyseId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/JoinClassDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/JoinClassDto.java index 0b89397..cdf89f4 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/JoinClassDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/JoinClassDto.java @@ -9,13 +9,13 @@ import java.io.Serializable; */ public class JoinClassDto implements Serializable { - private int id ; - private int schoolId ; - private int classId ; - private String team ; - private int courseId ; - private String courseName ; - private int courseGroup ; + private int id; + private int schoolId; + private int classId; + private String team; + private int courseId; + private String courseName; + private int courseGroup; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/LeagueDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/LeagueDto.java index 05654b2..0de16e5 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/LeagueDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/LeagueDto.java @@ -9,10 +9,10 @@ import java.io.Serializable; */ public class LeagueDto implements Serializable { - private int id ; - private int analyseId ; - private String league ; - private String schoolName ; + private int id; + private int analyseId; + private String league; + private String schoolName; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/ScheduleDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/ScheduleDto.java index 7617ffc..6a5bd7a 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/ScheduleDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/ScheduleDto.java @@ -10,16 +10,16 @@ import java.util.Date; */ public class ScheduleDto implements Serializable { - private int id ; - private String scheduleName ; - private int schoolId ; - private String team ; - private Date createTime ; - private Date updateTime ; - private int speed ; - private int morning ; + private int id; + private String scheduleName; + private int schoolId; + private String team; + private Date createTime; + private Date updateTime; + private int speed; + private int morning; private int afternoon; - private int night ; + private int night; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDetailDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDetailDto.java index 85cbebd..5aba11f 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDetailDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDetailDto.java @@ -10,17 +10,17 @@ import java.util.Date; */ public class StudentDetailDto implements Serializable { - private long id ; + private long id; private int openId; - private String schoolName ; - private String className ; - private String studentName ; - private String studentNumber ; - private int analyseId ; - private String examNumber ; - private Double score ; - private Date createTime ; - private int correct ; //1 正确 0 错误 + private String schoolName; + private String className; + private String studentName; + private String studentNumber; + private int analyseId; + private String examNumber; + private Double score; + private Date createTime; + private int correct; //1 正确 0 错误 public long getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDto.java index 7f818bb..40f6222 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/StudentDto.java @@ -10,15 +10,15 @@ import java.util.Date; */ public class StudentDto implements Serializable { - private int id ; + private int id; private int openId; - private String schoolName ; - private String className ; - private String studentName ; - private String studentNumber ; - private int analyseId ; - private double score ; - private Date createTime ; + private String schoolName; + private String className; + private String studentName; + private String studentNumber; + private int analyseId; + private double score; + private Date createTime; public int getId() { diff --git a/cloud/common/src/main/java/com/sincere/common/dto/independence/TeacherClassDto.java b/cloud/common/src/main/java/com/sincere/common/dto/independence/TeacherClassDto.java index 270eedb..fc670aa 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/independence/TeacherClassDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/independence/TeacherClassDto.java @@ -30,9 +30,9 @@ public class TeacherClassDto implements Serializable { private Date createTime; - private String team ; + private String team; - private int status ; + private int status; public Integer gettClassId() { return tClassId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/AppDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/AppDto.java index 5999763..01fb87b 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/AppDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/AppDto.java @@ -6,10 +6,10 @@ package com.sincere.common.dto.smartCampus; * @date 2019/11/28 0028 15:58 */ public class AppDto { - private String agentId ; - private String agentSecret ; - private String qyhId ; - private String agentKey ; + private String agentId; + private String agentSecret; + private String qyhId; + private String agentKey; public String getAgentId() { return agentId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/BindPushDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/BindPushDto.java index 719e8e5..922492a 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/BindPushDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/BindPushDto.java @@ -9,14 +9,14 @@ import java.util.Date; */ public class BindPushDto { - private int schoolId ; - private String schoolName ; - private int type ; // 0是企业号,1是钉钉 - private Date beginDate ; - private Date endDate ; - private int intervalDays ; - private String pushTime ; - private String msg ; + private int schoolId; + private String schoolName; + private int type; // 0是企业号,1是钉钉 + private Date beginDate; + private Date endDate; + private int intervalDays; + private String pushTime; + private String msg; public int getSchoolId() { return schoolId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/CensusKqDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/CensusKqDto.java index e45e062..d092010 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/CensusKqDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/CensusKqDto.java @@ -6,9 +6,9 @@ package com.sincere.common.dto.smartCampus; * @date 2019/11/29 0029 14:27 */ public class CensusKqDto { - private String targetName ; - private int leaveCount ; - private int notAttendCount ; + private String targetName; + private int leaveCount; + private int notAttendCount; public String getTargetName() { return targetName; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/DeptRelationDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/DeptRelationDto.java index 1e57709..5e95c2b 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/DeptRelationDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/DeptRelationDto.java @@ -8,11 +8,11 @@ package com.sincere.common.dto.smartCampus; public class DeptRelationDto { private int hxyDeptId; - private String yxyDeptId ; - private int userType ; - private int state ; + private String yxyDeptId; + private int userType; + private int state; - private int sqlStatus ; // 1增2改3删 + private int sqlStatus; // 1增2改3删 public int getHxyDeptId() { return hxyDeptId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/GroupDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/GroupDto.java index 13ea022..fc29991 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/GroupDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/GroupDto.java @@ -7,9 +7,9 @@ package com.sincere.common.dto.smartCampus; */ public class GroupDto { - private int groupId ; - private String groupName ; - private int pId ; + private int groupId; + private String groupName; + private int pId; public int getGroupId() { return groupId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqDto.java index 4c5115f..fabb635 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqDto.java @@ -6,10 +6,10 @@ package com.sincere.common.dto.smartCampus; * @date 2019/12/5 0005 11:01 */ public class KqDto { - private String userId ; - private String type ; - private String templateId ; - private String endTime ; + private String userId; + private String type; + private String templateId; + private String endTime; public String getUserId() { diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqTeacherDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqTeacherDto.java index dfa1b45..8680baf 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqTeacherDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/KqTeacherDto.java @@ -6,17 +6,17 @@ package com.sincere.common.dto.smartCampus; * @date 2019/11/28 0028 9:10 */ public class KqTeacherDto { - private String userId ; - private int schoolId ; - private String name ; - private String mobile ; - private String pass ; - private String openId ; - private String face ; - - private int classId ; - private int roomId ; - private String targetName ; + private String userId; + private int schoolId; + private String name; + private String mobile; + private String pass; + private String openId; + private String face; + + private int classId; + private int roomId; + private String targetName; public String getUserId() { return userId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/ParentDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/ParentDto.java index 69bad44..4694cbb 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/ParentDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/ParentDto.java @@ -7,8 +7,8 @@ package com.sincere.common.dto.smartCampus; */ public class ParentDto { - private int schoolId ; - private String mobile ; + private int schoolId; + private String mobile; public int getSchoolId() { return schoolId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java index 9c370f3..ceda295 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SZ_AttendanceDto.java @@ -23,10 +23,10 @@ public class SZ_AttendanceDto { private int IsKaoqin; - private String ip ; - private int port ; + private String ip; + private int port; - private int outOrIn ; + private int outOrIn; public int getOutOrIn() { return outOrIn; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SchoolDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SchoolDto.java index 96ce839..6ed7ea1 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SchoolDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SchoolDto.java @@ -9,9 +9,9 @@ import java.io.Serializable; */ public class SchoolDto implements Serializable { - private int schoolId ; - private String schoolName ; - private int managerUserId ; + private int schoolId; + private String schoolName; + private int managerUserId; public int getManagerUserId() { return managerUserId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentBean.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentBean.java index 05f6129..ad176bf 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentBean.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentBean.java @@ -39,7 +39,7 @@ public class StudentBean implements Serializable { private Date AddTime; - private int Sex; + private int Sex; private String Face; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentCardDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentCardDto.java index bfc60cc..6cd658d 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentCardDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/StudentCardDto.java @@ -9,8 +9,8 @@ import java.io.Serializable; */ public class StudentCardDto implements Serializable { - private String cardType ; - private String cardNum ; + private String cardType; + private String cardNum; public String getCardType() { return cardType; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncDeptDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncDeptDto.java index 292bd0a..0edc7a4 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncDeptDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncDeptDto.java @@ -6,13 +6,13 @@ package com.sincere.common.dto.smartCampus; * @date 2019/12/27 0027 9:28 */ public class SyncDeptDto { - private int id ; - private int deptId ; - private int schoolId ; - private String deptName ; - private int updateType ; - private int gradeId ; - private int userType ; + private int id; + private int deptId; + private int schoolId; + private String deptName; + private int updateType; + private int gradeId; + private int userType; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncSchoolDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncSchoolDto.java index 4366453..d9446f1 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncSchoolDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncSchoolDto.java @@ -7,10 +7,10 @@ package com.sincere.common.dto.smartCampus; */ public class SyncSchoolDto { - private int schoolId ; - private String schoolName ; - private String yxtId ; - private int push ; + private int schoolId; + private String schoolName; + private String yxtId; + private int push; public int getSchoolId() { return schoolId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java index 4bbae14..9b8084c 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/SyncUserDto.java @@ -7,15 +7,15 @@ package com.sincere.common.dto.smartCampus; */ public class SyncUserDto { - private int id ; - private String name ; - private String customerId ; - private int userType ; - private int classId ; - private int sex ; - private String mobile ; - private int updateType ; - private String yxyUserId ; + private int id; + private String name; + private String customerId; + private int userType; + private int classId; + private int sex; + private String mobile; + private int updateType; + private String yxyUserId; public String getYxyUserId() { return yxyUserId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/TemplateDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/TemplateDto.java index 1017f5b..3e1277a 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/TemplateDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/TemplateDto.java @@ -9,11 +9,11 @@ import java.io.Serializable; */ public class TemplateDto implements Serializable { - private int id ; - private String title ; - private String config ; - private int schoolId ; - private String type ; + private int id; + private String title; + private String config; + private int schoolId; + private String type; public String getTitle() { return title; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UpdateCardDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UpdateCardDto.java index 38d08bb..6d9a761 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UpdateCardDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UpdateCardDto.java @@ -9,9 +9,9 @@ import java.io.Serializable; */ public class UpdateCardDto implements Serializable { - private int id ; - private int userType ; - private String oldCard ; + private int id; + private int userType; + private String oldCard; public int getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserDto.java index 436426d..445c988 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserDto.java @@ -10,9 +10,9 @@ import java.io.Serializable; public class UserDto implements Serializable { private int schoolId; - private int classId ; - private String name ; - private int studentId ; + private int classId; + private String name; + private int studentId; public int getSchoolId() { return schoolId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserRelationDto.java b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserRelationDto.java index f83d6a6..ed1ba9e 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserRelationDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/smartCampus/UserRelationDto.java @@ -7,12 +7,12 @@ package com.sincere.common.dto.smartCampus; */ public class UserRelationDto { - private String hxyCustomerId ; - private String yxyUserId ; - private int userType ; - private int state ; + private String hxyCustomerId; + private String yxyUserId; + private int userType; + private int state; - private int sqlstate ; + private int sqlstate; public String getHxyCustomerId() { return hxyCustomerId; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckInDto.java b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckInDto.java index 6004618..59479e4 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckInDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckInDto.java @@ -9,11 +9,11 @@ import java.io.Serializable; */ public class CheckInDto implements Serializable { - private String deviceId ; - private String cardNo ; - private int funNo ; - private int flag ; - private String checkTime ; + private String deviceId; + private String cardNo; + private int funNo; + private int flag; + private String checkTime; public String getDeviceId() { diff --git a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckOutDto.java b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckOutDto.java index 851f51b..87de390 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckOutDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/CheckOutDto.java @@ -10,7 +10,7 @@ import java.io.Serializable; public class CheckOutDto implements Serializable { private String out; - private int isSuccess ; + private int isSuccess; public String getOut() { return out; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java index 5091729..a9f59f5 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/FingerDto.java @@ -9,9 +9,9 @@ import java.util.Date; */ public class FingerDto { - private int studentId ; - private String orderMsg ; - private Date createTime ; + private int studentId; + private String orderMsg; + private Date createTime; public Date getCreateTime() { return createTime; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/PassFailDto.java b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/PassFailDto.java index a4f68a7..bba0145 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/PassFailDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/PassFailDto.java @@ -10,13 +10,13 @@ import java.util.Date; */ public class PassFailDto implements Serializable { - private String cardNum ; - private String deviceId ; - private String direction ; - private String resultIntro ; - private Date createTime ; - private int schoolId ; - private Date inTime ; + private String cardNum; + private String deviceId; + private String direction; + private String resultIntro; + private Date createTime; + private int schoolId; + private Date inTime; public String getCardNum() { return cardNum; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendFailDto.java b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendFailDto.java index 8a0d6dc..b7e0c64 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendFailDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendFailDto.java @@ -15,48 +15,48 @@ import java.util.Date; */ public class SendFailDto implements Serializable { - private String deviceId ; - private String cardNum ; - private String oldCardNum ; - private String cardType ; - private int customerId ; - private int userType ; - private int classId ; - private String schoolName ; - private int studentType ; - private int openFlag ; - private int status ; - private int updateId ; - private Date createTime ; - private int sex ; - private String name ; - private int failType ; - private String failContent ; - private int schoolId ; - private int shiduan ; + private String deviceId; + private String cardNum; + private String oldCardNum; + private String cardType; + private int customerId; + private int userType; + private int classId; + private String schoolName; + private int studentType; + private int openFlag; + private int status; + private int updateId; + private Date createTime; + private int sex; + private String name; + private int failType; + private String failContent; + private int schoolId; + private int shiduan; public SendFailDto() { } - public SendFailDto(UserDto user , SchoolDto school , StudentCardDto studentCard , UpdateCardDto updateCard) { - if(updateCard != null){ + public SendFailDto(UserDto user, SchoolDto school, StudentCardDto studentCard, UpdateCardDto updateCard) { + if (updateCard != null) { oldCardNum = updateCard.getOldCard(); - userType = updateCard.getUserType() ; + userType = updateCard.getUserType(); } - if(studentCard != null){ + if (studentCard != null) { cardType = studentCard.getCardType(); } - if(user != null){ + if (user != null) { customerId = user.getStudentId(); classId = user.getClassId(); schoolId = user.getSchoolId(); name = user.getName(); } - if(school != null){ + if (school != null) { schoolName = school.getSchoolName(); } createTime = new Date(); - studentType =1 ; + studentType = 1; sex = 1; } diff --git a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendMessageDto.java b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendMessageDto.java index 2ed29bc..84f50f6 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendMessageDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendMessageDto.java @@ -10,15 +10,15 @@ import java.util.Date; */ public class SendMessageDto implements Serializable { - private long id ; - private String deviceId ; - private String cardNo ; - private long index ; - private String send ; - private String result ; - private int correct ; - private Date createTime ; - private String functionId ; + private long id; + private String deviceId; + private String cardNo; + private long index; + private String send; + private String result; + private int correct; + private Date createTime; + private String functionId; public long getId() { return id; diff --git a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendSuccessDto.java b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendSuccessDto.java index b128a16..7531d56 100644 --- a/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendSuccessDto.java +++ b/cloud/common/src/main/java/com/sincere/common/dto/xiaoan/SendSuccessDto.java @@ -15,46 +15,46 @@ import java.util.Date; */ public class SendSuccessDto implements Serializable { - private String deviceId ; - private String cardNum ; - private String oldCardNum ; - private String cardType ; - private int customerId ; - private int userType ; - private int classId ; - private String schoolName ; - private int studentType ; - private int openFlag ; - private int status ; - private int updateId ; - private Date createTime ; - private int sex ; - private String name ; - private int schoolId ; - private int shiduan ; + private String deviceId; + private String cardNum; + private String oldCardNum; + private String cardType; + private int customerId; + private int userType; + private int classId; + private String schoolName; + private int studentType; + private int openFlag; + private int status; + private int updateId; + private Date createTime; + private int sex; + private String name; + private int schoolId; + private int shiduan; public SendSuccessDto() { } - public SendSuccessDto(UserDto user , SchoolDto school , StudentCardDto studentCard , UpdateCardDto updateCard) { - if(updateCard != null){ + public SendSuccessDto(UserDto user, SchoolDto school, StudentCardDto studentCard, UpdateCardDto updateCard) { + if (updateCard != null) { oldCardNum = updateCard.getOldCard(); - userType = updateCard.getUserType() ; + userType = updateCard.getUserType(); } - if(studentCard != null){ + if (studentCard != null) { cardType = studentCard.getCardType(); } - if(user != null){ + if (user != null) { customerId = user.getStudentId(); classId = user.getClassId(); schoolId = user.getSchoolId(); name = user.getName(); } - if(school != null){ + if (school != null) { schoolName = school.getSchoolName(); } createTime = new Date(); - studentType =1 ; + studentType = 1; sex = 1; } diff --git a/cloud/common/src/main/java/com/sincere/common/enums/ApiErrorCodeEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/ApiErrorCodeEnum.java index ce7ca63..7fd0bbd 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/ApiErrorCodeEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/ApiErrorCodeEnum.java @@ -1,9 +1,10 @@ package com.sincere.common.enums; + /** * @author yukong * @date 2019-04-20 18:54 */ -public enum ApiErrorCodeEnum{ +public enum ApiErrorCodeEnum { /** * 失败 */ diff --git a/cloud/common/src/main/java/com/sincere/common/enums/DataStatusEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/DataStatusEnum.java index 7d3b977..ae3d9e7 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/DataStatusEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/DataStatusEnum.java @@ -8,7 +8,7 @@ package com.sincere.common.enums; public enum DataStatusEnum { NORMAL("0", "正常"), - LOCK("1","删除"); + LOCK("1", "删除"); private String code; diff --git a/cloud/common/src/main/java/com/sincere/common/enums/DifficultEnums.java b/cloud/common/src/main/java/com/sincere/common/enums/DifficultEnums.java index be5cabb..86df404 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/DifficultEnums.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/DifficultEnums.java @@ -2,19 +2,20 @@ package com.sincere.common.enums; /** * 学情分析 题目困难程度 + * * @author chen * @version 1.0 1 * @date 2019/10/18 0018 8:40 */ public enum DifficultEnums { - easy(1,"易","认知"), - medium(2,"中","理解"), - difficult(3,"难","应用"); + easy(1, "易", "认知"), + medium(2, "中", "理解"), + difficult(3, "难", "应用"); - private int difficultType ; - private String difficultName ; - private String difficultShow ; + private int difficultType; + private String difficultName; + private String difficultShow; DifficultEnums(int difficultType, String difficultName, String difficultShow) { this.difficultType = difficultType; @@ -46,21 +47,21 @@ public enum DifficultEnums { this.difficultName = difficultName; } - public static int getDifficultType(String difficultName){ + public static int getDifficultType(String difficultName) { for (DifficultEnums difficultEnums : DifficultEnums.values()) { if (difficultEnums.getDifficultName().equals(difficultName)) { return difficultEnums.getDifficultType(); } } - return 0 ; + return 0; } - public static String getDifficultName(int difficultType){ + public static String getDifficultName(int difficultType) { for (DifficultEnums difficultEnums : DifficultEnums.values()) { if (difficultEnums.getDifficultType() == difficultType) { return difficultEnums.getDifficultName(); } } - return "" ; + return ""; } } diff --git a/cloud/common/src/main/java/com/sincere/common/enums/DimensionalEnums.java b/cloud/common/src/main/java/com/sincere/common/enums/DimensionalEnums.java index 0fd4200..1992d37 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/DimensionalEnums.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/DimensionalEnums.java @@ -2,18 +2,19 @@ package com.sincere.common.enums; /** * 学情分析 四维细目 + * * @author chen * @version 1.0 * @date 2019/10/18 0018 8:33 */ public enum DimensionalEnums { - knowledge(1,"知识点"), - ability(2,"能力"), - skill(3,"技能"), - think(4,"四维"); + knowledge(1, "知识点"), + ability(2, "能力"), + skill(3, "技能"), + think(4, "四维"); - private int dimensionalType ; - private String dimensionalName ; + private int dimensionalType; + private String dimensionalName; DimensionalEnums(int dimensionalType, String dimensionalName) { this.dimensionalType = dimensionalType; diff --git a/cloud/common/src/main/java/com/sincere/common/enums/JobDataStatusEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/JobDataStatusEnum.java index edc7e58..ef0f99f 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/JobDataStatusEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/JobDataStatusEnum.java @@ -15,7 +15,7 @@ public enum JobDataStatusEnum { /** * 停止 */ - STOP(1,"停止"); + STOP(1, "停止"); private Integer code; diff --git a/cloud/common/src/main/java/com/sincere/common/enums/OperationStatusEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/OperationStatusEnum.java index 7b26056..c626ff6 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/OperationStatusEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/OperationStatusEnum.java @@ -8,7 +8,7 @@ package com.sincere.common.enums; public enum OperationStatusEnum { SUCCESS("0", "成功"), - FAIL("1","失败"); + FAIL("1", "失败"); private String code; diff --git a/cloud/common/src/main/java/com/sincere/common/enums/PasswordEncoderEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/PasswordEncoderEnum.java index d271440..7cf0a21 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/PasswordEncoderEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/PasswordEncoderEnum.java @@ -17,7 +17,7 @@ public enum PasswordEncoderEnum { private String value; - private PasswordEncoderEnum(String value){ + private PasswordEncoderEnum(String value) { this.value = value; } diff --git a/cloud/common/src/main/java/com/sincere/common/enums/PushTypeEnums.java b/cloud/common/src/main/java/com/sincere/common/enums/PushTypeEnums.java index ce66bbf..0f62064 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/PushTypeEnums.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/PushTypeEnums.java @@ -5,17 +5,17 @@ package com.sincere.common.enums; * @version 1.0 * @date 2019/12/10 0010 11:30 */ -public enum PushTypeEnums { +public enum PushTypeEnums { - WEB(0,"站内消息"), - APP(1,"APP消息"), - MESSAGE(2,"短消息"), - WECHAT(3,"微信公众号"), - DING(4,"盯盯消息"), - QIYEHAO(5,"企业号消息"); + WEB(0, "站内消息"), + APP(1, "APP消息"), + MESSAGE(2, "短消息"), + WECHAT(3, "微信公众号"), + DING(4, "盯盯消息"), + QIYEHAO(5, "企业号消息"); - private int type ; - private String name ; + private int type; + private String name; PushTypeEnums(int type, String name) { this.type = type; diff --git a/cloud/common/src/main/java/com/sincere/common/enums/ResourceTypeEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/ResourceTypeEnum.java index 1d31298..99a02fd 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/ResourceTypeEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/ResourceTypeEnum.java @@ -5,9 +5,9 @@ package com.sincere.common.enums; * @date: 2018/10/17 16:03 * @description: 资源类型枚举 */ -public enum ResourceTypeEnum { +public enum ResourceTypeEnum { MENU("0", "菜单"), - BUTTON("1","按钮"); + BUTTON("1", "按钮"); private String code; diff --git a/cloud/common/src/main/java/com/sincere/common/enums/ResponseCodeEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/ResponseCodeEnum.java index b23d380..85920d6 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/ResponseCodeEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/ResponseCodeEnum.java @@ -5,15 +5,15 @@ package com.sincere.common.enums; * @date: 2018/10/12 10:51 * @description: 响应信息code枚举 */ -public enum ResponseCodeEnum { +public enum ResponseCodeEnum { SUCCESS(0, "success"), - NOT_LOGIN(-1,"need login"), + NOT_LOGIN(-1, "need login"), - FAIL(-1,"fail"), + FAIL(-1, "fail"), - PERMISSION_DEFINED(2,"permission defined"); + PERMISSION_DEFINED(2, "permission defined"); private Integer code; diff --git a/cloud/common/src/main/java/com/sincere/common/enums/SmsMessageChannnelEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/SmsMessageChannnelEnum.java index 44183f7..beb3264 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/SmsMessageChannnelEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/SmsMessageChannnelEnum.java @@ -7,7 +7,7 @@ import lombok.Getter; * @date: 2018/12/3 10:44 */ -public enum SmsMessageChannnelEnum { +public enum SmsMessageChannnelEnum { /** * 腾讯云 diff --git a/cloud/common/src/main/java/com/sincere/common/enums/SmsTemplateEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/SmsTemplateEnum.java index 7f63c2b..ff562b8 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/SmsTemplateEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/SmsTemplateEnum.java @@ -6,7 +6,7 @@ import lombok.Getter; * @author: yukong * @date: 2018/12/14 14:53 */ -public enum SmsTemplateEnum { +public enum SmsTemplateEnum { /** * 腾讯云 diff --git a/cloud/common/src/main/java/com/sincere/common/enums/SysLogTypeEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/SysLogTypeEnum.java index 525068a..e468155 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/SysLogTypeEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/SysLogTypeEnum.java @@ -7,7 +7,7 @@ package com.sincere.common.enums; */ public enum SysLogTypeEnum { LOGIN("0", "登录日志"), - OPERATOR("1","操作日志"); + OPERATOR("1", "操作日志"); private String code; diff --git a/cloud/common/src/main/java/com/sincere/common/enums/UserStatusEnum.java b/cloud/common/src/main/java/com/sincere/common/enums/UserStatusEnum.java index c1039d2..de87fd1 100644 --- a/cloud/common/src/main/java/com/sincere/common/enums/UserStatusEnum.java +++ b/cloud/common/src/main/java/com/sincere/common/enums/UserStatusEnum.java @@ -5,7 +5,7 @@ package com.sincere.common.enums; * @date: 2018/10/9 14:35 * @description: 用户状态枚举 */ -public enum UserStatusEnum { +public enum UserStatusEnum { /** * 正常 @@ -15,7 +15,7 @@ public enum UserStatusEnum { /** * 锁定 */ - LOCK("1","锁定"); + LOCK("1", "锁定"); private String code; diff --git a/cloud/common/src/main/java/com/sincere/common/exception/ResultEnums.java b/cloud/common/src/main/java/com/sincere/common/exception/ResultEnums.java index c555936..bef8875 100644 --- a/cloud/common/src/main/java/com/sincere/common/exception/ResultEnums.java +++ b/cloud/common/src/main/java/com/sincere/common/exception/ResultEnums.java @@ -1,15 +1,15 @@ package com.sincere.common.exception; public enum ResultEnums { - success(0,"成功"), - not_avail(-1,"token无效"), - expire(-2,"token过期"), - account_null(-3,"账号为空"), - error(-4,"系统繁忙"), - no_token(-5,"没有传token"); + success(0, "成功"), + not_avail(-1, "token无效"), + expire(-2, "token过期"), + account_null(-3, "账号为空"), + error(-4, "系统繁忙"), + no_token(-5, "没有传token"); - private int code ; - private String message ; + private int code; + private String message; ResultEnums(int code, String message) { this.code = code; @@ -32,12 +32,12 @@ public enum ResultEnums { this.message = message; } - public static ResultEnums getByCode(int code){ - for(ResultEnums enums :ResultEnums.values()){ - if(enums.getCode() == code){ - return enums ; + public static ResultEnums getByCode(int code) { + for (ResultEnums enums : ResultEnums.values()) { + if (enums.getCode() == code) { + return enums; } } - return ResultEnums.error ; + return ResultEnums.error; } } diff --git a/cloud/common/src/main/java/com/sincere/common/exception/ResultException.java b/cloud/common/src/main/java/com/sincere/common/exception/ResultException.java index 9698f6a..66f1463 100644 --- a/cloud/common/src/main/java/com/sincere/common/exception/ResultException.java +++ b/cloud/common/src/main/java/com/sincere/common/exception/ResultException.java @@ -2,8 +2,8 @@ package com.sincere.common.exception; public class ResultException extends Exception { - private int code ; - private String message ; + private int code; + private String message; public int getCode() { return code; diff --git a/cloud/common/src/main/java/com/sincere/common/util/ApiResult.java b/cloud/common/src/main/java/com/sincere/common/util/ApiResult.java index 28ed007..03d8c6a 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/ApiResult.java +++ b/cloud/common/src/main/java/com/sincere/common/util/ApiResult.java @@ -42,7 +42,7 @@ public class ApiResult implements Serializable { this.code = ResponseCodeEnum.FAIL.getCode(); } - public ApiResult(Throwable throwable, ResponseCodeEnum code) { + public ApiResult(Throwable throwable, ResponseCodeEnum code) { this.message = throwable.getMessage(); this.code = code.getCode(); } diff --git a/cloud/common/src/main/java/com/sincere/common/util/AuthService.java b/cloud/common/src/main/java/com/sincere/common/util/AuthService.java index a402745..f379afa 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/AuthService.java +++ b/cloud/common/src/main/java/com/sincere/common/util/AuthService.java @@ -15,8 +15,10 @@ public class AuthService { public static final String APP_ID = "15990462"; public static final String API_KEY = "t70Rzr6SGmfU9S6MrqAkspsY"; public static final String SECRET_KEY = "nSqpqtrf7cCjo8vOB9knL85nwWNoxwvS "; + /** * 获取权限token + * * @return 返回示例: * { * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", @@ -43,6 +45,7 @@ public class AuthService { /** * 获取API访问token * 该token有一定的有效期,需要自行管理,当失效时需重新获取. + * * @param ak - 百度云官网获取的 API Key * @param sk - 百度云官网获取的 Securet Key * @return assess_token 示例: diff --git a/cloud/common/src/main/java/com/sincere/common/util/DateUtils.java b/cloud/common/src/main/java/com/sincere/common/util/DateUtils.java index 8764a75..5394a87 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/DateUtils.java +++ b/cloud/common/src/main/java/com/sincere/common/util/DateUtils.java @@ -18,21 +18,21 @@ public class DateUtils { public static String format2 = "yyyy-MM-dd HH:mm:ss"; - public static String format3 = "yyyyMMddHHmm" ; + public static String format3 = "yyyyMMddHHmm"; - public static String format4 = "HH:mm" ; + public static String format4 = "HH:mm"; - public static String format5 = "yyyyMMdd" ; + public static String format5 = "yyyyMMdd"; - public static long getDate(){ + public static long getDate() { return System.currentTimeMillis(); } - public static Date getByLong(String lo){ + public static Date getByLong(String lo) { long time = Long.parseLong(lo); Date date = new Date(time); SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - return string2Date(sd.format(date),format2); + return string2Date(sd.format(date), format2); } public static String date2String(Date date, String format) { @@ -41,20 +41,20 @@ public class DateUtils { } public static Date string2Date(String date, String format) { - try{ + try { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.parse(date); - }catch (Exception e){ + } catch (Exception e) { } return new Date(); } - public static Date getToday(){ + public static Date getToday() { return new Date(); } - public static String getToday(String format) throws ParseException{ + public static String getToday(String format) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(new Date()); } @@ -78,38 +78,38 @@ public class DateUtils { return difference; } - public static int getWeek(){ + public static int getWeek() { Date today = new Date(); Calendar c = Calendar.getInstance(); c.setTime(today); int weekday = c.get(Calendar.DAY_OF_WEEK); - return weekday-1 ; + return weekday - 1; } - public static String getWeekName(){ + public static String getWeekName() { Date today = new Date(); Calendar c = Calendar.getInstance(); c.setTime(today); int weekday = c.get(Calendar.DAY_OF_WEEK); - if(weekday == 1){ + if (weekday == 1) { return "周日"; } - if(weekday == 2){ + if (weekday == 2) { return "周一"; } - if(weekday == 3){ + if (weekday == 3) { return "周二"; } - if(weekday == 4){ + if (weekday == 4) { return "周三"; } - if(weekday == 5){ + if (weekday == 5) { return "周四"; } - if(weekday == 6){ + if (weekday == 6) { return "周五"; } - if(weekday == 7){ + if (weekday == 7) { return "周六"; } return ""; diff --git a/cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java b/cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java index b27b640..5635a9f 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java +++ b/cloud/common/src/main/java/com/sincere/common/util/HttpClientUtils.java @@ -31,6 +31,7 @@ import static jdk.nashorn.internal.runtime.ECMAErrors.getMessage; /** * HttpClient4.3工具类 + * * @author chen * @version 1.0 * @date 2019/10/11 0011 10:17 @@ -50,13 +51,13 @@ public class HttpClientUtils { // JSONObject jsonObject = HttpClientUtils.httpPostJson(url,json); // System.out.println(jsonObject.toJSONString()); - String url = "http://39.100.248.170:8080/recv" ; + String url = "http://39.100.248.170:8080/recv"; String json = "{\n" + " \"appKey\":\"c9kqb3rdc2j9j\",\n" + " \"channelId\":\"12\",\n" + " \"event\":2,\n" + " \"userId\":\"hHjap87\",\n" + - " \"timestamp\":"+System.currentTimeMillis()+",\n" + + " \"timestamp\":" + System.currentTimeMillis() + ",\n" + " \"token\":\"y6f/aqQ2uJy9cgB4iKxxBNAX/fjWZa8YqXq8ZvODQXbnQpU4ylueQGbBvhBzsKU5camPO4XrURpN73+6paUtbPDbI+qinUYn\",\n" + " \"extra\":\"xxxx\",\n" + " \"members\":\n" + @@ -66,8 +67,8 @@ public class HttpClientUtils { " \"key1\":\"value1\"\n" + " }\n" + " }\n" + - "}" ; - JSONObject jsonObject = HttpClientUtils.httpPostJson(url,json); + "}"; + JSONObject jsonObject = HttpClientUtils.httpPostJson(url, json); System.out.println(jsonObject.toJSONString()); // String appKey = "c9kqb3rdc2j9j"; // String appSecret = "L2ven2G1fB5"; @@ -90,7 +91,8 @@ public class HttpClientUtils { /** * post请求传输json参数 - * @param url url地址 + * + * @param url url地址 * @param jsonParam 参数 * @return */ @@ -130,8 +132,9 @@ public class HttpClientUtils { /** * post请求传输String参数 例如:name=Jack&sex=1&type=2 * Content-type:application/x-www-form-urlencoded - * @param url url地址 - * @param strParam 参数 + * + * @param url url地址 + * @param strParam 参数 * @return */ public static JSONObject httpPost(String url, String strParam) { @@ -167,6 +170,7 @@ public class HttpClientUtils { /** * 发送get请求 + * * @param url 路径 * @return */ @@ -198,7 +202,7 @@ public class HttpClientUtils { public static String httpGet2(String url) { // get请求返回结果 JSONObject jsonResult = null; - String result = "" ; + String result = ""; CloseableHttpClient client = HttpClients.createDefault(); // 发送get请求 HttpGet request = new HttpGet(url); @@ -223,31 +227,30 @@ public class HttpClientUtils { } - public static InputStream GetFileInputStream(String fileUrl){ - try{ + public static InputStream GetFileInputStream(String fileUrl) { + try { URL url = new URL(fileUrl); - HttpURLConnection conn = (HttpURLConnection)url.openConnection(); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置超时间为3秒 - conn.setConnectTimeout(8*1000); + conn.setConnectTimeout(8 * 1000); //得到输入流 InputStream inputStream = conn.getInputStream(); - return inputStream ; - }catch (Exception e){ + return inputStream; + } catch (Exception e) { } - return null ; + return null; } /** - * * @param wsdl * @param ns * @param method - * @param list 参数 + * @param list 参数 * @return */ - public synchronized static String invoiceWebService(String wsdl, String ns, String method, List list){ + public synchronized static String invoiceWebService(String wsdl, String ns, String method, List list) { StringBuffer stringBuffer = new StringBuffer(); //拼接参数 for (int i = 0; i < list.size(); i++) { @@ -274,16 +277,16 @@ public class HttpClientUtils { HttpClient httpClient = new HttpClient(); int status = httpClient.executeMethod(postMethod); if (status == 200) { - return postMethod.getResponseBodyAsString() ; + return postMethod.getResponseBodyAsString(); } } catch (Exception e) { e.printStackTrace(); } finally { - try{ + try { if (is != null) { is.close(); } - }catch (Exception e){ + } catch (Exception e) { } } diff --git a/cloud/common/src/main/java/com/sincere/common/util/RedisUtils.java b/cloud/common/src/main/java/com/sincere/common/util/RedisUtils.java index 0d443dc..1c3ae9b 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/RedisUtils.java +++ b/cloud/common/src/main/java/com/sincere/common/util/RedisUtils.java @@ -28,9 +28,9 @@ public class RedisUtils { @PostConstruct public void getApiToken() { - ADDR = this.host ; - PORT = this.port ; - AUTH = this.password ; + ADDR = this.host; + PORT = this.port; + AUTH = this.password; } //Redis服务器IP @@ -62,6 +62,7 @@ public class RedisUtils { /** * 获取Jedis实例 + * * @return */ public synchronized static Jedis getJedis() { @@ -88,6 +89,7 @@ public class RedisUtils { /** * 释放jedis资源 + * * @param jedis */ public static void returnResource(final Jedis jedis) { @@ -96,22 +98,21 @@ public class RedisUtils { } } - public static void setString(String key ,String value){ + public static void setString(String key, String value) { Jedis jedis = null; try { jedis = getJedis(); - jedis.set(key,value); + jedis.set(key, value); } catch (Exception e) { System.out.println("setString设置redis键值异常:key=" + key + " value=" + value + " cause:" + e.getMessage()); } finally { - if(jedis != null) - { + if (jedis != null) { jedis.close(); } } } - public static void setObject(String key,Object object) { + public static void setObject(String key, Object object) { Jedis jedis = null; try { jedis = getJedis(); @@ -120,27 +121,25 @@ public class RedisUtils { e.printStackTrace(); System.out.println("setString设置redis键值异常:key=" + key + " value=" + object + " cause:" + e.getMessage()); } finally { - if(jedis != null) - { + if (jedis != null) { jedis.close(); } } } - public static void setString(String key ,String value , int expireTime){ + public static void setString(String key, String value, int expireTime) { String result = "OK"; Jedis jedis = null; try { jedis = getJedis(); - jedis.set(key,value); - if(result.equals("OK")) { + jedis.set(key, value); + if (result.equals("OK")) { jedis.expire(key.getBytes(), expireTime); } } catch (Exception e) { System.out.println("setString设置redis键值异常:key=" + key + " value=" + value + " cause:" + e.getMessage()); } finally { - if(jedis != null) - { + if (jedis != null) { jedis.close(); } } @@ -165,7 +164,7 @@ public class RedisUtils { try { jedis = getJedis(); byte[] value = jedis.get(key.getBytes()); - return SerializeUtil. unserialize(value); + return SerializeUtil.unserialize(value); } catch (Exception e) { System.out.println("getString获取redis键值异常:key=" + key + " cause:" + e.getMessage()); } finally { @@ -183,12 +182,11 @@ public class RedisUtils { try { jedis = getJedis(); return jedis.del(key.getBytes()); - }catch(Exception e) { + } catch (Exception e) { e.printStackTrace(); return null; - }finally{ - if(jedis != null) - { + } finally { + if (jedis != null) { jedis.close(); } } @@ -199,12 +197,11 @@ public class RedisUtils { try { jedis = getJedis(); return jedis.exists(key); - }catch(Exception e) { + } catch (Exception e) { e.printStackTrace(); return false; - }finally{ - if(jedis != null) - { + } finally { + if (jedis != null) { jedis.close(); } } diff --git a/cloud/common/src/main/java/com/sincere/common/util/SerializeUtil.java b/cloud/common/src/main/java/com/sincere/common/util/SerializeUtil.java index 8845226..05578c7 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/SerializeUtil.java +++ b/cloud/common/src/main/java/com/sincere/common/util/SerializeUtil.java @@ -30,7 +30,7 @@ public class SerializeUtil { } // 反序列化 - public static Object unserialize( byte[] bytes) { + public static Object unserialize(byte[] bytes) { ByteArrayInputStream bais = null; try { bais = new ByteArrayInputStream(bytes); diff --git a/cloud/common/src/main/java/com/sincere/common/util/SpringUtils.java b/cloud/common/src/main/java/com/sincere/common/util/SpringUtils.java index 41b686f..34a3b52 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/SpringUtils.java +++ b/cloud/common/src/main/java/com/sincere/common/util/SpringUtils.java @@ -8,30 +8,29 @@ import org.springframework.stereotype.Component; /** * spring获取bean工具类 - * -* @author 作者 owen E-mail: 624191343@qq.com - * @version 创建时间:2018年3月20日 下午10:13:18 类说明 * + * @author 作者 owen E-mail: 624191343@qq.com + * @version 创建时间:2018年3月20日 下午10:13:18 类说明 */ @Component public class SpringUtils implements ApplicationContextAware { - private static ApplicationContext applicationContext = null; + private static ApplicationContext applicationContext = null; - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - SpringUtils.applicationContext = applicationContext; - } + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringUtils.applicationContext = applicationContext; + } - public static T getBean(Class cla) { - return applicationContext.getBean(cla); - } + public static T getBean(Class cla) { + return applicationContext.getBean(cla); + } - public static T getBean(String name, Class cal) { - return applicationContext.getBean(name, cal); - } + public static T getBean(String name, Class cal) { + return applicationContext.getBean(name, cal); + } - public static String getProperty(String key) { - return applicationContext.getBean(Environment.class).getProperty(key); - } + public static String getProperty(String key) { + return applicationContext.getBean(Environment.class).getProperty(key); + } } diff --git a/cloud/common/src/main/java/com/sincere/common/util/TokenUtils.java b/cloud/common/src/main/java/com/sincere/common/util/TokenUtils.java index 98c4b74..90b4adc 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/TokenUtils.java +++ b/cloud/common/src/main/java/com/sincere/common/util/TokenUtils.java @@ -25,6 +25,7 @@ public class TokenUtils { /** * 生成Token + * * @param account * @return */ @@ -39,7 +40,7 @@ public class TokenUtils { */ JWTClaimsSet claimsSet = new JWTClaimsSet.Builder() .expirationTime(new Date(System.currentTimeMillis() + EXPIRE_TIME)) - .claim("ACCOUNT",account) + .claim("ACCOUNT", account) .build(); /** @@ -63,6 +64,7 @@ public class TokenUtils { /** * 校验token + * * @param token * @return */ @@ -84,7 +86,7 @@ public class TokenUtils { //获取载体中的数据 Object account = jwt.getJWTClaimsSet().getClaim("ACCOUNT"); //是否有openUid - if (Objects.isNull(account)){ + if (Objects.isNull(account)) { throw new ResultException(-3, "账号为空"); } return account.toString(); diff --git a/cloud/common/src/main/java/com/sincere/common/util/Xml2JsonUtils.java b/cloud/common/src/main/java/com/sincere/common/util/Xml2JsonUtils.java index 9e98375..2d01648 100644 --- a/cloud/common/src/main/java/com/sincere/common/util/Xml2JsonUtils.java +++ b/cloud/common/src/main/java/com/sincere/common/util/Xml2JsonUtils.java @@ -15,74 +15,76 @@ public class Xml2JsonUtils { /** * xml转json + * * @param xmlStr * @return * @throws DocumentException */ - public static JSONObject xml2Json(String xmlStr){ - try{ - Document doc= DocumentHelper.parseText(xmlStr); - JSONObject json=new JSONObject(); + public static JSONObject xml2Json(String xmlStr) { + try { + Document doc = DocumentHelper.parseText(xmlStr); + JSONObject json = new JSONObject(); dom4j2Json(doc.getRootElement(), json); return json; - }catch (Exception e){ + } catch (Exception e) { } - return null ; + return null; } /** * xml转json + * * @param element * @param json */ - public static void dom4j2Json(Element element,JSONObject json){ + public static void dom4j2Json(Element element, JSONObject json) { //如果是属性 - for(Object o:element.attributes()){ - Attribute attr=(Attribute)o; - if(!isEmpty(attr.getValue())){ - json.put("@"+attr.getName(), attr.getValue()); + for (Object o : element.attributes()) { + Attribute attr = (Attribute) o; + if (!isEmpty(attr.getValue())) { + json.put("@" + attr.getName(), attr.getValue()); } } - List chdEl=element.elements(); - if(chdEl.isEmpty()&&!isEmpty(element.getText())){//如果没有子元素,只有一个值 + List chdEl = element.elements(); + if (chdEl.isEmpty() && !isEmpty(element.getText())) {//如果没有子元素,只有一个值 json.put(element.getName(), element.getText()); } - for(Element e:chdEl){//有子元素 - if(!e.elements().isEmpty()){//子元素也有子元素 - JSONObject chdjson=new JSONObject(); - dom4j2Json(e,chdjson); - Object o=json.get(e.getName()); - if(o!=null){ - JSONArray jsona=null; - if(o instanceof JSONObject){//如果此元素已存在,则转为jsonArray - JSONObject jsono=(JSONObject)o; + for (Element e : chdEl) {//有子元素 + if (!e.elements().isEmpty()) {//子元素也有子元素 + JSONObject chdjson = new JSONObject(); + dom4j2Json(e, chdjson); + Object o = json.get(e.getName()); + if (o != null) { + JSONArray jsona = null; + if (o instanceof JSONObject) {//如果此元素已存在,则转为jsonArray + JSONObject jsono = (JSONObject) o; json.remove(e.getName()); - jsona=new JSONArray(); + jsona = new JSONArray(); jsona.add(jsono); jsona.add(chdjson); } - if(o instanceof JSONArray){ - jsona=(JSONArray)o; + if (o instanceof JSONArray) { + jsona = (JSONArray) o; jsona.add(chdjson); } json.put(e.getName(), jsona); - }else{ - if(!chdjson.isEmpty()){ + } else { + if (!chdjson.isEmpty()) { json.put(e.getName(), chdjson); } } - }else{//子元素没有子元素 - for(Object o:element.attributes()){ - Attribute attr=(Attribute)o; - if(!isEmpty(attr.getValue())){ - json.put("@"+attr.getName(), attr.getValue()); + } else {//子元素没有子元素 + for (Object o : element.attributes()) { + Attribute attr = (Attribute) o; + if (!isEmpty(attr.getValue())) { + json.put("@" + attr.getName(), attr.getValue()); } } - if(!e.getText().isEmpty()){ + if (!e.getText().isEmpty()) { json.put(e.getName(), e.getText()); } } diff --git a/cloud/common/src/main/java/com/sincere/common/vo/BaseVo.java b/cloud/common/src/main/java/com/sincere/common/vo/BaseVo.java index 46ef4cb..d8fb2ba 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/BaseVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/BaseVo.java @@ -5,7 +5,7 @@ import java.io.Serializable; public class BaseVo implements Serializable { private boolean success; - private String message ; + private String message; public boolean isSuccess() { return success; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseDetailVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseDetailVo.java index 96b4902..05d02ed 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseDetailVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseDetailVo.java @@ -9,17 +9,17 @@ import com.sincere.common.dto.independence.TeacherClassDto; */ public class ClassCourseDetailVo { - private String courseName ; - private String teacherName ; - private int times ; - private int joinTimes ; + private String courseName; + private String teacherName; + private int times; + private int joinTimes; public ClassCourseDetailVo(TeacherClassDto teacherClass) { this.courseName = teacherClass.getCourseName(); this.teacherName = teacherClass.getTeacherName(); this.joinTimes = teacherClass.getJoinTimes(); - this.times = teacherClass.getTimes()-2*(teacherClass.getJoinTimes()); + this.times = teacherClass.getTimes() - 2 * (teacherClass.getJoinTimes()); } diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseVO.java index 8303354..d32f4a1 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassCourseVO.java @@ -9,11 +9,11 @@ import java.util.List; */ public class ClassCourseVO { - private int classId ; - private String className ; - private int allCount ; + private int classId; + private String className; + private int allCount; - List list ; + List list; public int getClassId() { return classId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassRepVo.java index 0f652aa..c3d9728 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ClassRepVo.java @@ -12,7 +12,7 @@ import java.util.List; */ public class ClassRepVo extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseClassReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseClassReqVo.java index c9f228e..93b02ce 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseClassReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseClassReqVo.java @@ -7,8 +7,8 @@ package com.sincere.common.vo.independence.paike; */ public class CourseClassReqVo { - private int scheduleId ; - private int courseId ; + private int scheduleId; + private int courseId; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseGroupReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseGroupReqVo.java index 3961b5a..e1d6732 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseGroupReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseGroupReqVo.java @@ -9,8 +9,8 @@ import java.io.Serializable; */ public class CourseGroupReqVo implements Serializable { - private int scheduleId ; - private int courseGroup ; + private int scheduleId; + private int courseGroup; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseRepVo.java index 1a12765..4c08bd9 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseRepVo.java @@ -12,7 +12,7 @@ import java.util.List; */ public class CourseRepVo extends BaseVo { - private List data ; + private List data; public List getData() { return data; @@ -22,7 +22,7 @@ public class CourseRepVo extends BaseVo { this.data = data; } - public CourseRepVo(){ + public CourseRepVo() { super(); } } diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseTypeListVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseTypeListVO.java index 56c768a..a46c775 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseTypeListVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/CourseTypeListVO.java @@ -11,9 +11,9 @@ import java.util.List; */ public class CourseTypeListVO { - private int courseType ; - private String courseTypeName ; - private List list ; + private int courseType; + private String courseTypeName; + private List list; public int getCourseType() { return courseType; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/FirstReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/FirstReqVo.java index 1fd6902..87c42bd 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/FirstReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/FirstReqVo.java @@ -5,9 +5,9 @@ import java.io.Serializable; public class FirstReqVo implements Serializable { private int scheduleId; - private int morning ; + private int morning; private int afternoon; - private int night ; + private int night; private int dayNumber; public int getScheduleId() { diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetClassCourseReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetClassCourseReqVo.java index 6e3d4e5..0a7c55a 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetClassCourseReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetClassCourseReqVo.java @@ -7,8 +7,8 @@ package com.sincere.common.vo.independence.paike; */ public class GetClassCourseReqVo { - private int scheduleId ; - private int classId ; + private int scheduleId; + private int classId; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseClassListRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseClassListRepVo.java index be7c605..eb4665e 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseClassListRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseClassListRepVo.java @@ -9,11 +9,11 @@ import java.io.Serializable; */ public class GetCourseClassListRepVo implements Serializable { - private int classId ; - private String className ; - private int courseId ; - private String courseName ; - private String teacherName ; + private int classId; + private String className; + private int courseId; + private String courseName; + private String teacherName; public int getClassId() { return classId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseTypeListRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseTypeListRepVo.java index dd05e6a..4da6258 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseTypeListRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/GetCourseTypeListRepVo.java @@ -11,8 +11,8 @@ import java.util.List; */ public class GetCourseTypeListRepVo extends BaseVo { - private int scheduleId ; - private List data ; + private int scheduleId; + private List data; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitRepVo.java index d677762..685e444 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitRepVo.java @@ -10,9 +10,9 @@ import com.sincere.common.vo.BaseVo; */ public class InitRepVo extends BaseVo { - private int classNumber ; - private int teacherNumber ; - private int courseNumber ; + private int classNumber; + private int teacherNumber; + private int courseNumber; public int getClassNumber() { return classNumber; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitTeacherCourseReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitTeacherCourseReqVo.java index 03c99a7..3a73d10 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitTeacherCourseReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/InitTeacherCourseReqVo.java @@ -6,8 +6,8 @@ package com.sincere.common.vo.independence.paike; * @date 2019/10/10 0010 9:04 */ public class InitTeacherCourseReqVo { - private int scheduleId ; - private String url ; + private int scheduleId; + private String url; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinClassReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinClassReqVo.java index 688ca96..b119a01 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinClassReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinClassReqVo.java @@ -10,9 +10,9 @@ import java.util.List; */ public class JoinClassReqVo implements Serializable { - private int scheduleId ; - private int courseId ; - private List classIdList ; + private int scheduleId; + private int courseId; + private List classIdList; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinDetail.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinDetail.java index 86d6bd6..127ba3c 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinDetail.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinDetail.java @@ -7,10 +7,10 @@ package com.sincere.common.vo.independence.paike; */ public class JoinDetail { - private int courseGroup ; - private String courseName ; - private String className ; - private String teacherName ; + private int courseGroup; + private String courseName; + private String className; + private String teacherName; public int getCourseGroup() { return courseGroup; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinRepVo.java index c83ecfa..af414ed 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/JoinRepVo.java @@ -12,7 +12,7 @@ import java.util.List; */ public class JoinRepVo extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/NoScheduleReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/NoScheduleReqVo.java index 5c0712b..d119ac6 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/NoScheduleReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/NoScheduleReqVo.java @@ -10,11 +10,11 @@ import java.util.List; */ public class NoScheduleReqVo implements Serializable { - private int scheduleId ; - private String grade ; - private int classId ; - private int level ; //1 班级不排 2 年级不排 3 学校不排 - private List list ; + private int scheduleId; + private String grade; + private int classId; + private int level; //1 班级不排 2 年级不排 3 学校不排 + private List list; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ParallelClassReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ParallelClassReqVo.java index 3f15b1c..7088c84 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ParallelClassReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ParallelClassReqVo.java @@ -10,13 +10,13 @@ import java.util.List; */ public class ParallelClassReqVo implements Serializable { - private int scheduleId ; - private List intervalList ; + private int scheduleId; + private List intervalList; private int courseType; - private int level ; //1 班级不排 2 年级不排 3 学校不排 - private String grade ; - private int classId ; + private int level; //1 班级不排 2 年级不排 3 学校不排 + private String grade; + private int classId; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/RecallReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/RecallReqVo.java index 55fd77d..63b3226 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/RecallReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/RecallReqVo.java @@ -8,8 +8,8 @@ import java.io.Serializable; * @date 2019/10/15 0015 8:08 */ public class RecallReqVo implements Serializable { - private int scheduleId ; - private int number ;// 对应页面 1不排课 2 公共课 3 主课 4 副课 + private int scheduleId; + private int number;// 对应页面 1不排课 2 公共课 3 主课 4 副课 public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleIdReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleIdReqVo.java index 89be97e..89adfa7 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleIdReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleIdReqVo.java @@ -7,7 +7,7 @@ package com.sincere.common.vo.independence.paike; */ public class ScheduleIdReqVo { - private int scheduleId ; + private int scheduleId; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleListRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleListRepVo.java index aeb0b3d..82bfc5a 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleListRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleListRepVo.java @@ -13,7 +13,7 @@ import java.util.List; */ public class ScheduleListRepVo extends BaseVo { - private List data ; + private List data; public List getData() { return data; @@ -22,7 +22,8 @@ public class ScheduleListRepVo extends BaseVo { public void setData(List data) { this.data = data; } - public ScheduleListRepVo(){ + + public ScheduleListRepVo() { super(); } } diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleRepVo.java index 0aa08e5..b946cd4 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/ScheduleRepVo.java @@ -9,7 +9,7 @@ import com.sincere.common.vo.BaseVo; */ public class ScheduleRepVo extends BaseVo { - private int scheduleId ; + private int scheduleId; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SchoolIdReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SchoolIdReqVo.java index 27cf5a3..3bc5d1d 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SchoolIdReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SchoolIdReqVo.java @@ -7,7 +7,7 @@ package com.sincere.common.vo.independence.paike; */ public class SchoolIdReqVo { - private int schoolId ; + private int schoolId; public int getSchoolId() { return schoolId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SetTypeReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SetTypeReqVo.java index 5425c1a..ebc9499 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SetTypeReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/SetTypeReqVo.java @@ -10,9 +10,9 @@ import java.util.List; */ public class SetTypeReqVo implements Serializable { - private int scheduleId ; - private int courseType ; // 1 主课 2 副课 3 公共课 - private List courseIdList ; + private int scheduleId; + private int courseType; // 1 主课 2 副课 3 公共课 + private List courseIdList; public int getCourseType() { diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/TeacherCourseRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/TeacherCourseRepVo.java index 1faa9f8..29fde36 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/TeacherCourseRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/TeacherCourseRepVo.java @@ -12,8 +12,8 @@ import java.util.List; */ public class TeacherCourseRepVo extends BaseVo { - private List data ; - private List courseNameList ; + private List data; + private List courseNameList; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/UpdateScheduleReqVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/UpdateScheduleReqVo.java index 524086f..489cfb6 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/UpdateScheduleReqVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/paike/UpdateScheduleReqVo.java @@ -7,8 +7,8 @@ package com.sincere.common.vo.independence.paike; */ public class UpdateScheduleReqVo { private int scheduleId; - private String team ; - private String scheduleName ; + private String team; + private String scheduleName; public int getScheduleId() { return scheduleId; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1.java index 71e9381..f63c850 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1.java @@ -13,12 +13,12 @@ import java.io.Serializable; @ApiModel public class Form1 implements Serializable { - @ApiModelProperty(value="等级") - private String level ; - @ApiModelProperty(value="人数") - private int number ; - @ApiModelProperty(value="比例") - private double prop ; + @ApiModelProperty(value = "等级") + private String level; + @ApiModelProperty(value = "人数") + private int number; + @ApiModelProperty(value = "比例") + private double prop; public String getLevel() { return level; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1RepVO.java index 058f0ce..0ff4be1 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form1RepVO.java @@ -15,10 +15,10 @@ import java.util.Map; @ApiModel public class Form1RepVO extends BaseVo { - @ApiModelProperty(value="分数段区间") - private Map map ; - @ApiModelProperty(value="分数段详情") - private List list ; + @ApiModelProperty(value = "分数段区间") + private Map map; + @ApiModelProperty(value = "分数段详情") + private List list; public Map getMap() { return map; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2.java index 8134780..f48c789 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2.java @@ -13,20 +13,20 @@ import java.io.Serializable; @ApiModel public class Form2 implements Serializable { - @ApiModelProperty(value="名称") - private String name ; - @ApiModelProperty(value="参考人数") - private int studentNumber ; - @ApiModelProperty(value="参考人数占比") - private double studentProp ; - @ApiModelProperty(value="高分段人数") - private int highNumber ; - @ApiModelProperty(value="高分段人数占比") - private double highProp ; - @ApiModelProperty(value="低分段人数") - private int lowNumber ; - @ApiModelProperty(value="低分段人数占比") - private double lowProp ; + @ApiModelProperty(value = "名称") + private String name; + @ApiModelProperty(value = "参考人数") + private int studentNumber; + @ApiModelProperty(value = "参考人数占比") + private double studentProp; + @ApiModelProperty(value = "高分段人数") + private int highNumber; + @ApiModelProperty(value = "高分段人数占比") + private double highProp; + @ApiModelProperty(value = "低分段人数") + private int lowNumber; + @ApiModelProperty(value = "低分段人数占比") + private double lowProp; public String getName() { return name; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2RepVO.java index 00511de..577d577 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form2RepVO.java @@ -13,8 +13,8 @@ import java.util.List; */ @ApiModel public class Form2RepVO extends BaseVo { - @ApiModelProperty(value="数据") - private List data ; + @ApiModelProperty(value = "数据") + private List data; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3.java index 07807e8..2a3d9cb 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3.java @@ -13,22 +13,22 @@ import java.io.Serializable; @ApiModel public class Form3 implements Serializable { - @ApiModelProperty(value="名称") - private String name ; - @ApiModelProperty(value="最高分") - private Double maxScore ; - @ApiModelProperty(value="平均分") - private Double average ; - @ApiModelProperty(value="最低分") - private Double minScore ; - @ApiModelProperty(value="优秀率") - private Double apercent ; - @ApiModelProperty(value="良好率") - private Double bpercent ; - @ApiModelProperty(value="及格率") - private Double cpercent ; - @ApiModelProperty(value="不及格率") - private Double dpercent ; + @ApiModelProperty(value = "名称") + private String name; + @ApiModelProperty(value = "最高分") + private Double maxScore; + @ApiModelProperty(value = "平均分") + private Double average; + @ApiModelProperty(value = "最低分") + private Double minScore; + @ApiModelProperty(value = "优秀率") + private Double apercent; + @ApiModelProperty(value = "良好率") + private Double bpercent; + @ApiModelProperty(value = "及格率") + private Double cpercent; + @ApiModelProperty(value = "不及格率") + private Double dpercent; public String getName() { return name; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3RepVO.java index f5a1ff5..6a0715d 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form3RepVO.java @@ -11,7 +11,7 @@ import java.util.List; */ public class Form3RepVO extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4.java index 899e657..b2ea359 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4.java @@ -13,16 +13,16 @@ import java.io.Serializable; @ApiModel public class Form4 implements Serializable { - @ApiModelProperty(value="名称") - private String name ; - @ApiModelProperty(value="众数") - private Double modeNumber ; - @ApiModelProperty(value="中位数") - private Double medianNumber ; - @ApiModelProperty(value="标准差") - private Double stdev ; - @ApiModelProperty(value="平均分") - private Double avgNumber ; + @ApiModelProperty(value = "名称") + private String name; + @ApiModelProperty(value = "众数") + private Double modeNumber; + @ApiModelProperty(value = "中位数") + private Double medianNumber; + @ApiModelProperty(value = "标准差") + private Double stdev; + @ApiModelProperty(value = "平均分") + private Double avgNumber; public String getName() { return name; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4RepVO.java index e96da13..f8b103e 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form4RepVO.java @@ -13,7 +13,7 @@ import java.util.List; @ApiModel public class Form4RepVO extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5.java index d03f961..26c22c1 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5.java @@ -12,30 +12,30 @@ import java.io.Serializable; */ @ApiModel public class Form5 implements Serializable { - @ApiModelProperty(value="题号") - private String examNumber ; - @ApiModelProperty(value="难度") - private String difficultName ; - @ApiModelProperty(value="分值") - private Double score ; - @ApiModelProperty(value="得分率 区") - private Double allRate ; - @ApiModelProperty(value="得分率 联盟校") - private Double leagueRate ; - @ApiModelProperty(value="得分率 本校") - private Double schoolRate ; - @ApiModelProperty(value="平均分 区") - private Double allAvg ; - @ApiModelProperty(value="平均分 联盟校") - private Double leagueAvg ; - @ApiModelProperty(value="平均分 本校") - private Double schoolAvg ; - @ApiModelProperty(value="区分度 区") - private Double allDist ; - @ApiModelProperty(value="区分度 联盟校") - private Double leagueDist ; - @ApiModelProperty(value="区分度 本校") - private Double schoolDist ; + @ApiModelProperty(value = "题号") + private String examNumber; + @ApiModelProperty(value = "难度") + private String difficultName; + @ApiModelProperty(value = "分值") + private Double score; + @ApiModelProperty(value = "得分率 区") + private Double allRate; + @ApiModelProperty(value = "得分率 联盟校") + private Double leagueRate; + @ApiModelProperty(value = "得分率 本校") + private Double schoolRate; + @ApiModelProperty(value = "平均分 区") + private Double allAvg; + @ApiModelProperty(value = "平均分 联盟校") + private Double leagueAvg; + @ApiModelProperty(value = "平均分 本校") + private Double schoolAvg; + @ApiModelProperty(value = "区分度 区") + private Double allDist; + @ApiModelProperty(value = "区分度 联盟校") + private Double leagueDist; + @ApiModelProperty(value = "区分度 本校") + private Double schoolDist; public String getExamNumber() { diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5RepVO.java index cdf3770..dfed9af 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form5RepVO.java @@ -13,7 +13,7 @@ import java.util.List; @ApiModel public class Form5RepVO extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6.java index 0317324..efa7527 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6.java @@ -12,31 +12,31 @@ import java.io.Serializable; */ @ApiModel public class Form6 implements Serializable { - @ApiModelProperty(value="维度名称") - private String dimensional ; - @ApiModelProperty(value="分值") - private Double score ; - @ApiModelProperty(value="得分率 区") - private Double allRate ; - @ApiModelProperty(value="得分率 联盟校") - private Double leagueRate ; - @ApiModelProperty(value="得分率 本校") - private Double schoolRate ; - @ApiModelProperty(value="平均分 区") - private Double allAvg ; - @ApiModelProperty(value="平均分 联盟校") - private Double leagueAvg ; - @ApiModelProperty(value="平均分 本校") - private Double schoolAvg ; - @ApiModelProperty(value="区分度 区") - private Double allDist ; - @ApiModelProperty(value="区分度 联盟校") - private Double leagueDist ; - @ApiModelProperty(value="区分度 本校") - private Double schoolDist ; - - - private String examNumber ; + @ApiModelProperty(value = "维度名称") + private String dimensional; + @ApiModelProperty(value = "分值") + private Double score; + @ApiModelProperty(value = "得分率 区") + private Double allRate; + @ApiModelProperty(value = "得分率 联盟校") + private Double leagueRate; + @ApiModelProperty(value = "得分率 本校") + private Double schoolRate; + @ApiModelProperty(value = "平均分 区") + private Double allAvg; + @ApiModelProperty(value = "平均分 联盟校") + private Double leagueAvg; + @ApiModelProperty(value = "平均分 本校") + private Double schoolAvg; + @ApiModelProperty(value = "区分度 区") + private Double allDist; + @ApiModelProperty(value = "区分度 联盟校") + private Double leagueDist; + @ApiModelProperty(value = "区分度 本校") + private Double schoolDist; + + + private String examNumber; public Double getScore() { diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6RepVO.java index 04aa62a..0af424c 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form6RepVO.java @@ -13,7 +13,7 @@ import java.util.List; @ApiModel public class Form6RepVO extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7.java index 80fa9d3..97a3132 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7.java @@ -14,11 +14,11 @@ import java.io.Serializable; public class Form7 implements Serializable { @ApiModelProperty(value = "名称") - private String name ; + private String name; @ApiModelProperty(value = "分值") - private Double score ; + private Double score; @ApiModelProperty(value = "占比") - private Double percent ; + private Double percent; public Double getScore() { return score; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7RepVO.java index e035127..4c5edbd 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form7RepVO.java @@ -16,19 +16,19 @@ import java.util.List; public class Form7RepVO extends BaseVo { @ApiModelProperty(value = "举例七年级上册") - private String examScope ; + private String examScope; @ApiModelProperty(value = "科目") - private String courseName ; + private String courseName; @ApiModelProperty(value = "满分") - private Double maxScore ; + private Double maxScore; @ApiModelProperty(value = "考试时长") - private String examTime ; + private String examTime; @ApiModelProperty(value = "章节列表对应分值") - private List list ; + private List list; @ApiModelProperty(value = "难度列表对应分值") - private List difficultList ; + private List difficultList; @ApiModelProperty(value = "题型类型对应分值") - private List typeList ; + private List typeList; public String getExamScope() { return examScope; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8.java index 43080d0..06fff24 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8.java @@ -13,16 +13,16 @@ import java.io.Serializable; @ApiModel public class Form8 implements Serializable { - @ApiModelProperty(value="题目难度") - private String difficultName ; - @ApiModelProperty(value="分值") - private Double score ; - @ApiModelProperty(value="得分率 区") - private Double allRate ; - @ApiModelProperty(value="得分率 联盟校") - private Double leagueRate ; - @ApiModelProperty(value="得分率 本校") - private Double schoolRate ; + @ApiModelProperty(value = "题目难度") + private String difficultName; + @ApiModelProperty(value = "分值") + private Double score; + @ApiModelProperty(value = "得分率 区") + private Double allRate; + @ApiModelProperty(value = "得分率 联盟校") + private Double leagueRate; + @ApiModelProperty(value = "得分率 本校") + private Double schoolRate; public String getDifficultName() { return difficultName; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8RepVO.java index 8abb5cc..ad0208b 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Form8RepVO.java @@ -13,7 +13,7 @@ import java.util.List; @ApiModel public class Form8RepVO extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/SuggestRepVo.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/SuggestRepVo.java index d4ac84d..c2b6da8 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/SuggestRepVo.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/SuggestRepVo.java @@ -13,29 +13,29 @@ import java.util.List; @ApiModel public class SuggestRepVo { @ApiModelProperty(value = "总体情况") - private String assess ; + private String assess; @ApiModelProperty(value = "难度系数") - private String difficultyDegree ; + private String difficultyDegree; @ApiModelProperty(value = "优秀率") - private String excellentRate ; + private String excellentRate; @ApiModelProperty(value = "知识点得分率不到50%的") - private List lessKnowledgeList ; + private List lessKnowledgeList; @ApiModelProperty(value = "知识点得分率不到70%") - private List midKnowledgeList ; + private List midKnowledgeList; @ApiModelProperty(value = "学习能力得分率<69%") - private List lessAbilityList ; + private List lessAbilityList; @ApiModelProperty(value = "学习能力得分率在70%≤η<80%") - private List midAbilityList ; + private List midAbilityList; @ApiModelProperty(value = "学习能力得分率≥80%") - private List highAbilityList ; + private List highAbilityList; @ApiModelProperty(value = "探究技能方面得分率<69%") - private List lessSkillList ; + private List lessSkillList; @ApiModelProperty(value = "探究技能方面得分率在70%≤η<80%") - private List midSkillList ; + private List midSkillList; @ApiModelProperty(value = "探究技能方面得分率≥80%") - private List highSkillList ; + private List highSkillList; @ApiModelProperty(value = "选择题错误率>15%") - private List errorList ; + private List errorList; public List getErrorList() { return errorList; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table1.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table1.java index dd181e5..a21763e 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table1.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table1.java @@ -12,10 +12,10 @@ import java.io.Serializable; */ @ApiModel public class Table1 implements Serializable { - @ApiModelProperty(value="分数段") - private String score ; - @ApiModelProperty(value="人数") - private int number ; + @ApiModelProperty(value = "分数段") + private String score; + @ApiModelProperty(value = "人数") + private int number; public String getScore() { return score; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2.java index 00bc70b..fe18406 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2.java @@ -13,13 +13,13 @@ import java.io.Serializable; @ApiModel public class Table2 implements Serializable { @ApiModelProperty(value = "知识点") - private String knowledge ; + private String knowledge; @ApiModelProperty(value = "得分率") - private Double schoolRate ; + private Double schoolRate; @ApiModelProperty(value = "考频") - private String rate ; + private String rate; @ApiModelProperty(value = "平均分") - private String avg ; + private String avg; public String getKnowledge() { return knowledge; diff --git a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2RepVO.java b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2RepVO.java index dc5058b..1abcfc2 100644 --- a/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2RepVO.java +++ b/cloud/common/src/main/java/com/sincere/common/vo/independence/school/Table2RepVO.java @@ -11,7 +11,7 @@ import java.util.List; */ public class Table2RepVO extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/consumer/src/main/java/com/example/consumer/ConsumerApplication.java b/cloud/consumer/src/main/java/com/example/consumer/ConsumerApplication.java index 74a9ffb..d5ad72b 100644 --- a/cloud/consumer/src/main/java/com/example/consumer/ConsumerApplication.java +++ b/cloud/consumer/src/main/java/com/example/consumer/ConsumerApplication.java @@ -15,7 +15,7 @@ public class ConsumerApplication { @Bean @LoadBalanced - RestTemplate restTemplate(){ + RestTemplate restTemplate() { return new RestTemplate(); } diff --git a/cloud/consumer/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/cloud/consumer/src/main/resources/META-INF/additional-spring-configuration-metadata.json index af49321..335655e 100644 --- a/cloud/consumer/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/cloud/consumer/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -5,4 +5,5 @@ "type": "java.lang.String", "description": "Description for eureka.client.serviceUrl.defaultZone." } - ] } \ No newline at end of file + ] +} \ No newline at end of file diff --git a/cloud/consumer/src/main/resources/application.properties b/cloud/consumer/src/main/resources/application.properties index 156c580..902a835 100644 --- a/cloud/consumer/src/main/resources/application.properties +++ b/cloud/consumer/src/main/resources/application.properties @@ -1,11 +1,7 @@ server.port=2222 - spring.application.name=consumer eureka.client.fetch-registry=true - -#Լ޳ +#������Լ���޳� eureka.instance.lease-renewal-interval-in-seconds=30 eureka.instance.lease-expiration-duration-in-seconds=90 - - eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka,http://localhost:1112/eureka \ No newline at end of file diff --git a/cloud/dahua/pom.xml b/cloud/dahua/pom.xml index 303eda6..750f9df 100644 --- a/cloud/dahua/pom.xml +++ b/cloud/dahua/pom.xml @@ -32,36 +32,36 @@ - + + org.apache.logging.log4j + log4j-slf4j-impl + 2.10.0 + compile + + + org.apache.logging.log4j + log4j-core + 2.10.0 + compile + + + org.apache.logging.log4j + log4j-jul + 2.10.0 + compile + + org.slf4j - slf4j-log4j12 + jul-to-slf4j 1.7.25 compile - --> - - org.apache.logging.log4j - log4j-slf4j-impl - 2.10.0 - compile - - - org.apache.logging.log4j - log4j-core - 2.10.0 - compile - - - org.apache.logging.log4j - log4j-jul - 2.10.0 - compile - - - org.slf4j - jul-to-slf4j - 1.7.25 - compile - + org.springframework.boot @@ -118,16 +118,16 @@ mybatis-spring-boot-starter 2.0.1 - - - - - + + + + + - - - + + + com.drewnoakes @@ -171,11 +171,16 @@ compile - - - - - + + com.belerweb + pinyin4j + 2.5.0 + + + + + + @@ -200,7 +205,7 @@ org.apache.maven.plugins maven-dependency-plugin - + copy-dependencies diff --git a/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AddDeviceDialog.java b/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AddDeviceDialog.java index 5e9d290..28e22c5 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AddDeviceDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AddDeviceDialog.java @@ -24,112 +24,113 @@ import javax.swing.JTextField; /** * 在树上添加设备 */ -public class AddDeviceDialog extends JDialog{ - private static final long serialVersionUID = 1L; - - private DeviceManagerListener listener; - public void addDeviceManagerListener(DeviceManagerListener listener) { - this.listener = listener; - } - - public AddDeviceDialog(){ - setTitle(Res.string().getAddDevice()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(220, 180); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - AddDevicePanel addDevicePanel = new AddDevicePanel(); +public class AddDeviceDialog extends JDialog { + private static final long serialVersionUID = 1L; + + private DeviceManagerListener listener; + + public void addDeviceManagerListener(DeviceManagerListener listener) { + this.listener = listener; + } + + public AddDeviceDialog() { + setTitle(Res.string().getAddDevice()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(220, 180); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + AddDevicePanel addDevicePanel = new AddDevicePanel(); add(addDevicePanel, BorderLayout.CENTER); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - dispose(); - } - }); - } - - /* - * 添加设备面板 - */ - private class AddDevicePanel extends JPanel { - private static final long serialVersionUID = 1L; - - public AddDevicePanel() { - BorderEx.set(this, "", 2); - setLayout(new FlowLayout()); - - JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER); - JLabel usernameLabel = new JLabel(Res.string().getUserName(), JLabel.CENTER); - JLabel passwordLabel = new JLabel(Res.string().getPassword(), JLabel.CENTER); - - deviceIdLabel.setPreferredSize(new Dimension(60, 21)); - usernameLabel.setPreferredSize(new Dimension(60, 21)); - passwordLabel.setPreferredSize(new Dimension(60, 21)); - - deviceIdTextField = new JTextField(); - usernameTextField = new JTextField(); - passwordPasswordField = new JPasswordField(); - - deviceIdTextField.setPreferredSize(new Dimension(120, 20)); - usernameTextField.setPreferredSize(new Dimension(120, 20)); - passwordPasswordField.setPreferredSize(new Dimension(120, 20)); - - JButton addDeviceBtn = new JButton(Res.string().getAdd()); - JButton cancelBtn = new JButton(Res.string().getCancel()); - - addDeviceBtn.setPreferredSize(new Dimension(90, 21)); - cancelBtn.setPreferredSize(new Dimension(90, 21)); - - add(deviceIdLabel); - add(deviceIdTextField); - add(usernameLabel); - add(usernameTextField); - add(passwordLabel); - add(passwordPasswordField); - add(addDeviceBtn); - add(cancelBtn); - - // 添加 - addDeviceBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - if(deviceIdTextField.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(usernameTextField.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserName(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if((new String(passwordPasswordField.getPassword()).trim()).equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - dispose(); - listener.onDeviceManager(deviceIdTextField.getText(), - usernameTextField.getText(), - new String(passwordPasswordField.getPassword()).trim()); - } - }); - - // 取消,关闭 - cancelBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - dispose(); - } - }); - } - } - - private JTextField deviceIdTextField; - private JTextField usernameTextField; - private JPasswordField passwordPasswordField; + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + /* + * 添加设备面板 + */ + private class AddDevicePanel extends JPanel { + private static final long serialVersionUID = 1L; + + public AddDevicePanel() { + BorderEx.set(this, "", 2); + setLayout(new FlowLayout()); + + JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER); + JLabel usernameLabel = new JLabel(Res.string().getUserName(), JLabel.CENTER); + JLabel passwordLabel = new JLabel(Res.string().getPassword(), JLabel.CENTER); + + deviceIdLabel.setPreferredSize(new Dimension(60, 21)); + usernameLabel.setPreferredSize(new Dimension(60, 21)); + passwordLabel.setPreferredSize(new Dimension(60, 21)); + + deviceIdTextField = new JTextField(); + usernameTextField = new JTextField(); + passwordPasswordField = new JPasswordField(); + + deviceIdTextField.setPreferredSize(new Dimension(120, 20)); + usernameTextField.setPreferredSize(new Dimension(120, 20)); + passwordPasswordField.setPreferredSize(new Dimension(120, 20)); + + JButton addDeviceBtn = new JButton(Res.string().getAdd()); + JButton cancelBtn = new JButton(Res.string().getCancel()); + + addDeviceBtn.setPreferredSize(new Dimension(90, 21)); + cancelBtn.setPreferredSize(new Dimension(90, 21)); + + add(deviceIdLabel); + add(deviceIdTextField); + add(usernameLabel); + add(usernameTextField); + add(passwordLabel); + add(passwordPasswordField); + add(addDeviceBtn); + add(cancelBtn); + + // 添加 + addDeviceBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + if (deviceIdTextField.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (usernameTextField.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserName(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if ((new String(passwordPasswordField.getPassword()).trim()).equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + dispose(); + listener.onDeviceManager(deviceIdTextField.getText(), + usernameTextField.getText(), + new String(passwordPasswordField.getPassword()).trim()); + } + }); + + // 取消,关闭 + cancelBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + dispose(); + } + }); + } + } + + private JTextField deviceIdTextField; + private JTextField usernameTextField; + private JPasswordField passwordPasswordField; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AutoRegister.java b/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AutoRegister.java index 731015c..135db4e 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AutoRegister.java +++ b/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/AutoRegister.java @@ -66,1742 +66,1753 @@ import com.sun.jna.Pointer; * 主动注册Demo:包含主动注册、实时预览、对讲、主动注册网络配置 */ class AutoRegisterFrame extends JFrame { - private static final long serialVersionUID = 1L; - - // 设备断线通知回调 - private DisConnect disConnectCallback = new DisConnect(); - - // 主动注册监听回调 - private ServiceCB servicCallback = new ServiceCB(); - - // 抓图回调 - public CaptureReceiveCB captureCallback = new CaptureReceiveCB(); - + private static final long serialVersionUID = 1L; + + // 设备断线通知回调 + private DisConnect disConnectCallback = new DisConnect(); + + // 主动注册监听回调 + private ServiceCB servicCallback = new ServiceCB(); + + // 抓图回调 + public CaptureReceiveCB captureCallback = new CaptureReceiveCB(); + private boolean isExist = false; - + private TreeCellRender treeCellRender = new TreeCellRender(); - + // 预览句柄 - private NetSDKLib.LLong realplayHandle = new LLong(0); - - // 预览节点 - private ChannelTreeNode realplayChannelTreeNode = null; - - // 对讲节点 - private DeviceTreeNode talkDeviceTreeNode = null; - - public AutoRegisterFrame() { - setTitle(Res.string().getAutoRegister()); - setLayout(new BorderLayout()); - pack(); - setSize(780, 540); - setResizable(false); - setLocationRelativeTo(null); - - // 打开工程,初始化,设置断线回调 - LoginModule.init(disConnectCallback, null); - - // 设置抓图回调 - AutoRegisterModule.setSnapRevCallBack(captureCallback); - - try { + private NetSDKLib.LLong realplayHandle = new LLong(0); + + // 预览节点 + private ChannelTreeNode realplayChannelTreeNode = null; + + // 对讲节点 + private DeviceTreeNode talkDeviceTreeNode = null; + + public AutoRegisterFrame() { + setTitle(Res.string().getAutoRegister()); + setLayout(new BorderLayout()); + pack(); + setSize(780, 540); + setResizable(false); + setLocationRelativeTo(null); + + // 打开工程,初始化,设置断线回调 + LoginModule.init(disConnectCallback, null); + + // 设置抓图回调 + AutoRegisterModule.setSnapRevCallBack(captureCallback); + + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { - e.printStackTrace(); - } - - // 注册列表面板 - AutoRegisterTreePanel autoRegisterTreePanel = new AutoRegisterTreePanel(); - - // 实时预览面板 - RealPlayPanel realplayPanel = new RealPlayPanel(); - - // 监听和设备管理面板 - ListenDeviceManagerPanel listenDeviceManagerPanel = new ListenDeviceManagerPanel(); - - add(autoRegisterTreePanel, BorderLayout.WEST); - add(realplayPanel, BorderLayout.CENTER); - add(listenDeviceManagerPanel, BorderLayout.EAST); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - // 停止对讲 - if(AutoRegisterModule.m_hTalkHandle.longValue() != 0) { - AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); - talkDeviceTreeNode = null; - } - - // 停止拉流 - if(realplayHandle.longValue() != 0) { - AutoRegisterModule.stopRealPlay(realplayHandle); - realplayWindowPanel.repaint(); - - realplayChannelTreeNode = null; - } - - // 登出所有设备 - for(int i = 0; i < rootNode.getChildCount(); i++) { - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i); - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); - } - } - - // 停止服务 - AutoRegisterModule.stopServer(); - - LoginModule.cleanup(); // 关闭工程,释放资源 - dispose(); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - FunctionList demo = new FunctionList(); - demo.setVisible(true); - } - }); - } - }); - } - - /////////////////面板/////////////////// - // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 - private class DisConnect implements fDisConnect { - public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); - - for(int i = 0; i < rootNode.getChildCount(); i++) { - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i); - - // 根据设备IP判断断线设备 - if(pchDVRIP.equals(deviceTreeNode.getDeviceInfo().getDeviceIp()) - && nDVRPort == deviceTreeNode.getDeviceInfo().getDevicePort()) { - - synchronized (this) { - // 停止断线设备的对讲, 主动注册中,对讲要用同步,不能在另开的线程里停止对讲,否则会出现句柄无效的错误 - if(deviceTreeNode == talkDeviceTreeNode) { - AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); - - talkDeviceTreeNode = null; - } - - // 停止断线设备的拉流 - for(int j = 0; j < deviceTreeNode.getChildCount(); j++) { - ChannelTreeNode channelTreeNode = (ChannelTreeNode)deviceTreeNode.getChildAt(j); - if(channelTreeNode == realplayChannelTreeNode) { - AutoRegisterModule.stopRealPlay(realplayHandle); - realplayWindowPanel.repaint(); - - realplayChannelTreeNode = null; - - break; - } - } - - // 登出 - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); - } - - SwingUtilities.invokeLater(new DisConnectRunnable(deviceTreeNode)); - } - - break; - } - } - - } - } - - private class DisConnectRunnable implements Runnable { - DeviceTreeNode devicetTreeNode; - - public DisConnectRunnable(DeviceTreeNode devicetTreeNode) { - this.devicetTreeNode = devicetTreeNode; - } - - @Override - public void run() { - devicetTreeNode.setUserObject(devicetTreeNode.getDeviceInfo().getDevcieId()); - devicetTreeNode.removeAllChildren(); - - tree.updateUI(); - } - } - - private class AutoRegisterTreePanel extends JPanel { - /** - * - */ - private static final long serialVersionUID = 1L; - - public AutoRegisterTreePanel() { - setLayout(new BorderLayout()); - Dimension dimension = new Dimension(); - dimension.width = 210; - setPreferredSize(dimension); - - JPanel configPanel = new JPanel(); - JPanel deviceListPanel = new JPanel(); - - add(configPanel, BorderLayout.NORTH); - add(deviceListPanel, BorderLayout.CENTER); - - ////// 配置面板 //////// - configPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getOperate())); - configPanel.setPreferredSize(new Dimension(200, 55)); - configPanel.setLayout(new FlowLayout()); - - JButton configBtn = new JButton(Res.string().getDeviceConfig()); - configBtn.setPreferredSize(new Dimension(180, 21)); - - configPanel.add(configBtn); - - ////// 设备列表面板 /////// - deviceListPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getDeviceList())); - deviceListPanel.setLayout(new BorderLayout()); - - rootNode = new DefaultMutableTreeNode(); - treeModel = new DefaultTreeModel(rootNode); - tree = new JTree(treeModel); - - tree.setBackground(Color.LIGHT_GRAY); - tree.setForeground(Color.BLACK); - tree.setEditable(false); - tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); - tree.setRootVisible(false); - tree.expandPath(new TreePath(rootNode)); - tree.setShowsRootHandles(true); - - JScrollPane jScrollPane = new JScrollPane(tree); - deviceListPanel.add(jScrollPane, BorderLayout.CENTER); - - // 配置设备 - configBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - DeviceConfigDialog deviceConfigDialog = new DeviceConfigDialog(); - deviceConfigDialog.setVisible(true); - } - }); - - tree.addMouseListener(new MouseListener() { - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mousePressed(MouseEvent e) { - // 右键 - if(SwingUtilities.isRightMouseButton(e)) { - TreePath treePath = tree.getPathForLocation(e.getX(), e.getY()); - tree.setSelectionPath(treePath); - - showPopupMenu(e.getComponent(), e.getX(), e.getY()); - } - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseClicked(MouseEvent e) { - // 双击 - if(e.getClickCount() > 1) { - if(tree.getLastSelectedPathComponent() instanceof ChannelTreeNode) { - ChannelTreeNode channelTreeNode = (ChannelTreeNode)tree.getLastSelectedPathComponent(); - - if(channelTreeNode != realplayChannelTreeNode) { - startRealplay(); - } - } - } - } - }); - } - } - - /** - * 树的右键弹出菜单 - */ - @SuppressWarnings("static-access") - private void showPopupMenu( Component component, int x, int y) { - JPopupMenu popupMenu = new JPopupMenu(); - - JMenuItem logoutMenuItem = new JMenuItem(Res.string().getLogout()); - JMenuItem addDeviceMenuItem = new JMenuItem(Res.string().getAddDevice()); - JMenuItem modifyDeviceMenuItem = new JMenuItem(Res.string().getModifyDevice()); - JMenuItem deleteDeviceMenuItem = new JMenuItem(Res.string().getDeleteDevice()); - JMenuItem clearDeviceMenuItem = new JMenuItem(Res.string().getClearDevice()); - JMenuItem importDeviceMenuItem = new JMenuItem(Res.string().getImportDevice()); - JMenuItem exportDeviceMenuItem = new JMenuItem(Res.string().getExportDevice()); - JMenuItem realplayMenuItem = new JMenuItem(Res.string().getStartRealPlay()); - JMenuItem stopRealplayMenuItem = new JMenuItem(Res.string().getStopRealPlay()); - JMenuItem startTalkMenuItem = new JMenuItem(Res.string().getStartTalk()); - JMenuItem stopTalkMenuItem = new JMenuItem(Res.string().getStopTalk()); - JMenuItem captureMenuItem = new JMenuItem(Res.string().getRemoteCapture()); - - if(tree.getLastSelectedPathComponent() instanceof DeviceTreeNode) { // 右击设备节点 - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent(); - - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { // 登陆 - popupMenu.add(logoutMenuItem); - popupMenu.add(deleteDeviceMenuItem); - - if(deviceTreeNode == talkDeviceTreeNode) { // 对讲 - popupMenu.add(stopTalkMenuItem); - } else { // 停止对讲 - popupMenu.add(startTalkMenuItem); - } - } else { // 未登陆 - popupMenu.add(modifyDeviceMenuItem); - popupMenu.add(deleteDeviceMenuItem); - } - } else if(tree.getLastSelectedPathComponent() instanceof ChannelTreeNode) { // 右击通道节点 - ChannelTreeNode channelTreeNode = (ChannelTreeNode)tree.getLastSelectedPathComponent(); - - if(channelTreeNode == realplayChannelTreeNode) { // 拉流 - popupMenu.add(stopRealplayMenuItem); - } else { // 未拉流 - popupMenu.add(realplayMenuItem); - } - - popupMenu.add(captureMenuItem); - } else { // 右键空白区域 - popupMenu.add(addDeviceMenuItem); - popupMenu.add(clearDeviceMenuItem); - popupMenu.add(importDeviceMenuItem); - popupMenu.add(exportDeviceMenuItem); - - logoutBtn.setEnabled(false); - modifyDeviceBtn.setEnabled(false); - deleteDeviceBtn.setEnabled(false); - startRealPlayBtn.setEnabled(false); - stopRealPlayBtn.setEnabled(false); - startTalkBtn.setEnabled(false); - stopTalkBtn.setEnabled(false); - captureBtn.setEnabled(false); - } - - popupMenu.setDefaultLightWeightPopupEnabled(false); - popupMenu.show(component, x, y); - - // 登出 - logoutMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - logout(); - } - }); - } - }); - - // 添加设备 - addDeviceMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - addDevice(); - } - }); - - // 修改设备 - modifyDeviceMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - modifyDevice(); - } - }); - - // 删除设备 - deleteDeviceMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - deleteDevice(); - } - }); - - // 清空设备 - clearDeviceMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - clearDevice(); - } - }); - - // 导入设备 - importDeviceMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - importDevice(); - } - }); - - // 导出设备 - exportDeviceMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - exportDevice(); - } - }); - - // 开始预览 - realplayMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - startRealplay(); - } - }); - } - }); - - // 停止预览 - stopRealplayMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - stopRealplay(); - } - }); - } - }); - - // 开始对讲 - startTalkMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - startTalk(); - } - }); - } - }); - - // 停止对讲 - stopTalkMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - stopTalk(); - } - }); - } - }); - - // 远程抓图 - captureMenuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - capture(); - } - }); - } - - /** - * 实时预览面板 - */ - private class RealPlayPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public RealPlayPanel() { - BorderEx.set(this, "", 0); - setLayout(new BorderLayout()); - - JPanel realplayPanel = new JPanel(); - JPanel picPanel = new JPanel(); - - add(realplayPanel, BorderLayout.NORTH); - add(picPanel, BorderLayout.CENTER); - - // 实时预览面板 - realplayPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getRealplay())); - Dimension dimension = new Dimension(); - dimension.height = 250; - realplayPanel.setPreferredSize(dimension); - realplayPanel.setLayout(new BorderLayout()); - - realplayWindowPanel = new Panel(); - realplayWindowPanel.setBackground(Color.GRAY); - realplayPanel.add(realplayWindowPanel, BorderLayout.CENTER); - - // 抓图面板 - picPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getCapturePicture())); - picPanel.setLayout(new BorderLayout()); - - capturePanel = new PaintPanel(); - - picPanel.add(capturePanel, BorderLayout.CENTER); - } - } - - /** - * 监听和设备管理面板 - */ - private class ListenDeviceManagerPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public ListenDeviceManagerPanel() { - setLayout(new BorderLayout()); - Dimension dimension = new Dimension(); - dimension.width = 230; - setPreferredSize(dimension); - - JPanel listenPanel = new JPanel(); - JPanel deviceManagerPanel = new JPanel(); - JPanel functionOperatePanel = new JPanel(); - - add(listenPanel, BorderLayout.NORTH); - add(deviceManagerPanel, BorderLayout.CENTER); - add(functionOperatePanel, BorderLayout.SOUTH); - - ///// 监听面板 ///// - listenPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getAutoRegisterListen())); - listenPanel.setPreferredSize(new Dimension(200, 110)); - listenPanel.setLayout(new FlowLayout()); - - JLabel ipLabel = new JLabel(Res.string().getRegisterAddress(), JLabel.CENTER); - JLabel portLabel = new JLabel(Res.string().getRegisterPort(), JLabel.CENTER); - - ipLabel.setPreferredSize(new Dimension(100, 21)); - portLabel.setPreferredSize(new Dimension(100, 21)); - - ipTextField = new JTextField(new Utils().getHostAddress()); - portTextField = new JTextField("9500"); - - ipTextField.setPreferredSize(new Dimension(100, 21)); - portTextField.setPreferredSize(new Dimension(100, 21)); - - startListenBtn = new JButton(Res.string().getStartListen()); - stopListenBtn = new JButton(Res.string().getStopListen()); - - startListenBtn.setPreferredSize(new Dimension(105, 21)); - stopListenBtn.setPreferredSize(new Dimension(100, 21)); - stopListenBtn.setEnabled(false); - - listenPanel.add(ipLabel); - listenPanel.add(ipTextField); - listenPanel.add(portLabel); - listenPanel.add(portTextField); - listenPanel.add(startListenBtn); - listenPanel.add(stopListenBtn); - - ///// 设备管理 //////// - deviceManagerPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getDeviceManager())); - deviceManagerPanel.setLayout(new FlowLayout()); - - logoutBtn = new JButton(Res.string().getLogout()); - addDeviceBtn = new JButton(Res.string().getAddDevice()); - modifyDeviceBtn = new JButton(Res.string().getModifyDevice()); - deleteDeviceBtn = new JButton(Res.string().getDeleteDevice()); - clearDeviceBtn = new JButton(Res.string().getClearDevice()); - importDeviceBtn = new JButton(Res.string().getImportDevice()); - exportDeviceBtn = new JButton(Res.string().getExportDevice()); - - logoutBtn.setPreferredSize(new Dimension(210, 21)); - addDeviceBtn.setPreferredSize(new Dimension(210, 21)); - modifyDeviceBtn.setPreferredSize(new Dimension(210, 21)); - deleteDeviceBtn.setPreferredSize(new Dimension(210, 21)); - clearDeviceBtn.setPreferredSize(new Dimension(210, 21)); - importDeviceBtn.setPreferredSize(new Dimension(210, 21)); - exportDeviceBtn.setPreferredSize(new Dimension(210, 21)); - - logoutBtn.setEnabled(false); - modifyDeviceBtn.setEnabled(false); - deleteDeviceBtn.setEnabled(false); - - deviceManagerPanel.add(logoutBtn); - deviceManagerPanel.add(addDeviceBtn); - deviceManagerPanel.add(modifyDeviceBtn); - deviceManagerPanel.add(deleteDeviceBtn); - deviceManagerPanel.add(clearDeviceBtn); - deviceManagerPanel.add(importDeviceBtn); - deviceManagerPanel.add(exportDeviceBtn); - - ///// 基本操作 //////// - functionOperatePanel.setBorder(BorderFactory.createTitledBorder(Res.string().getFunctionOperate())); - functionOperatePanel.setLayout(new FlowLayout()); - Dimension dimension1 = new Dimension(); - dimension1.height = 160; - functionOperatePanel.setPreferredSize(dimension1); - - startRealPlayBtn = new JButton(Res.string().getStartRealPlay()); - stopRealPlayBtn = new JButton(Res.string().getStopRealPlay()); - startTalkBtn = new JButton(Res.string().getStartTalk()); - stopTalkBtn = new JButton(Res.string().getStopTalk()); - captureBtn = new JButton(Res.string().getRemoteCapture()); - - startRealPlayBtn.setPreferredSize(new Dimension(210, 21)); - stopRealPlayBtn.setPreferredSize(new Dimension(210, 21)); - startTalkBtn.setPreferredSize(new Dimension(210, 21)); - stopTalkBtn.setPreferredSize(new Dimension(210, 21)); - captureBtn.setPreferredSize(new Dimension(210, 21)); - - startRealPlayBtn.setEnabled(false); - stopRealPlayBtn.setEnabled(false); - startTalkBtn.setEnabled(false); - stopTalkBtn.setEnabled(false); - captureBtn.setEnabled(false); - - functionOperatePanel.add(startRealPlayBtn); - functionOperatePanel.add(stopRealPlayBtn); - functionOperatePanel.add(startTalkBtn); - functionOperatePanel.add(stopTalkBtn); - functionOperatePanel.add(captureBtn); - - // 开启监听服务 - startListenBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - if(ipTextField.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterAddress(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(portTextField.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterPort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(AutoRegisterModule.startServer(ipTextField.getText(), - Integer.parseInt(portTextField.getText()), - servicCallback)) { - startListenBtn.setEnabled(false); - stopListenBtn.setEnabled(true); - } - } - }); - - // 停止监听服务 - stopListenBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - if(AutoRegisterModule.stopServer()) { - startListenBtn.setEnabled(true); - stopListenBtn.setEnabled(false); - } - } - }); - - // 添加设备 - addDeviceBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - addDevice(); - } - }); - - // 修改设备 - modifyDeviceBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - modifyDevice(); - } - }); - - // 删除单个 - deleteDeviceBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - deleteDevice(); - } - }); - - // 清空设备 - clearDeviceBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - clearDevice(); - } - }); - - // 导入文件 - importDeviceBtn.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - importDevice(); - } - }); - - // 导出文件 - exportDeviceBtn.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - exportDevice(); - } - }); - - // 登出 - logoutBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - logout(); - } - }); - } - }); - - // 开始拉流 - startRealPlayBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - startRealplay(); - } - }); - } - }); - - // 停止拉流 - stopRealPlayBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - stopRealplay(); - } - }); - } - }); - - // 开始对讲 - startTalkBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - startTalk(); - } - }); - } - }); - - // 停止对讲 - stopTalkBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - stopTalk(); - } - }); - } - }); - - // 抓图 - captureBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - capture(); - } - }); - } - } - - /** - * 添加设备 - */ - private void addDevice() { - isExist = false; - - AddDeviceDialog addDeviceDialog = new AddDeviceDialog(); - - addDeviceDialog.addDeviceManagerListener(new DeviceManagerListener() { - @Override - public void onDeviceManager(String deviceId, String username, - String password) { - if(!deviceId.equals("")) { - // 最大支持导入100个 - if(rootNode.getChildCount() >= 100) { - JOptionPane.showMessageDialog(null, Res.string().getMaximumSupport(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - // 判断设备是否存在 - for(int i = 0; i < rootNode.getChildCount(); i++) { - DeviceTreeNode childNode = (DeviceTreeNode)rootNode.getChildAt(i); - - if(deviceId.equals(childNode.getDeviceInfo().getDevcieId())) { - isExist = true; - JOptionPane.showMessageDialog(null, Res.string().getAlreadyExisted(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - break; - } - } - - // 不存在,可以添加 - if(!isExist) { - DEVICE_INFO deviceInfo = new DEVICE_INFO(); - deviceInfo.setDevcieId(deviceId); - deviceInfo.setUsername(username); - deviceInfo.setPassword(password); - - DeviceTreeNode childNode = new DeviceTreeNode(); - childNode.setDeviceInfo(deviceInfo); - childNode.setUserObject(deviceId); - - rootNode.add(childNode); - - tree.expandPath(new TreePath(rootNode)); - tree.updateUI(); - tree.setCellRenderer(treeCellRender); - - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - } - } - }); - - addDeviceDialog.setVisible(true); - } - - /** - * 修改设备 - */ - private void modifyDevice() { - isExist = false; - - // 选中的设备节点 - final DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent(); - - if(deviceTreeNode == null) { - return; - } - - ModifyDeviceDialog modifyDeviceDialog = new ModifyDeviceDialog(deviceTreeNode.getDeviceInfo().devcieId, deviceTreeNode.getDeviceInfo().username, deviceTreeNode.getDeviceInfo().password); - - modifyDeviceDialog.addDeviceManagerListener(new DeviceManagerListener() { - @Override - public void onDeviceManager(String deviceId, String username, String password) { - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - JOptionPane.showMessageDialog(null, Res.string().getDeviceLogined(), Res.string().getErrorMessage(), JOptionPane.INFORMATION_MESSAGE); - return; - } - - if(!deviceId.equals("")) { - // 设备ID变化,循环检查,查看是否已存在。 设备ID不变,即修改用户名和密码 - if(!deviceId.equals(deviceTreeNode.getDeviceInfo().devcieId)) { - // 判断设备是否存在 - for(int i = 0; i < rootNode.getChildCount(); i++) { - DeviceTreeNode childNode = (DeviceTreeNode)rootNode.getChildAt(i); - - if(deviceId.equals(childNode.getDeviceInfo().getDevcieId())) { - isExist = true; - JOptionPane.showMessageDialog(null, Res.string().getAlreadyExisted(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - break; - } - } - } - - if(!isExist) { - // 修改信息 - deviceTreeNode.getDeviceInfo().setDevcieId(deviceId); - deviceTreeNode.getDeviceInfo().setUsername(username); - deviceTreeNode.getDeviceInfo().setPassword(password); - - deviceTreeNode.setUserObject(deviceId); - deviceTreeNode.removeAllChildren(); - - tree.updateUI(); - - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - } - } - }); - - modifyDeviceDialog.setVisible(true); - } - - /** - * 删除单个设备 - */ - private void deleteDevice() { - // 判断是否选中 - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent(); - - if(deviceTreeNode == null) { - return; - } - - // 停止当前登录设备的对讲 - if(deviceTreeNode == talkDeviceTreeNode) { - AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); - - talkDeviceTreeNode = null; - } - - // 停止当前登录设备的拉流 - for(int i = 0; i < deviceTreeNode.getChildCount(); i++) { - ChannelTreeNode channelTreeNode = (ChannelTreeNode)deviceTreeNode.getChildAt(i); - if(channelTreeNode == realplayChannelTreeNode) { - AutoRegisterModule.stopRealPlay(realplayHandle); - realplayWindowPanel.repaint(); - - realplayChannelTreeNode = null; - - break; - } - } - - // 登出 - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); - - logoutBtn.setEnabled(false); - modifyDeviceBtn.setEnabled(true); - } - - deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId()); - - treeModel.removeNodeFromParent(deviceTreeNode); - tree.updateUI(); - - modifyDeviceBtn.setEnabled(false); - deleteDeviceBtn.setEnabled(false); - } - - /** - * 清空设备 - */ - private void clearDevice() { - // 停止拉流 - if(realplayHandle.longValue() != 0) { - AutoRegisterModule.stopRealPlay(realplayHandle); - realplayWindowPanel.repaint(); - - realplayChannelTreeNode = null; - } - - // 停止对讲 - if(AutoRegisterModule.m_hTalkHandle.longValue() != 0) { - AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); - - talkDeviceTreeNode = null; - } - - // 登出所有设备 - for(int i = 0; i < rootNode.getChildCount(); i++) { - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i); - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); - } - } - - capturePanel.setOpaque(true); - capturePanel.repaint(); - - rootNode.removeAllChildren(); - tree.updateUI(); - - logoutBtn.setEnabled(false); - modifyDeviceBtn.setEnabled(false); - deleteDeviceBtn.setEnabled(false); - startRealPlayBtn.setEnabled(false); - stopRealPlayBtn.setEnabled(false); - startTalkBtn.setEnabled(false); - stopTalkBtn.setEnabled(false); - captureBtn.setEnabled(false); - } - - /** - * 导入文件 - */ - private void importDevice() { - jfc = new JFileChooser("./"); - jfc.setMultiSelectionEnabled(false); //不可以拖选多个文件 - jfc.setAcceptAllFileFilterUsed(false); //关掉显示所有 - jfc.setDialogTitle(Res.string().getImportDevice()); - - //添加过滤器 - jfc.addChoosableFileFilter(new FileFilter() { - public boolean accept(File f) { - if(f.getName().toLowerCase().endsWith("csv") - || f.isDirectory()) { - return true; - } - return false; - } - public String getDescription() { - return ".csv"; - } - }); - - if(jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { - String path = jfc.getSelectedFile().getAbsolutePath(); - - if(!path.endsWith("csv")) { - path += ".csv"; - } - importFile(path, "GB2312"); - } - } - - /** - * 导出文件 - */ - private void exportDevice() { - jfc = new JFileChooser("./"); - jfc.setMultiSelectionEnabled(false); //不可以拖选多个文件 - jfc.setAcceptAllFileFilterUsed(false); //关掉显示所有 - jfc.setDialogTitle(Res.string().getExportDevice()); - - //添加过滤器 - jfc.addChoosableFileFilter(new FileFilter() { - public boolean accept(File f) { - if(f.getName().toLowerCase().endsWith("csv") - || f.isDirectory()) { - return true; - } - return false; - } - public String getDescription() { - return ".csv"; - } - }); - - if(jfc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { - - String path = jfc.getSelectedFile().toString(); - if(!path.endsWith("csv")) { - path += ".csv"; - } - System.out.println(path); - File file = new File(path); - - if(file.exists()) { // 已存在文件 - int result = JOptionPane.showConfirmDialog(null, Res.string().getWhetherNoToCover(), Res.string().getPromptMessage(), JOptionPane.YES_NO_OPTION); - if(result == JOptionPane.YES_OPTION) { // 覆盖 - if(!file.renameTo(file)) { // 被使用 - JOptionPane.showMessageDialog(null, Res.string().getFileOpened(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } else { // 未被使用 - exportFile(file); - } - } - } else { // 新建文件 - exportFile(file); - } - } - } - - /** - * 登出设备功能 - */ - private void logout() { - // 选中的设备节点 - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent(); - - if(deviceTreeNode == null) { - return; - } - - // 停止当前登录设备的对讲 - if(deviceTreeNode == talkDeviceTreeNode) { - AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); - - talkDeviceTreeNode = null; - } - - // 停止当前登录设备的拉流 - for(int i = 0; i < deviceTreeNode.getChildCount(); i++) { - ChannelTreeNode channelTreeNode = (ChannelTreeNode)deviceTreeNode.getChildAt(i); - if(channelTreeNode == realplayChannelTreeNode) { - AutoRegisterModule.stopRealPlay(realplayHandle); - realplayWindowPanel.repaint(); - - realplayChannelTreeNode = null; - - break; - } - } - - // 登出 - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); - - logoutBtn.setEnabled(false); - modifyDeviceBtn.setEnabled(true); - } - - deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId()); - deviceTreeNode.removeAllChildren(); - - tree.updateUI(); - } - - /** - * 开始拉流功能 - */ - private void startRealplay() { - // 选中的通道节点 - ChannelTreeNode channelTreeNode = (ChannelTreeNode)tree.getLastSelectedPathComponent(); - - if(channelTreeNode == null) { - return; - } - - // 通道节点对应的设备节点 - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)channelTreeNode.getParent(); - - // 判断所有设备有没有拉流 - if(realplayHandle.longValue() != 0) { - AutoRegisterModule.stopRealPlay(realplayHandle); - realplayWindowPanel.repaint(); - - realplayChannelTreeNode = null; - } - - // 选中通道拉流 - realplayHandle = AutoRegisterModule.startRealPlay(deviceTreeNode.getDeviceInfo().getLoginHandle(), channelTreeNode.getChn() - 1, 0, realplayWindowPanel); - - if(realplayHandle.longValue() != 0) { - startRealPlayBtn.setEnabled(false); - stopRealPlayBtn.setEnabled(true); - - realplayChannelTreeNode = channelTreeNode; - } else { - JOptionPane.showMessageDialog(null, Res.string().getRealplay() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - tree.updateUI(); - } - - /** - * 停止拉流功能 - */ - private void stopRealplay() { - if(realplayHandle.longValue() != 0) { - AutoRegisterModule.stopRealPlay(realplayHandle); - realplayWindowPanel.repaint(); - - realplayChannelTreeNode = null; - - startRealPlayBtn.setEnabled(true); - stopRealPlayBtn.setEnabled(false); - } - tree.updateUI(); - } - - /** - * 开始对讲 - */ - private void startTalk() { - // 选中的设备节点 - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent(); - - if(deviceTreeNode == null) { - return; - } - - // 判断所有设备有没有对讲 - if(AutoRegisterModule.m_hTalkHandle.longValue() != 0) { - AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); - - talkDeviceTreeNode = null; - } - - // 选中设备对讲 - if(AutoRegisterModule.startTalk(deviceTreeNode.getDeviceInfo().getLoginHandle())) { - startTalkBtn.setEnabled(false); - stopTalkBtn.setEnabled(true); - - talkDeviceTreeNode = deviceTreeNode; - } else { - JOptionPane.showMessageDialog(null, Res.string().getTalk() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - tree.updateUI(); - } - - /** - * 停止对讲 - */ - private void stopTalk() { - // 判断设备的通道有没有对讲 - if(AutoRegisterModule.m_hTalkHandle.longValue() != 0) { - AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); - - talkDeviceTreeNode = null; - - startTalkBtn.setEnabled(true); - stopTalkBtn.setEnabled(false); - } - - tree.updateUI(); - } - - /** - * 抓图功能 - */ - private void capture() { - // 选中的通道节点 - ChannelTreeNode channelTreeNode = (ChannelTreeNode)tree.getLastSelectedPathComponent(); - - if(channelTreeNode == null) { - return; - } - - // 通道节点对应的设备节点 - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)channelTreeNode.getParent(); - - AutoRegisterModule.snapPicture(deviceTreeNode.getDeviceInfo().getLoginHandle(), channelTreeNode.getChn() - 1); - } - - /** - * 侦听服务器回调函数 - */ - public class ServiceCB implements fServiceCallBack { - @Override - public int invoke(LLong lHandle, final String pIp, final int wPort, - int lCommand, Pointer pParam, int dwParamLen, - Pointer dwUserData) { - - // 将 pParam 转化为序列号 - byte[] buffer = new byte[dwParamLen]; - pParam.read(0, buffer, 0, dwParamLen); - String deviceId = ""; - try { - deviceId = new String(buffer, "GBK").trim(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - System.out.printf("Register Device Info [Device address %s][port %s][DeviceID %s] \n", pIp, wPort, deviceId); - switch(lCommand) { - case EM_LISTEN_TYPE.NET_DVR_DISCONNECT: { // 验证期间设备断线回调 - for(int i = 0; i < rootNode.getChildCount(); i++) { - if(deviceId.equals(((DeviceTreeNode)rootNode.getChildAt(i)).getDeviceInfo().getDevcieId())) { - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i); - - deviceTreeNode.getDeviceInfo().setDeviceIp(""); - deviceTreeNode.getDeviceInfo().setDevicePort(0); - - break; - } - } - - break; - } - case EM_LISTEN_TYPE.NET_DVR_SERIAL_RETURN: { // 设备注册携带序列号 - for(int i = 0; i < rootNode.getChildCount(); i++) { - if(deviceId.equals(((DeviceTreeNode)rootNode.getChildAt(i)).getDeviceInfo().getDevcieId())) { - final DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i); - - deviceTreeNode.getDeviceInfo().setDeviceIp(pIp); - deviceTreeNode.getDeviceInfo().setDevicePort(wPort); - - try { - Thread.sleep(20); - } catch (InterruptedException e1) { - e1.printStackTrace(); - } - - new SwingWorker() { - @Override - protected LLong doInBackground() { - return login(deviceTreeNode); - } - - @Override - protected void done() { - try { - if(get() == null) { - return; - } - - if(get().longValue() != 0) { + e.printStackTrace(); + } + + // 注册列表面板 + AutoRegisterTreePanel autoRegisterTreePanel = new AutoRegisterTreePanel(); + + // 实时预览面板 + RealPlayPanel realplayPanel = new RealPlayPanel(); + + // 监听和设备管理面板 + ListenDeviceManagerPanel listenDeviceManagerPanel = new ListenDeviceManagerPanel(); + + add(autoRegisterTreePanel, BorderLayout.WEST); + add(realplayPanel, BorderLayout.CENTER); + add(listenDeviceManagerPanel, BorderLayout.EAST); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + // 停止对讲 + if (AutoRegisterModule.m_hTalkHandle.longValue() != 0) { + AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); + talkDeviceTreeNode = null; + } + + // 停止拉流 + if (realplayHandle.longValue() != 0) { + AutoRegisterModule.stopRealPlay(realplayHandle); + realplayWindowPanel.repaint(); + + realplayChannelTreeNode = null; + } + + // 登出所有设备 + for (int i = 0; i < rootNode.getChildCount(); i++) { + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) rootNode.getChildAt(i); + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); + } + } + + // 停止服务 + AutoRegisterModule.stopServer(); + + LoginModule.cleanup(); // 关闭工程,释放资源 + dispose(); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + FunctionList demo = new FunctionList(); + demo.setVisible(true); + } + }); + } + }); + } + + /////////////////面板/////////////////// + // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 + private class DisConnect implements fDisConnect { + public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); + + for (int i = 0; i < rootNode.getChildCount(); i++) { + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) rootNode.getChildAt(i); + + // 根据设备IP判断断线设备 + if (pchDVRIP.equals(deviceTreeNode.getDeviceInfo().getDeviceIp()) + && nDVRPort == deviceTreeNode.getDeviceInfo().getDevicePort()) { + + synchronized (this) { + // 停止断线设备的对讲, 主动注册中,对讲要用同步,不能在另开的线程里停止对讲,否则会出现句柄无效的错误 + if (deviceTreeNode == talkDeviceTreeNode) { + AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); + + talkDeviceTreeNode = null; + } + + // 停止断线设备的拉流 + for (int j = 0; j < deviceTreeNode.getChildCount(); j++) { + ChannelTreeNode channelTreeNode = (ChannelTreeNode) deviceTreeNode.getChildAt(j); + if (channelTreeNode == realplayChannelTreeNode) { + AutoRegisterModule.stopRealPlay(realplayHandle); + realplayWindowPanel.repaint(); + + realplayChannelTreeNode = null; + + break; + } + } + + // 登出 + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); + } + + SwingUtilities.invokeLater(new DisConnectRunnable(deviceTreeNode)); + } + + break; + } + } + + } + } + + private class DisConnectRunnable implements Runnable { + DeviceTreeNode devicetTreeNode; + + public DisConnectRunnable(DeviceTreeNode devicetTreeNode) { + this.devicetTreeNode = devicetTreeNode; + } + + @Override + public void run() { + devicetTreeNode.setUserObject(devicetTreeNode.getDeviceInfo().getDevcieId()); + devicetTreeNode.removeAllChildren(); + + tree.updateUI(); + } + } + + private class AutoRegisterTreePanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + + public AutoRegisterTreePanel() { + setLayout(new BorderLayout()); + Dimension dimension = new Dimension(); + dimension.width = 210; + setPreferredSize(dimension); + + JPanel configPanel = new JPanel(); + JPanel deviceListPanel = new JPanel(); + + add(configPanel, BorderLayout.NORTH); + add(deviceListPanel, BorderLayout.CENTER); + + ////// 配置面板 //////// + configPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getOperate())); + configPanel.setPreferredSize(new Dimension(200, 55)); + configPanel.setLayout(new FlowLayout()); + + JButton configBtn = new JButton(Res.string().getDeviceConfig()); + configBtn.setPreferredSize(new Dimension(180, 21)); + + configPanel.add(configBtn); + + ////// 设备列表面板 /////// + deviceListPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getDeviceList())); + deviceListPanel.setLayout(new BorderLayout()); + + rootNode = new DefaultMutableTreeNode(); + treeModel = new DefaultTreeModel(rootNode); + tree = new JTree(treeModel); + + tree.setBackground(Color.LIGHT_GRAY); + tree.setForeground(Color.BLACK); + tree.setEditable(false); + tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); + tree.setRootVisible(false); + tree.expandPath(new TreePath(rootNode)); + tree.setShowsRootHandles(true); + + JScrollPane jScrollPane = new JScrollPane(tree); + deviceListPanel.add(jScrollPane, BorderLayout.CENTER); + + // 配置设备 + configBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + DeviceConfigDialog deviceConfigDialog = new DeviceConfigDialog(); + deviceConfigDialog.setVisible(true); + } + }); + + tree.addMouseListener(new MouseListener() { + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + // 右键 + if (SwingUtilities.isRightMouseButton(e)) { + TreePath treePath = tree.getPathForLocation(e.getX(), e.getY()); + tree.setSelectionPath(treePath); + + showPopupMenu(e.getComponent(), e.getX(), e.getY()); + } + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseClicked(MouseEvent e) { + // 双击 + if (e.getClickCount() > 1) { + if (tree.getLastSelectedPathComponent() instanceof ChannelTreeNode) { + ChannelTreeNode channelTreeNode = (ChannelTreeNode) tree.getLastSelectedPathComponent(); + + if (channelTreeNode != realplayChannelTreeNode) { + startRealplay(); + } + } + } + } + }); + } + } + + /** + * 树的右键弹出菜单 + */ + @SuppressWarnings("static-access") + private void showPopupMenu(Component component, int x, int y) { + JPopupMenu popupMenu = new JPopupMenu(); + + JMenuItem logoutMenuItem = new JMenuItem(Res.string().getLogout()); + JMenuItem addDeviceMenuItem = new JMenuItem(Res.string().getAddDevice()); + JMenuItem modifyDeviceMenuItem = new JMenuItem(Res.string().getModifyDevice()); + JMenuItem deleteDeviceMenuItem = new JMenuItem(Res.string().getDeleteDevice()); + JMenuItem clearDeviceMenuItem = new JMenuItem(Res.string().getClearDevice()); + JMenuItem importDeviceMenuItem = new JMenuItem(Res.string().getImportDevice()); + JMenuItem exportDeviceMenuItem = new JMenuItem(Res.string().getExportDevice()); + JMenuItem realplayMenuItem = new JMenuItem(Res.string().getStartRealPlay()); + JMenuItem stopRealplayMenuItem = new JMenuItem(Res.string().getStopRealPlay()); + JMenuItem startTalkMenuItem = new JMenuItem(Res.string().getStartTalk()); + JMenuItem stopTalkMenuItem = new JMenuItem(Res.string().getStopTalk()); + JMenuItem captureMenuItem = new JMenuItem(Res.string().getRemoteCapture()); + + if (tree.getLastSelectedPathComponent() instanceof DeviceTreeNode) { // 右击设备节点 + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) tree.getLastSelectedPathComponent(); + + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { // 登陆 + popupMenu.add(logoutMenuItem); + popupMenu.add(deleteDeviceMenuItem); + + if (deviceTreeNode == talkDeviceTreeNode) { // 对讲 + popupMenu.add(stopTalkMenuItem); + } else { // 停止对讲 + popupMenu.add(startTalkMenuItem); + } + } else { // 未登陆 + popupMenu.add(modifyDeviceMenuItem); + popupMenu.add(deleteDeviceMenuItem); + } + } else if (tree.getLastSelectedPathComponent() instanceof ChannelTreeNode) { // 右击通道节点 + ChannelTreeNode channelTreeNode = (ChannelTreeNode) tree.getLastSelectedPathComponent(); + + if (channelTreeNode == realplayChannelTreeNode) { // 拉流 + popupMenu.add(stopRealplayMenuItem); + } else { // 未拉流 + popupMenu.add(realplayMenuItem); + } + + popupMenu.add(captureMenuItem); + } else { // 右键空白区域 + popupMenu.add(addDeviceMenuItem); + popupMenu.add(clearDeviceMenuItem); + popupMenu.add(importDeviceMenuItem); + popupMenu.add(exportDeviceMenuItem); + + logoutBtn.setEnabled(false); + modifyDeviceBtn.setEnabled(false); + deleteDeviceBtn.setEnabled(false); + startRealPlayBtn.setEnabled(false); + stopRealPlayBtn.setEnabled(false); + startTalkBtn.setEnabled(false); + stopTalkBtn.setEnabled(false); + captureBtn.setEnabled(false); + } + + popupMenu.setDefaultLightWeightPopupEnabled(false); + popupMenu.show(component, x, y); + + // 登出 + logoutMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + logout(); + } + }); + } + }); + + // 添加设备 + addDeviceMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + addDevice(); + } + }); + + // 修改设备 + modifyDeviceMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + modifyDevice(); + } + }); + + // 删除设备 + deleteDeviceMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + deleteDevice(); + } + }); + + // 清空设备 + clearDeviceMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + clearDevice(); + } + }); + + // 导入设备 + importDeviceMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + importDevice(); + } + }); + + // 导出设备 + exportDeviceMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + exportDevice(); + } + }); + + // 开始预览 + realplayMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + startRealplay(); + } + }); + } + }); + + // 停止预览 + stopRealplayMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + stopRealplay(); + } + }); + } + }); + + // 开始对讲 + startTalkMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + startTalk(); + } + }); + } + }); + + // 停止对讲 + stopTalkMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + stopTalk(); + } + }); + } + }); + + // 远程抓图 + captureMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + capture(); + } + }); + } + + /** + * 实时预览面板 + */ + private class RealPlayPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public RealPlayPanel() { + BorderEx.set(this, "", 0); + setLayout(new BorderLayout()); + + JPanel realplayPanel = new JPanel(); + JPanel picPanel = new JPanel(); + + add(realplayPanel, BorderLayout.NORTH); + add(picPanel, BorderLayout.CENTER); + + // 实时预览面板 + realplayPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getRealplay())); + Dimension dimension = new Dimension(); + dimension.height = 250; + realplayPanel.setPreferredSize(dimension); + realplayPanel.setLayout(new BorderLayout()); + + realplayWindowPanel = new Panel(); + realplayWindowPanel.setBackground(Color.GRAY); + realplayPanel.add(realplayWindowPanel, BorderLayout.CENTER); + + // 抓图面板 + picPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getCapturePicture())); + picPanel.setLayout(new BorderLayout()); + + capturePanel = new PaintPanel(); + + picPanel.add(capturePanel, BorderLayout.CENTER); + } + } + + /** + * 监听和设备管理面板 + */ + private class ListenDeviceManagerPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public ListenDeviceManagerPanel() { + setLayout(new BorderLayout()); + Dimension dimension = new Dimension(); + dimension.width = 230; + setPreferredSize(dimension); + + JPanel listenPanel = new JPanel(); + JPanel deviceManagerPanel = new JPanel(); + JPanel functionOperatePanel = new JPanel(); + + add(listenPanel, BorderLayout.NORTH); + add(deviceManagerPanel, BorderLayout.CENTER); + add(functionOperatePanel, BorderLayout.SOUTH); + + ///// 监听面板 ///// + listenPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getAutoRegisterListen())); + listenPanel.setPreferredSize(new Dimension(200, 110)); + listenPanel.setLayout(new FlowLayout()); + + JLabel ipLabel = new JLabel(Res.string().getRegisterAddress(), JLabel.CENTER); + JLabel portLabel = new JLabel(Res.string().getRegisterPort(), JLabel.CENTER); + + ipLabel.setPreferredSize(new Dimension(100, 21)); + portLabel.setPreferredSize(new Dimension(100, 21)); + + ipTextField = new JTextField(new Utils().getHostAddress()); + portTextField = new JTextField("9500"); + + ipTextField.setPreferredSize(new Dimension(100, 21)); + portTextField.setPreferredSize(new Dimension(100, 21)); + + startListenBtn = new JButton(Res.string().getStartListen()); + stopListenBtn = new JButton(Res.string().getStopListen()); + + startListenBtn.setPreferredSize(new Dimension(105, 21)); + stopListenBtn.setPreferredSize(new Dimension(100, 21)); + stopListenBtn.setEnabled(false); + + listenPanel.add(ipLabel); + listenPanel.add(ipTextField); + listenPanel.add(portLabel); + listenPanel.add(portTextField); + listenPanel.add(startListenBtn); + listenPanel.add(stopListenBtn); + + ///// 设备管理 //////// + deviceManagerPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getDeviceManager())); + deviceManagerPanel.setLayout(new FlowLayout()); + + logoutBtn = new JButton(Res.string().getLogout()); + addDeviceBtn = new JButton(Res.string().getAddDevice()); + modifyDeviceBtn = new JButton(Res.string().getModifyDevice()); + deleteDeviceBtn = new JButton(Res.string().getDeleteDevice()); + clearDeviceBtn = new JButton(Res.string().getClearDevice()); + importDeviceBtn = new JButton(Res.string().getImportDevice()); + exportDeviceBtn = new JButton(Res.string().getExportDevice()); + + logoutBtn.setPreferredSize(new Dimension(210, 21)); + addDeviceBtn.setPreferredSize(new Dimension(210, 21)); + modifyDeviceBtn.setPreferredSize(new Dimension(210, 21)); + deleteDeviceBtn.setPreferredSize(new Dimension(210, 21)); + clearDeviceBtn.setPreferredSize(new Dimension(210, 21)); + importDeviceBtn.setPreferredSize(new Dimension(210, 21)); + exportDeviceBtn.setPreferredSize(new Dimension(210, 21)); + + logoutBtn.setEnabled(false); + modifyDeviceBtn.setEnabled(false); + deleteDeviceBtn.setEnabled(false); + + deviceManagerPanel.add(logoutBtn); + deviceManagerPanel.add(addDeviceBtn); + deviceManagerPanel.add(modifyDeviceBtn); + deviceManagerPanel.add(deleteDeviceBtn); + deviceManagerPanel.add(clearDeviceBtn); + deviceManagerPanel.add(importDeviceBtn); + deviceManagerPanel.add(exportDeviceBtn); + + ///// 基本操作 //////// + functionOperatePanel.setBorder(BorderFactory.createTitledBorder(Res.string().getFunctionOperate())); + functionOperatePanel.setLayout(new FlowLayout()); + Dimension dimension1 = new Dimension(); + dimension1.height = 160; + functionOperatePanel.setPreferredSize(dimension1); + + startRealPlayBtn = new JButton(Res.string().getStartRealPlay()); + stopRealPlayBtn = new JButton(Res.string().getStopRealPlay()); + startTalkBtn = new JButton(Res.string().getStartTalk()); + stopTalkBtn = new JButton(Res.string().getStopTalk()); + captureBtn = new JButton(Res.string().getRemoteCapture()); + + startRealPlayBtn.setPreferredSize(new Dimension(210, 21)); + stopRealPlayBtn.setPreferredSize(new Dimension(210, 21)); + startTalkBtn.setPreferredSize(new Dimension(210, 21)); + stopTalkBtn.setPreferredSize(new Dimension(210, 21)); + captureBtn.setPreferredSize(new Dimension(210, 21)); + + startRealPlayBtn.setEnabled(false); + stopRealPlayBtn.setEnabled(false); + startTalkBtn.setEnabled(false); + stopTalkBtn.setEnabled(false); + captureBtn.setEnabled(false); + + functionOperatePanel.add(startRealPlayBtn); + functionOperatePanel.add(stopRealPlayBtn); + functionOperatePanel.add(startTalkBtn); + functionOperatePanel.add(stopTalkBtn); + functionOperatePanel.add(captureBtn); + + // 开启监听服务 + startListenBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + if (ipTextField.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterAddress(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (portTextField.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterPort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (AutoRegisterModule.startServer(ipTextField.getText(), + Integer.parseInt(portTextField.getText()), + servicCallback)) { + startListenBtn.setEnabled(false); + stopListenBtn.setEnabled(true); + } + } + }); + + // 停止监听服务 + stopListenBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + if (AutoRegisterModule.stopServer()) { + startListenBtn.setEnabled(true); + stopListenBtn.setEnabled(false); + } + } + }); + + // 添加设备 + addDeviceBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + addDevice(); + } + }); + + // 修改设备 + modifyDeviceBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + modifyDevice(); + } + }); + + // 删除单个 + deleteDeviceBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + deleteDevice(); + } + }); + + // 清空设备 + clearDeviceBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + clearDevice(); + } + }); + + // 导入文件 + importDeviceBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + importDevice(); + } + }); + + // 导出文件 + exportDeviceBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + exportDevice(); + } + }); + + // 登出 + logoutBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + logout(); + } + }); + } + }); + + // 开始拉流 + startRealPlayBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + startRealplay(); + } + }); + } + }); + + // 停止拉流 + stopRealPlayBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + stopRealplay(); + } + }); + } + }); + + // 开始对讲 + startTalkBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + startTalk(); + } + }); + } + }); + + // 停止对讲 + stopTalkBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + stopTalk(); + } + }); + } + }); + + // 抓图 + captureBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + capture(); + } + }); + } + } + + /** + * 添加设备 + */ + private void addDevice() { + isExist = false; + + AddDeviceDialog addDeviceDialog = new AddDeviceDialog(); + + addDeviceDialog.addDeviceManagerListener(new DeviceManagerListener() { + @Override + public void onDeviceManager(String deviceId, String username, + String password) { + if (!deviceId.equals("")) { + // 最大支持导入100个 + if (rootNode.getChildCount() >= 100) { + JOptionPane.showMessageDialog(null, Res.string().getMaximumSupport(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + // 判断设备是否存在 + for (int i = 0; i < rootNode.getChildCount(); i++) { + DeviceTreeNode childNode = (DeviceTreeNode) rootNode.getChildAt(i); + + if (deviceId.equals(childNode.getDeviceInfo().getDevcieId())) { + isExist = true; + JOptionPane.showMessageDialog(null, Res.string().getAlreadyExisted(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + break; + } + } + + // 不存在,可以添加 + if (!isExist) { + DEVICE_INFO deviceInfo = new DEVICE_INFO(); + deviceInfo.setDevcieId(deviceId); + deviceInfo.setUsername(username); + deviceInfo.setPassword(password); + + DeviceTreeNode childNode = new DeviceTreeNode(); + childNode.setDeviceInfo(deviceInfo); + childNode.setUserObject(deviceId); + + rootNode.add(childNode); + + tree.expandPath(new TreePath(rootNode)); + tree.updateUI(); + tree.setCellRenderer(treeCellRender); + + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + } + } + }); + + addDeviceDialog.setVisible(true); + } + + /** + * 修改设备 + */ + private void modifyDevice() { + isExist = false; + + // 选中的设备节点 + final DeviceTreeNode deviceTreeNode = (DeviceTreeNode) tree.getLastSelectedPathComponent(); + + if (deviceTreeNode == null) { + return; + } + + ModifyDeviceDialog modifyDeviceDialog = new ModifyDeviceDialog(deviceTreeNode.getDeviceInfo().devcieId, deviceTreeNode.getDeviceInfo().username, deviceTreeNode.getDeviceInfo().password); + + modifyDeviceDialog.addDeviceManagerListener(new DeviceManagerListener() { + @Override + public void onDeviceManager(String deviceId, String username, String password) { + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + JOptionPane.showMessageDialog(null, Res.string().getDeviceLogined(), Res.string().getErrorMessage(), JOptionPane.INFORMATION_MESSAGE); + return; + } + + if (!deviceId.equals("")) { + // 设备ID变化,循环检查,查看是否已存在。 设备ID不变,即修改用户名和密码 + if (!deviceId.equals(deviceTreeNode.getDeviceInfo().devcieId)) { + // 判断设备是否存在 + for (int i = 0; i < rootNode.getChildCount(); i++) { + DeviceTreeNode childNode = (DeviceTreeNode) rootNode.getChildAt(i); + + if (deviceId.equals(childNode.getDeviceInfo().getDevcieId())) { + isExist = true; + JOptionPane.showMessageDialog(null, Res.string().getAlreadyExisted(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + break; + } + } + } + + if (!isExist) { + // 修改信息 + deviceTreeNode.getDeviceInfo().setDevcieId(deviceId); + deviceTreeNode.getDeviceInfo().setUsername(username); + deviceTreeNode.getDeviceInfo().setPassword(password); + + deviceTreeNode.setUserObject(deviceId); + deviceTreeNode.removeAllChildren(); + + tree.updateUI(); + + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + } + } + }); + + modifyDeviceDialog.setVisible(true); + } + + /** + * 删除单个设备 + */ + private void deleteDevice() { + // 判断是否选中 + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) tree.getLastSelectedPathComponent(); + + if (deviceTreeNode == null) { + return; + } + + // 停止当前登录设备的对讲 + if (deviceTreeNode == talkDeviceTreeNode) { + AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); + + talkDeviceTreeNode = null; + } + + // 停止当前登录设备的拉流 + for (int i = 0; i < deviceTreeNode.getChildCount(); i++) { + ChannelTreeNode channelTreeNode = (ChannelTreeNode) deviceTreeNode.getChildAt(i); + if (channelTreeNode == realplayChannelTreeNode) { + AutoRegisterModule.stopRealPlay(realplayHandle); + realplayWindowPanel.repaint(); + + realplayChannelTreeNode = null; + + break; + } + } + + // 登出 + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); + + logoutBtn.setEnabled(false); + modifyDeviceBtn.setEnabled(true); + } + + deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId()); + + treeModel.removeNodeFromParent(deviceTreeNode); + tree.updateUI(); + + modifyDeviceBtn.setEnabled(false); + deleteDeviceBtn.setEnabled(false); + } + + /** + * 清空设备 + */ + private void clearDevice() { + // 停止拉流 + if (realplayHandle.longValue() != 0) { + AutoRegisterModule.stopRealPlay(realplayHandle); + realplayWindowPanel.repaint(); + + realplayChannelTreeNode = null; + } + + // 停止对讲 + if (AutoRegisterModule.m_hTalkHandle.longValue() != 0) { + AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); + + talkDeviceTreeNode = null; + } + + // 登出所有设备 + for (int i = 0; i < rootNode.getChildCount(); i++) { + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) rootNode.getChildAt(i); + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); + } + } + + capturePanel.setOpaque(true); + capturePanel.repaint(); + + rootNode.removeAllChildren(); + tree.updateUI(); + + logoutBtn.setEnabled(false); + modifyDeviceBtn.setEnabled(false); + deleteDeviceBtn.setEnabled(false); + startRealPlayBtn.setEnabled(false); + stopRealPlayBtn.setEnabled(false); + startTalkBtn.setEnabled(false); + stopTalkBtn.setEnabled(false); + captureBtn.setEnabled(false); + } + + /** + * 导入文件 + */ + private void importDevice() { + jfc = new JFileChooser("./"); + jfc.setMultiSelectionEnabled(false); //不可以拖选多个文件 + jfc.setAcceptAllFileFilterUsed(false); //关掉显示所有 + jfc.setDialogTitle(Res.string().getImportDevice()); + + //添加过滤器 + jfc.addChoosableFileFilter(new FileFilter() { + public boolean accept(File f) { + if (f.getName().toLowerCase().endsWith("csv") + || f.isDirectory()) { + return true; + } + return false; + } + + public String getDescription() { + return ".csv"; + } + }); + + if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { + String path = jfc.getSelectedFile().getAbsolutePath(); + + if (!path.endsWith("csv")) { + path += ".csv"; + } + importFile(path, "GB2312"); + } + } + + /** + * 导出文件 + */ + private void exportDevice() { + jfc = new JFileChooser("./"); + jfc.setMultiSelectionEnabled(false); //不可以拖选多个文件 + jfc.setAcceptAllFileFilterUsed(false); //关掉显示所有 + jfc.setDialogTitle(Res.string().getExportDevice()); + + //添加过滤器 + jfc.addChoosableFileFilter(new FileFilter() { + public boolean accept(File f) { + if (f.getName().toLowerCase().endsWith("csv") + || f.isDirectory()) { + return true; + } + return false; + } + + public String getDescription() { + return ".csv"; + } + }); + + if (jfc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { + + String path = jfc.getSelectedFile().toString(); + if (!path.endsWith("csv")) { + path += ".csv"; + } + System.out.println(path); + File file = new File(path); + + if (file.exists()) { // 已存在文件 + int result = JOptionPane.showConfirmDialog(null, Res.string().getWhetherNoToCover(), Res.string().getPromptMessage(), JOptionPane.YES_NO_OPTION); + if (result == JOptionPane.YES_OPTION) { // 覆盖 + if (!file.renameTo(file)) { // 被使用 + JOptionPane.showMessageDialog(null, Res.string().getFileOpened(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { // 未被使用 + exportFile(file); + } + } + } else { // 新建文件 + exportFile(file); + } + } + } + + /** + * 登出设备功能 + */ + private void logout() { + // 选中的设备节点 + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) tree.getLastSelectedPathComponent(); + + if (deviceTreeNode == null) { + return; + } + + // 停止当前登录设备的对讲 + if (deviceTreeNode == talkDeviceTreeNode) { + AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); + + talkDeviceTreeNode = null; + } + + // 停止当前登录设备的拉流 + for (int i = 0; i < deviceTreeNode.getChildCount(); i++) { + ChannelTreeNode channelTreeNode = (ChannelTreeNode) deviceTreeNode.getChildAt(i); + if (channelTreeNode == realplayChannelTreeNode) { + AutoRegisterModule.stopRealPlay(realplayHandle); + realplayWindowPanel.repaint(); + + realplayChannelTreeNode = null; + + break; + } + } + + // 登出 + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle()); + + logoutBtn.setEnabled(false); + modifyDeviceBtn.setEnabled(true); + } + + deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId()); + deviceTreeNode.removeAllChildren(); + + tree.updateUI(); + } + + /** + * 开始拉流功能 + */ + private void startRealplay() { + // 选中的通道节点 + ChannelTreeNode channelTreeNode = (ChannelTreeNode) tree.getLastSelectedPathComponent(); + + if (channelTreeNode == null) { + return; + } + + // 通道节点对应的设备节点 + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) channelTreeNode.getParent(); + + // 判断所有设备有没有拉流 + if (realplayHandle.longValue() != 0) { + AutoRegisterModule.stopRealPlay(realplayHandle); + realplayWindowPanel.repaint(); + + realplayChannelTreeNode = null; + } + + // 选中通道拉流 + realplayHandle = AutoRegisterModule.startRealPlay(deviceTreeNode.getDeviceInfo().getLoginHandle(), channelTreeNode.getChn() - 1, 0, realplayWindowPanel); + + if (realplayHandle.longValue() != 0) { + startRealPlayBtn.setEnabled(false); + stopRealPlayBtn.setEnabled(true); + + realplayChannelTreeNode = channelTreeNode; + } else { + JOptionPane.showMessageDialog(null, Res.string().getRealplay() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + tree.updateUI(); + } + + /** + * 停止拉流功能 + */ + private void stopRealplay() { + if (realplayHandle.longValue() != 0) { + AutoRegisterModule.stopRealPlay(realplayHandle); + realplayWindowPanel.repaint(); + + realplayChannelTreeNode = null; + + startRealPlayBtn.setEnabled(true); + stopRealPlayBtn.setEnabled(false); + } + tree.updateUI(); + } + + /** + * 开始对讲 + */ + private void startTalk() { + // 选中的设备节点 + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) tree.getLastSelectedPathComponent(); + + if (deviceTreeNode == null) { + return; + } + + // 判断所有设备有没有对讲 + if (AutoRegisterModule.m_hTalkHandle.longValue() != 0) { + AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); + + talkDeviceTreeNode = null; + } + + // 选中设备对讲 + if (AutoRegisterModule.startTalk(deviceTreeNode.getDeviceInfo().getLoginHandle())) { + startTalkBtn.setEnabled(false); + stopTalkBtn.setEnabled(true); + + talkDeviceTreeNode = deviceTreeNode; + } else { + JOptionPane.showMessageDialog(null, Res.string().getTalk() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + tree.updateUI(); + } + + /** + * 停止对讲 + */ + private void stopTalk() { + // 判断设备的通道有没有对讲 + if (AutoRegisterModule.m_hTalkHandle.longValue() != 0) { + AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle); + + talkDeviceTreeNode = null; + + startTalkBtn.setEnabled(true); + stopTalkBtn.setEnabled(false); + } + + tree.updateUI(); + } + + /** + * 抓图功能 + */ + private void capture() { + // 选中的通道节点 + ChannelTreeNode channelTreeNode = (ChannelTreeNode) tree.getLastSelectedPathComponent(); + + if (channelTreeNode == null) { + return; + } + + // 通道节点对应的设备节点 + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) channelTreeNode.getParent(); + + AutoRegisterModule.snapPicture(deviceTreeNode.getDeviceInfo().getLoginHandle(), channelTreeNode.getChn() - 1); + } + + /** + * 侦听服务器回调函数 + */ + public class ServiceCB implements fServiceCallBack { + @Override + public int invoke(LLong lHandle, final String pIp, final int wPort, + int lCommand, Pointer pParam, int dwParamLen, + Pointer dwUserData) { + + // 将 pParam 转化为序列号 + byte[] buffer = new byte[dwParamLen]; + pParam.read(0, buffer, 0, dwParamLen); + String deviceId = ""; + try { + deviceId = new String(buffer, "GBK").trim(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + System.out.printf("Register Device Info [Device address %s][port %s][DeviceID %s] \n", pIp, wPort, deviceId); + switch (lCommand) { + case EM_LISTEN_TYPE.NET_DVR_DISCONNECT: { // 验证期间设备断线回调 + for (int i = 0; i < rootNode.getChildCount(); i++) { + if (deviceId.equals(((DeviceTreeNode) rootNode.getChildAt(i)).getDeviceInfo().getDevcieId())) { + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) rootNode.getChildAt(i); + + deviceTreeNode.getDeviceInfo().setDeviceIp(""); + deviceTreeNode.getDeviceInfo().setDevicePort(0); + + break; + } + } + + break; + } + case EM_LISTEN_TYPE.NET_DVR_SERIAL_RETURN: { // 设备注册携带序列号 + for (int i = 0; i < rootNode.getChildCount(); i++) { + if (deviceId.equals(((DeviceTreeNode) rootNode.getChildAt(i)).getDeviceInfo().getDevcieId())) { + final DeviceTreeNode deviceTreeNode = (DeviceTreeNode) rootNode.getChildAt(i); + + deviceTreeNode.getDeviceInfo().setDeviceIp(pIp); + deviceTreeNode.getDeviceInfo().setDevicePort(wPort); + + try { + Thread.sleep(20); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } + + new SwingWorker() { + @Override + protected LLong doInBackground() { + return login(deviceTreeNode); + } + + @Override + protected void done() { + try { + if (get() == null) { + return; + } + + if (get().longValue() != 0) { // deviceTreeNode.getDeviceInfo().setDeviceIp(pIp); // deviceTreeNode.getDeviceInfo().setDevicePort(wPort); - deviceTreeNode.getDeviceInfo().setLoginHandle(get()); - - for(int i = 0; i < AutoRegisterModule.m_stDeviceInfo.byChanNum; i++) { - ChannelTreeNode chnNode = new ChannelTreeNode(); - chnNode.setChn(i + 1); - chnNode.setUserObject(Res.string().getChannel() + " " + String.valueOf(i + 1)); - - deviceTreeNode.add(chnNode); - } - - deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId() + " (" + deviceTreeNode.getDeviceInfo().getDeviceIp() + ")"); - tree.expandPath(new TreePath(rootNode)); - tree.setCellRenderer(treeCellRender); - tree.updateUI(); - } - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - }.execute(); - - break; - } - } - - break; - } - default: - break; - - } - - return 0; - } - } - - /** - * 登录设备 -// * @param deviceIp 登录设备IP -// * @param port 登录设备端口号 - * @param deviceTreeNode 登录设备设备节点 - */ - private LLong login(DeviceTreeNode deviceTreeNode) { - // 判断设备是否登录 - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - return null; - } - - LLong loginHandleLong = AutoRegisterModule.login(deviceTreeNode.getDeviceInfo().getDeviceIp(), - deviceTreeNode.getDeviceInfo().getDevicePort(), - deviceTreeNode.getDeviceInfo().getUsername(), - deviceTreeNode.getDeviceInfo().getPassword(), - deviceTreeNode.getDeviceInfo().getDevcieId()); - if(loginHandleLong.longValue() != 0) { - System.out.printf("Login Success [Device IP %s][port %d][DeviceID %s]\n", deviceTreeNode.getDeviceInfo().getDeviceIp(), - deviceTreeNode.getDeviceInfo().getDevicePort(), deviceTreeNode.getDeviceInfo().getDevcieId()); - } else { - System.err.printf("Login Failed[Device IP %s] [Port %d][DeviceID %s] %s", deviceTreeNode.getDeviceInfo().getDeviceIp(), - deviceTreeNode.getDeviceInfo().getDevicePort(), deviceTreeNode.getDeviceInfo().getDevcieId(), ToolKits.getErrorCodePrint()); - } - - return loginHandleLong; - } - - /** - * 设备节点 - */ - private class DeviceTreeNode extends DefaultMutableTreeNode { - private static final long serialVersionUID = 1L; - - private DEVICE_INFO deviceInfo; // 信息 - - public DeviceTreeNode() { - - } - - @Override - public Object getUserObject() { - return super.getUserObject(); - } - - @Override - public void setUserObject(Object arg0) { - super.setUserObject(arg0); - } - - public DEVICE_INFO getDeviceInfo() { - return deviceInfo; - } - - public void setDeviceInfo(DEVICE_INFO deviceInfo) { - this.deviceInfo = deviceInfo; - } - } - - /** - * 通道节点 - */ - private class ChannelTreeNode extends DefaultMutableTreeNode { - private static final long serialVersionUID = 1L; - - private int nChn = 0; - - public ChannelTreeNode() { - - } - - public int getChn() { - return nChn; - } - public void setChn(int nChn) { - this.nChn = nChn; - } - } - - /** - * 设备信息 - */ - private class DEVICE_INFO { - private String devcieId = ""; - private String username = ""; - private String password = ""; - private String deviceIp = ""; - private int port = 0; - private LLong loginHandle = new LLong(0); - - public String getDevcieId() { - return devcieId; - } - public void setDevcieId(String devcieId) { - this.devcieId = devcieId; - } - - public String getDeviceIp() { - return deviceIp; - } - public void setDeviceIp(String deviceIp) { - this.deviceIp = deviceIp; - } - - public int getDevicePort() { - return port; - } - public void setDevicePort(int port) { - this.port = port; - } - - public String getUsername() { - return username; - } - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - public void setPassword(String password) { - this.password = password; - } - - public LLong getLoginHandle() { - return loginHandle; - } - public void setLoginHandle(LLong loginHandle) { - this.loginHandle = loginHandle; - } - } - - /** - * 自定义树的渲染器 - */ - private class TreeCellRender extends DefaultTreeCellRenderer { - private static final long serialVersionUID = 1L; - - public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, - boolean expanded, boolean leaf, int row, boolean hasFocus) { - - super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); - - if(value instanceof DeviceTreeNode) { - setIcon(new ImageIcon("./libs/device.png")); - - DeviceTreeNode deviceTreeNode = (DeviceTreeNode)value; - - // 设备节点的字体颜色 - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - if(deviceTreeNode == talkDeviceTreeNode) { - setForeground(Color.RED); - } else { - setForeground(Color.GREEN); - } - } else { - setForeground(Color.BLACK); - } - - if(selected) { - // 如果设备节点被选中,拉流按钮使能 - startRealPlayBtn.setEnabled(false); - stopRealPlayBtn.setEnabled(false); - captureBtn.setEnabled(false); - deleteDeviceBtn.setEnabled(true); - - // 设备节点被选中,登录时的使能 - if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { - logoutBtn.setEnabled(true); - modifyDeviceBtn.setEnabled(false); - - if(deviceTreeNode == talkDeviceTreeNode) { - startTalkBtn.setEnabled(false); - stopTalkBtn.setEnabled(true); - } else { - startTalkBtn.setEnabled(true); - stopTalkBtn.setEnabled(false); - } - } else { // 登出时的使能 - logoutBtn.setEnabled(false); - modifyDeviceBtn.setEnabled(true); - startTalkBtn.setEnabled(false); - stopTalkBtn.setEnabled(false); - } - } - } else if(value instanceof ChannelTreeNode) { - setIcon(new ImageIcon("./libs/camera.png")); - - ChannelTreeNode channelTreeNode = (ChannelTreeNode)value; - - // 设置通道节点的字体颜色 - if(channelTreeNode == realplayChannelTreeNode) { - setForeground(Color.RED); - } else { - setForeground(Color.BLACK); - } - - if(selected) { - // 如果通道节点被选中,登出置灰 - logoutBtn.setEnabled(false); - captureBtn.setEnabled(true); - modifyDeviceBtn.setEnabled(false); - deleteDeviceBtn.setEnabled(false); - startTalkBtn.setEnabled(false); - stopTalkBtn.setEnabled(false); - - if(channelTreeNode == realplayChannelTreeNode) { - startRealPlayBtn.setEnabled(false); - stopRealPlayBtn.setEnabled(true); - } else { - startRealPlayBtn.setEnabled(true); - stopRealPlayBtn.setEnabled(false); - } - } - } - - return this; - } - } - - /** - * 导入csv文件 - */ - private void importFile(String filePath, String encoding) { - File file = new File(filePath); - - if(!file.exists()) { - JOptionPane.showMessageDialog(null, Res.string().getFileNotExist(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - FileInputStream input = null; - InputStreamReader reader = null; - BufferedReader bReader = null; - - try { - input = new FileInputStream(file); - - if(encoding == null) { - reader = new InputStreamReader(input); - } else { - reader = new InputStreamReader(input, encoding); - } - bReader = new BufferedReader(reader); - - // 头标题 - String line = bReader.readLine(); - String everyLine = ""; - - while((line = bReader.readLine()) != null) { - everyLine = line; - - // 最大支持导入100个 - if(rootNode.getChildCount() >= 100) { - return; - } - - String[] infos = everyLine.split(","); - - isExist = false; - if(!infos[0].equals("")) { - // 判断是否存在 - for(int i = 0; i < rootNode.getChildCount(); i++) { - DeviceTreeNode childNode = (DeviceTreeNode)rootNode.getChildAt(i); - if(infos[0].equals(childNode.getDeviceInfo().getDevcieId())) { - isExist = true; - break; - } - } - - // 不存在, 可以添加 - if(!isExist) { - final DEVICE_INFO deviceInfo = new DEVICE_INFO(); - deviceInfo.setDevcieId(infos[0]); - if(infos.length == 1) { - deviceInfo.setUsername(""); - deviceInfo.setPassword(""); - } else if(infos.length == 2) { - deviceInfo.setUsername(infos[1]); - deviceInfo.setPassword(""); - } else if(infos.length == 3){ - deviceInfo.setUsername(infos[1]); - deviceInfo.setPassword(infos[2]); - } - - DeviceTreeNode childNode = new DeviceTreeNode(); - childNode.setDeviceInfo(deviceInfo); - childNode.setUserObject(infos[0]); - - rootNode.add(childNode); - - tree.expandPath(new TreePath(rootNode)); - tree.updateUI(); - } - } - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } finally { - if(null != bReader) { - try { - bReader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } + deviceTreeNode.getDeviceInfo().setLoginHandle(get()); + + for (int i = 0; i < AutoRegisterModule.m_stDeviceInfo.byChanNum; i++) { + ChannelTreeNode chnNode = new ChannelTreeNode(); + chnNode.setChn(i + 1); + chnNode.setUserObject(Res.string().getChannel() + " " + String.valueOf(i + 1)); + + deviceTreeNode.add(chnNode); + } + + deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId() + " (" + deviceTreeNode.getDeviceInfo().getDeviceIp() + ")"); + tree.expandPath(new TreePath(rootNode)); + tree.setCellRenderer(treeCellRender); + tree.updateUI(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + }.execute(); + + break; + } + } + + break; + } + default: + break; + + } + + return 0; + } + } + + /** + * 登录设备 + * // * @param deviceIp 登录设备IP + * // * @param port 登录设备端口号 + * + * @param deviceTreeNode 登录设备设备节点 + */ + private LLong login(DeviceTreeNode deviceTreeNode) { + // 判断设备是否登录 + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + return null; + } + + LLong loginHandleLong = AutoRegisterModule.login(deviceTreeNode.getDeviceInfo().getDeviceIp(), + deviceTreeNode.getDeviceInfo().getDevicePort(), + deviceTreeNode.getDeviceInfo().getUsername(), + deviceTreeNode.getDeviceInfo().getPassword(), + deviceTreeNode.getDeviceInfo().getDevcieId()); + if (loginHandleLong.longValue() != 0) { + System.out.printf("Login Success [Device IP %s][port %d][DeviceID %s]\n", deviceTreeNode.getDeviceInfo().getDeviceIp(), + deviceTreeNode.getDeviceInfo().getDevicePort(), deviceTreeNode.getDeviceInfo().getDevcieId()); + } else { + System.err.printf("Login Failed[Device IP %s] [Port %d][DeviceID %s] %s", deviceTreeNode.getDeviceInfo().getDeviceIp(), + deviceTreeNode.getDeviceInfo().getDevicePort(), deviceTreeNode.getDeviceInfo().getDevcieId(), ToolKits.getErrorCodePrint()); + } + + return loginHandleLong; + } + + /** + * 设备节点 + */ + private class DeviceTreeNode extends DefaultMutableTreeNode { + private static final long serialVersionUID = 1L; + + private DEVICE_INFO deviceInfo; // 信息 + + public DeviceTreeNode() { + + } + + @Override + public Object getUserObject() { + return super.getUserObject(); + } + + @Override + public void setUserObject(Object arg0) { + super.setUserObject(arg0); + } + + public DEVICE_INFO getDeviceInfo() { + return deviceInfo; + } + + public void setDeviceInfo(DEVICE_INFO deviceInfo) { + this.deviceInfo = deviceInfo; + } + } + + /** + * 通道节点 + */ + private class ChannelTreeNode extends DefaultMutableTreeNode { + private static final long serialVersionUID = 1L; + + private int nChn = 0; + + public ChannelTreeNode() { + + } + + public int getChn() { + return nChn; + } + + public void setChn(int nChn) { + this.nChn = nChn; + } + } + + /** + * 设备信息 + */ + private class DEVICE_INFO { + private String devcieId = ""; + private String username = ""; + private String password = ""; + private String deviceIp = ""; + private int port = 0; + private LLong loginHandle = new LLong(0); + + public String getDevcieId() { + return devcieId; + } + + public void setDevcieId(String devcieId) { + this.devcieId = devcieId; + } + + public String getDeviceIp() { + return deviceIp; + } + + public void setDeviceIp(String deviceIp) { + this.deviceIp = deviceIp; + } + + public int getDevicePort() { + return port; + } + + public void setDevicePort(int port) { + this.port = port; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public LLong getLoginHandle() { + return loginHandle; + } + + public void setLoginHandle(LLong loginHandle) { + this.loginHandle = loginHandle; + } + } + + /** + * 自定义树的渲染器 + */ + private class TreeCellRender extends DefaultTreeCellRenderer { + private static final long serialVersionUID = 1L; + + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, + boolean expanded, boolean leaf, int row, boolean hasFocus) { + + super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + + if (value instanceof DeviceTreeNode) { + setIcon(new ImageIcon("./libs/device.png")); + + DeviceTreeNode deviceTreeNode = (DeviceTreeNode) value; + + // 设备节点的字体颜色 + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + if (deviceTreeNode == talkDeviceTreeNode) { + setForeground(Color.RED); + } else { + setForeground(Color.GREEN); + } + } else { + setForeground(Color.BLACK); + } + + if (selected) { + // 如果设备节点被选中,拉流按钮使能 + startRealPlayBtn.setEnabled(false); + stopRealPlayBtn.setEnabled(false); + captureBtn.setEnabled(false); + deleteDeviceBtn.setEnabled(true); + + // 设备节点被选中,登录时的使能 + if (deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { + logoutBtn.setEnabled(true); + modifyDeviceBtn.setEnabled(false); + + if (deviceTreeNode == talkDeviceTreeNode) { + startTalkBtn.setEnabled(false); + stopTalkBtn.setEnabled(true); + } else { + startTalkBtn.setEnabled(true); + stopTalkBtn.setEnabled(false); + } + } else { // 登出时的使能 + logoutBtn.setEnabled(false); + modifyDeviceBtn.setEnabled(true); + startTalkBtn.setEnabled(false); + stopTalkBtn.setEnabled(false); + } + } + } else if (value instanceof ChannelTreeNode) { + setIcon(new ImageIcon("./libs/camera.png")); + + ChannelTreeNode channelTreeNode = (ChannelTreeNode) value; + + // 设置通道节点的字体颜色 + if (channelTreeNode == realplayChannelTreeNode) { + setForeground(Color.RED); + } else { + setForeground(Color.BLACK); + } + + if (selected) { + // 如果通道节点被选中,登出置灰 + logoutBtn.setEnabled(false); + captureBtn.setEnabled(true); + modifyDeviceBtn.setEnabled(false); + deleteDeviceBtn.setEnabled(false); + startTalkBtn.setEnabled(false); + stopTalkBtn.setEnabled(false); + + if (channelTreeNode == realplayChannelTreeNode) { + startRealPlayBtn.setEnabled(false); + stopRealPlayBtn.setEnabled(true); + } else { + startRealPlayBtn.setEnabled(true); + stopRealPlayBtn.setEnabled(false); + } + } + } + + return this; + } + } + + /** + * 导入csv文件 + */ + private void importFile(String filePath, String encoding) { + File file = new File(filePath); + + if (!file.exists()) { + JOptionPane.showMessageDialog(null, Res.string().getFileNotExist(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + FileInputStream input = null; + InputStreamReader reader = null; + BufferedReader bReader = null; + + try { + input = new FileInputStream(file); + + if (encoding == null) { + reader = new InputStreamReader(input); + } else { + reader = new InputStreamReader(input, encoding); + } + bReader = new BufferedReader(reader); + + // 头标题 + String line = bReader.readLine(); + String everyLine = ""; + + while ((line = bReader.readLine()) != null) { + everyLine = line; + + // 最大支持导入100个 + if (rootNode.getChildCount() >= 100) { + return; + } + + String[] infos = everyLine.split(","); + + isExist = false; + if (!infos[0].equals("")) { + // 判断是否存在 + for (int i = 0; i < rootNode.getChildCount(); i++) { + DeviceTreeNode childNode = (DeviceTreeNode) rootNode.getChildAt(i); + if (infos[0].equals(childNode.getDeviceInfo().getDevcieId())) { + isExist = true; + break; + } + } + + // 不存在, 可以添加 + if (!isExist) { + final DEVICE_INFO deviceInfo = new DEVICE_INFO(); + deviceInfo.setDevcieId(infos[0]); + if (infos.length == 1) { + deviceInfo.setUsername(""); + deviceInfo.setPassword(""); + } else if (infos.length == 2) { + deviceInfo.setUsername(infos[1]); + deviceInfo.setPassword(""); + } else if (infos.length == 3) { + deviceInfo.setUsername(infos[1]); + deviceInfo.setPassword(infos[2]); + } + + DeviceTreeNode childNode = new DeviceTreeNode(); + childNode.setDeviceInfo(deviceInfo); + childNode.setUserObject(infos[0]); + + rootNode.add(childNode); + + tree.expandPath(new TreePath(rootNode)); + tree.updateUI(); + } + } + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != bReader) { + try { + bReader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } tree.setCellRenderer(treeCellRender); - JOptionPane.showMessageDialog(null, Res.string().getImportCompletion(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - } - - /** - * 导出csv文件 - */ - private void exportFile(File file) { - FileOutputStream output = null; - OutputStreamWriter osWriter = null; - BufferedWriter bWriter = null; - - try { - output = new FileOutputStream(file); - osWriter = new OutputStreamWriter(output, "GB2312"); - bWriter = new BufferedWriter(osWriter); - - // 写头标题 - bWriter.write("DeviceId" + "," + "UserName" + "," + "Password"); - bWriter.newLine(); - - // 写内容 - for(int i = 0; i < rootNode.getChildCount(); i++) { - DeviceTreeNode childNode = (DeviceTreeNode)rootNode.getChildAt(i); - String deviceId = childNode.getDeviceInfo().getDevcieId(); - String username = childNode.getDeviceInfo().getUsername(); - String password = childNode.getDeviceInfo().getPassword(); - - bWriter.write(deviceId + "," + username + "," + password); - bWriter.newLine(); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } finally { - if(null != bWriter) { - try { - bWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - JOptionPane.showMessageDialog(null, Res.string().getExportCompletion(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - } - - /** - * 抓图回调函数 - */ - public class CaptureReceiveCB implements NetSDKLib.fSnapRev{ - BufferedImage bufferedImage = null; - public void invoke( LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { - if(pBuf != null && RevLen > 0) { - String strFileName = SavePath.getSavePath().getSaveCapturePath(); - - System.out.println("strFileName = " + strFileName); - - byte[] buf = pBuf.getByteArray(0, RevLen); - ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf); - try { - bufferedImage = ImageIO.read(byteArrInput); - if(bufferedImage == null) { - return; - } - ImageIO.write(bufferedImage, "jpg", new File(strFileName)); - } catch (IOException e) { - e.printStackTrace(); - } - - // 界面显示抓图 - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - capturePanel.setOpaque(false); - capturePanel.setImage(bufferedImage); - capturePanel.repaint(); - } - }); - } - } - } - + JOptionPane.showMessageDialog(null, Res.string().getImportCompletion(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + } + + /** + * 导出csv文件 + */ + private void exportFile(File file) { + FileOutputStream output = null; + OutputStreamWriter osWriter = null; + BufferedWriter bWriter = null; + + try { + output = new FileOutputStream(file); + osWriter = new OutputStreamWriter(output, "GB2312"); + bWriter = new BufferedWriter(osWriter); + + // 写头标题 + bWriter.write("DeviceId" + "," + "UserName" + "," + "Password"); + bWriter.newLine(); + + // 写内容 + for (int i = 0; i < rootNode.getChildCount(); i++) { + DeviceTreeNode childNode = (DeviceTreeNode) rootNode.getChildAt(i); + String deviceId = childNode.getDeviceInfo().getDevcieId(); + String username = childNode.getDeviceInfo().getUsername(); + String password = childNode.getDeviceInfo().getPassword(); + + bWriter.write(deviceId + "," + username + "," + password); + bWriter.newLine(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != bWriter) { + try { + bWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + JOptionPane.showMessageDialog(null, Res.string().getExportCompletion(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + } + + /** + * 抓图回调函数 + */ + public class CaptureReceiveCB implements NetSDKLib.fSnapRev { + BufferedImage bufferedImage = null; + + public void invoke(LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) { + if (pBuf != null && RevLen > 0) { + String strFileName = SavePath.getSavePath().getSaveCapturePath(); + + System.out.println("strFileName = " + strFileName); + + byte[] buf = pBuf.getByteArray(0, RevLen); + ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf); + try { + bufferedImage = ImageIO.read(byteArrInput); + if (bufferedImage == null) { + return; + } + ImageIO.write(bufferedImage, "jpg", new File(strFileName)); + } catch (IOException e) { + e.printStackTrace(); + } + + // 界面显示抓图 + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + capturePanel.setOpaque(false); + capturePanel.setImage(bufferedImage); + capturePanel.repaint(); + } + }); + } + } + } + private DefaultMutableTreeNode rootNode; private DefaultTreeModel treeModel; private JTree tree; - + private Panel realplayWindowPanel; private PaintPanel capturePanel; - - private JTextField ipTextField; - private JTextField portTextField; - private JButton startListenBtn; - private JButton stopListenBtn; - private JButton addDeviceBtn; - private JButton modifyDeviceBtn; - private JButton deleteDeviceBtn; - private JButton clearDeviceBtn; - private JButton importDeviceBtn; - private JButton exportDeviceBtn; - private JButton logoutBtn; - - private JButton startRealPlayBtn; - private JButton stopRealPlayBtn; - private JButton startTalkBtn; - private JButton stopTalkBtn; - private JButton captureBtn; - - private JFileChooser jfc; + + private JTextField ipTextField; + private JTextField portTextField; + private JButton startListenBtn; + private JButton stopListenBtn; + private JButton addDeviceBtn; + private JButton modifyDeviceBtn; + private JButton deleteDeviceBtn; + private JButton clearDeviceBtn; + private JButton importDeviceBtn; + private JButton exportDeviceBtn; + private JButton logoutBtn; + + private JButton startRealPlayBtn; + private JButton stopRealPlayBtn; + private JButton startTalkBtn; + private JButton stopTalkBtn; + private JButton captureBtn; + + private JFileChooser jfc; } -public class AutoRegister { - public static void main(String[] args) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - AutoRegisterFrame demo = new AutoRegisterFrame(); - demo.setVisible(true); - } - }); - } +public class AutoRegister { + public static void main(String[] args) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + AutoRegisterFrame demo = new AutoRegisterFrame(); + demo.setVisible(true); + } + }); + } }; diff --git a/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/DeviceConfigDialog.java b/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/DeviceConfigDialog.java index dc3fbb2..620be88 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/DeviceConfigDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/DeviceConfigDialog.java @@ -32,309 +32,309 @@ import javax.swing.JTextField; /** * 主动注册网络配置 */ -public class DeviceConfigDialog extends JDialog{ - private static final long serialVersionUID = 1L; - - private NetSDKLib.CFG_DVRIP_INFO info = null; - private ExecutorService executorService = Executors.newSingleThreadExecutor(); - - public DeviceConfigDialog(){ - setTitle(Res.string().getDeviceConfig()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(300, 380); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - loginDevicePanel = new LoginDevicePanel(); - ConfigDevicePanel configDevicePanel = new ConfigDevicePanel(); - +public class DeviceConfigDialog extends JDialog { + private static final long serialVersionUID = 1L; + + private NetSDKLib.CFG_DVRIP_INFO info = null; + private ExecutorService executorService = Executors.newSingleThreadExecutor(); + + public DeviceConfigDialog() { + setTitle(Res.string().getDeviceConfig()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(300, 380); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + loginDevicePanel = new LoginDevicePanel(); + ConfigDevicePanel configDevicePanel = new ConfigDevicePanel(); + add(loginDevicePanel, BorderLayout.NORTH); add(configDevicePanel, BorderLayout.CENTER); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - if(!executorService.isShutdown()) { - executorService.shutdown(); - } - - LoginModule.logout(); - dispose(); - } - }); - } - - /* - * 登陆设备面板 - */ - private class LoginDevicePanel extends LoginPanel { - private static final long serialVersionUID = 1L; - - public LoginDevicePanel() { - BorderEx.set(this, Res.string().getLogin(), 2); - setLayout(new FlowLayout()); - Dimension dimension = new Dimension(); - dimension.height = 180; - setPreferredSize(dimension); - - ipLabel.setPreferredSize(new Dimension(100, 21)); - portLabel.setPreferredSize(new Dimension(100, 21)); - nameLabel.setPreferredSize(new Dimension(100, 21)); - passwordLabel.setPreferredSize(new Dimension(100, 21)); - - ipLabel.setHorizontalAlignment(JLabel.CENTER); - portLabel.setHorizontalAlignment(JLabel.CENTER); - nameLabel.setHorizontalAlignment(JLabel.CENTER); - passwordLabel.setHorizontalAlignment(JLabel.CENTER); - - ipTextArea.setPreferredSize(new Dimension(140, 21)); - portTextArea.setPreferredSize(new Dimension(140, 21)); - nameTextArea.setPreferredSize(new Dimension(140, 21)); - passwordTextArea.setPreferredSize(new Dimension(140, 21)); - loginBtn.setPreferredSize(new Dimension(120, 21)); - logoutBtn.setPreferredSize(new Dimension(120, 21)); - - add(ipLabel); - add(ipTextArea); - add(portLabel); - add(portTextArea); - add(nameLabel); - add(nameTextArea); - add(passwordLabel); - add(passwordTextArea); - add(loginBtn); - add(logoutBtn); - - // 登陆 - loginBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - login(); - } - }); - - // 登出 - logoutBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - logout(); - } - }); - } - } - - /* - * 配置设备面板 - */ - private class ConfigDevicePanel extends JPanel { - private static final long serialVersionUID = 1L; - - public ConfigDevicePanel() { - BorderEx.set(this, Res.string().getDeviceConfig(), 2); - setLayout(new FlowLayout()); - - enableCheckBox = new JCheckBox(Res.string().getEnable()); - JLabel nullLabel = new JLabel(); - JLabel autoRegisterIpLabel = new JLabel(Res.string().getRegisterAddress(), JLabel.CENTER); - JLabel autoRegisterPortLabel = new JLabel(Res.string().getRegisterPort(), JLabel.CENTER); - JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER); - - enableCheckBox.setPreferredSize(new Dimension(80, 21)); - nullLabel.setPreferredSize(new Dimension(120, 21)); - autoRegisterIpLabel.setPreferredSize(new Dimension(100, 21)); - autoRegisterPortLabel.setPreferredSize(new Dimension(100, 21)); - deviceIdLabel.setPreferredSize(new Dimension(100, 21)); - - autoRegisterIpTextField = new JTextField(); - autoRegisterPortTextField = new JTextField(); - deviceIdTextField = new JTextField(); - - autoRegisterIpTextField.setPreferredSize(new Dimension(140, 21)); - autoRegisterPortTextField.setPreferredSize(new Dimension(140, 21)); - deviceIdTextField.setPreferredSize(new Dimension(140, 21)); - - getBtn = new JButton(Res.string().getGet()); - setBtn = new JButton(Res.string().getSet()); - - getBtn.setPreferredSize(new Dimension(120, 21)); - setBtn.setPreferredSize(new Dimension(120, 21)); - - add(enableCheckBox); - add(nullLabel); - add(autoRegisterIpLabel); - add(autoRegisterIpTextField); - add(autoRegisterPortLabel); - add(autoRegisterPortTextField); - add(deviceIdLabel); - add(deviceIdTextField); - add(getBtn); - add(setBtn); - - enableCheckBox.setSelected(true); - enableCheckBox.setEnabled(false); - getBtn.setEnabled(false); - setBtn.setEnabled(false); - autoRegisterIpTextField.setEnabled(false); - autoRegisterPortTextField.setEnabled(false); - deviceIdTextField.setEnabled(false); - - // 获取 - getBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - executorService.execute(new Runnable() { - @Override - public void run() { - getBtn.setEnabled(false); - } - }); - - executorService.execute(new Runnable() { - @Override - public void run() { - getConfig(); - } - }); - } - }); - - // 设置 - setBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - executorService.execute(new Runnable() { - @Override - public void run() { - setBtn.setEnabled(false); - } - }); - - executorService.execute(new Runnable() { - @Override - public void run() { - setConfig(); - } - }); - } - }); - } - } - - // 登陆 - private void login() { - if(loginDevicePanel.checkLoginText()) { - if(LoginModule.login(loginDevicePanel.ipTextArea.getText(), - Integer.parseInt(loginDevicePanel.portTextArea.getText()), - loginDevicePanel.nameTextArea.getText(), - new String(loginDevicePanel.passwordTextArea.getPassword()))) { - loginDevicePanel.setButtonEnable(true); - enableCheckBox.setEnabled(true); - getBtn.setEnabled(true); - setBtn.setEnabled(true); - autoRegisterIpTextField.setEnabled(true); - autoRegisterPortTextField.setEnabled(true); - deviceIdTextField.setEnabled(true); - } else { - JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } - } - - // 登出 - private void logout() { - LoginModule.logout(); - loginDevicePanel.setButtonEnable(false); - enableCheckBox.setEnabled(false); - getBtn.setEnabled(false); - setBtn.setEnabled(false); - autoRegisterIpTextField.setEnabled(false); - autoRegisterPortTextField.setEnabled(false); - deviceIdTextField.setEnabled(false); - autoRegisterIpTextField.setText(""); - autoRegisterPortTextField.setText(""); - deviceIdTextField.setText(""); - } - - // 获取 - private void getConfig() { - info = AutoRegisterModule.getDVRIPConfig(LoginModule.m_hLoginHandle); - if(info == null) { - autoRegisterIpTextField.setText(""); - autoRegisterPortTextField.setText(""); - deviceIdTextField.setText(""); - JOptionPane.showMessageDialog(null, Res.string().getGet() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } else { - if(info.stuRegisters[0].bEnable == 1) { - enableCheckBox.setSelected(true); - } else { - enableCheckBox.setSelected(false); - } - - autoRegisterIpTextField.setText(new String(info.stuRegisters[0].stuServers[0].szAddress).trim()); - autoRegisterPortTextField.setText(String.valueOf(info.stuRegisters[0].stuServers[0].nPort)); - try { - deviceIdTextField.setText(new String(info.stuRegisters[0].szDeviceID, "GBK").trim()); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - getBtn.setEnabled(true); - } - - /** - * 设置(在获取的基础上配置) - */ - private void setConfig() { - if(autoRegisterIpTextField.getText().equals("")) { - setBtn.setEnabled(true); - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterAddress(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(autoRegisterPortTextField.getText().equals("")) { - setBtn.setEnabled(true); - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterPort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(deviceIdTextField.getText().equals("")) { - setBtn.setEnabled(true); - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - // win下,中文需要转换为GBK - byte[] deviceId = null; - try { - deviceId = deviceIdTextField.getText().getBytes("GBK"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - if(AutoRegisterModule.setDVRIPConfig(LoginModule.m_hLoginHandle, - enableCheckBox.isSelected(), - autoRegisterIpTextField.getText(), - Integer.parseInt(autoRegisterPortTextField.getText()), - deviceId, - info)) { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getSet() + Res.string().getFailed() + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - setBtn.setEnabled(true); - } - - private LoginDevicePanel loginDevicePanel; - - private JTextField autoRegisterIpTextField; - private JTextField autoRegisterPortTextField; - private JTextField deviceIdTextField; - private JCheckBox enableCheckBox; - private JButton getBtn; - private JButton setBtn; + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + if (!executorService.isShutdown()) { + executorService.shutdown(); + } + + LoginModule.logout(); + dispose(); + } + }); + } + + /* + * 登陆设备面板 + */ + private class LoginDevicePanel extends LoginPanel { + private static final long serialVersionUID = 1L; + + public LoginDevicePanel() { + BorderEx.set(this, Res.string().getLogin(), 2); + setLayout(new FlowLayout()); + Dimension dimension = new Dimension(); + dimension.height = 180; + setPreferredSize(dimension); + + ipLabel.setPreferredSize(new Dimension(100, 21)); + portLabel.setPreferredSize(new Dimension(100, 21)); + nameLabel.setPreferredSize(new Dimension(100, 21)); + passwordLabel.setPreferredSize(new Dimension(100, 21)); + + ipLabel.setHorizontalAlignment(JLabel.CENTER); + portLabel.setHorizontalAlignment(JLabel.CENTER); + nameLabel.setHorizontalAlignment(JLabel.CENTER); + passwordLabel.setHorizontalAlignment(JLabel.CENTER); + + ipTextArea.setPreferredSize(new Dimension(140, 21)); + portTextArea.setPreferredSize(new Dimension(140, 21)); + nameTextArea.setPreferredSize(new Dimension(140, 21)); + passwordTextArea.setPreferredSize(new Dimension(140, 21)); + loginBtn.setPreferredSize(new Dimension(120, 21)); + logoutBtn.setPreferredSize(new Dimension(120, 21)); + + add(ipLabel); + add(ipTextArea); + add(portLabel); + add(portTextArea); + add(nameLabel); + add(nameTextArea); + add(passwordLabel); + add(passwordTextArea); + add(loginBtn); + add(logoutBtn); + + // 登陆 + loginBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + login(); + } + }); + + // 登出 + logoutBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + logout(); + } + }); + } + } + + /* + * 配置设备面板 + */ + private class ConfigDevicePanel extends JPanel { + private static final long serialVersionUID = 1L; + + public ConfigDevicePanel() { + BorderEx.set(this, Res.string().getDeviceConfig(), 2); + setLayout(new FlowLayout()); + + enableCheckBox = new JCheckBox(Res.string().getEnable()); + JLabel nullLabel = new JLabel(); + JLabel autoRegisterIpLabel = new JLabel(Res.string().getRegisterAddress(), JLabel.CENTER); + JLabel autoRegisterPortLabel = new JLabel(Res.string().getRegisterPort(), JLabel.CENTER); + JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER); + + enableCheckBox.setPreferredSize(new Dimension(80, 21)); + nullLabel.setPreferredSize(new Dimension(120, 21)); + autoRegisterIpLabel.setPreferredSize(new Dimension(100, 21)); + autoRegisterPortLabel.setPreferredSize(new Dimension(100, 21)); + deviceIdLabel.setPreferredSize(new Dimension(100, 21)); + + autoRegisterIpTextField = new JTextField(); + autoRegisterPortTextField = new JTextField(); + deviceIdTextField = new JTextField(); + + autoRegisterIpTextField.setPreferredSize(new Dimension(140, 21)); + autoRegisterPortTextField.setPreferredSize(new Dimension(140, 21)); + deviceIdTextField.setPreferredSize(new Dimension(140, 21)); + + getBtn = new JButton(Res.string().getGet()); + setBtn = new JButton(Res.string().getSet()); + + getBtn.setPreferredSize(new Dimension(120, 21)); + setBtn.setPreferredSize(new Dimension(120, 21)); + + add(enableCheckBox); + add(nullLabel); + add(autoRegisterIpLabel); + add(autoRegisterIpTextField); + add(autoRegisterPortLabel); + add(autoRegisterPortTextField); + add(deviceIdLabel); + add(deviceIdTextField); + add(getBtn); + add(setBtn); + + enableCheckBox.setSelected(true); + enableCheckBox.setEnabled(false); + getBtn.setEnabled(false); + setBtn.setEnabled(false); + autoRegisterIpTextField.setEnabled(false); + autoRegisterPortTextField.setEnabled(false); + deviceIdTextField.setEnabled(false); + + // 获取 + getBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + executorService.execute(new Runnable() { + @Override + public void run() { + getBtn.setEnabled(false); + } + }); + + executorService.execute(new Runnable() { + @Override + public void run() { + getConfig(); + } + }); + } + }); + + // 设置 + setBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + executorService.execute(new Runnable() { + @Override + public void run() { + setBtn.setEnabled(false); + } + }); + + executorService.execute(new Runnable() { + @Override + public void run() { + setConfig(); + } + }); + } + }); + } + } + + // 登陆 + private void login() { + if (loginDevicePanel.checkLoginText()) { + if (LoginModule.login(loginDevicePanel.ipTextArea.getText(), + Integer.parseInt(loginDevicePanel.portTextArea.getText()), + loginDevicePanel.nameTextArea.getText(), + new String(loginDevicePanel.passwordTextArea.getPassword()))) { + loginDevicePanel.setButtonEnable(true); + enableCheckBox.setEnabled(true); + getBtn.setEnabled(true); + setBtn.setEnabled(true); + autoRegisterIpTextField.setEnabled(true); + autoRegisterPortTextField.setEnabled(true); + deviceIdTextField.setEnabled(true); + } else { + JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } + } + + // 登出 + private void logout() { + LoginModule.logout(); + loginDevicePanel.setButtonEnable(false); + enableCheckBox.setEnabled(false); + getBtn.setEnabled(false); + setBtn.setEnabled(false); + autoRegisterIpTextField.setEnabled(false); + autoRegisterPortTextField.setEnabled(false); + deviceIdTextField.setEnabled(false); + autoRegisterIpTextField.setText(""); + autoRegisterPortTextField.setText(""); + deviceIdTextField.setText(""); + } + + // 获取 + private void getConfig() { + info = AutoRegisterModule.getDVRIPConfig(LoginModule.m_hLoginHandle); + if (info == null) { + autoRegisterIpTextField.setText(""); + autoRegisterPortTextField.setText(""); + deviceIdTextField.setText(""); + JOptionPane.showMessageDialog(null, Res.string().getGet() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + if (info.stuRegisters[0].bEnable == 1) { + enableCheckBox.setSelected(true); + } else { + enableCheckBox.setSelected(false); + } + + autoRegisterIpTextField.setText(new String(info.stuRegisters[0].stuServers[0].szAddress).trim()); + autoRegisterPortTextField.setText(String.valueOf(info.stuRegisters[0].stuServers[0].nPort)); + try { + deviceIdTextField.setText(new String(info.stuRegisters[0].szDeviceID, "GBK").trim()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + getBtn.setEnabled(true); + } + + /** + * 设置(在获取的基础上配置) + */ + private void setConfig() { + if (autoRegisterIpTextField.getText().equals("")) { + setBtn.setEnabled(true); + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterAddress(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (autoRegisterPortTextField.getText().equals("")) { + setBtn.setEnabled(true); + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterPort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (deviceIdTextField.getText().equals("")) { + setBtn.setEnabled(true); + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + // win下,中文需要转换为GBK + byte[] deviceId = null; + try { + deviceId = deviceIdTextField.getText().getBytes("GBK"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + if (AutoRegisterModule.setDVRIPConfig(LoginModule.m_hLoginHandle, + enableCheckBox.isSelected(), + autoRegisterIpTextField.getText(), + Integer.parseInt(autoRegisterPortTextField.getText()), + deviceId, + info)) { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSet() + Res.string().getFailed() + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + setBtn.setEnabled(true); + } + + private LoginDevicePanel loginDevicePanel; + + private JTextField autoRegisterIpTextField; + private JTextField autoRegisterPortTextField; + private JTextField deviceIdTextField; + private JCheckBox enableCheckBox; + private JButton getBtn; + private JButton setBtn; } \ No newline at end of file diff --git a/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/ModifyDeviceDialog.java b/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/ModifyDeviceDialog.java index 22d9cae..a929cc8 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/ModifyDeviceDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/AutoRegister/ModifyDeviceDialog.java @@ -24,124 +24,125 @@ import javax.swing.JTextField; /** * 在树上修改设备 */ -public class ModifyDeviceDialog extends JDialog{ - private static final long serialVersionUID = 1L; - - private DeviceManagerListener listener; - public void addDeviceManagerListener(DeviceManagerListener listener) { - this.listener = listener; - } - - private String deviceId = ""; - private String username = ""; - private String password = ""; - - public ModifyDeviceDialog(String deviceId, String username, String password){ - setTitle(Res.string().getModifyDevice()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(220, 180); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - this.deviceId = deviceId; - this.username = username; - this.password = password; - - ModifyDevicePanel addDevicePanel = new ModifyDevicePanel(); +public class ModifyDeviceDialog extends JDialog { + private static final long serialVersionUID = 1L; + + private DeviceManagerListener listener; + + public void addDeviceManagerListener(DeviceManagerListener listener) { + this.listener = listener; + } + + private String deviceId = ""; + private String username = ""; + private String password = ""; + + public ModifyDeviceDialog(String deviceId, String username, String password) { + setTitle(Res.string().getModifyDevice()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(220, 180); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + this.deviceId = deviceId; + this.username = username; + this.password = password; + + ModifyDevicePanel addDevicePanel = new ModifyDevicePanel(); add(addDevicePanel, BorderLayout.CENTER); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - dispose(); - } - }); - } - - /* - * 修改设备面板 - */ - private class ModifyDevicePanel extends JPanel { - private static final long serialVersionUID = 1L; - - public ModifyDevicePanel() { - BorderEx.set(this, "", 2); - setLayout(new FlowLayout()); - - JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER); - JLabel usernameLabel = new JLabel(Res.string().getUserName(), JLabel.CENTER); - JLabel passwordLabel = new JLabel(Res.string().getPassword(), JLabel.CENTER); - - deviceIdLabel.setPreferredSize(new Dimension(60, 21)); - usernameLabel.setPreferredSize(new Dimension(60, 21)); - passwordLabel.setPreferredSize(new Dimension(60, 21)); - - deviceIdTextField = new JTextField(); - usernameTextField = new JTextField(); - passwordPasswordField = new JPasswordField(); - - deviceIdTextField.setPreferredSize(new Dimension(120, 20)); - usernameTextField.setPreferredSize(new Dimension(120, 20)); - passwordPasswordField.setPreferredSize(new Dimension(120, 20)); - - JButton modifyDeviceBtn = new JButton(Res.string().getModify()); - JButton cancelBtn = new JButton(Res.string().getCancel()); - - modifyDeviceBtn.setPreferredSize(new Dimension(90, 21)); - cancelBtn.setPreferredSize(new Dimension(90, 21)); - - add(deviceIdLabel); - add(deviceIdTextField); - add(usernameLabel); - add(usernameTextField); - add(passwordLabel); - add(passwordPasswordField); - add(modifyDeviceBtn); - add(cancelBtn); - - deviceIdTextField.setText(deviceId); - usernameTextField.setText(username); - passwordPasswordField.setText(password); - - // 修改 - modifyDeviceBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - if(deviceIdTextField.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(usernameTextField.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserName(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if((new String(passwordPasswordField.getPassword()).trim()).equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - dispose(); - listener.onDeviceManager(deviceIdTextField.getText(), - usernameTextField.getText(), - new String(passwordPasswordField.getPassword()).trim()); - } - }); - - // 取消,关闭 - cancelBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - dispose(); - } - }); - } - } - - private JTextField deviceIdTextField; - private JTextField usernameTextField; - private JPasswordField passwordPasswordField; + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + /* + * 修改设备面板 + */ + private class ModifyDevicePanel extends JPanel { + private static final long serialVersionUID = 1L; + + public ModifyDevicePanel() { + BorderEx.set(this, "", 2); + setLayout(new FlowLayout()); + + JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER); + JLabel usernameLabel = new JLabel(Res.string().getUserName(), JLabel.CENTER); + JLabel passwordLabel = new JLabel(Res.string().getPassword(), JLabel.CENTER); + + deviceIdLabel.setPreferredSize(new Dimension(60, 21)); + usernameLabel.setPreferredSize(new Dimension(60, 21)); + passwordLabel.setPreferredSize(new Dimension(60, 21)); + + deviceIdTextField = new JTextField(); + usernameTextField = new JTextField(); + passwordPasswordField = new JPasswordField(); + + deviceIdTextField.setPreferredSize(new Dimension(120, 20)); + usernameTextField.setPreferredSize(new Dimension(120, 20)); + passwordPasswordField.setPreferredSize(new Dimension(120, 20)); + + JButton modifyDeviceBtn = new JButton(Res.string().getModify()); + JButton cancelBtn = new JButton(Res.string().getCancel()); + + modifyDeviceBtn.setPreferredSize(new Dimension(90, 21)); + cancelBtn.setPreferredSize(new Dimension(90, 21)); + + add(deviceIdLabel); + add(deviceIdTextField); + add(usernameLabel); + add(usernameTextField); + add(passwordLabel); + add(passwordPasswordField); + add(modifyDeviceBtn); + add(cancelBtn); + + deviceIdTextField.setText(deviceId); + usernameTextField.setText(username); + passwordPasswordField.setText(password); + + // 修改 + modifyDeviceBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + if (deviceIdTextField.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (usernameTextField.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserName(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if ((new String(passwordPasswordField.getPassword()).trim()).equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + dispose(); + listener.onDeviceManager(deviceIdTextField.getText(), + usernameTextField.getText(), + new String(passwordPasswordField.getPassword()).trim()); + } + }); + + // 取消,关闭 + cancelBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + dispose(); + } + }); + } + } + + private JTextField deviceIdTextField; + private JTextField usernameTextField; + private JPasswordField passwordPasswordField; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/DahuaApplication.java b/cloud/dahua/src/main/java/com/example/dahua/DahuaApplication.java index c3bc07b..da75e5d 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/DahuaApplication.java +++ b/cloud/dahua/src/main/java/com/example/dahua/DahuaApplication.java @@ -63,10 +63,10 @@ public class DahuaApplication { @EnableAsync @Configuration - class TaskPoolConfig{ + class TaskPoolConfig { @Bean("taskExecutor") - public Executor taskExecutor(){ + public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); executor.setMaxPoolSize(20); diff --git a/cloud/dahua/src/main/java/com/example/dahua/DeviceControl.java b/cloud/dahua/src/main/java/com/example/dahua/DeviceControl.java index 62c967c..bdd881e 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/DeviceControl.java +++ b/cloud/dahua/src/main/java/com/example/dahua/DeviceControl.java @@ -34,369 +34,367 @@ import com.sun.jna.Pointer; * Device Control Demo */ class DeviceControlFrame extends JFrame { - private static final long serialVersionUID = 1L; - - // device disconnect callback instance - private DisConnect disConnect = new DisConnect(); - - // device control frame (this) - private static JFrame frame = new JFrame(); - - public DeviceControlFrame() { - setTitle(Res.string().getDeviceControl()); - setLayout(new BorderLayout()); - pack(); - setSize(550, 350); - setResizable(false); - setLocationRelativeTo(null); - LoginModule.init(disConnect, null); - - try { + private static final long serialVersionUID = 1L; + + // device disconnect callback instance + private DisConnect disConnect = new DisConnect(); + + // device control frame (this) + private static JFrame frame = new JFrame(); + + public DeviceControlFrame() { + setTitle(Res.string().getDeviceControl()); + setLayout(new BorderLayout()); + pack(); + setSize(550, 350); + setResizable(false); + setLocationRelativeTo(null); + LoginModule.init(disConnect, null); + + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { - e.printStackTrace(); - } - - loginPanel = new DeviceControlLoginPanel(); - deviceCtlPanel = new DeviceControlPanel(); - - add(loginPanel, BorderLayout.NORTH); - add(deviceCtlPanel, BorderLayout.CENTER); - - loginPanel.addLoginBtnActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(loginPanel.checkLoginText()) { - if(login()) { - frame = ToolKits.getFrame(e); - frame.setTitle(Res.string().getDeviceControl() + " : " + Res.string().getOnline()); - } - } - } - }); - - loginPanel.addLogoutBtnActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - frame.setTitle(Res.string().getDeviceControl()); - logout(); - } - }); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - LoginModule.logout(); - LoginModule.cleanup(); - dispose(); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - FunctionList demo = new FunctionList(); - demo.setVisible(true); - } - }); - } - }); - } - - /////////////////function/////////////////// - // device disconnect callback class - // set it's instance by call CLIENT_Init, when device disconnect sdk will call it. - private class DisConnect implements NetSDKLib.fDisConnect { - public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - JOptionPane.showMessageDialog(null, Res.string().getDisConnect(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - frame.setTitle(Res.string().getDeviceControl()); - logout(); - } - }); - } - } - - public boolean login() { - - if(LoginModule.login(loginPanel.ipTextArea.getText(), - Integer.parseInt(loginPanel.portTextArea.getText()), - loginPanel.nameTextArea.getText(), - new String(loginPanel.passwordTextArea.getPassword()))) { - - loginPanel.setButtonEnable(true); - deviceCtlPanel.setButtonEnabled(true); - - }else { - JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - return true; - } - - public void logout() { - - LoginModule.logout(); - - loginPanel.setButtonEnable(false); - deviceCtlPanel.resetButtonEnabled(); - } - - private class DeviceControlPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public DeviceControlPanel() { - BorderEx.set(this, Res.string().getDeviceControl(), 2); - setLayout(new BorderLayout()); - setPreferredSize(new Dimension(350, 220)); - setResizable(false); - JLabel nullLable = new JLabel(); - - currentTimeCheckBox = new JCheckBox(Res.string().getCurrentTime()); - - getDateChooser = new DateChooserJButton(); - setDateChooser = new DateChooserJButton(2000, 2037); - - rebootBtn = new JButton(Res.string().getReboot()); - getTimeBtn = new JButton(Res.string().getGetTime()); - setTimeBtn = new JButton(Res.string().getSetTime()); - - nullLable.setPreferredSize(currentTimeCheckBox.getPreferredSize()); - getDateChooser.setPreferredSize(new Dimension(150, 20)); - setDateChooser.setPreferredSize(new Dimension(150, 20)); - rebootBtn.setPreferredSize(new Dimension(100, 20)); - getTimeBtn.setPreferredSize(new Dimension(100, 20)); - setTimeBtn.setPreferredSize(new Dimension(100, 20)); - - JPanel rebootPanel = new JPanel(); - BorderEx.set(rebootPanel, Res.string().getDeviceReboot(), 2); - - rebootPanel.add(rebootBtn); - - JPanel timePanel = new JPanel(new GridLayout(2,1)); - BorderEx.set(timePanel, Res.string().getSyncTime(), 2); - - JPanel getPanel = new JPanel(); - JPanel setPanel = new JPanel(); - - getPanel.add(nullLable); - getPanel.add(getDateChooser); - getPanel.add(getTimeBtn); - - setPanel.add(currentTimeCheckBox); - setPanel.add(setDateChooser); - setPanel.add(setTimeBtn); - - timePanel.add(getPanel); - timePanel.add(setPanel); - - JSplitPane splitPane = new JSplitPane(); - splitPane.setDividerSize(0); - splitPane.setBorder(null); - splitPane.add(rebootPanel, JSplitPane.LEFT); - splitPane.add(timePanel, JSplitPane.RIGHT); - add(splitPane); - - getDateChooser.setEnabled(false); - setButtonEnabled(false); - - rebootBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - - OptionDialog optionDialog = new OptionDialog(); - optionDialog.setVisible(true); - } - }); - - getTimeBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - String date = DeviceControlModule.getTime(); - if (date == null) { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - }else { - getDateChooser.setText(date); - } - - } - }); - - setTimeBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - String date = null; - if (!currentTimeCheckBox.isSelected()) { - date = setDateChooser.getText(); - } - if (!DeviceControlModule.setTime(date)) { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - else { - JOptionPane.showMessageDialog(null, Res.string().getOperateSuccess(), Res.string().getPromptMessage(), JOptionPane.PLAIN_MESSAGE); - } - } - }); - - currentTimeCheckBox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - JCheckBox jcb = (JCheckBox)e.getItem(); - if (jcb.isSelected()) { - setDateChooser.setEnabled(false); - }else { - setDateChooser.setEnabled(true); - } - } - }); - - } - - public void setButtonEnabled(boolean b) { - - currentTimeCheckBox.setEnabled(b); - setDateChooser.setEnabled(b); - rebootBtn.setEnabled(b); - getTimeBtn.setEnabled(b); - setTimeBtn.setEnabled(b); - } - - public void resetButtonEnabled() { - currentTimeCheckBox.setSelected(false); - setButtonEnabled(false); - } - - private class OptionDialog extends JDialog { - private static final long serialVersionUID = 1L; - - public OptionDialog() { - setDefaultCloseOperation(DISPOSE_ON_CLOSE); - pack(); - setSize(250, 100); - setLocationRelativeTo(null); - setModal(true); - setTitle(Res.string().getDeviceReboot()); - - JLabel messageLable = new JLabel(Res.string().getRebootTips()); - confirmBtn = new JButton(Res.string().getConfirm()); - cancelBtn = new JButton(Res.string().getCancel()); - - JPanel messagePanel = new JPanel(); - messagePanel.add(messageLable); - - JPanel btnPanel = new JPanel(); - btnPanel.add(cancelBtn); - btnPanel.add(confirmBtn); - - add(messagePanel, BorderLayout.NORTH); - add(btnPanel, BorderLayout.CENTER); - - addListener(); - - } - - private void addListener() { - confirmBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - cancelBtn.setEnabled(false); - if (!DeviceControlModule.reboot()) { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - else { - JOptionPane.showMessageDialog(null, Res.string().getOperateSuccess(), Res.string().getPromptMessage(), JOptionPane.PLAIN_MESSAGE); - } - dispose(); - } - }); - - cancelBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - dispose(); - } - }); - } - - private JButton confirmBtn; - private JButton cancelBtn; - - } - - private JButton rebootBtn; - private DateChooserJButton getDateChooser; - private JButton getTimeBtn; - private JCheckBox currentTimeCheckBox; - private DateChooserJButton setDateChooser; - private JButton setTimeBtn; - } - - private class DeviceControlLoginPanel extends LoginPanel { - - private static final long serialVersionUID = 1L; - - public DeviceControlLoginPanel() { - setLayout(new GridLayout(3, 1)); - removeAll(); - JPanel ipPanel = new JPanel(); - JPanel userPanel = new JPanel(); - JPanel btnPanel = new JPanel(); - - resetSize(); - - ipPanel.add(ipLabel); - ipPanel.add(ipTextArea); - ipPanel.add(portLabel); - ipPanel.add(portTextArea); - - userPanel.add(nameLabel); - userPanel.add(nameTextArea); - userPanel.add(passwordLabel); - userPanel.add(passwordTextArea); - - btnPanel.add(loginBtn); - btnPanel.add(new JLabel(" ")); - btnPanel.add(logoutBtn); - - add(ipPanel); - add(userPanel); - add(btnPanel); - } - - private void resetSize() { - - ipLabel.setPreferredSize(new Dimension(70, 25)); - portLabel.setPreferredSize(new Dimension(70, 25)); - nameLabel.setText(Res.string().getUserName()); - nameLabel.setPreferredSize(new Dimension(70, 25)); - passwordLabel.setPreferredSize(new Dimension(70, 25)); - - loginBtn.setPreferredSize(new Dimension(100, 20)); - logoutBtn.setPreferredSize(new Dimension(100, 20)); - - ipTextArea.setPreferredSize(new Dimension(100, 20)); - portTextArea.setPreferredSize(new Dimension(100, 20)); - nameTextArea.setPreferredSize(new Dimension(100, 20)); - passwordTextArea.setPreferredSize(new Dimension(100, 20)); - } - } - - private DeviceControlLoginPanel loginPanel; - - private DeviceControlPanel deviceCtlPanel; - + e.printStackTrace(); + } + + loginPanel = new DeviceControlLoginPanel(); + deviceCtlPanel = new DeviceControlPanel(); + + add(loginPanel, BorderLayout.NORTH); + add(deviceCtlPanel, BorderLayout.CENTER); + + loginPanel.addLoginBtnActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (loginPanel.checkLoginText()) { + if (login()) { + frame = ToolKits.getFrame(e); + frame.setTitle(Res.string().getDeviceControl() + " : " + Res.string().getOnline()); + } + } + } + }); + + loginPanel.addLogoutBtnActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + frame.setTitle(Res.string().getDeviceControl()); + logout(); + } + }); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + LoginModule.logout(); + LoginModule.cleanup(); + dispose(); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + FunctionList demo = new FunctionList(); + demo.setVisible(true); + } + }); + } + }); + } + + /////////////////function/////////////////// + // device disconnect callback class + // set it's instance by call CLIENT_Init, when device disconnect sdk will call it. + private class DisConnect implements NetSDKLib.fDisConnect { + public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + JOptionPane.showMessageDialog(null, Res.string().getDisConnect(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + frame.setTitle(Res.string().getDeviceControl()); + logout(); + } + }); + } + } + + public boolean login() { + + if (LoginModule.login(loginPanel.ipTextArea.getText(), + Integer.parseInt(loginPanel.portTextArea.getText()), + loginPanel.nameTextArea.getText(), + new String(loginPanel.passwordTextArea.getPassword()))) { + + loginPanel.setButtonEnable(true); + deviceCtlPanel.setButtonEnabled(true); + + } else { + JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + return true; + } + + public void logout() { + + LoginModule.logout(); + + loginPanel.setButtonEnable(false); + deviceCtlPanel.resetButtonEnabled(); + } + + private class DeviceControlPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public DeviceControlPanel() { + BorderEx.set(this, Res.string().getDeviceControl(), 2); + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(350, 220)); + setResizable(false); + JLabel nullLable = new JLabel(); + + currentTimeCheckBox = new JCheckBox(Res.string().getCurrentTime()); + + getDateChooser = new DateChooserJButton(); + setDateChooser = new DateChooserJButton(2000, 2037); + + rebootBtn = new JButton(Res.string().getReboot()); + getTimeBtn = new JButton(Res.string().getGetTime()); + setTimeBtn = new JButton(Res.string().getSetTime()); + + nullLable.setPreferredSize(currentTimeCheckBox.getPreferredSize()); + getDateChooser.setPreferredSize(new Dimension(150, 20)); + setDateChooser.setPreferredSize(new Dimension(150, 20)); + rebootBtn.setPreferredSize(new Dimension(100, 20)); + getTimeBtn.setPreferredSize(new Dimension(100, 20)); + setTimeBtn.setPreferredSize(new Dimension(100, 20)); + + JPanel rebootPanel = new JPanel(); + BorderEx.set(rebootPanel, Res.string().getDeviceReboot(), 2); + + rebootPanel.add(rebootBtn); + + JPanel timePanel = new JPanel(new GridLayout(2, 1)); + BorderEx.set(timePanel, Res.string().getSyncTime(), 2); + + JPanel getPanel = new JPanel(); + JPanel setPanel = new JPanel(); + + getPanel.add(nullLable); + getPanel.add(getDateChooser); + getPanel.add(getTimeBtn); + + setPanel.add(currentTimeCheckBox); + setPanel.add(setDateChooser); + setPanel.add(setTimeBtn); + + timePanel.add(getPanel); + timePanel.add(setPanel); + + JSplitPane splitPane = new JSplitPane(); + splitPane.setDividerSize(0); + splitPane.setBorder(null); + splitPane.add(rebootPanel, JSplitPane.LEFT); + splitPane.add(timePanel, JSplitPane.RIGHT); + add(splitPane); + + getDateChooser.setEnabled(false); + setButtonEnabled(false); + + rebootBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + + OptionDialog optionDialog = new OptionDialog(); + optionDialog.setVisible(true); + } + }); + + getTimeBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String date = DeviceControlModule.getTime(); + if (date == null) { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + getDateChooser.setText(date); + } + + } + }); + + setTimeBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String date = null; + if (!currentTimeCheckBox.isSelected()) { + date = setDateChooser.getText(); + } + if (!DeviceControlModule.setTime(date)) { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getOperateSuccess(), Res.string().getPromptMessage(), JOptionPane.PLAIN_MESSAGE); + } + } + }); + + currentTimeCheckBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + JCheckBox jcb = (JCheckBox) e.getItem(); + if (jcb.isSelected()) { + setDateChooser.setEnabled(false); + } else { + setDateChooser.setEnabled(true); + } + } + }); + + } + + public void setButtonEnabled(boolean b) { + + currentTimeCheckBox.setEnabled(b); + setDateChooser.setEnabled(b); + rebootBtn.setEnabled(b); + getTimeBtn.setEnabled(b); + setTimeBtn.setEnabled(b); + } + + public void resetButtonEnabled() { + currentTimeCheckBox.setSelected(false); + setButtonEnabled(false); + } + + private class OptionDialog extends JDialog { + private static final long serialVersionUID = 1L; + + public OptionDialog() { + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + pack(); + setSize(250, 100); + setLocationRelativeTo(null); + setModal(true); + setTitle(Res.string().getDeviceReboot()); + + JLabel messageLable = new JLabel(Res.string().getRebootTips()); + confirmBtn = new JButton(Res.string().getConfirm()); + cancelBtn = new JButton(Res.string().getCancel()); + + JPanel messagePanel = new JPanel(); + messagePanel.add(messageLable); + + JPanel btnPanel = new JPanel(); + btnPanel.add(cancelBtn); + btnPanel.add(confirmBtn); + + add(messagePanel, BorderLayout.NORTH); + add(btnPanel, BorderLayout.CENTER); + + addListener(); + + } + + private void addListener() { + confirmBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + cancelBtn.setEnabled(false); + if (!DeviceControlModule.reboot()) { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getOperateSuccess(), Res.string().getPromptMessage(), JOptionPane.PLAIN_MESSAGE); + } + dispose(); + } + }); + + cancelBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + } + + private JButton confirmBtn; + private JButton cancelBtn; + + } + + private JButton rebootBtn; + private DateChooserJButton getDateChooser; + private JButton getTimeBtn; + private JCheckBox currentTimeCheckBox; + private DateChooserJButton setDateChooser; + private JButton setTimeBtn; + } + + private class DeviceControlLoginPanel extends LoginPanel { + + private static final long serialVersionUID = 1L; + + public DeviceControlLoginPanel() { + setLayout(new GridLayout(3, 1)); + removeAll(); + JPanel ipPanel = new JPanel(); + JPanel userPanel = new JPanel(); + JPanel btnPanel = new JPanel(); + + resetSize(); + + ipPanel.add(ipLabel); + ipPanel.add(ipTextArea); + ipPanel.add(portLabel); + ipPanel.add(portTextArea); + + userPanel.add(nameLabel); + userPanel.add(nameTextArea); + userPanel.add(passwordLabel); + userPanel.add(passwordTextArea); + + btnPanel.add(loginBtn); + btnPanel.add(new JLabel(" ")); + btnPanel.add(logoutBtn); + + add(ipPanel); + add(userPanel); + add(btnPanel); + } + + private void resetSize() { + + ipLabel.setPreferredSize(new Dimension(70, 25)); + portLabel.setPreferredSize(new Dimension(70, 25)); + nameLabel.setText(Res.string().getUserName()); + nameLabel.setPreferredSize(new Dimension(70, 25)); + passwordLabel.setPreferredSize(new Dimension(70, 25)); + + loginBtn.setPreferredSize(new Dimension(100, 20)); + logoutBtn.setPreferredSize(new Dimension(100, 20)); + + ipTextArea.setPreferredSize(new Dimension(100, 20)); + portTextArea.setPreferredSize(new Dimension(100, 20)); + nameTextArea.setPreferredSize(new Dimension(100, 20)); + passwordTextArea.setPreferredSize(new Dimension(100, 20)); + } + } + + private DeviceControlLoginPanel loginPanel; + + private DeviceControlPanel deviceCtlPanel; + } -public class DeviceControl { - public static void main(String[] args) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - DeviceControlFrame demo = new DeviceControlFrame(); - demo.setVisible(true); - } - }); - } +public class DeviceControl { + public static void main(String[] args) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + DeviceControlFrame demo = new DeviceControlFrame(); + demo.setVisible(true); + } + }); + } }; diff --git a/cloud/dahua/src/main/java/com/example/dahua/DeviceSearchAndInit.java b/cloud/dahua/src/main/java/com/example/dahua/DeviceSearchAndInit.java index 60c2e87..5037fac 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/DeviceSearchAndInit.java +++ b/cloud/dahua/src/main/java/com/example/dahua/DeviceSearchAndInit.java @@ -47,859 +47,858 @@ import com.sun.jna.Pointer; import com.example.dahua.lib.NetSDKLib.*; -class DeviceSearchAndInitFrame extends JFrame{ - private static final long serialVersionUID = 1L; - - private Object[][] data; - - private static int index = 0; - - private int count = 0; - - // 设备搜索句柄 - private static LLong m_DeviceSearchHandle = new LLong(0); - - // key:MAC value:密码重置方式 - private static Map pwdResetHashMap = new HashMap(); - - // MAC列表,用于设备搜索过滤 - private static ArrayList macArrayList = new ArrayList(); - - private Component target = this; - - // true表示单播搜索结束 - private volatile boolean bFlag = true; - - // 线程池,用于单播搜索 - private ExecutorService executorService = Executors.newFixedThreadPool(4); - - public DeviceSearchAndInitFrame() { - setTitle(Res.string().getDeviceSearchAndInit()); - setSize(700, 560); - setLayout(new BorderLayout()); - setResizable(false); - setLocationRelativeTo(null); - LoginModule.init(null, null); // 打开工程,初始化 - - try { +class DeviceSearchAndInitFrame extends JFrame { + private static final long serialVersionUID = 1L; + + private Object[][] data; + + private static int index = 0; + + private int count = 0; + + // 设备搜索句柄 + private static LLong m_DeviceSearchHandle = new LLong(0); + + // key:MAC value:密码重置方式 + private static Map pwdResetHashMap = new HashMap(); + + // MAC列表,用于设备搜索过滤 + private static ArrayList macArrayList = new ArrayList(); + + private Component target = this; + + // true表示单播搜索结束 + private volatile boolean bFlag = true; + + // 线程池,用于单播搜索 + private ExecutorService executorService = Executors.newFixedThreadPool(4); + + public DeviceSearchAndInitFrame() { + setTitle(Res.string().getDeviceSearchAndInit()); + setSize(700, 560); + setLayout(new BorderLayout()); + setResizable(false); + setLocationRelativeTo(null); + LoginModule.init(null, null); // 打开工程,初始化 + + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { - e.printStackTrace(); - } - - deviceSearchPanel = new DeviceSearchPanel(); - deviceSearchResultShowPanel = new DeviceSearchResultShowListPanel(); - deviceIntPanel = new DeviceInitPanel(); - - add(deviceSearchPanel, BorderLayout.NORTH); - add(deviceSearchResultShowPanel, BorderLayout.CENTER); - add(deviceIntPanel, BorderLayout.SOUTH); - - enableEvents(WindowEvent.WINDOW_EVENT_MASK); - } - - @Override - protected void processWindowEvent(WindowEvent e) { - // 关闭窗口监听事件 - if(e.getID() == WindowEvent.WINDOW_CLOSING) { - if(!bFlag) { - // 等待单播搜索结束 - JOptionPane.showMessageDialog(null, Res.string().getSearchingWait(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - return; - } else { - DeviceSearchModule.stopDeviceSearch(m_DeviceSearchHandle); - - if(!executorService.isShutdown()) { - executorService.shutdown(); - } - - LoginModule.cleanup(); // 关闭工程,释放资源 - dispose(); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - FunctionList demo = new FunctionList(); - demo.setVisible(true); - } - }); - } - } - - super.processWindowEvent(e); - } - - /* - * 设备搜索操作面板 - */ - private class DeviceSearchPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public DeviceSearchPanel() { - BorderEx.set(this, Res.string().getDeviceSearchOperate(), 2); - setLayout(new BorderLayout()); - Dimension dimension = new Dimension(); - dimension.height = 85; - setPreferredSize(dimension); - - MulticastAndBroadcastDeviceSearchPanel multiAndBroadPanel = new MulticastAndBroadcastDeviceSearchPanel(); - UnicastDeviceSearchPanel unicastPanel = new UnicastDeviceSearchPanel(); - - add(multiAndBroadPanel, BorderLayout.WEST); - add(unicastPanel, BorderLayout.CENTER); - } - } - - /* - * 设备组播和广播搜索面板(设备搜索) - */ - private class MulticastAndBroadcastDeviceSearchPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public MulticastAndBroadcastDeviceSearchPanel() { - BorderEx.set(this, Res.string().getDeviceSearch(), 1); - setLayout(new FlowLayout()); - Dimension dimension = new Dimension(); - dimension.width = 220; - setPreferredSize(dimension); - - multiAndBroadcastSearchBtn = new JButton(Res.string().getStartSearch()); - multiAndBroadcastSearchBtn.setPreferredSize(new Dimension(120, 20)); - add(multiAndBroadcastSearchBtn); - - multiAndBroadcastSearchBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - DeviceSearchModule.stopDeviceSearch(m_DeviceSearchHandle); - - // 列表清空 - data = new Object[1000][11]; - defaultModel = new DefaultTableModel(data, Res.string().getDeviceTableName()); - table.setModel(defaultModel); - - table.getColumnModel().getColumn(0).setPreferredWidth(50); - table.getColumnModel().getColumn(1).setPreferredWidth(80); - table.getColumnModel().getColumn(2).setPreferredWidth(80); - table.getColumnModel().getColumn(3).setPreferredWidth(120); - table.getColumnModel().getColumn(4).setPreferredWidth(80); - table.getColumnModel().getColumn(5).setPreferredWidth(120); - table.getColumnModel().getColumn(6).setPreferredWidth(120); - table.getColumnModel().getColumn(7).setPreferredWidth(140); - table.getColumnModel().getColumn(8).setPreferredWidth(100); - table.getColumnModel().getColumn(9).setPreferredWidth(100); - table.getColumnModel().getColumn(10).setPreferredWidth(100); - - table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - - pwdResetHashMap.clear(); - macArrayList.clear(); - - index = 0; - m_DeviceSearchHandle = DeviceSearchModule.multiBroadcastDeviceSearch(callback); - } - }); - } - } - - /* - * 设备IP单播搜索面板(设备IP点到点搜索) - */ - private class UnicastDeviceSearchPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public UnicastDeviceSearchPanel() { - BorderEx.set(this, Res.string().getDevicePointToPointSearch(), 1); - setLayout(new FlowLayout()); - - JLabel startIpLabel = new JLabel(Res.string().getStartIp()); - JLabel endIpLabel = new JLabel(Res.string().getEndIp()); - - startIpTextField = new JTextField("172.23.0.0"); - endIpTextField = new JTextField("172.23.3.231"); - - unicastSearchBtn = new JButton(Res.string().getStartSearch()); - - startIpTextField.setPreferredSize(new Dimension(100, 20)); - endIpTextField.setPreferredSize(new Dimension(100, 20)); - unicastSearchBtn.setPreferredSize(new Dimension(120, 20)); - - add(startIpLabel); - add(startIpTextField); - add(endIpLabel); - add(endIpTextField); - add(unicastSearchBtn); - - unicastSearchBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - index = 0; - count = 0; - bFlag = false; - - if(!checkIP()) { - return; - } - - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - unicastSearchBtn.setEnabled(false); - } - }); - - // 清空列表 - data = new Object[1000][11]; - defaultModel = new DefaultTableModel(data, Res.string().getDeviceTableName()); - table.setModel(defaultModel); - - table.getColumnModel().getColumn(0).setPreferredWidth(50); - table.getColumnModel().getColumn(1).setPreferredWidth(80); - table.getColumnModel().getColumn(2).setPreferredWidth(80); - table.getColumnModel().getColumn(3).setPreferredWidth(120); - table.getColumnModel().getColumn(4).setPreferredWidth(80); - table.getColumnModel().getColumn(5).setPreferredWidth(120); - table.getColumnModel().getColumn(6).setPreferredWidth(120); - table.getColumnModel().getColumn(7).setPreferredWidth(140); - table.getColumnModel().getColumn(8).setPreferredWidth(100); - table.getColumnModel().getColumn(9).setPreferredWidth(100); - table.getColumnModel().getColumn(10).setPreferredWidth(100); - - table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - - pwdResetHashMap.clear(); - macArrayList.clear(); - - DeviceSearchModule.stopDeviceSearch(m_DeviceSearchHandle); - - if(count > 0 && count <= 256) { - executorService.execute(new Runnable() { - @Override - public void run() { - DeviceSearchModule.unicastDeviceSearch(startIpTextField.getText(), count, callback); - - bFlag = true; - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - unicastSearchBtn.setEnabled(true); - } - }); - } - }); - } else if(count > 256 && count <= 512){ - executorService.execute(new Runnable() { - @Override - public void run() { - DeviceSearchModule.unicastDeviceSearch(startIpTextField.getText(), 256, callback); - } - }); - - executorService.execute(new Runnable() { - @Override - public void run() { - String[] szIp = startIpTextField.getText().split("\\."); - DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), count - 256, callback); - - bFlag = true; - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - unicastSearchBtn.setEnabled(true); - } - }); - } - }); - } else if(count > 512 && count <= 768){ - executorService.execute(new Runnable() { - @Override - public void run() { - DeviceSearchModule.unicastDeviceSearch(startIpTextField.getText(), 256, callback); - } - }); - - executorService.execute(new Runnable() { - @Override - public void run() { - String[] szIp = startIpTextField.getText().split("\\."); - DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), 256, callback); - } - }); - - executorService.execute(new Runnable() { - @Override - public void run() { - String[] szIp = startIpTextField.getText().split("\\."); - szIp = DeviceSearchModule.getIp(szIp, 255).split("\\."); - DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), count - 512, callback); - - bFlag = true; - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - unicastSearchBtn.setEnabled(true); - } - }); - } - }); - } else if(count > 768 && count <= 1000){ - executorService.execute(new Runnable() { - @Override - public void run() { - DeviceSearchModule.unicastDeviceSearch(startIpTextField.getText(), 256, callback); - } - }); - - executorService.execute(new Runnable() { - @Override - public void run() { - String[] szIp = startIpTextField.getText().split("\\."); - DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), 256, callback); - } - }); - - executorService.execute(new Runnable() { - @Override - public void run() { - String[] szIp = startIpTextField.getText().split("\\."); - szIp = DeviceSearchModule.getIp(szIp, 255).split("\\."); - DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), 256, callback); - } - }); - - executorService.execute(new Runnable() { - @Override - public void run() { - String[] szIp = startIpTextField.getText().split("\\."); - szIp = DeviceSearchModule.getIp(szIp, 255).split("\\."); - szIp = DeviceSearchModule.getIp(szIp, 255).split("\\."); - DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), count - 768, callback); - - bFlag = true; - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - unicastSearchBtn.setEnabled(true); - } - }); - } - }); - } - } - }); - } - } - - /* - * 设备搜索结果显示列表面板 - */ - private class DeviceSearchResultShowListPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public DeviceSearchResultShowListPanel() { - BorderEx.set(this, Res.string().getDeviceSearchResult(), 2); - setLayout(new BorderLayout()); - - data = new Object[1000][11]; - defaultModel = new DefaultTableModel(data, Res.string().getDeviceTableName()); - table = new JTable(defaultModel) { // 列表不可编辑 - private static final long serialVersionUID = 1L; - @Override - public boolean isCellEditable(int row, int column) { - return false; - } - }; - - table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 - - table.getColumnModel().getColumn(0).setPreferredWidth(50); - table.getColumnModel().getColumn(1).setPreferredWidth(80); - table.getColumnModel().getColumn(2).setPreferredWidth(80); - table.getColumnModel().getColumn(3).setPreferredWidth(120); - table.getColumnModel().getColumn(4).setPreferredWidth(80); - table.getColumnModel().getColumn(5).setPreferredWidth(120); - table.getColumnModel().getColumn(6).setPreferredWidth(120); - table.getColumnModel().getColumn(7).setPreferredWidth(140); - table.getColumnModel().getColumn(8).setPreferredWidth(100); - table.getColumnModel().getColumn(9).setPreferredWidth(100); - table.getColumnModel().getColumn(10).setPreferredWidth(100); - - table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - - JScrollPane scrollPane = new JScrollPane(table); - scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); - - add(scrollPane, BorderLayout.CENTER); - } - } - - /* - * 设备初始化操作面板 - */ - private class DeviceInitPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public DeviceInitPanel() { - BorderEx.set(this, Res.string().getDeviceInit(), 2); - setLayout(new BorderLayout()); - Dimension dimension = new Dimension(); - dimension.height = 55; - setPreferredSize(dimension); - - deviceInitBtn = new JButton(Res.string().getDeviceInit()); - - add(deviceInitBtn, BorderLayout.WEST); - - deviceInitBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(defaultModel == null) { - JOptionPane.showMessageDialog(null, Res.string().getPleaseSelectInitializedDevice(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getPleaseSelectInitializedDevice(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - - if(defaultModel.getValueAt(row, 7) == null || String.valueOf(defaultModel.getValueAt(row, 7)).trim().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getPleaseSelectInitializedDevice(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultModel.getValueAt(row, 1) == null || String.valueOf(defaultModel.getValueAt(row, 1)).trim().equals(Res.string().getInitialized())) { - JOptionPane.showMessageDialog(null, Res.string().getInitialized(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - String mac = String.valueOf(defaultModel.getValueAt(row, 7)).trim(); // MAC地址 - byte passwdReset = pwdResetHashMap.get(mac); // 密码重置方式 - - DevcieInitFrame demo = new DevcieInitFrame(passwdReset, mac, row, defaultModel, table); - demo.setLocationRelativeTo(null); - demo.setVisible(true); - } - }); - } - } - - /* - * 设备组播和广播搜索回调 - */ - private Test_fSearchDevicesCB callback = new Test_fSearchDevicesCB(); - private class Test_fSearchDevicesCB implements fSearchDevicesCB { - - @Override - public void invoke(Pointer pDevNetInfo, Pointer pUserData) { - DEVICE_NET_INFO_EX deviceInfo = new DEVICE_NET_INFO_EX(); - ToolKits.GetPointerData(pDevNetInfo, deviceInfo); - - EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); + e.printStackTrace(); + } + + deviceSearchPanel = new DeviceSearchPanel(); + deviceSearchResultShowPanel = new DeviceSearchResultShowListPanel(); + deviceIntPanel = new DeviceInitPanel(); + + add(deviceSearchPanel, BorderLayout.NORTH); + add(deviceSearchResultShowPanel, BorderLayout.CENTER); + add(deviceIntPanel, BorderLayout.SOUTH); + + enableEvents(WindowEvent.WINDOW_EVENT_MASK); + } + + @Override + protected void processWindowEvent(WindowEvent e) { + // 关闭窗口监听事件 + if (e.getID() == WindowEvent.WINDOW_CLOSING) { + if (!bFlag) { + // 等待单播搜索结束 + JOptionPane.showMessageDialog(null, Res.string().getSearchingWait(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + return; + } else { + DeviceSearchModule.stopDeviceSearch(m_DeviceSearchHandle); + + if (!executorService.isShutdown()) { + executorService.shutdown(); + } + + LoginModule.cleanup(); // 关闭工程,释放资源 + dispose(); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + FunctionList demo = new FunctionList(); + demo.setVisible(true); + } + }); + } + } + + super.processWindowEvent(e); + } + + /* + * 设备搜索操作面板 + */ + private class DeviceSearchPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public DeviceSearchPanel() { + BorderEx.set(this, Res.string().getDeviceSearchOperate(), 2); + setLayout(new BorderLayout()); + Dimension dimension = new Dimension(); + dimension.height = 85; + setPreferredSize(dimension); + + MulticastAndBroadcastDeviceSearchPanel multiAndBroadPanel = new MulticastAndBroadcastDeviceSearchPanel(); + UnicastDeviceSearchPanel unicastPanel = new UnicastDeviceSearchPanel(); + + add(multiAndBroadPanel, BorderLayout.WEST); + add(unicastPanel, BorderLayout.CENTER); + } + } + + /* + * 设备组播和广播搜索面板(设备搜索) + */ + private class MulticastAndBroadcastDeviceSearchPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public MulticastAndBroadcastDeviceSearchPanel() { + BorderEx.set(this, Res.string().getDeviceSearch(), 1); + setLayout(new FlowLayout()); + Dimension dimension = new Dimension(); + dimension.width = 220; + setPreferredSize(dimension); + + multiAndBroadcastSearchBtn = new JButton(Res.string().getStartSearch()); + multiAndBroadcastSearchBtn.setPreferredSize(new Dimension(120, 20)); + add(multiAndBroadcastSearchBtn); + + multiAndBroadcastSearchBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + DeviceSearchModule.stopDeviceSearch(m_DeviceSearchHandle); + + // 列表清空 + data = new Object[1000][11]; + defaultModel = new DefaultTableModel(data, Res.string().getDeviceTableName()); + table.setModel(defaultModel); + + table.getColumnModel().getColumn(0).setPreferredWidth(50); + table.getColumnModel().getColumn(1).setPreferredWidth(80); + table.getColumnModel().getColumn(2).setPreferredWidth(80); + table.getColumnModel().getColumn(3).setPreferredWidth(120); + table.getColumnModel().getColumn(4).setPreferredWidth(80); + table.getColumnModel().getColumn(5).setPreferredWidth(120); + table.getColumnModel().getColumn(6).setPreferredWidth(120); + table.getColumnModel().getColumn(7).setPreferredWidth(140); + table.getColumnModel().getColumn(8).setPreferredWidth(100); + table.getColumnModel().getColumn(9).setPreferredWidth(100); + table.getColumnModel().getColumn(10).setPreferredWidth(100); + + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + pwdResetHashMap.clear(); + macArrayList.clear(); + + index = 0; + m_DeviceSearchHandle = DeviceSearchModule.multiBroadcastDeviceSearch(callback); + } + }); + } + } + + /* + * 设备IP单播搜索面板(设备IP点到点搜索) + */ + private class UnicastDeviceSearchPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public UnicastDeviceSearchPanel() { + BorderEx.set(this, Res.string().getDevicePointToPointSearch(), 1); + setLayout(new FlowLayout()); + + JLabel startIpLabel = new JLabel(Res.string().getStartIp()); + JLabel endIpLabel = new JLabel(Res.string().getEndIp()); + + startIpTextField = new JTextField("172.23.0.0"); + endIpTextField = new JTextField("172.23.3.231"); + + unicastSearchBtn = new JButton(Res.string().getStartSearch()); + + startIpTextField.setPreferredSize(new Dimension(100, 20)); + endIpTextField.setPreferredSize(new Dimension(100, 20)); + unicastSearchBtn.setPreferredSize(new Dimension(120, 20)); + + add(startIpLabel); + add(startIpTextField); + add(endIpLabel); + add(endIpTextField); + add(unicastSearchBtn); + + unicastSearchBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + index = 0; + count = 0; + bFlag = false; + + if (!checkIP()) { + return; + } + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + unicastSearchBtn.setEnabled(false); + } + }); + + // 清空列表 + data = new Object[1000][11]; + defaultModel = new DefaultTableModel(data, Res.string().getDeviceTableName()); + table.setModel(defaultModel); + + table.getColumnModel().getColumn(0).setPreferredWidth(50); + table.getColumnModel().getColumn(1).setPreferredWidth(80); + table.getColumnModel().getColumn(2).setPreferredWidth(80); + table.getColumnModel().getColumn(3).setPreferredWidth(120); + table.getColumnModel().getColumn(4).setPreferredWidth(80); + table.getColumnModel().getColumn(5).setPreferredWidth(120); + table.getColumnModel().getColumn(6).setPreferredWidth(120); + table.getColumnModel().getColumn(7).setPreferredWidth(140); + table.getColumnModel().getColumn(8).setPreferredWidth(100); + table.getColumnModel().getColumn(9).setPreferredWidth(100); + table.getColumnModel().getColumn(10).setPreferredWidth(100); + + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + pwdResetHashMap.clear(); + macArrayList.clear(); + + DeviceSearchModule.stopDeviceSearch(m_DeviceSearchHandle); + + if (count > 0 && count <= 256) { + executorService.execute(new Runnable() { + @Override + public void run() { + DeviceSearchModule.unicastDeviceSearch(startIpTextField.getText(), count, callback); + + bFlag = true; + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + unicastSearchBtn.setEnabled(true); + } + }); + } + }); + } else if (count > 256 && count <= 512) { + executorService.execute(new Runnable() { + @Override + public void run() { + DeviceSearchModule.unicastDeviceSearch(startIpTextField.getText(), 256, callback); + } + }); + + executorService.execute(new Runnable() { + @Override + public void run() { + String[] szIp = startIpTextField.getText().split("\\."); + DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), count - 256, callback); + + bFlag = true; + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + unicastSearchBtn.setEnabled(true); + } + }); + } + }); + } else if (count > 512 && count <= 768) { + executorService.execute(new Runnable() { + @Override + public void run() { + DeviceSearchModule.unicastDeviceSearch(startIpTextField.getText(), 256, callback); + } + }); + + executorService.execute(new Runnable() { + @Override + public void run() { + String[] szIp = startIpTextField.getText().split("\\."); + DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), 256, callback); + } + }); + + executorService.execute(new Runnable() { + @Override + public void run() { + String[] szIp = startIpTextField.getText().split("\\."); + szIp = DeviceSearchModule.getIp(szIp, 255).split("\\."); + DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), count - 512, callback); + + bFlag = true; + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + unicastSearchBtn.setEnabled(true); + } + }); + } + }); + } else if (count > 768 && count <= 1000) { + executorService.execute(new Runnable() { + @Override + public void run() { + DeviceSearchModule.unicastDeviceSearch(startIpTextField.getText(), 256, callback); + } + }); + + executorService.execute(new Runnable() { + @Override + public void run() { + String[] szIp = startIpTextField.getText().split("\\."); + DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), 256, callback); + } + }); + + executorService.execute(new Runnable() { + @Override + public void run() { + String[] szIp = startIpTextField.getText().split("\\."); + szIp = DeviceSearchModule.getIp(szIp, 255).split("\\."); + DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), 256, callback); + } + }); + + executorService.execute(new Runnable() { + @Override + public void run() { + String[] szIp = startIpTextField.getText().split("\\."); + szIp = DeviceSearchModule.getIp(szIp, 255).split("\\."); + szIp = DeviceSearchModule.getIp(szIp, 255).split("\\."); + DeviceSearchModule.unicastDeviceSearch(DeviceSearchModule.getIp(szIp, 255), count - 768, callback); + + bFlag = true; + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + unicastSearchBtn.setEnabled(true); + } + }); + } + }); + } + } + }); + } + } + + /* + * 设备搜索结果显示列表面板 + */ + private class DeviceSearchResultShowListPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public DeviceSearchResultShowListPanel() { + BorderEx.set(this, Res.string().getDeviceSearchResult(), 2); + setLayout(new BorderLayout()); + + data = new Object[1000][11]; + defaultModel = new DefaultTableModel(data, Res.string().getDeviceTableName()); + table = new JTable(defaultModel) { // 列表不可编辑 + private static final long serialVersionUID = 1L; + + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + }; + + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 + + table.getColumnModel().getColumn(0).setPreferredWidth(50); + table.getColumnModel().getColumn(1).setPreferredWidth(80); + table.getColumnModel().getColumn(2).setPreferredWidth(80); + table.getColumnModel().getColumn(3).setPreferredWidth(120); + table.getColumnModel().getColumn(4).setPreferredWidth(80); + table.getColumnModel().getColumn(5).setPreferredWidth(120); + table.getColumnModel().getColumn(6).setPreferredWidth(120); + table.getColumnModel().getColumn(7).setPreferredWidth(140); + table.getColumnModel().getColumn(8).setPreferredWidth(100); + table.getColumnModel().getColumn(9).setPreferredWidth(100); + table.getColumnModel().getColumn(10).setPreferredWidth(100); + + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + JScrollPane scrollPane = new JScrollPane(table); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + + add(scrollPane, BorderLayout.CENTER); + } + } + + /* + * 设备初始化操作面板 + */ + private class DeviceInitPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public DeviceInitPanel() { + BorderEx.set(this, Res.string().getDeviceInit(), 2); + setLayout(new BorderLayout()); + Dimension dimension = new Dimension(); + dimension.height = 55; + setPreferredSize(dimension); + + deviceInitBtn = new JButton(Res.string().getDeviceInit()); + + add(deviceInitBtn, BorderLayout.WEST); + + deviceInitBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (defaultModel == null) { + JOptionPane.showMessageDialog(null, Res.string().getPleaseSelectInitializedDevice(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getPleaseSelectInitializedDevice(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + + if (defaultModel.getValueAt(row, 7) == null || String.valueOf(defaultModel.getValueAt(row, 7)).trim().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getPleaseSelectInitializedDevice(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultModel.getValueAt(row, 1) == null || String.valueOf(defaultModel.getValueAt(row, 1)).trim().equals(Res.string().getInitialized())) { + JOptionPane.showMessageDialog(null, Res.string().getInitialized(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + String mac = String.valueOf(defaultModel.getValueAt(row, 7)).trim(); // MAC地址 + byte passwdReset = pwdResetHashMap.get(mac); // 密码重置方式 + + DevcieInitFrame demo = new DevcieInitFrame(passwdReset, mac, row, defaultModel, table); + demo.setLocationRelativeTo(null); + demo.setVisible(true); + } + }); + } + } + + /* + * 设备组播和广播搜索回调 + */ + private Test_fSearchDevicesCB callback = new Test_fSearchDevicesCB(); + + private class Test_fSearchDevicesCB implements fSearchDevicesCB { + + @Override + public void invoke(Pointer pDevNetInfo, Pointer pUserData) { + DEVICE_NET_INFO_EX deviceInfo = new DEVICE_NET_INFO_EX(); + ToolKits.GetPointerData(pDevNetInfo, deviceInfo); + + EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); if (eventQueue != null) { - eventQueue.postEvent( new DeviceSearchList(target, deviceInfo)); - } - } - } - - /* - * 设备搜索的信息处理 - */ - class DeviceSearchList extends AWTEvent { - private static final long serialVersionUID = 1L; - public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1; - - private DEVICE_NET_INFO_EX deviceInfo; - - public DeviceSearchList(Object target, - DEVICE_NET_INFO_EX deviceInfo) { - super(target,EVENT_ID); - - this.deviceInfo = deviceInfo; - } - - public DEVICE_NET_INFO_EX getDeviceInfo() { - return deviceInfo; - } - } - - @Override - protected void processEvent( AWTEvent event) - { - if ( event instanceof DeviceSearchList ) - { - - DeviceSearchList ev = (DeviceSearchList) event; - - DEVICE_NET_INFO_EX deviceInfo = ev.getDeviceInfo(); - - if(!macArrayList.contains(new String(deviceInfo.szMac))) { - if(index < 1000) { // 此demo,只显示1000行搜索结果 - macArrayList.add(new String(deviceInfo.szMac)); - - // 序号 - defaultModel.setValueAt(index + 1, index, 0); - - // 初始化状态 - defaultModel.setValueAt(Res.string().getInitStateInfo(deviceInfo.byInitStatus & 0x03), index, 1); - - // IP版本 - defaultModel.setValueAt("IPV" + String.valueOf(deviceInfo.iIPVersion), index, 2); - - // IP - if(!new String(deviceInfo.szIP).trim().isEmpty()) { - defaultModel.setValueAt(new String(deviceInfo.szIP).trim(), index, 3); - } else { - defaultModel.setValueAt("", index, 3); - } - - // 端口号 - defaultModel.setValueAt(String.valueOf(deviceInfo.nPort), index, 4); - - // 子网掩码 - if(!new String(deviceInfo.szSubmask).trim().isEmpty()) { - defaultModel.setValueAt(new String(deviceInfo.szSubmask).trim(), index, 5); - } else { - defaultModel.setValueAt("", index, 5); - } - - // 网关 - if(!new String(deviceInfo.szGateway).trim().isEmpty()) { - defaultModel.setValueAt(new String(deviceInfo.szGateway).trim(), index, 6); - } else { - defaultModel.setValueAt("", index, 6); - } - - // MAC地址 - if(!new String(deviceInfo.szMac).trim().isEmpty()) { - defaultModel.setValueAt(new String(deviceInfo.szMac).trim(), index, 7); - } else { - defaultModel.setValueAt("", index, 7); - } - - // 设备类型 - if(!new String(deviceInfo.szDeviceType).trim().isEmpty()) { - defaultModel.setValueAt(new String(deviceInfo.szDeviceType).trim(), index, 8); - } else { - defaultModel.setValueAt("", index, 8); - } - - // 详细类型 - if(!new String(deviceInfo.szNewDetailType).trim().isEmpty()) { - defaultModel.setValueAt(new String(deviceInfo.szNewDetailType).trim(), index, 9); - } else { - defaultModel.setValueAt("", index, 9); - } - - // HTTP端口号 - defaultModel.setValueAt(String.valueOf(deviceInfo.nHttpPort), index, 10); - - // 将MAC地址 跟 密码重置方式,放进容器 - pwdResetHashMap.put(new String(deviceInfo.szMac).trim(), deviceInfo.byPwdResetWay); - - for(int i = 0; i < 11; i++) { - table.getColumnModel().getColumn(i).setCellRenderer(new MyTableCellRender()); - } - table.updateUI(); - - index++; - } - } - } - - else - { - super.processEvent( event ); + eventQueue.postEvent(new DeviceSearchList(target, deviceInfo)); + } + } + } + + /* + * 设备搜索的信息处理 + */ + class DeviceSearchList extends AWTEvent { + private static final long serialVersionUID = 1L; + public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1; + + private DEVICE_NET_INFO_EX deviceInfo; + + public DeviceSearchList(Object target, + DEVICE_NET_INFO_EX deviceInfo) { + super(target, EVENT_ID); + + this.deviceInfo = deviceInfo; + } + + public DEVICE_NET_INFO_EX getDeviceInfo() { + return deviceInfo; + } + } + + @Override + protected void processEvent(AWTEvent event) { + if (event instanceof DeviceSearchList) { + + DeviceSearchList ev = (DeviceSearchList) event; + + DEVICE_NET_INFO_EX deviceInfo = ev.getDeviceInfo(); + + if (!macArrayList.contains(new String(deviceInfo.szMac))) { + if (index < 1000) { // 此demo,只显示1000行搜索结果 + macArrayList.add(new String(deviceInfo.szMac)); + + // 序号 + defaultModel.setValueAt(index + 1, index, 0); + + // 初始化状态 + defaultModel.setValueAt(Res.string().getInitStateInfo(deviceInfo.byInitStatus & 0x03), index, 1); + + // IP版本 + defaultModel.setValueAt("IPV" + String.valueOf(deviceInfo.iIPVersion), index, 2); + + // IP + if (!new String(deviceInfo.szIP).trim().isEmpty()) { + defaultModel.setValueAt(new String(deviceInfo.szIP).trim(), index, 3); + } else { + defaultModel.setValueAt("", index, 3); + } + + // 端口号 + defaultModel.setValueAt(String.valueOf(deviceInfo.nPort), index, 4); + + // 子网掩码 + if (!new String(deviceInfo.szSubmask).trim().isEmpty()) { + defaultModel.setValueAt(new String(deviceInfo.szSubmask).trim(), index, 5); + } else { + defaultModel.setValueAt("", index, 5); + } + + // 网关 + if (!new String(deviceInfo.szGateway).trim().isEmpty()) { + defaultModel.setValueAt(new String(deviceInfo.szGateway).trim(), index, 6); + } else { + defaultModel.setValueAt("", index, 6); + } + + // MAC地址 + if (!new String(deviceInfo.szMac).trim().isEmpty()) { + defaultModel.setValueAt(new String(deviceInfo.szMac).trim(), index, 7); + } else { + defaultModel.setValueAt("", index, 7); + } + + // 设备类型 + if (!new String(deviceInfo.szDeviceType).trim().isEmpty()) { + defaultModel.setValueAt(new String(deviceInfo.szDeviceType).trim(), index, 8); + } else { + defaultModel.setValueAt("", index, 8); + } + + // 详细类型 + if (!new String(deviceInfo.szNewDetailType).trim().isEmpty()) { + defaultModel.setValueAt(new String(deviceInfo.szNewDetailType).trim(), index, 9); + } else { + defaultModel.setValueAt("", index, 9); + } + + // HTTP端口号 + defaultModel.setValueAt(String.valueOf(deviceInfo.nHttpPort), index, 10); + + // 将MAC地址 跟 密码重置方式,放进容器 + pwdResetHashMap.put(new String(deviceInfo.szMac).trim(), deviceInfo.byPwdResetWay); + + for (int i = 0; i < 11; i++) { + table.getColumnModel().getColumn(i).setCellRenderer(new MyTableCellRender()); + } + table.updateUI(); + + index++; + } + } + } else { + super.processEvent(event); + } + } + + private static class MyTableCellRender implements TableCellRenderer { + public MyTableCellRender() { + } + + DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); + + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, boolean isSelect, boolean hasFocus, int row, int colum) { + + Component component = dCellRenderer.getTableCellRendererComponent(table, value, + isSelect, hasFocus, row, colum); + if (String.valueOf(defaultModel.getValueAt(row, 1)).trim().equals(Res.string().getNotInitialized())) { // 未初始化,字体颜色变红 + component.setForeground(Color.RED); + } else { + component.setForeground(Color.BLACK); + } + + // 列表显示居中 + dCellRenderer.setHorizontalAlignment(JLabel.CENTER); + table.setDefaultRenderer(Object.class, dCellRenderer); + + return component; + } + } + + /* + * 检查设备IP点到点搜索的IP范围 + */ + private boolean checkIP() { + String[] startIp = startIpTextField.getText().split("\\."); + + String[] endIp = endIpTextField.getText().split("\\."); + + if (startIpTextField.getText().isEmpty()) { + JOptionPane.showMessageDialog(null, Res.string().getInputDeviceIP(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (endIpTextField.getText().isEmpty()) { + JOptionPane.showMessageDialog(null, Res.string().getInputDeviceIP(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (!startIp[0].equals(endIp[0])) { + JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (!startIp[1].equals(endIp[1])) { + JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (Integer.parseInt(startIp[2]) > Integer.parseInt(endIp[2])) { + JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (Integer.parseInt(startIp[2]) == Integer.parseInt(endIp[2]) + && Integer.parseInt(startIp[3]) > Integer.parseInt(endIp[3])) { + JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; } - } - - private static class MyTableCellRender implements TableCellRenderer { - public MyTableCellRender() {} - - DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); - - @Override - public Component getTableCellRendererComponent(JTable table, - Object value, boolean isSelect, boolean hasFocus, int row, int colum) { - - Component component = dCellRenderer.getTableCellRendererComponent(table, value, - isSelect, hasFocus, row, colum); - if(String.valueOf(defaultModel.getValueAt(row, 1)).trim().equals(Res.string().getNotInitialized())) { // 未初始化,字体颜色变红 - component.setForeground(Color.RED); - } else { - component.setForeground(Color.BLACK); - } - - // 列表显示居中 - dCellRenderer.setHorizontalAlignment(JLabel.CENTER); - table.setDefaultRenderer(Object.class, dCellRenderer); - - return component; - } - } - - /* - * 检查设备IP点到点搜索的IP范围 - */ - private boolean checkIP() { - String[] startIp = startIpTextField.getText().split("\\."); - - String[] endIp = endIpTextField.getText().split("\\."); - - if(startIpTextField.getText().isEmpty()) { - JOptionPane.showMessageDialog(null, Res.string().getInputDeviceIP(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if(endIpTextField.getText().isEmpty()) { - JOptionPane.showMessageDialog(null, Res.string().getInputDeviceIP(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if(!startIp[0].equals(endIp[0])) { - JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if(!startIp[1].equals(endIp[1])) { - JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if(Integer.parseInt(startIp[2]) > Integer.parseInt(endIp[2])) { - JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if(Integer.parseInt(startIp[2]) == Integer.parseInt(endIp[2]) - && Integer.parseInt(startIp[3]) > Integer.parseInt(endIp[3])) { - JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - count = (Integer.parseInt(endIp[2]) - Integer.parseInt(startIp[2])) * 256 - + Integer.parseInt(endIp[3]) - Integer.parseInt(startIp[3]) + 1; - - if(count > 1000) { - JOptionPane.showMessageDialog(null, Res.string().getControlScope(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - return true; - } - + + count = (Integer.parseInt(endIp[2]) - Integer.parseInt(startIp[2])) * 256 + + Integer.parseInt(endIp[3]) - Integer.parseInt(startIp[3]) + 1; + + if (count > 1000) { + JOptionPane.showMessageDialog(null, Res.string().getControlScope(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + return true; + } + private DeviceSearchPanel deviceSearchPanel; private DeviceSearchResultShowListPanel deviceSearchResultShowPanel; private DeviceInitPanel deviceIntPanel; - + private JButton deviceInitBtn; private JButton multiAndBroadcastSearchBtn; private JButton unicastSearchBtn; - + private JTextField startIpTextField; private JTextField endIpTextField; - - // 列表 - private static DefaultTableModel defaultModel; - private static JTable table; + + // 列表 + private static DefaultTableModel defaultModel; + private static JTable table; } class DevcieInitFrame extends JFrame { - /** - * - */ - private static final long serialVersionUID = 1L; - byte passwdReset; - String mac; - int row; - DefaultTableModel defaultModel; - JTable table; - - public DevcieInitFrame(byte passwdReset, String mac, int row, DefaultTableModel defaultModel, JTable table) { - setTitle(Res.string().getDeviceInit()); - setSize(300, 350); - setLayout(new BorderLayout()); - setResizable(false); - - this.passwdReset = passwdReset; - this.mac = mac; - this.row = row; - this.defaultModel = defaultModel; - this.table = table; - - initPanel = new InitPanel(); - - add(initPanel, BorderLayout.CENTER); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - dispose(); - } - }); - } - - private class InitPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public InitPanel() { - BorderEx.set(this, Res.string().getDeviceInit(), 2); - setLayout(new BorderLayout()); - - JPanel panel_1 = new JPanel(); - JPanel panel_2 = new JPanel(); - - add(panel_1, BorderLayout.CENTER); - add(panel_2, BorderLayout.SOUTH); - - panel_1.setLayout(new GridLayout(10, 1)); - panel_2.setLayout(new BorderLayout()); - - JLabel userLabel = new JLabel(Res.string().getUserName() + " : "); - JLabel passwdLabel = new JLabel(Res.string().getPassword() + " : "); - JLabel passwdLabelEx = new JLabel(Res.string().getConfirmPassword() + " : "); - JTextField userTextField = new JTextField("admin"); - passwdPasswordField = new JPasswordField("admin123"); - passwdPasswordFieldEx = new JPasswordField("admin123"); - - panel_1.add(userLabel); - panel_1.add(userTextField); - panel_1.add(passwdLabel); - panel_1.add(passwdPasswordField); - panel_1.add(passwdLabelEx); - panel_1.add(passwdPasswordFieldEx); - - userTextField.setEnabled(false); - - if((passwdReset >> 1 & 0x01) == 0) { // 手机号 - JLabel phoneLabel = new JLabel(Res.string().getPhone() + " : "); - phoneTextField = new JTextField(); - panel_1.add(phoneLabel); - panel_1.add(phoneTextField); - } else if((passwdReset >> 1 & 0x01) == 1) { // 邮箱 - JLabel mailLabel = new JLabel(Res.string().getMail() + " : "); - mailTextField = new JTextField(); - panel_1.add(mailLabel); - panel_1.add(mailTextField); - } - - deviceInitBtn = new JButton(Res.string().getDeviceInit()); - panel_2.add(deviceInitBtn, BorderLayout.CENTER); - - deviceInitBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - // 密码判空 - if(new String(passwdPasswordField.getPassword()).equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInputPassword(), - Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - // 确认密码判空 - if(new String(passwdPasswordFieldEx.getPassword()).equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInputConfirmPassword(), - Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - // 密码确认 - if(!new String(passwdPasswordField.getPassword()) - .equals(new String(passwdPasswordFieldEx.getPassword()))) { - JOptionPane.showMessageDialog(null, Res.string().getInconsistent(), - Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - // 获取手机或邮箱 - String phone_mail = ""; - if((passwdReset >> 1 & 0x01) == 0) { - phone_mail = phoneTextField.getText(); - } else if((passwdReset >> 1 & 0x01) == 1) { - phone_mail = mailTextField.getText(); - } - - // 手机或邮箱判空 - if(phone_mail.equals("")) { - if((passwdReset >> 1 & 0x01) == 0) { // 手机号 - JOptionPane.showMessageDialog(null, Res.string().getInputPhone(), - Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - - return; - } else if((passwdReset >> 1 & 0x01) == 1) { // 邮箱 - JOptionPane.showMessageDialog(null, Res.string().getInputMail(), - Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - - return; - } - } - - // 初始化 - if(DeviceInitModule.initDevAccount(mac, new String(passwdPasswordField.getPassword()), phone_mail, passwdReset)) { - dispose(); - - defaultModel.setValueAt(Res.string().getInitialized(), row, 1); - - for(int i = 0; i < 11; i++) { - table.getColumnModel().getColumn(i).setCellRenderer(new MyTableCellRender(defaultModel)); - } - table.updateUI(); - - JOptionPane.showMessageDialog(null, Res.string().getDeviceInit() + Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getDeviceInit() + Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), - Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } - }); - } - } - - private static class MyTableCellRender implements TableCellRenderer { - DefaultTableModel defaultModel; - public MyTableCellRender(DefaultTableModel defaultModel) { - this.defaultModel = defaultModel; - } - - DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); - - @Override - public Component getTableCellRendererComponent(JTable table, - Object value, boolean isSelect, boolean hasFocus, int row, int colum) { - - Component component = dCellRenderer.getTableCellRendererComponent(table, value, - isSelect, hasFocus, row, colum); - if(String.valueOf(defaultModel.getValueAt(row, 1)).trim().equals(Res.string().getNotInitialized())) { // 未初始化,字体颜色变红 - component.setForeground(Color.RED); - } else { - component.setForeground(Color.BLACK); - } - - // 列表显示居中 - dCellRenderer.setHorizontalAlignment(JLabel.CENTER); - table.setDefaultRenderer(Object.class, dCellRenderer); - - return component; - } - } - - private InitPanel initPanel; - private JPasswordField passwdPasswordField; - private JPasswordField passwdPasswordFieldEx; - private JTextField phoneTextField; - private JTextField mailTextField; - private JButton deviceInitBtn; + /** + * + */ + private static final long serialVersionUID = 1L; + byte passwdReset; + String mac; + int row; + DefaultTableModel defaultModel; + JTable table; + + public DevcieInitFrame(byte passwdReset, String mac, int row, DefaultTableModel defaultModel, JTable table) { + setTitle(Res.string().getDeviceInit()); + setSize(300, 350); + setLayout(new BorderLayout()); + setResizable(false); + + this.passwdReset = passwdReset; + this.mac = mac; + this.row = row; + this.defaultModel = defaultModel; + this.table = table; + + initPanel = new InitPanel(); + + add(initPanel, BorderLayout.CENTER); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + private class InitPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public InitPanel() { + BorderEx.set(this, Res.string().getDeviceInit(), 2); + setLayout(new BorderLayout()); + + JPanel panel_1 = new JPanel(); + JPanel panel_2 = new JPanel(); + + add(panel_1, BorderLayout.CENTER); + add(panel_2, BorderLayout.SOUTH); + + panel_1.setLayout(new GridLayout(10, 1)); + panel_2.setLayout(new BorderLayout()); + + JLabel userLabel = new JLabel(Res.string().getUserName() + " : "); + JLabel passwdLabel = new JLabel(Res.string().getPassword() + " : "); + JLabel passwdLabelEx = new JLabel(Res.string().getConfirmPassword() + " : "); + JTextField userTextField = new JTextField("admin"); + passwdPasswordField = new JPasswordField("admin123"); + passwdPasswordFieldEx = new JPasswordField("admin123"); + + panel_1.add(userLabel); + panel_1.add(userTextField); + panel_1.add(passwdLabel); + panel_1.add(passwdPasswordField); + panel_1.add(passwdLabelEx); + panel_1.add(passwdPasswordFieldEx); + + userTextField.setEnabled(false); + + if ((passwdReset >> 1 & 0x01) == 0) { // 手机号 + JLabel phoneLabel = new JLabel(Res.string().getPhone() + " : "); + phoneTextField = new JTextField(); + panel_1.add(phoneLabel); + panel_1.add(phoneTextField); + } else if ((passwdReset >> 1 & 0x01) == 1) { // 邮箱 + JLabel mailLabel = new JLabel(Res.string().getMail() + " : "); + mailTextField = new JTextField(); + panel_1.add(mailLabel); + panel_1.add(mailTextField); + } + + deviceInitBtn = new JButton(Res.string().getDeviceInit()); + panel_2.add(deviceInitBtn, BorderLayout.CENTER); + + deviceInitBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + // 密码判空 + if (new String(passwdPasswordField.getPassword()).equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInputPassword(), + Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + // 确认密码判空 + if (new String(passwdPasswordFieldEx.getPassword()).equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInputConfirmPassword(), + Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + // 密码确认 + if (!new String(passwdPasswordField.getPassword()) + .equals(new String(passwdPasswordFieldEx.getPassword()))) { + JOptionPane.showMessageDialog(null, Res.string().getInconsistent(), + Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + // 获取手机或邮箱 + String phone_mail = ""; + if ((passwdReset >> 1 & 0x01) == 0) { + phone_mail = phoneTextField.getText(); + } else if ((passwdReset >> 1 & 0x01) == 1) { + phone_mail = mailTextField.getText(); + } + + // 手机或邮箱判空 + if (phone_mail.equals("")) { + if ((passwdReset >> 1 & 0x01) == 0) { // 手机号 + JOptionPane.showMessageDialog(null, Res.string().getInputPhone(), + Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + + return; + } else if ((passwdReset >> 1 & 0x01) == 1) { // 邮箱 + JOptionPane.showMessageDialog(null, Res.string().getInputMail(), + Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + + return; + } + } + + // 初始化 + if (DeviceInitModule.initDevAccount(mac, new String(passwdPasswordField.getPassword()), phone_mail, passwdReset)) { + dispose(); + + defaultModel.setValueAt(Res.string().getInitialized(), row, 1); + + for (int i = 0; i < 11; i++) { + table.getColumnModel().getColumn(i).setCellRenderer(new MyTableCellRender(defaultModel)); + } + table.updateUI(); + + JOptionPane.showMessageDialog(null, Res.string().getDeviceInit() + Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getDeviceInit() + Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), + Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } + }); + } + } + + private static class MyTableCellRender implements TableCellRenderer { + DefaultTableModel defaultModel; + + public MyTableCellRender(DefaultTableModel defaultModel) { + this.defaultModel = defaultModel; + } + + DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); + + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, boolean isSelect, boolean hasFocus, int row, int colum) { + + Component component = dCellRenderer.getTableCellRendererComponent(table, value, + isSelect, hasFocus, row, colum); + if (String.valueOf(defaultModel.getValueAt(row, 1)).trim().equals(Res.string().getNotInitialized())) { // 未初始化,字体颜色变红 + component.setForeground(Color.RED); + } else { + component.setForeground(Color.BLACK); + } + + // 列表显示居中 + dCellRenderer.setHorizontalAlignment(JLabel.CENTER); + table.setDefaultRenderer(Object.class, dCellRenderer); + + return component; + } + } + + private InitPanel initPanel; + private JPasswordField passwdPasswordField; + private JPasswordField passwdPasswordFieldEx; + private JTextField phoneTextField; + private JTextField mailTextField; + private JButton deviceInitBtn; } public class DeviceSearchAndInit { - public static void main(String[] args) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - DeviceSearchAndInitFrame demo = new DeviceSearchAndInitFrame(); - demo.setLocationRelativeTo(null); - demo.setVisible(true); - } - }); - } + public static void main(String[] args) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + DeviceSearchAndInitFrame demo = new DeviceSearchAndInitFrame(); + demo.setLocationRelativeTo(null); + demo.setVisible(true); + } + }); + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/AddPersonDialog.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/AddPersonDialog.java index 99d0cc5..21d5b7f 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/AddPersonDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/AddPersonDialog.java @@ -25,224 +25,225 @@ import com.example.dahua.module.FaceRecognitionModule; import com.sun.jna.Memory; -public class AddPersonDialog extends JDialog{ - - /** - * - */ - private static final long serialVersionUID = 1L; - - private Memory memory = null; - private String groupId = ""; - private String groupName = ""; - - private WindowCloseListener listener; - public void addWindowCloseListener(WindowCloseListener listener) { - this.listener = listener; - } - - /** - * @param groupId 人脸库ID - * @param groupName 人脸库名称 - */ - public AddPersonDialog(String groupId, String groupName){ - setTitle(Res.string().getAddPerson()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(520, 400); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - this.groupId = groupId; - this.groupName = groupName; - - FaceServerAddPanel faceServerAddPanel = new FaceServerAddPanel(); +public class AddPersonDialog extends JDialog { + + /** + * + */ + private static final long serialVersionUID = 1L; + + private Memory memory = null; + private String groupId = ""; + private String groupName = ""; + + private WindowCloseListener listener; + + public void addWindowCloseListener(WindowCloseListener listener) { + this.listener = listener; + } + + /** + * @param groupId 人脸库ID + * @param groupName 人脸库名称 + */ + public AddPersonDialog(String groupId, String groupName) { + setTitle(Res.string().getAddPerson()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(520, 400); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + this.groupId = groupId; + this.groupName = groupName; + + FaceServerAddPanel faceServerAddPanel = new FaceServerAddPanel(); add(faceServerAddPanel, BorderLayout.CENTER); - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - dispose(); - } - }); - } - - public class FaceServerAddPanel extends JPanel{ - /** - * - */ - private static final long serialVersionUID = 1L; - - public FaceServerAddPanel() { - BorderEx.set(this, "", 4); - setLayout(new BorderLayout()); - - JPanel imagePanel = new JPanel(); - JPanel personInfoPanel = new JPanel(); - - Dimension dimension = this.getPreferredSize(); - dimension.height = 400; - dimension.width = 250; - personInfoPanel.setPreferredSize(dimension); - - add(imagePanel, BorderLayout.CENTER); - add(personInfoPanel, BorderLayout.WEST); - - /////////// 添加的人脸图片面板 ////////////////// - imagePanel.setLayout(new BorderLayout()); - addImagePanel = new PaintPanel(); // 添加的人员信息图片显示 - selectImageBtn = new JButton(Res.string().getSelectPicture()); - imagePanel.add(addImagePanel, BorderLayout.CENTER); - imagePanel.add(selectImageBtn, BorderLayout.SOUTH); - - ////////// 添加的人脸信息面板 ///////////////// - personInfoPanel.setLayout(new FlowLayout()); - JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); - JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); - JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER); - JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER); - JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER); - JLabel idTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER); - JLabel idLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER); - - Dimension dimension2 = new Dimension(); - dimension2.width = 80; - dimension2.height = 20; - goroupIdLabel.setPreferredSize(dimension2); - goroupNameLabel.setPreferredSize(dimension2); - nameLabel.setPreferredSize(dimension2); - sexLabel.setPreferredSize(dimension2); - idTypeLabel.setPreferredSize(dimension2); - idLabel.setPreferredSize(dimension2); - birthdayLabel.setPreferredSize(dimension2); - - goroupIdTextField = new JTextField(); - goroupNameTextField = new JTextField(); - nameTextField = new JTextField(); - sexComboBox = new JComboBox(Res.string().getSexStrings()); - birthdayBtn = new DateChooserJButtonEx(); - idTypeComboBox = new JComboBox(Res.string().getIdStrings()); - idTextField = new JTextField(); - birthdayCheckBox = new JCheckBox(); - - addBtn = new JButton(Res.string().getAdd()); - cancelBtn = new JButton(Res.string().getCancel()); - - birthdayBtn.setStartYear(1900); - - Dimension dimension3 = new Dimension(); - dimension3.width = 150; - dimension3.height = 20; - - sexComboBox.setPreferredSize(dimension3); - idTypeComboBox.setPreferredSize(dimension3); - goroupIdTextField.setPreferredSize(dimension3); - goroupNameTextField.setPreferredSize(dimension3); - nameTextField.setPreferredSize(dimension3); - idTextField.setPreferredSize(dimension3); - birthdayBtn.setPreferredSize(new Dimension(130, 20)); - birthdayCheckBox.setPreferredSize(new Dimension(20, 20)); - addBtn.setPreferredSize(new Dimension(120, 20)); - cancelBtn.setPreferredSize(new Dimension(120, 20)); - - goroupIdTextField.setEditable(false); - goroupNameTextField.setEditable(false); - birthdayCheckBox.setSelected(true); - - goroupIdTextField.setText(groupId); - goroupNameTextField.setText(groupName); - - personInfoPanel.add(goroupIdLabel); - personInfoPanel.add(goroupIdTextField); - personInfoPanel.add(goroupNameLabel); - personInfoPanel.add(goroupNameTextField); - personInfoPanel.add(nameLabel); - personInfoPanel.add(nameTextField); - personInfoPanel.add(sexLabel); - personInfoPanel.add(sexComboBox); - personInfoPanel.add(idTypeLabel); - personInfoPanel.add(idTypeComboBox); - personInfoPanel.add(idLabel); - personInfoPanel.add(idTextField); - personInfoPanel.add(birthdayLabel); - personInfoPanel.add(birthdayBtn); - personInfoPanel.add(birthdayCheckBox); - personInfoPanel.add(addBtn); - personInfoPanel.add(cancelBtn); - - birthdayCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent arg0) { - if(birthdayCheckBox.isSelected()) { - birthdayBtn.setEnabled(true); - } else { - birthdayBtn.setEnabled(false); - } - } - }); - - // 选择图片,获取图片的信息 - selectImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - String picPath = ""; - - // 选择图片,获取图片路径,并在界面显示 - picPath = ToolKits.openPictureFile(addImagePanel); - - if(!picPath.equals("")) { - memory = ToolKits.readPictureFile(picPath); - } - - } - }); - - // 添加人员信息 - addBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - boolean bRet = FaceRecognitionModule.addPerson(goroupIdTextField.getText(), - memory, - nameTextField.getText(), - sexComboBox.getSelectedIndex(), - birthdayCheckBox.isSelected(), birthdayBtn.getText().toString(), - idTypeComboBox.getSelectedIndex(), idTextField.getText()); - - if(bRet) { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - dispose(); - - listener.windowClosing(); - } - }); - - // 取消,关闭 - cancelBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - dispose(); - } - }); - } - } - - - // 添加人员信息窗口的组件 - private PaintPanel addImagePanel; - private JButton selectImageBtn; - - private JTextField goroupIdTextField; - private JTextField goroupNameTextField; - private JTextField nameTextField; - private JComboBox sexComboBox; - private DateChooserJButtonEx birthdayBtn; - private JComboBox idTypeComboBox; - private JTextField idTextField; - private JButton addBtn; - private JButton cancelBtn; - private JCheckBox birthdayCheckBox; + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + public class FaceServerAddPanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + + public FaceServerAddPanel() { + BorderEx.set(this, "", 4); + setLayout(new BorderLayout()); + + JPanel imagePanel = new JPanel(); + JPanel personInfoPanel = new JPanel(); + + Dimension dimension = this.getPreferredSize(); + dimension.height = 400; + dimension.width = 250; + personInfoPanel.setPreferredSize(dimension); + + add(imagePanel, BorderLayout.CENTER); + add(personInfoPanel, BorderLayout.WEST); + + /////////// 添加的人脸图片面板 ////////////////// + imagePanel.setLayout(new BorderLayout()); + addImagePanel = new PaintPanel(); // 添加的人员信息图片显示 + selectImageBtn = new JButton(Res.string().getSelectPicture()); + imagePanel.add(addImagePanel, BorderLayout.CENTER); + imagePanel.add(selectImageBtn, BorderLayout.SOUTH); + + ////////// 添加的人脸信息面板 ///////////////// + personInfoPanel.setLayout(new FlowLayout()); + JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); + JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); + JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER); + JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER); + JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER); + JLabel idTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER); + JLabel idLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER); + + Dimension dimension2 = new Dimension(); + dimension2.width = 80; + dimension2.height = 20; + goroupIdLabel.setPreferredSize(dimension2); + goroupNameLabel.setPreferredSize(dimension2); + nameLabel.setPreferredSize(dimension2); + sexLabel.setPreferredSize(dimension2); + idTypeLabel.setPreferredSize(dimension2); + idLabel.setPreferredSize(dimension2); + birthdayLabel.setPreferredSize(dimension2); + + goroupIdTextField = new JTextField(); + goroupNameTextField = new JTextField(); + nameTextField = new JTextField(); + sexComboBox = new JComboBox(Res.string().getSexStrings()); + birthdayBtn = new DateChooserJButtonEx(); + idTypeComboBox = new JComboBox(Res.string().getIdStrings()); + idTextField = new JTextField(); + birthdayCheckBox = new JCheckBox(); + + addBtn = new JButton(Res.string().getAdd()); + cancelBtn = new JButton(Res.string().getCancel()); + + birthdayBtn.setStartYear(1900); + + Dimension dimension3 = new Dimension(); + dimension3.width = 150; + dimension3.height = 20; + + sexComboBox.setPreferredSize(dimension3); + idTypeComboBox.setPreferredSize(dimension3); + goroupIdTextField.setPreferredSize(dimension3); + goroupNameTextField.setPreferredSize(dimension3); + nameTextField.setPreferredSize(dimension3); + idTextField.setPreferredSize(dimension3); + birthdayBtn.setPreferredSize(new Dimension(130, 20)); + birthdayCheckBox.setPreferredSize(new Dimension(20, 20)); + addBtn.setPreferredSize(new Dimension(120, 20)); + cancelBtn.setPreferredSize(new Dimension(120, 20)); + + goroupIdTextField.setEditable(false); + goroupNameTextField.setEditable(false); + birthdayCheckBox.setSelected(true); + + goroupIdTextField.setText(groupId); + goroupNameTextField.setText(groupName); + + personInfoPanel.add(goroupIdLabel); + personInfoPanel.add(goroupIdTextField); + personInfoPanel.add(goroupNameLabel); + personInfoPanel.add(goroupNameTextField); + personInfoPanel.add(nameLabel); + personInfoPanel.add(nameTextField); + personInfoPanel.add(sexLabel); + personInfoPanel.add(sexComboBox); + personInfoPanel.add(idTypeLabel); + personInfoPanel.add(idTypeComboBox); + personInfoPanel.add(idLabel); + personInfoPanel.add(idTextField); + personInfoPanel.add(birthdayLabel); + personInfoPanel.add(birthdayBtn); + personInfoPanel.add(birthdayCheckBox); + personInfoPanel.add(addBtn); + personInfoPanel.add(cancelBtn); + + birthdayCheckBox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent arg0) { + if (birthdayCheckBox.isSelected()) { + birthdayBtn.setEnabled(true); + } else { + birthdayBtn.setEnabled(false); + } + } + }); + + // 选择图片,获取图片的信息 + selectImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + String picPath = ""; + + // 选择图片,获取图片路径,并在界面显示 + picPath = ToolKits.openPictureFile(addImagePanel); + + if (!picPath.equals("")) { + memory = ToolKits.readPictureFile(picPath); + } + + } + }); + + // 添加人员信息 + addBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + boolean bRet = FaceRecognitionModule.addPerson(goroupIdTextField.getText(), + memory, + nameTextField.getText(), + sexComboBox.getSelectedIndex(), + birthdayCheckBox.isSelected(), birthdayBtn.getText().toString(), + idTypeComboBox.getSelectedIndex(), idTextField.getText()); + + if (bRet) { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + dispose(); + + listener.windowClosing(); + } + }); + + // 取消,关闭 + cancelBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + dispose(); + } + }); + } + } + + + // 添加人员信息窗口的组件 + private PaintPanel addImagePanel; + private JButton selectImageBtn; + + private JTextField goroupIdTextField; + private JTextField goroupNameTextField; + private JTextField nameTextField; + private JComboBox sexComboBox; + private DateChooserJButtonEx birthdayBtn; + private JComboBox idTypeComboBox; + private JTextField idTextField; + private JButton addBtn; + private JButton cancelBtn; + private JCheckBox birthdayCheckBox; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DispositionOperateDialog.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DispositionOperateDialog.java index 9f6cb91..12e9874 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DispositionOperateDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DispositionOperateDialog.java @@ -33,320 +33,323 @@ import javax.swing.table.DefaultTableModel; public class DispositionOperateDialog extends JDialog { - /** - * - */ - private static final long serialVersionUID = 1L; - - // 通道列表 - private Vector chnlist = new Vector(); - - // 通道个数 - private int nChn = LoginModule.m_stDeviceInfo.byChanNum; - - // 通道列表, 用于布控 - private ArrayList< Integer> arrayList = new ArrayList(); - - // key:通道 value:相似度, 用于撤控 - private HashMap hashMap = new HashMap(); - - String groupId = ""; - String groupName = ""; - - public DispositionOperateDialog(String groupId, String groupName) { - setTitle(Res.string().getDisposition() + "/" + Res.string().getDelDisposition()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(450, 400); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - for(int i = 1; i < nChn + 1; i++) { - chnlist.add(Res.string().getChannel() + " " + String.valueOf(i)); - } - - this.groupId = groupId; - this.groupName = groupName; - - DispositionListPanel dispositionListPanel = new DispositionListPanel(); - DispositionInfoPanel dispositionInfoPanel = new DispositionInfoPanel(); - - add(dispositionListPanel, BorderLayout.CENTER); - add(dispositionInfoPanel, BorderLayout.NORTH); - - findChnAndSimilary(); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - dispose(); - } - }); - } - - /* - * 布控显示列表 - */ - private class DispositionListPanel extends JPanel { - private static final long serialVersionUID = 1L; - public DispositionListPanel() { - BorderEx.set(this, "", 2); - setLayout(new BorderLayout()); - - JPanel panel = new JPanel(); - JPanel panel2 = new JPanel(); - JPanel panel3 = new JPanel(); - - Dimension dimension = new Dimension(); - dimension.width = 145; - panel.setPreferredSize(dimension); - panel.setLayout(new BorderLayout()); - panel.add(panel2, BorderLayout.NORTH); - panel.add(panel3, BorderLayout.SOUTH); - - addBtn = new JButton(Res.string().getAdd()); - refreshBtn = new JButton(Res.string().getFresh()); - panel2.setLayout(new GridLayout(2, 1)); - panel2.add(addBtn); - panel2.add(refreshBtn); - - dispositionBtn = new JButton(Res.string().getDisposition()); - delDispositionBtn = new JButton(Res.string().getDelDisposition()); - panel3.setLayout(new GridLayout(2, 1)); - panel3.add(dispositionBtn); - panel3.add(delDispositionBtn); - - data = new Object[512][2]; - defaultTableModel = new DefaultTableModel(data, Res.string().getDispositionTable()); - table = new JTable(defaultTableModel){ // 列表不可编辑 - private static final long serialVersionUID = 1L; - @Override - public boolean isCellEditable(int row, int column) { - return false; - } - }; - - DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); - dCellRenderer.setHorizontalAlignment(JLabel.CENTER); - table.setDefaultRenderer(Object.class, dCellRenderer); - - add(new JScrollPane(table), BorderLayout.CENTER); - add(panel, BorderLayout.EAST); - - // 添加通道和相似度到列表 - addBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - boolean isExit = false; - - String chn = String.valueOf(chnComboBox.getSelectedIndex() + 1); - String similary = similaryTextField.getText(); - - if(similaryTextField.getText().equals("") - || Integer.parseInt(similaryTextField.getText()) > 100) { - JOptionPane.showMessageDialog(null, Res.string().getSimilarityRange(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - // 如果存在了通道号,列表修改相应的相似度 - for(int i = 0; i < nChn; i++) { - if(chn.equals(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim())) { - defaultTableModel.setValueAt(similary, i, 1); - isExit = true; - break; - } - } - - if(isExit) { - return; - } - - // 如果不存在通道号,按顺序添加人列表 - for(int i = 0; i < nChn; i++) { - if(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim().equals("") - || defaultTableModel.getValueAt(i, 0) == null) { - defaultTableModel.setValueAt(chn, i, 0); - defaultTableModel.setValueAt(similary, i, 1); - break; - } - } - } - }); - - // 刷新已布控的通道和相似度信息 - refreshBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - findChnAndSimilary(); - } - }); - - // 布控 - dispositionBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - hashMap.clear(); - - // 获取列表里的数据 - for(int i = 0; i < nChn; i++) { - // 判断通道号是否为空 - if(!String.valueOf(defaultTableModel.getValueAt(i, 0)).trim().equals("") - && defaultTableModel.getValueAt(i, 0) != null) { - - // 判断相似度是否为空 - if(!String.valueOf(defaultTableModel.getValueAt(i, 1)).trim().equals("") - && defaultTableModel.getValueAt(i, 1) != null) { - hashMap.put(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim()), - Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 1)).trim())); - } else { - hashMap.put(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim()), 0); - } - } - } - System.out.println("size:" + hashMap.size()); - if(hashMap.size() == 0) { - JOptionPane.showMessageDialog(null, Res.string().getAddDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(!FaceRecognitionModule.putDisposition(goroupIdTextField.getText(), hashMap)) { - JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - - // 刷新列表 - findChnAndSimilary(); - } - }); - - delDispositionBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - arrayList.clear(); - - // 获取所有选中行数 - int[] rows = null; - rows = table.getSelectedRows(); - - if(rows == null) { - JOptionPane.showMessageDialog(null, Res.string().getSelectDelDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - // 获取所有选中,非空的通道号 - for(int i = 0; i < rows.length; i++) { - if(!String.valueOf(defaultTableModel.getValueAt(rows[i], 0)).trim().equals("") - && defaultTableModel.getValueAt(rows[i], 0) != null) { - arrayList.add(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(rows[i], 0)).trim())); - } - } - - if(arrayList.size() == 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectDelDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(!FaceRecognitionModule.delDisposition(goroupIdTextField.getText(), arrayList)) { - JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - - // 刷新列表 - findChnAndSimilary(); - } - }); - } - } - - /* - * 布控信息 - */ - private class DispositionInfoPanel extends JPanel { - /** - * - */ - private static final long serialVersionUID = 1L; - public DispositionInfoPanel() { - BorderEx.set(this, "", 2); - setLayout(new FlowLayout()); - - Dimension dimension = new Dimension(); - dimension.height = 80; - setPreferredSize(dimension); - - JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); - JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); - JLabel chnLabel = new JLabel(Res.string().getChannel(), JLabel.CENTER); - JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER); - - goroupIdTextField = new JTextField(); - goroupNameTextField = new JTextField(); - chnComboBox = new JComboBox(chnlist); - similaryTextField = new JTextField(); - - Dimension dimension1 = new Dimension(); - dimension1.width = 80; - dimension1.height = 20; - goroupIdLabel.setPreferredSize(dimension1); - goroupNameLabel.setPreferredSize(dimension1); - chnLabel.setPreferredSize(dimension1); - similaryLabel.setPreferredSize(dimension1); - goroupIdTextField.setPreferredSize(new Dimension(120, 20)); - goroupNameTextField.setPreferredSize(new Dimension(120, 20)); - chnComboBox.setPreferredSize(new Dimension(120, 20)); - similaryTextField.setPreferredSize(new Dimension(120, 20)); - - add(goroupIdLabel); - add(goroupIdTextField); - add(goroupNameLabel); - add(goroupNameTextField); - add(chnLabel); - add(chnComboBox); - add(similaryLabel); - add(similaryTextField); - - ToolKits.limitTextFieldLength(similaryTextField, 3); - - goroupIdTextField.setEditable(false); - goroupNameTextField.setEditable(false); - - goroupIdTextField.setText(groupId); - goroupNameTextField.setText(groupName); - } - } - - // 查找人脸库的布控通道以及对应的相似度 - private void findChnAndSimilary() { - // 清空列表 - defaultTableModel.setRowCount(0); - defaultTableModel.setRowCount(512); - - // 查询布控信息 - NetSDKLib.NET_FACERECONGNITION_GROUP_INFO[] groupInfos = FaceRecognitionModule.findGroupInfo(goroupIdTextField.getText()); - - if(groupInfos == null) { - return; - } - - for(int i = 0; i < groupInfos[0].nRetChnCount; i++) { - defaultTableModel.setValueAt(String.valueOf(groupInfos[0].nChannel[i] + 1), i, 0); - defaultTableModel.setValueAt(String.valueOf(groupInfos[0].nSimilarity[i]), i, 1); - } - } - - private Object[][] data; - private DefaultTableModel defaultTableModel; - private JTable table; - - private JButton addBtn; - private JButton refreshBtn; - private JButton dispositionBtn; - private JButton delDispositionBtn; - private JTextField goroupIdTextField; - private JTextField goroupNameTextField; - private JComboBox chnComboBox; - private JTextField similaryTextField; + /** + * + */ + private static final long serialVersionUID = 1L; + + // 通道列表 + private Vector chnlist = new Vector(); + + // 通道个数 + private int nChn = LoginModule.m_stDeviceInfo.byChanNum; + + // 通道列表, 用于布控 + private ArrayList arrayList = new ArrayList(); + + // key:通道 value:相似度, 用于撤控 + private HashMap hashMap = new HashMap(); + + String groupId = ""; + String groupName = ""; + + public DispositionOperateDialog(String groupId, String groupName) { + setTitle(Res.string().getDisposition() + "/" + Res.string().getDelDisposition()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(450, 400); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + for (int i = 1; i < nChn + 1; i++) { + chnlist.add(Res.string().getChannel() + " " + String.valueOf(i)); + } + + this.groupId = groupId; + this.groupName = groupName; + + DispositionListPanel dispositionListPanel = new DispositionListPanel(); + DispositionInfoPanel dispositionInfoPanel = new DispositionInfoPanel(); + + add(dispositionListPanel, BorderLayout.CENTER); + add(dispositionInfoPanel, BorderLayout.NORTH); + + findChnAndSimilary(); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + /* + * 布控显示列表 + */ + private class DispositionListPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public DispositionListPanel() { + BorderEx.set(this, "", 2); + setLayout(new BorderLayout()); + + JPanel panel = new JPanel(); + JPanel panel2 = new JPanel(); + JPanel panel3 = new JPanel(); + + Dimension dimension = new Dimension(); + dimension.width = 145; + panel.setPreferredSize(dimension); + panel.setLayout(new BorderLayout()); + panel.add(panel2, BorderLayout.NORTH); + panel.add(panel3, BorderLayout.SOUTH); + + addBtn = new JButton(Res.string().getAdd()); + refreshBtn = new JButton(Res.string().getFresh()); + panel2.setLayout(new GridLayout(2, 1)); + panel2.add(addBtn); + panel2.add(refreshBtn); + + dispositionBtn = new JButton(Res.string().getDisposition()); + delDispositionBtn = new JButton(Res.string().getDelDisposition()); + panel3.setLayout(new GridLayout(2, 1)); + panel3.add(dispositionBtn); + panel3.add(delDispositionBtn); + + data = new Object[512][2]; + defaultTableModel = new DefaultTableModel(data, Res.string().getDispositionTable()); + table = new JTable(defaultTableModel) { // 列表不可编辑 + private static final long serialVersionUID = 1L; + + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + }; + + DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); + dCellRenderer.setHorizontalAlignment(JLabel.CENTER); + table.setDefaultRenderer(Object.class, dCellRenderer); + + add(new JScrollPane(table), BorderLayout.CENTER); + add(panel, BorderLayout.EAST); + + // 添加通道和相似度到列表 + addBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + boolean isExit = false; + + String chn = String.valueOf(chnComboBox.getSelectedIndex() + 1); + String similary = similaryTextField.getText(); + + if (similaryTextField.getText().equals("") + || Integer.parseInt(similaryTextField.getText()) > 100) { + JOptionPane.showMessageDialog(null, Res.string().getSimilarityRange(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + // 如果存在了通道号,列表修改相应的相似度 + for (int i = 0; i < nChn; i++) { + if (chn.equals(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim())) { + defaultTableModel.setValueAt(similary, i, 1); + isExit = true; + break; + } + } + + if (isExit) { + return; + } + + // 如果不存在通道号,按顺序添加人列表 + for (int i = 0; i < nChn; i++) { + if (String.valueOf(defaultTableModel.getValueAt(i, 0)).trim().equals("") + || defaultTableModel.getValueAt(i, 0) == null) { + defaultTableModel.setValueAt(chn, i, 0); + defaultTableModel.setValueAt(similary, i, 1); + break; + } + } + } + }); + + // 刷新已布控的通道和相似度信息 + refreshBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + findChnAndSimilary(); + } + }); + + // 布控 + dispositionBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + hashMap.clear(); + + // 获取列表里的数据 + for (int i = 0; i < nChn; i++) { + // 判断通道号是否为空 + if (!String.valueOf(defaultTableModel.getValueAt(i, 0)).trim().equals("") + && defaultTableModel.getValueAt(i, 0) != null) { + + // 判断相似度是否为空 + if (!String.valueOf(defaultTableModel.getValueAt(i, 1)).trim().equals("") + && defaultTableModel.getValueAt(i, 1) != null) { + hashMap.put(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim()), + Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 1)).trim())); + } else { + hashMap.put(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim()), 0); + } + } + } + System.out.println("size:" + hashMap.size()); + if (hashMap.size() == 0) { + JOptionPane.showMessageDialog(null, Res.string().getAddDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (!FaceRecognitionModule.putDisposition(goroupIdTextField.getText(), hashMap)) { + JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + + // 刷新列表 + findChnAndSimilary(); + } + }); + + delDispositionBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + arrayList.clear(); + + // 获取所有选中行数 + int[] rows = null; + rows = table.getSelectedRows(); + + if (rows == null) { + JOptionPane.showMessageDialog(null, Res.string().getSelectDelDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + // 获取所有选中,非空的通道号 + for (int i = 0; i < rows.length; i++) { + if (!String.valueOf(defaultTableModel.getValueAt(rows[i], 0)).trim().equals("") + && defaultTableModel.getValueAt(rows[i], 0) != null) { + arrayList.add(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(rows[i], 0)).trim())); + } + } + + if (arrayList.size() == 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectDelDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (!FaceRecognitionModule.delDisposition(goroupIdTextField.getText(), arrayList)) { + JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + + // 刷新列表 + findChnAndSimilary(); + } + }); + } + } + + /* + * 布控信息 + */ + private class DispositionInfoPanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + + public DispositionInfoPanel() { + BorderEx.set(this, "", 2); + setLayout(new FlowLayout()); + + Dimension dimension = new Dimension(); + dimension.height = 80; + setPreferredSize(dimension); + + JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); + JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); + JLabel chnLabel = new JLabel(Res.string().getChannel(), JLabel.CENTER); + JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER); + + goroupIdTextField = new JTextField(); + goroupNameTextField = new JTextField(); + chnComboBox = new JComboBox(chnlist); + similaryTextField = new JTextField(); + + Dimension dimension1 = new Dimension(); + dimension1.width = 80; + dimension1.height = 20; + goroupIdLabel.setPreferredSize(dimension1); + goroupNameLabel.setPreferredSize(dimension1); + chnLabel.setPreferredSize(dimension1); + similaryLabel.setPreferredSize(dimension1); + goroupIdTextField.setPreferredSize(new Dimension(120, 20)); + goroupNameTextField.setPreferredSize(new Dimension(120, 20)); + chnComboBox.setPreferredSize(new Dimension(120, 20)); + similaryTextField.setPreferredSize(new Dimension(120, 20)); + + add(goroupIdLabel); + add(goroupIdTextField); + add(goroupNameLabel); + add(goroupNameTextField); + add(chnLabel); + add(chnComboBox); + add(similaryLabel); + add(similaryTextField); + + ToolKits.limitTextFieldLength(similaryTextField, 3); + + goroupIdTextField.setEditable(false); + goroupNameTextField.setEditable(false); + + goroupIdTextField.setText(groupId); + goroupNameTextField.setText(groupName); + } + } + + // 查找人脸库的布控通道以及对应的相似度 + private void findChnAndSimilary() { + // 清空列表 + defaultTableModel.setRowCount(0); + defaultTableModel.setRowCount(512); + + // 查询布控信息 + NetSDKLib.NET_FACERECONGNITION_GROUP_INFO[] groupInfos = FaceRecognitionModule.findGroupInfo(goroupIdTextField.getText()); + + if (groupInfos == null) { + return; + } + + for (int i = 0; i < groupInfos[0].nRetChnCount; i++) { + defaultTableModel.setValueAt(String.valueOf(groupInfos[0].nChannel[i] + 1), i, 0); + defaultTableModel.setValueAt(String.valueOf(groupInfos[0].nSimilarity[i]), i, 1); + } + } + + private Object[][] data; + private DefaultTableModel defaultTableModel; + private JTable table; + + private JButton addBtn; + private JButton refreshBtn; + private JButton dispositionBtn; + private JButton delDispositionBtn; + private JTextField goroupIdTextField; + private JTextField goroupNameTextField; + private JComboBox chnComboBox; + private JTextField similaryTextField; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DownloadPictureDialog.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DownloadPictureDialog.java index a59a954..796f1a2 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DownloadPictureDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/DownloadPictureDialog.java @@ -25,115 +25,115 @@ import javax.swing.SwingUtilities; import javax.swing.SwingWorker; -public class DownloadPictureDialog extends JDialog{ - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DownloadPictureDialog() { - setTitle("下载图片"); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(380, 500); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - JLabel picPathLabel = new JLabel("图片路径:", JLabel.CENTER); - picPathTextField = new JTextField(); - downloadBth = new JButton("下载图片"); - - picPathTextField.setPreferredSize(new Dimension(180, 20)); - downloadBth.setPreferredSize(new Dimension(80, 20)); - - paintPanel = new PaintPanel(); - paintPanel.setPreferredSize(new Dimension(360, 450)); - - setLayout(new FlowLayout()); - add(picPathLabel); - add(picPathTextField); - add(downloadBth); - add(paintPanel); - - downloadBth.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - paintPanel.setOpaque(true); - paintPanel.repaint(); - downloadBth.setEnabled(false); - } - }); - - downloadPicture(); - } - }); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - dispose(); - } - }); - } - - private void downloadPicture() { - new SwingWorker() { - String szFileName = ""; // 要下载的图片路径 - String pszFileDst = ""; // 保存图片的路径 - - @Override - protected Boolean doInBackground() { - if(picPathTextField.getText().isEmpty()) { - JOptionPane.showMessageDialog(null, "请输入图片地址", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - szFileName = picPathTextField.getText(); - pszFileDst = "./person.jpg"; - - File file = new File(pszFileDst); - if(file.exists()) { - file.delete(); - } - - if(!FaceRecognitionModule.downloadPersonPic(szFileName, pszFileDst)) { - return false; - } - - return true; - } - - @Override - protected void done() { - if(picPathTextField.getText().isEmpty()) { - return; - } - - try { - if(get()) { - // 下载成功后,面板上显示下载的图片 - ToolKits.openPictureFile(pszFileDst, paintPanel); - } else { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } catch (HeadlessException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - downloadBth.setEnabled(true); - } - }.execute(); - } - - private JTextField picPathTextField; - private PaintPanel paintPanel; - private JButton downloadBth; +public class DownloadPictureDialog extends JDialog { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public DownloadPictureDialog() { + setTitle("下载图片"); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(380, 500); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + JLabel picPathLabel = new JLabel("图片路径:", JLabel.CENTER); + picPathTextField = new JTextField(); + downloadBth = new JButton("下载图片"); + + picPathTextField.setPreferredSize(new Dimension(180, 20)); + downloadBth.setPreferredSize(new Dimension(80, 20)); + + paintPanel = new PaintPanel(); + paintPanel.setPreferredSize(new Dimension(360, 450)); + + setLayout(new FlowLayout()); + add(picPathLabel); + add(picPathTextField); + add(downloadBth); + add(paintPanel); + + downloadBth.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + paintPanel.setOpaque(true); + paintPanel.repaint(); + downloadBth.setEnabled(false); + } + }); + + downloadPicture(); + } + }); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + private void downloadPicture() { + new SwingWorker() { + String szFileName = ""; // 要下载的图片路径 + String pszFileDst = ""; // 保存图片的路径 + + @Override + protected Boolean doInBackground() { + if (picPathTextField.getText().isEmpty()) { + JOptionPane.showMessageDialog(null, "请输入图片地址", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + szFileName = picPathTextField.getText(); + pszFileDst = "./person.jpg"; + + File file = new File(pszFileDst); + if (file.exists()) { + file.delete(); + } + + if (!FaceRecognitionModule.downloadPersonPic(szFileName, pszFileDst)) { + return false; + } + + return true; + } + + @Override + protected void done() { + if (picPathTextField.getText().isEmpty()) { + return; + } + + try { + if (get()) { + // 下载成功后,面板上显示下载的图片 + ToolKits.openPictureFile(pszFileDst, paintPanel); + } else { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } catch (HeadlessException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + downloadBth.setEnabled(true); + } + }.execute(); + } + + private JTextField picPathTextField; + private PaintPanel paintPanel; + private JButton downloadBth; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FaceRecognition.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FaceRecognition.java index d8c31bb..81560ac 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FaceRecognition.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FaceRecognition.java @@ -43,1154 +43,1156 @@ import com.example.dahua.module.RealPlayModule; import com.sun.jna.Pointer; +class FaceRecognitionFrame extends JFrame { + private static final long serialVersionUID = 1L; -class FaceRecognitionFrame extends JFrame{ - private static final long serialVersionUID = 1L; - - private Vector chnList = new Vector(); - - private boolean isRealplay = false; - private static boolean isAttach = false; - - // 设备断线通知回调 - private static DisConnect disConnect = new DisConnect(); - - // 网络连接恢复 - private static HaveReConnect haveReConnect = new HaveReConnect(); - - // 预览句柄 - public static LLong m_hPlayHandle = new LLong(0); - - // 订阅句柄 - public static NetSDKLib.LLong m_hAttachHandle = new NetSDKLib.LLong(0); - - // 获取界面窗口 - private static JFrame frame = new JFrame(); - - // 人脸库界面 - private GroupOperateDialog groupOperateDialog = null; - - // 全景图 - private static BufferedImage globalBufferedImage = null; - - // 人脸图 - private static BufferedImage personBufferedImage = null; - - // 候选人图CLIENT_SetNetworkParam - private static BufferedImage candidateBufferedImage = null; - - // 用于人脸检测 - private static int groupId = 0; - - private static int index = -1; - - public FaceRecognitionFrame() { - setTitle(Res.string().getFaceRecognition()); - setLayout(new BorderLayout()); - pack(); - setSize(800, 560); - setResizable(false); - setLocationRelativeTo(null); - LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化 - - try { + private Vector chnList = new Vector(); + + private boolean isRealplay = false; + private static boolean isAttach = false; + + // 设备断线通知回调 + private static DisConnect disConnect = new DisConnect(); + + // 网络连接恢复 + private static HaveReConnect haveReConnect = new HaveReConnect(); + + // 预览句柄 + public static LLong m_hPlayHandle = new LLong(0); + + // 订阅句柄 + public static NetSDKLib.LLong m_hAttachHandle = new NetSDKLib.LLong(0); + + // 获取界面窗口 + private static JFrame frame = new JFrame(); + + // 人脸库界面 + private GroupOperateDialog groupOperateDialog = null; + + // 全景图 + private static BufferedImage globalBufferedImage = null; + + // 人脸图 + private static BufferedImage personBufferedImage = null; + + // 候选人图CLIENT_SetNetworkParam + private static BufferedImage candidateBufferedImage = null; + + // 用于人脸检测 + private static int groupId = 0; + + private static int index = -1; + + public FaceRecognitionFrame() { + setTitle(Res.string().getFaceRecognition()); + setLayout(new BorderLayout()); + pack(); + setSize(800, 560); + setResizable(false); + setLocationRelativeTo(null); + LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化 + + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { - e.printStackTrace(); - } - - loginPanel = new LoginPanel(); - FaceRecognitionEventPanel facePanel = new FaceRecognitionEventPanel(); - - add(loginPanel, BorderLayout.NORTH); - add(facePanel, BorderLayout.CENTER); - - - loginPanel.addLoginBtnActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(loginPanel.checkLoginText()) { - if(login()) { - frame = ToolKits.getFrame(e); - frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getOnline()); - } - } - - } - }); - - loginPanel.addLogoutBtnActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - frame.setTitle(Res.string().getFaceRecognition()); - logout(); - } - }); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 0); - RealPlayModule.stopRealPlay(m_hPlayHandle); - FaceRecognitionModule.stopRealLoadPicture(m_hAttachHandle); - LoginModule.logout(); - LoginModule.cleanup(); // 关闭工程,释放资源 - - dispose(); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - FunctionList demo = new FunctionList(); - demo.setVisible(true); - } - }); - } - }); - } - - /////////////////面板/////////////////// - // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 - private static class DisConnect implements NetSDKLib.fDisConnect { - public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); - // 断线提示 - SwingUtilities.invokeLater(new Runnable() { - public void run() { - frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getDisConnectReconnecting()); - } - }); - } - } - - // 网络连接恢复,设备重连成功回调 - // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数 - private static class HaveReConnect implements NetSDKLib.fHaveReConnect { - public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); - - // 重连提示 - SwingUtilities.invokeLater(new Runnable() { - public void run() { - frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getOnline()); - } - }); - } - } - - // 登录 - public boolean login() { - if(LoginModule.login(loginPanel.ipTextArea.getText(), - Integer.parseInt(loginPanel.portTextArea.getText()), - loginPanel.nameTextArea.getText(), - new String(loginPanel.passwordTextArea.getPassword()))) { - - loginPanel.setButtonEnable(true); - setEnable(true); - - for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { - chnList.add(Res.string().getChannel() + " " + String.valueOf(i)); - } - - // 登陆成功,将通道添加到控件 - chnComboBox.setModel(new DefaultComboBoxModel(chnList)); - } else { - JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - return true; - } - - // 登出 - public void logout() { - FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 0); - RealPlayModule.stopRealPlay(m_hPlayHandle); - FaceRecognitionModule.stopRealLoadPicture(m_hAttachHandle); - LoginModule.logout(); - - loginPanel.setButtonEnable(false); - setEnable(false); - realplayWindowPanel.repaint(); - - isRealplay = false; - realplayBtn.setText(Res.string().getStartRealPlay()); - - isAttach = false; - - attachBtn.setText(Res.string().getAttach()); - globalPicLabel.setText(Res.string().getGlobalPicture() + " ------ [" + Res.string().getEventType() + "]"); - - globalPicShowPanel.setOpaque(true); - globalPicShowPanel.repaint(); - - personPicShowPanel.setOpaque(true); - personPicShowPanel.repaint(); - - candidatePicShowPanel.setOpaque(true); - candidatePicShowPanel.repaint(); + e.printStackTrace(); + } + + loginPanel = new LoginPanel(); + FaceRecognitionEventPanel facePanel = new FaceRecognitionEventPanel(); + + add(loginPanel, BorderLayout.NORTH); + add(facePanel, BorderLayout.CENTER); + + + loginPanel.addLoginBtnActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (loginPanel.checkLoginText()) { + if (login()) { + frame = ToolKits.getFrame(e); + frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getOnline()); + } + } + + } + }); + + loginPanel.addLogoutBtnActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + frame.setTitle(Res.string().getFaceRecognition()); + logout(); + } + }); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 0); + RealPlayModule.stopRealPlay(m_hPlayHandle); + FaceRecognitionModule.stopRealLoadPicture(m_hAttachHandle); + LoginModule.logout(); + LoginModule.cleanup(); // 关闭工程,释放资源 + + dispose(); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + FunctionList demo = new FunctionList(); + demo.setVisible(true); + } + }); + } + }); + } + + /////////////////面板/////////////////// + // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 + private static class DisConnect implements NetSDKLib.fDisConnect { + public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); + // 断线提示 + SwingUtilities.invokeLater(new Runnable() { + public void run() { + frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getDisConnectReconnecting()); + } + }); + } + } + + // 网络连接恢复,设备重连成功回调 + // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数 + private static class HaveReConnect implements NetSDKLib.fHaveReConnect { + public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); + + // 重连提示 + SwingUtilities.invokeLater(new Runnable() { + public void run() { + frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getOnline()); + } + }); + } + } + + // 登录 + public boolean login() { + if (LoginModule.login(loginPanel.ipTextArea.getText(), + Integer.parseInt(loginPanel.portTextArea.getText()), + loginPanel.nameTextArea.getText(), + new String(loginPanel.passwordTextArea.getPassword()))) { + + loginPanel.setButtonEnable(true); + setEnable(true); + + for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { + chnList.add(Res.string().getChannel() + " " + String.valueOf(i)); + } + + // 登陆成功,将通道添加到控件 + chnComboBox.setModel(new DefaultComboBoxModel(chnList)); + } else { + JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + return true; + } + + // 登出 + public void logout() { + FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 0); + RealPlayModule.stopRealPlay(m_hPlayHandle); + FaceRecognitionModule.stopRealLoadPicture(m_hAttachHandle); + LoginModule.logout(); + + loginPanel.setButtonEnable(false); + setEnable(false); + realplayWindowPanel.repaint(); + + isRealplay = false; + realplayBtn.setText(Res.string().getStartRealPlay()); + + isAttach = false; + + attachBtn.setText(Res.string().getAttach()); + globalPicLabel.setText(Res.string().getGlobalPicture() + " ------ [" + Res.string().getEventType() + "]"); + + globalPicShowPanel.setOpaque(true); + globalPicShowPanel.repaint(); + + personPicShowPanel.setOpaque(true); + personPicShowPanel.repaint(); + + candidatePicShowPanel.setOpaque(true); + candidatePicShowPanel.repaint(); timeTextField.setText(""); - sexTextField.setText(""); - ageTextField.setText(""); - raceTextField.setText(""); - eyeTextField.setText(""); - mouthTextField.setText(""); - maskTextField.setText(""); - beardTextField.setText(""); - - nameTextField.setText(""); - sexTextField2.setText(""); - birthdayTextField.setText(""); - idNoTextField.setText(""); - groupIdTextField.setText(""); - groupNameTextField.setText(""); - similaryTextField.setText(""); - - for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) { - chnList.clear(); - } - - chnComboBox.setModel(new DefaultComboBoxModel()); - - groupId = 0; - globalBufferedImage = null; - personBufferedImage = null; - candidateBufferedImage = null; - } - - public class FaceRecognitionEventPanel extends JPanel{ - /** - * - */ - private static final long serialVersionUID = 1L; - public FaceRecognitionEventPanel() { - BorderEx.set(this, "", 2); - setLayout(new BorderLayout()); - - JPanel operatePanel = new JPanel(); // 通道、预览、订阅 - JPanel panel = new JPanel(); - - add(operatePanel, BorderLayout.NORTH); - add(panel, BorderLayout.CENTER); - - /* - * 操作面板:通道、预览、订阅按钮 - */ - chnlabel = new JLabel(Res.string().getChannel()); - chnComboBox = new JComboBox(); - - realplayBtn = new JButton(Res.string().getStartRealPlay()); - attachBtn = new JButton(Res.string().getAttach()); - faceDataBaseBtn = new JButton(Res.string().getGroupOperate()); - faceEventRecordBtn = new JButton("查找事件记录"); - - operatePanel.setLayout(new FlowLayout()); - operatePanel.add(chnlabel); - operatePanel.add(chnComboBox); - operatePanel.add(realplayBtn); - operatePanel.add(attachBtn); - operatePanel.add(faceDataBaseBtn); + sexTextField.setText(""); + ageTextField.setText(""); + raceTextField.setText(""); + eyeTextField.setText(""); + mouthTextField.setText(""); + maskTextField.setText(""); + beardTextField.setText(""); + + nameTextField.setText(""); + sexTextField2.setText(""); + birthdayTextField.setText(""); + idNoTextField.setText(""); + groupIdTextField.setText(""); + groupNameTextField.setText(""); + similaryTextField.setText(""); + + for (int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) { + chnList.clear(); + } + + chnComboBox.setModel(new DefaultComboBoxModel()); + + groupId = 0; + globalBufferedImage = null; + personBufferedImage = null; + candidateBufferedImage = null; + } + + public class FaceRecognitionEventPanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + + public FaceRecognitionEventPanel() { + BorderEx.set(this, "", 2); + setLayout(new BorderLayout()); + + JPanel operatePanel = new JPanel(); // 通道、预览、订阅 + JPanel panel = new JPanel(); + + add(operatePanel, BorderLayout.NORTH); + add(panel, BorderLayout.CENTER); + + /* + * 操作面板:通道、预览、订阅按钮 + */ + chnlabel = new JLabel(Res.string().getChannel()); + chnComboBox = new JComboBox(); + + realplayBtn = new JButton(Res.string().getStartRealPlay()); + attachBtn = new JButton(Res.string().getAttach()); + faceDataBaseBtn = new JButton(Res.string().getGroupOperate()); + faceEventRecordBtn = new JButton("查找事件记录"); + + operatePanel.setLayout(new FlowLayout()); + operatePanel.add(chnlabel); + operatePanel.add(chnComboBox); + operatePanel.add(realplayBtn); + operatePanel.add(attachBtn); + operatePanel.add(faceDataBaseBtn); // operatePanel.add(faceEventRecordBtn); - - Dimension dim = new Dimension(); - dim.width = 120; - dim.height = 20; - - chnComboBox.setPreferredSize(new Dimension(80, 20)); - attachBtn.setPreferredSize(dim); - realplayBtn.setPreferredSize(dim); - faceDataBaseBtn.setPreferredSize(dim); - faceEventRecordBtn.setPreferredSize(dim); - - chnComboBox.setEnabled(false); - realplayBtn.setEnabled(false); - attachBtn.setEnabled(false); - faceDataBaseBtn.setEnabled(false); - faceEventRecordBtn.setEnabled(false); - - /* - * 预览、图片面板 - */ - JPanel realplayPanel = new JPanel(); - JPanel globalPicPanel = new JPanel(); - JPanel personPicPanel = new JPanel(); - JPanel candidatePanel = new JPanel(); - - realplayPanel.setBorder(new EmptyBorder(0, 5, 5, 5)); - globalPicPanel.setBorder(new EmptyBorder(0, 5, 5, 5)); - personPicPanel.setBorder(new EmptyBorder(0, 5, 5, 5)); - candidatePanel.setBorder(new EmptyBorder(0, 5, 5, 5)); - - panel.setLayout(new GridLayout(2, 2)); - - panel.add(realplayPanel); - panel.add(globalPicPanel); - panel.add(personPicPanel); - panel.add(candidatePanel); - - /* - * 预览面板 - */ - JLabel realplayLabel = new JLabel(Res.string().getRealplay()); - realplayWindowPanel = new Panel(); - realplayWindowPanel.setBackground(Color.GRAY); - realplayPanel.setLayout(new BorderLayout()); - realplayPanel.add(realplayLabel, BorderLayout.NORTH); - realplayPanel.add(realplayWindowPanel, BorderLayout.CENTER); - - /* - * 全景图面板 - */ - globalPicLabel = new JLabel(Res.string().getGlobalPicture() + " ------ [" + Res.string().getEventType() + "]"); - globalPicShowPanel = new PaintPanel(); - globalPicPanel.setLayout(new BorderLayout()); - globalPicPanel.add(globalPicLabel, BorderLayout.NORTH); - globalPicPanel.add(globalPicShowPanel, BorderLayout.CENTER); - - /* - * 人脸图面板 - */ - JLabel personPiclabel = new JLabel(Res.string().getPersonPicture()); - personPicShowPanel = new PaintPanel(); - JPanel faceDataPanel = new JPanel(); - - Dimension dimension = new Dimension(); - dimension.width = 200; - faceDataPanel.setPreferredSize(dimension); - - personPicPanel.setLayout(new BorderLayout()); - personPicPanel.add(personPiclabel, BorderLayout.NORTH); - personPicPanel.add(personPicShowPanel, BorderLayout.CENTER); - personPicPanel.add(faceDataPanel, BorderLayout.EAST); - - // 人脸信息 - JLabel timeLabel = new JLabel(Res.string().getTime(), JLabel.CENTER); - JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER); - JLabel ageLabel = new JLabel(Res.string().getAge(), JLabel.CENTER); - JLabel raceLabel = new JLabel(Res.string().getRace(), JLabel.CENTER); - JLabel eyeLabel = new JLabel(Res.string().getEye(), JLabel.CENTER); - JLabel mouthLabel = new JLabel(Res.string().getMouth(), JLabel.CENTER); - JLabel maskLabel = new JLabel(Res.string().getMask(), JLabel.CENTER); - JLabel beardLabel = new JLabel(Res.string().getBeard(), JLabel.CENTER); - - Dimension dimension1 = new Dimension(); - dimension1.height = 18; - dimension1.width = 50; - timeLabel.setPreferredSize(dimension1); - sexLabel.setPreferredSize(dimension1); - ageLabel.setPreferredSize(dimension1); - raceLabel.setPreferredSize(dimension1); - eyeLabel.setPreferredSize(dimension1); - mouthLabel.setPreferredSize(dimension1); - maskLabel.setPreferredSize(dimension1); - beardLabel.setPreferredSize(dimension1); - - timeTextField = new JTextField(); - sexTextField = new JTextField(); - ageTextField = new JTextField(); - raceTextField = new JTextField(); - eyeTextField = new JTextField(); - mouthTextField = new JTextField(); - maskTextField = new JTextField(); - beardTextField = new JTextField(); - - Dimension dimension2 = new Dimension(); - dimension2.width = 125; - dimension2.height = 19; - timeTextField.setPreferredSize(dimension2); - sexTextField.setPreferredSize(dimension2); - ageTextField.setPreferredSize(dimension2); - eyeTextField.setPreferredSize(dimension2); - raceTextField.setPreferredSize(dimension2); - mouthTextField.setPreferredSize(dimension2); - maskTextField.setPreferredSize(dimension2); - beardTextField.setPreferredSize(dimension2); - - timeTextField.setHorizontalAlignment(JTextField.CENTER); - sexTextField.setHorizontalAlignment(JTextField.CENTER); - ageTextField.setHorizontalAlignment(JTextField.CENTER); - eyeTextField.setHorizontalAlignment(JTextField.CENTER); - raceTextField.setHorizontalAlignment(JTextField.CENTER); - mouthTextField.setHorizontalAlignment(JTextField.CENTER); - maskTextField.setHorizontalAlignment(JTextField.CENTER); - beardTextField.setHorizontalAlignment(JTextField.CENTER); - - timeTextField.setEnabled(false); - sexTextField.setEnabled(false); - ageTextField.setEnabled(false); - eyeTextField.setEnabled(false); - raceTextField.setEnabled(false); - mouthTextField.setEnabled(false); - maskTextField.setEnabled(false); - beardTextField.setEnabled(false); - - timeTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - sexTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - ageTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - eyeTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - raceTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - mouthTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - maskTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - beardTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - - faceDataPanel.setLayout(new FlowLayout()); - - faceDataPanel.add(timeLabel); - faceDataPanel.add(timeTextField); - faceDataPanel.add(sexLabel); - faceDataPanel.add(sexTextField); - faceDataPanel.add(ageLabel); - faceDataPanel.add(ageTextField); - faceDataPanel.add(raceLabel); - faceDataPanel.add(raceTextField); - faceDataPanel.add(eyeLabel); - faceDataPanel.add(eyeTextField); - faceDataPanel.add(mouthLabel); - faceDataPanel.add(mouthTextField); - faceDataPanel.add(maskLabel); - faceDataPanel.add(maskTextField); - faceDataPanel.add(beardLabel); - faceDataPanel.add(beardTextField); - - /* - * 候选人图面板 - */ - JLabel candidateLabel = new JLabel(Res.string().getCandidatePicture()); - candidatePicShowPanel = new PaintPanel(); - JPanel candidateDataPanel = new JPanel(); - - Dimension dimension4 = new Dimension(); - dimension4.width = 220; - candidateDataPanel.setPreferredSize(dimension4); - - candidatePanel.setLayout(new BorderLayout()); - candidatePanel.add(candidateLabel, BorderLayout.NORTH); - candidatePanel.add(candidatePicShowPanel, BorderLayout.CENTER); - candidatePanel.add(candidateDataPanel, BorderLayout.EAST); - - // 候选人信息 - JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER); - JLabel sexLabel2 = new JLabel(Res.string().getSex(), JLabel.CENTER); - JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER); - JLabel idNoLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER); - JLabel groupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); - JLabel groupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); - JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER); - - Dimension dimension3 = new Dimension(); - dimension3.height = 19; - dimension3.width = 80; - nameLabel.setPreferredSize(dimension3); - sexLabel2.setPreferredSize(dimension3); - birthdayLabel.setPreferredSize(dimension3); - idNoLabel.setPreferredSize(dimension3); - groupIdLabel.setPreferredSize(dimension3); - groupNameLabel.setPreferredSize(dimension3); - similaryLabel.setPreferredSize(dimension3); - - nameTextField = new JTextField(); - sexTextField2 = new JTextField(); - birthdayTextField = new JTextField(); - idNoTextField = new JTextField(); - groupIdTextField = new JTextField(); - groupNameTextField = new JTextField(); - similaryTextField = new JTextField(); - - nameTextField.setHorizontalAlignment(JTextField.CENTER); - sexTextField2.setHorizontalAlignment(JTextField.CENTER); - birthdayTextField.setHorizontalAlignment(JTextField.CENTER); - idNoTextField.setHorizontalAlignment(JTextField.CENTER); - groupIdTextField.setHorizontalAlignment(JTextField.CENTER); - groupNameTextField.setHorizontalAlignment(JTextField.CENTER); - similaryTextField.setHorizontalAlignment(JTextField.CENTER); - - nameTextField.setPreferredSize(dimension2); - sexTextField2.setPreferredSize(dimension2); - birthdayTextField.setPreferredSize(dimension2); - idNoTextField.setPreferredSize(dimension2); - groupIdTextField.setPreferredSize(dimension2); - groupNameTextField.setPreferredSize(dimension2); - similaryTextField.setPreferredSize(dimension2); - - nameTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - sexTextField2.setFont(new Font("黑体", Font.PLAIN, 11)); - birthdayTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - idNoTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - groupIdTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - groupNameTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - similaryTextField.setFont(new Font("黑体", Font.PLAIN, 11)); - - nameTextField.setEnabled(false); - sexTextField2.setEnabled(false); - birthdayTextField.setEnabled(false); - idNoTextField.setEnabled(false); - groupIdTextField.setEnabled(false); - groupNameTextField.setEnabled(false); - similaryTextField.setEnabled(false); - - candidateDataPanel.setLayout(new FlowLayout()); - - candidateDataPanel.add(nameLabel); - candidateDataPanel.add(nameTextField); - candidateDataPanel.add(sexLabel2); - candidateDataPanel.add(sexTextField2); - candidateDataPanel.add(birthdayLabel); - candidateDataPanel.add(birthdayTextField); - candidateDataPanel.add(idNoLabel); - candidateDataPanel.add(idNoTextField); - candidateDataPanel.add(groupIdLabel); - candidateDataPanel.add(groupIdTextField); - candidateDataPanel.add(groupNameLabel); - candidateDataPanel.add(groupNameTextField); - candidateDataPanel.add(similaryLabel); - candidateDataPanel.add(similaryTextField); - - // 预览 - realplayBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - realplay(); - } - }); - - // 订阅 - attachBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - realLoadPicture(); - } - }); - - // 人脸库操作 - faceDataBaseBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - groupOperateDialog = new GroupOperateDialog(); - groupOperateDialog.setVisible(true); - } - }); - - // 查询人脸识别事件记录 - faceEventRecordBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - FindFaceEventRecordDialog faceEventRecordDialog = new FindFaceEventRecordDialog(); - faceEventRecordDialog.setVisible(true); - } - }); - } - } - - // 预览 - public void realplay() { - if(!isRealplay) { - m_hPlayHandle = RealPlayModule.startRealPlay(chnComboBox.getSelectedIndex(), - 0, - realplayWindowPanel); - if(m_hPlayHandle.longValue() != 0) { - realplayWindowPanel.repaint(); - isRealplay = true; - chnComboBox.setEnabled(false); - realplayBtn.setText(Res.string().getStopRealPlay()); - - FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 1); - } else { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } else { - FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 0); - - RealPlayModule.stopRealPlay(m_hPlayHandle); - realplayWindowPanel.repaint(); - isRealplay = false; - chnComboBox.setEnabled(true); - realplayBtn.setText(Res.string().getStartRealPlay()); - } - } - - // 订阅 - public void realLoadPicture() { - if(!isAttach) { - m_hAttachHandle = FaceRecognitionModule.realLoadPicture(chnComboBox.getSelectedIndex(), - AnalyzerDataCB.getInstance()); - if(m_hAttachHandle.longValue() != 0) { - isAttach = true; - attachBtn.setText(Res.string().getDetach()); - } else { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } else { - FaceRecognitionModule.stopRealLoadPicture(m_hAttachHandle); - isAttach = false; - attachBtn.setText(Res.string().getAttach()); - - globalPicLabel.setText(Res.string().getGlobalPicture() + " ------ [" + Res.string().getEventType() + "]"); - - globalPicShowPanel.setOpaque(true); - globalPicShowPanel.repaint(); - - personPicShowPanel.setOpaque(true); - personPicShowPanel.repaint(); - - candidatePicShowPanel.setOpaque(true); - candidatePicShowPanel.repaint(); - - timeTextField.setText(""); - sexTextField.setText(""); - ageTextField.setText(""); - raceTextField.setText(""); - eyeTextField.setText(""); - mouthTextField.setText(""); - maskTextField.setText(""); - beardTextField.setText(""); - - nameTextField.setText(""); - sexTextField2.setText(""); - birthdayTextField.setText(""); - idNoTextField.setText(""); - groupIdTextField.setText(""); - groupNameTextField.setText(""); - similaryTextField.setText(""); - - groupId = 0; - globalBufferedImage = null; - personBufferedImage = null; - candidateBufferedImage = null; - } - } - - /** - * 写成静态主要是防止被回收 - */ - private static class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { - private AnalyzerDataCB() {} - - private static class AnalyzerDataCBHolder { - private static final AnalyzerDataCB instance = new AnalyzerDataCB(); - } - - public static AnalyzerDataCB getInstance() { - return AnalyzerDataCBHolder.instance; - } - + + Dimension dim = new Dimension(); + dim.width = 120; + dim.height = 20; + + chnComboBox.setPreferredSize(new Dimension(80, 20)); + attachBtn.setPreferredSize(dim); + realplayBtn.setPreferredSize(dim); + faceDataBaseBtn.setPreferredSize(dim); + faceEventRecordBtn.setPreferredSize(dim); + + chnComboBox.setEnabled(false); + realplayBtn.setEnabled(false); + attachBtn.setEnabled(false); + faceDataBaseBtn.setEnabled(false); + faceEventRecordBtn.setEnabled(false); + + /* + * 预览、图片面板 + */ + JPanel realplayPanel = new JPanel(); + JPanel globalPicPanel = new JPanel(); + JPanel personPicPanel = new JPanel(); + JPanel candidatePanel = new JPanel(); + + realplayPanel.setBorder(new EmptyBorder(0, 5, 5, 5)); + globalPicPanel.setBorder(new EmptyBorder(0, 5, 5, 5)); + personPicPanel.setBorder(new EmptyBorder(0, 5, 5, 5)); + candidatePanel.setBorder(new EmptyBorder(0, 5, 5, 5)); + + panel.setLayout(new GridLayout(2, 2)); + + panel.add(realplayPanel); + panel.add(globalPicPanel); + panel.add(personPicPanel); + panel.add(candidatePanel); + + /* + * 预览面板 + */ + JLabel realplayLabel = new JLabel(Res.string().getRealplay()); + realplayWindowPanel = new Panel(); + realplayWindowPanel.setBackground(Color.GRAY); + realplayPanel.setLayout(new BorderLayout()); + realplayPanel.add(realplayLabel, BorderLayout.NORTH); + realplayPanel.add(realplayWindowPanel, BorderLayout.CENTER); + + /* + * 全景图面板 + */ + globalPicLabel = new JLabel(Res.string().getGlobalPicture() + " ------ [" + Res.string().getEventType() + "]"); + globalPicShowPanel = new PaintPanel(); + globalPicPanel.setLayout(new BorderLayout()); + globalPicPanel.add(globalPicLabel, BorderLayout.NORTH); + globalPicPanel.add(globalPicShowPanel, BorderLayout.CENTER); + + /* + * 人脸图面板 + */ + JLabel personPiclabel = new JLabel(Res.string().getPersonPicture()); + personPicShowPanel = new PaintPanel(); + JPanel faceDataPanel = new JPanel(); + + Dimension dimension = new Dimension(); + dimension.width = 200; + faceDataPanel.setPreferredSize(dimension); + + personPicPanel.setLayout(new BorderLayout()); + personPicPanel.add(personPiclabel, BorderLayout.NORTH); + personPicPanel.add(personPicShowPanel, BorderLayout.CENTER); + personPicPanel.add(faceDataPanel, BorderLayout.EAST); + + // 人脸信息 + JLabel timeLabel = new JLabel(Res.string().getTime(), JLabel.CENTER); + JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER); + JLabel ageLabel = new JLabel(Res.string().getAge(), JLabel.CENTER); + JLabel raceLabel = new JLabel(Res.string().getRace(), JLabel.CENTER); + JLabel eyeLabel = new JLabel(Res.string().getEye(), JLabel.CENTER); + JLabel mouthLabel = new JLabel(Res.string().getMouth(), JLabel.CENTER); + JLabel maskLabel = new JLabel(Res.string().getMask(), JLabel.CENTER); + JLabel beardLabel = new JLabel(Res.string().getBeard(), JLabel.CENTER); + + Dimension dimension1 = new Dimension(); + dimension1.height = 18; + dimension1.width = 50; + timeLabel.setPreferredSize(dimension1); + sexLabel.setPreferredSize(dimension1); + ageLabel.setPreferredSize(dimension1); + raceLabel.setPreferredSize(dimension1); + eyeLabel.setPreferredSize(dimension1); + mouthLabel.setPreferredSize(dimension1); + maskLabel.setPreferredSize(dimension1); + beardLabel.setPreferredSize(dimension1); + + timeTextField = new JTextField(); + sexTextField = new JTextField(); + ageTextField = new JTextField(); + raceTextField = new JTextField(); + eyeTextField = new JTextField(); + mouthTextField = new JTextField(); + maskTextField = new JTextField(); + beardTextField = new JTextField(); + + Dimension dimension2 = new Dimension(); + dimension2.width = 125; + dimension2.height = 19; + timeTextField.setPreferredSize(dimension2); + sexTextField.setPreferredSize(dimension2); + ageTextField.setPreferredSize(dimension2); + eyeTextField.setPreferredSize(dimension2); + raceTextField.setPreferredSize(dimension2); + mouthTextField.setPreferredSize(dimension2); + maskTextField.setPreferredSize(dimension2); + beardTextField.setPreferredSize(dimension2); + + timeTextField.setHorizontalAlignment(JTextField.CENTER); + sexTextField.setHorizontalAlignment(JTextField.CENTER); + ageTextField.setHorizontalAlignment(JTextField.CENTER); + eyeTextField.setHorizontalAlignment(JTextField.CENTER); + raceTextField.setHorizontalAlignment(JTextField.CENTER); + mouthTextField.setHorizontalAlignment(JTextField.CENTER); + maskTextField.setHorizontalAlignment(JTextField.CENTER); + beardTextField.setHorizontalAlignment(JTextField.CENTER); + + timeTextField.setEnabled(false); + sexTextField.setEnabled(false); + ageTextField.setEnabled(false); + eyeTextField.setEnabled(false); + raceTextField.setEnabled(false); + mouthTextField.setEnabled(false); + maskTextField.setEnabled(false); + beardTextField.setEnabled(false); + + timeTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + sexTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + ageTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + eyeTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + raceTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + mouthTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + maskTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + beardTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + + faceDataPanel.setLayout(new FlowLayout()); + + faceDataPanel.add(timeLabel); + faceDataPanel.add(timeTextField); + faceDataPanel.add(sexLabel); + faceDataPanel.add(sexTextField); + faceDataPanel.add(ageLabel); + faceDataPanel.add(ageTextField); + faceDataPanel.add(raceLabel); + faceDataPanel.add(raceTextField); + faceDataPanel.add(eyeLabel); + faceDataPanel.add(eyeTextField); + faceDataPanel.add(mouthLabel); + faceDataPanel.add(mouthTextField); + faceDataPanel.add(maskLabel); + faceDataPanel.add(maskTextField); + faceDataPanel.add(beardLabel); + faceDataPanel.add(beardTextField); + + /* + * 候选人图面板 + */ + JLabel candidateLabel = new JLabel(Res.string().getCandidatePicture()); + candidatePicShowPanel = new PaintPanel(); + JPanel candidateDataPanel = new JPanel(); + + Dimension dimension4 = new Dimension(); + dimension4.width = 220; + candidateDataPanel.setPreferredSize(dimension4); + + candidatePanel.setLayout(new BorderLayout()); + candidatePanel.add(candidateLabel, BorderLayout.NORTH); + candidatePanel.add(candidatePicShowPanel, BorderLayout.CENTER); + candidatePanel.add(candidateDataPanel, BorderLayout.EAST); + + // 候选人信息 + JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER); + JLabel sexLabel2 = new JLabel(Res.string().getSex(), JLabel.CENTER); + JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER); + JLabel idNoLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER); + JLabel groupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); + JLabel groupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); + JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER); + + Dimension dimension3 = new Dimension(); + dimension3.height = 19; + dimension3.width = 80; + nameLabel.setPreferredSize(dimension3); + sexLabel2.setPreferredSize(dimension3); + birthdayLabel.setPreferredSize(dimension3); + idNoLabel.setPreferredSize(dimension3); + groupIdLabel.setPreferredSize(dimension3); + groupNameLabel.setPreferredSize(dimension3); + similaryLabel.setPreferredSize(dimension3); + + nameTextField = new JTextField(); + sexTextField2 = new JTextField(); + birthdayTextField = new JTextField(); + idNoTextField = new JTextField(); + groupIdTextField = new JTextField(); + groupNameTextField = new JTextField(); + similaryTextField = new JTextField(); + + nameTextField.setHorizontalAlignment(JTextField.CENTER); + sexTextField2.setHorizontalAlignment(JTextField.CENTER); + birthdayTextField.setHorizontalAlignment(JTextField.CENTER); + idNoTextField.setHorizontalAlignment(JTextField.CENTER); + groupIdTextField.setHorizontalAlignment(JTextField.CENTER); + groupNameTextField.setHorizontalAlignment(JTextField.CENTER); + similaryTextField.setHorizontalAlignment(JTextField.CENTER); + + nameTextField.setPreferredSize(dimension2); + sexTextField2.setPreferredSize(dimension2); + birthdayTextField.setPreferredSize(dimension2); + idNoTextField.setPreferredSize(dimension2); + groupIdTextField.setPreferredSize(dimension2); + groupNameTextField.setPreferredSize(dimension2); + similaryTextField.setPreferredSize(dimension2); + + nameTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + sexTextField2.setFont(new Font("黑体", Font.PLAIN, 11)); + birthdayTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + idNoTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + groupIdTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + groupNameTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + similaryTextField.setFont(new Font("黑体", Font.PLAIN, 11)); + + nameTextField.setEnabled(false); + sexTextField2.setEnabled(false); + birthdayTextField.setEnabled(false); + idNoTextField.setEnabled(false); + groupIdTextField.setEnabled(false); + groupNameTextField.setEnabled(false); + similaryTextField.setEnabled(false); + + candidateDataPanel.setLayout(new FlowLayout()); + + candidateDataPanel.add(nameLabel); + candidateDataPanel.add(nameTextField); + candidateDataPanel.add(sexLabel2); + candidateDataPanel.add(sexTextField2); + candidateDataPanel.add(birthdayLabel); + candidateDataPanel.add(birthdayTextField); + candidateDataPanel.add(idNoLabel); + candidateDataPanel.add(idNoTextField); + candidateDataPanel.add(groupIdLabel); + candidateDataPanel.add(groupIdTextField); + candidateDataPanel.add(groupNameLabel); + candidateDataPanel.add(groupNameTextField); + candidateDataPanel.add(similaryLabel); + candidateDataPanel.add(similaryTextField); + + // 预览 + realplayBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + realplay(); + } + }); + + // 订阅 + attachBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + realLoadPicture(); + } + }); + + // 人脸库操作 + faceDataBaseBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + groupOperateDialog = new GroupOperateDialog(); + groupOperateDialog.setVisible(true); + } + }); + + // 查询人脸识别事件记录 + faceEventRecordBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + FindFaceEventRecordDialog faceEventRecordDialog = new FindFaceEventRecordDialog(); + faceEventRecordDialog.setVisible(true); + } + }); + } + } + + // 预览 + public void realplay() { + if (!isRealplay) { + m_hPlayHandle = RealPlayModule.startRealPlay(chnComboBox.getSelectedIndex(), + 0, + realplayWindowPanel); + if (m_hPlayHandle.longValue() != 0) { + realplayWindowPanel.repaint(); + isRealplay = true; + chnComboBox.setEnabled(false); + realplayBtn.setText(Res.string().getStopRealPlay()); + + FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 1); + } else { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } else { + FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 0); + + RealPlayModule.stopRealPlay(m_hPlayHandle); + realplayWindowPanel.repaint(); + isRealplay = false; + chnComboBox.setEnabled(true); + realplayBtn.setText(Res.string().getStartRealPlay()); + } + } + + // 订阅 + public void realLoadPicture() { + if (!isAttach) { + m_hAttachHandle = FaceRecognitionModule.realLoadPicture(chnComboBox.getSelectedIndex(), + AnalyzerDataCB.getInstance()); + if (m_hAttachHandle.longValue() != 0) { + isAttach = true; + attachBtn.setText(Res.string().getDetach()); + } else { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } else { + FaceRecognitionModule.stopRealLoadPicture(m_hAttachHandle); + isAttach = false; + attachBtn.setText(Res.string().getAttach()); + + globalPicLabel.setText(Res.string().getGlobalPicture() + " ------ [" + Res.string().getEventType() + "]"); + + globalPicShowPanel.setOpaque(true); + globalPicShowPanel.repaint(); + + personPicShowPanel.setOpaque(true); + personPicShowPanel.repaint(); + + candidatePicShowPanel.setOpaque(true); + candidatePicShowPanel.repaint(); + + timeTextField.setText(""); + sexTextField.setText(""); + ageTextField.setText(""); + raceTextField.setText(""); + eyeTextField.setText(""); + mouthTextField.setText(""); + maskTextField.setText(""); + beardTextField.setText(""); + + nameTextField.setText(""); + sexTextField2.setText(""); + birthdayTextField.setText(""); + idNoTextField.setText(""); + groupIdTextField.setText(""); + groupNameTextField.setText(""); + similaryTextField.setText(""); + + groupId = 0; + globalBufferedImage = null; + personBufferedImage = null; + candidateBufferedImage = null; + } + } + + /** + * 写成静态主要是防止被回收 + */ + private static class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { + private AnalyzerDataCB() { + } + + private static class AnalyzerDataCBHolder { + private static final AnalyzerDataCB instance = new AnalyzerDataCB(); + } + + public static AnalyzerDataCB getInstance() { + return AnalyzerDataCBHolder.instance; + } + public int invoke(LLong lAnalyzerHandle, int dwAlarmType, - Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, - Pointer dwUser, int nSequence, Pointer reserved) - { + Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, + Pointer dwUser, int nSequence, Pointer reserved) { if (lAnalyzerHandle.longValue() == 0 || pAlarmInfo == null) { return -1; - } - - switch(dwAlarmType) - { - case NetSDKLib.EVENT_IVS_FACERECOGNITION: ///< 人脸识别事件 - { - // DEV_EVENT_FACERECOGNITION_INFO 结构体比较大,new对象会比较耗时, ToolKits.GetPointerData内容拷贝是不耗时的。 - // 如果多台设备或者事件处理比较频繁,可以考虑将 static DEV_EVENT_FACERECOGNITION_INFO msg = new DEV_EVENT_FACERECOGNITION_INFO(); 改为全局。 - // 写成全局,是因为每次new花费时间较多, 如果改为全局,此case下的处理需要加锁 - // 加锁,是因为共用一个对象,防止数据出错 - - // 耗时800ms左右 - DEV_EVENT_FACERECOGNITION_INFO msg = new DEV_EVENT_FACERECOGNITION_INFO(); - - // 耗时20ms左右 - ToolKits.GetPointerData(pAlarmInfo, msg); + } + + switch (dwAlarmType) { + case NetSDKLib.EVENT_IVS_FACERECOGNITION: ///< 人脸识别事件 + { + // DEV_EVENT_FACERECOGNITION_INFO 结构体比较大,new对象会比较耗时, ToolKits.GetPointerData内容拷贝是不耗时的。 + // 如果多台设备或者事件处理比较频繁,可以考虑将 static DEV_EVENT_FACERECOGNITION_INFO msg = new DEV_EVENT_FACERECOGNITION_INFO(); 改为全局。 + // 写成全局,是因为每次new花费时间较多, 如果改为全局,此case下的处理需要加锁 + // 加锁,是因为共用一个对象,防止数据出错 + + // 耗时800ms左右 + DEV_EVENT_FACERECOGNITION_INFO msg = new DEV_EVENT_FACERECOGNITION_INFO(); + + // 耗时20ms左右 + ToolKits.GetPointerData(pAlarmInfo, msg); + + // 保存图片,获取图片缓存 + // 耗时20ms左右 + try { + saveFaceRecognitionPic(pBuffer, dwBufSize, msg); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + // 列表、图片界面显示 + // 回调属于子线程,以下是个UI线程,来刷新UI + EventQueue.invokeLater(new FaceRecognitionRunnable(globalBufferedImage, + personBufferedImage, + candidateBufferedImage, + msg, + index)); + + // 释放内存 + msg = null; + System.gc(); + + break; + } + case NetSDKLib.EVENT_IVS_FACEDETECT: ///< 人脸检测 + { + DEV_EVENT_FACEDETECT_INFO msg = new DEV_EVENT_FACEDETECT_INFO(); + + ToolKits.GetPointerData(pAlarmInfo, msg); // 保存图片,获取图片缓存 - // 耗时20ms左右 - try { - saveFaceRecognitionPic(pBuffer, dwBufSize, msg); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - - // 列表、图片界面显示 - // 回调属于子线程,以下是个UI线程,来刷新UI - EventQueue.invokeLater(new FaceRecognitionRunnable(globalBufferedImage, - personBufferedImage, - candidateBufferedImage, - msg, - index)); - - // 释放内存 - msg = null; - System.gc(); - - break; - } - case NetSDKLib.EVENT_IVS_FACEDETECT: ///< 人脸检测 - { - DEV_EVENT_FACEDETECT_INFO msg = new DEV_EVENT_FACEDETECT_INFO(); - - ToolKits.GetPointerData(pAlarmInfo, msg); - - // 保存图片,获取图片缓存 - try { - saveFaceDetectPic(pBuffer, dwBufSize, msg); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - - // 列表、图片界面显示 - EventQueue.invokeLater(new FaceDetectRunnable(globalBufferedImage, - personBufferedImage, - msg)); - - // 释放内存 - msg = null; - System.gc(); - - break; - } - default: - break; + try { + saveFaceDetectPic(pBuffer, dwBufSize, msg); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + // 列表、图片界面显示 + EventQueue.invokeLater(new FaceDetectRunnable(globalBufferedImage, + personBufferedImage, + msg)); + + // 释放内存 + msg = null; + System.gc(); + + break; + } + default: + break; } - - return 0; + + return 0; } - - /** - * 保存人脸识别事件图片 - * @param pBuffer 抓拍图片信息 - * @param dwBufSize 抓拍图片大小 - * @param faceRecognitionInfo 人脸识别事件信息 - */ - public void saveFaceRecognitionPic(Pointer pBuffer, int dwBufSize, - DEV_EVENT_FACERECOGNITION_INFO faceRecognitionInfo) throws FileNotFoundException { - index = -1; - globalBufferedImage = null; - personBufferedImage = null; - candidateBufferedImage = null; - - File path = new File("./FaceRecognition/"); + + /** + * 保存人脸识别事件图片 + * + * @param pBuffer 抓拍图片信息 + * @param dwBufSize 抓拍图片大小 + * @param faceRecognitionInfo 人脸识别事件信息 + */ + public void saveFaceRecognitionPic(Pointer pBuffer, int dwBufSize, + DEV_EVENT_FACERECOGNITION_INFO faceRecognitionInfo) throws FileNotFoundException { + index = -1; + globalBufferedImage = null; + personBufferedImage = null; + candidateBufferedImage = null; + + File path = new File("./FaceRecognition/"); if (!path.exists()) { path.mkdir(); } if (pBuffer == null || dwBufSize <= 0) { - return; + return; } - /////////////// 保存全景图 /////////////////// - if(faceRecognitionInfo.bGlobalScenePic == 1) { - - String strGlobalPicPathName = path + "\\" + faceRecognitionInfo.UTC.toStringTitle() + "_FaceRecognition_Global.jpg"; - byte[] bufferGlobal = pBuffer.getByteArray(faceRecognitionInfo.stuGlobalScenePicInfo.dwOffSet, - faceRecognitionInfo.stuGlobalScenePicInfo.dwFileLenth); - ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(bufferGlobal); - - try { - globalBufferedImage = ImageIO.read(byteArrInputGlobal); - if(globalBufferedImage != null) { - File globalFile = new File(strGlobalPicPathName); - if(globalFile != null) { - ImageIO.write(globalBufferedImage, "jpg", globalFile); - } - } - } catch (IOException e2) { - e2.printStackTrace(); - } + /////////////// 保存全景图 /////////////////// + if (faceRecognitionInfo.bGlobalScenePic == 1) { + + String strGlobalPicPathName = path + "\\" + faceRecognitionInfo.UTC.toStringTitle() + "_FaceRecognition_Global.jpg"; + byte[] bufferGlobal = pBuffer.getByteArray(faceRecognitionInfo.stuGlobalScenePicInfo.dwOffSet, + faceRecognitionInfo.stuGlobalScenePicInfo.dwFileLenth); + ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(bufferGlobal); + + try { + globalBufferedImage = ImageIO.read(byteArrInputGlobal); + if (globalBufferedImage != null) { + File globalFile = new File(strGlobalPicPathName); + if (globalFile != null) { + ImageIO.write(globalBufferedImage, "jpg", globalFile); + } + } + } catch (IOException e2) { + e2.printStackTrace(); + } } /////////////// 保存人脸图 ///////////////////////// - if(faceRecognitionInfo.stuObject.stPicInfo != null) { - String strPersonPicPathName = path + "\\" + faceRecognitionInfo.UTC.toStringTitle() + "_FaceRecognition_Person.jpg"; - byte[] bufferPerson = pBuffer.getByteArray(faceRecognitionInfo.stuObject.stPicInfo.dwOffSet, - faceRecognitionInfo.stuObject.stPicInfo.dwFileLenth); - ByteArrayInputStream byteArrInputPerson = new ByteArrayInputStream(bufferPerson); - - try { - personBufferedImage = ImageIO.read(byteArrInputPerson); - if(personBufferedImage != null) { - File personFile = new File(strPersonPicPathName); - if(personFile != null) { - ImageIO.write(personBufferedImage, "jpg", personFile); - } - } - } catch (IOException e2) { - e2.printStackTrace(); - } + if (faceRecognitionInfo.stuObject.stPicInfo != null) { + String strPersonPicPathName = path + "\\" + faceRecognitionInfo.UTC.toStringTitle() + "_FaceRecognition_Person.jpg"; + byte[] bufferPerson = pBuffer.getByteArray(faceRecognitionInfo.stuObject.stPicInfo.dwOffSet, + faceRecognitionInfo.stuObject.stPicInfo.dwFileLenth); + ByteArrayInputStream byteArrInputPerson = new ByteArrayInputStream(bufferPerson); + + try { + personBufferedImage = ImageIO.read(byteArrInputPerson); + if (personBufferedImage != null) { + File personFile = new File(strPersonPicPathName); + if (personFile != null) { + ImageIO.write(personBufferedImage, "jpg", personFile); + } + } + } catch (IOException e2) { + e2.printStackTrace(); + } } - + ///////////// 保存对比图 ////////////////////// - if(faceRecognitionInfo.nRetCandidatesExNum > 0 - && faceRecognitionInfo.stuCandidatesEx != null) { - int maxValue = -1; - - // 设备可能返回多张图片,这里只显示相似度最高的 - int[] nSimilary = new int[faceRecognitionInfo.nRetCandidatesExNum]; - for(int i = 0; i < faceRecognitionInfo.nRetCandidatesExNum; i++) { - nSimilary[i] = faceRecognitionInfo.stuCandidatesEx[i].bySimilarity & 0xff; - } - - - for(int i = 0; i < nSimilary.length; i++) { - if(maxValue < nSimilary[i]) { - maxValue = nSimilary[i]; - index = i; - } - } - - String strCandidatePicPathName = path + "\\" + faceRecognitionInfo.UTC.toStringTitle() + "_FaceRecognition_Candidate.jpg"; - - // 每个候选人的图片个数:faceRecognitionInfo.stuCandidatesEx[index].stPersonInfo.wFacePicNum, - // 正常情况下只有1张。如果有多张,此demo只显示第一张 - byte[] bufferCandidate = pBuffer.getByteArray(faceRecognitionInfo.stuCandidatesEx[index].stPersonInfo.szFacePicInfo[0].dwOffSet, - faceRecognitionInfo.stuCandidatesEx[index].stPersonInfo.szFacePicInfo[0].dwFileLenth); - ByteArrayInputStream byteArrInputCandidate = new ByteArrayInputStream(bufferCandidate); - - try { - candidateBufferedImage = ImageIO.read(byteArrInputCandidate); - if(candidateBufferedImage != null) { - File candidateFile = new File(strCandidatePicPathName); - if(candidateFile != null) { - ImageIO.write(candidateBufferedImage, "jpg", candidateFile); - } - } - } catch (IOException e2) { - e2.printStackTrace(); - } - + if (faceRecognitionInfo.nRetCandidatesExNum > 0 + && faceRecognitionInfo.stuCandidatesEx != null) { + int maxValue = -1; + + // 设备可能返回多张图片,这里只显示相似度最高的 + int[] nSimilary = new int[faceRecognitionInfo.nRetCandidatesExNum]; + for (int i = 0; i < faceRecognitionInfo.nRetCandidatesExNum; i++) { + nSimilary[i] = faceRecognitionInfo.stuCandidatesEx[i].bySimilarity & 0xff; + } + + + for (int i = 0; i < nSimilary.length; i++) { + if (maxValue < nSimilary[i]) { + maxValue = nSimilary[i]; + index = i; + } + } + + String strCandidatePicPathName = path + "\\" + faceRecognitionInfo.UTC.toStringTitle() + "_FaceRecognition_Candidate.jpg"; + + // 每个候选人的图片个数:faceRecognitionInfo.stuCandidatesEx[index].stPersonInfo.wFacePicNum, + // 正常情况下只有1张。如果有多张,此demo只显示第一张 + byte[] bufferCandidate = pBuffer.getByteArray(faceRecognitionInfo.stuCandidatesEx[index].stPersonInfo.szFacePicInfo[0].dwOffSet, + faceRecognitionInfo.stuCandidatesEx[index].stPersonInfo.szFacePicInfo[0].dwFileLenth); + ByteArrayInputStream byteArrInputCandidate = new ByteArrayInputStream(bufferCandidate); + + try { + candidateBufferedImage = ImageIO.read(byteArrInputCandidate); + if (candidateBufferedImage != null) { + File candidateFile = new File(strCandidatePicPathName); + if (candidateFile != null) { + ImageIO.write(candidateBufferedImage, "jpg", candidateFile); + } + } + } catch (IOException e2) { + e2.printStackTrace(); + } + } - } - - /** - * 保存人脸检测事件图片 - * @param pBuffer 抓拍图片信息 - * @param dwBufSize 抓拍图片大小 - * @param faceDetectInfo 人脸检测事件信息 - */ - public void saveFaceDetectPic(Pointer pBuffer, int dwBufSize, - DEV_EVENT_FACEDETECT_INFO faceDetectInfo) throws FileNotFoundException { - File path = new File("./FaceDetection/"); - if (!path.exists()) { - path.mkdir(); - } - - if (pBuffer == null || dwBufSize <= 0) { - return; - } - - // 小图的 stuObject.nRelativeID 来匹配大图的 stuObject.nObjectID,来判断是不是 一起的图片 - if(groupId != faceDetectInfo.stuObject.nRelativeID) { ///->保存全景图 - personBufferedImage = null; - groupId = faceDetectInfo.stuObject.nObjectID; - - String strGlobalPicPathName = path + "\\" + faceDetectInfo.UTC.toStringTitle() + "_FaceDetection_Global.jpg"; - byte[] bufferGlobal = pBuffer.getByteArray(0, dwBufSize); - ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(bufferGlobal); - - try { - globalBufferedImage = ImageIO.read(byteArrInputGlobal); - if(globalBufferedImage != null) { - File globalFile = new File(strGlobalPicPathName); - if(globalFile != null) { - ImageIO.write(globalBufferedImage, "jpg", globalFile); - } - } - } catch (IOException e2) { - e2.printStackTrace(); - } - } else if(groupId == faceDetectInfo.stuObject.nRelativeID){ ///->保存人脸图 - if(faceDetectInfo.stuObject.stPicInfo != null) { - String strPersonPicPathName = path + "\\" + faceDetectInfo.UTC.toStringTitle() + "_FaceDetection_Person.jpg"; - byte[] bufferPerson = pBuffer.getByteArray(0, dwBufSize); - ByteArrayInputStream byteArrInputPerson = new ByteArrayInputStream(bufferPerson); - - try { - personBufferedImage = ImageIO.read(byteArrInputPerson); - if(personBufferedImage != null) { - File personFile = new File(strPersonPicPathName); - if(personFile != null) { - ImageIO.write(personBufferedImage, "jpg", personFile); - } - } - } catch (IOException e2) { - e2.printStackTrace(); - } - } - } - } - } - - private static class FaceRecognitionRunnable implements Runnable { - private BufferedImage globalBufferedImage; - private BufferedImage personBufferedImage; - private BufferedImage candidateBufferedImage; - private DEV_EVENT_FACERECOGNITION_INFO facerecognitionInfo; - private int index = -1; - - public FaceRecognitionRunnable(BufferedImage globalBufferedImage, - BufferedImage personBufferedImage, - BufferedImage candidateBufferedImage, - DEV_EVENT_FACERECOGNITION_INFO facerecognitionInfo, - int index) { - - this.globalBufferedImage = globalBufferedImage; - this.personBufferedImage = personBufferedImage; - this.candidateBufferedImage = candidateBufferedImage; - this.facerecognitionInfo = facerecognitionInfo; - this.index = index; - } - @Override - public void run() { - if(!isAttach) { - return; + } + + /** + * 保存人脸检测事件图片 + * + * @param pBuffer 抓拍图片信息 + * @param dwBufSize 抓拍图片大小 + * @param faceDetectInfo 人脸检测事件信息 + */ + public void saveFaceDetectPic(Pointer pBuffer, int dwBufSize, + DEV_EVENT_FACEDETECT_INFO faceDetectInfo) throws FileNotFoundException { + File path = new File("./FaceDetection/"); + if (!path.exists()) { + path.mkdir(); + } + + if (pBuffer == null || dwBufSize <= 0) { + return; + } + + // 小图的 stuObject.nRelativeID 来匹配大图的 stuObject.nObjectID,来判断是不是 一起的图片 + if (groupId != faceDetectInfo.stuObject.nRelativeID) { ///->保存全景图 + personBufferedImage = null; + groupId = faceDetectInfo.stuObject.nObjectID; + + String strGlobalPicPathName = path + "\\" + faceDetectInfo.UTC.toStringTitle() + "_FaceDetection_Global.jpg"; + byte[] bufferGlobal = pBuffer.getByteArray(0, dwBufSize); + ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(bufferGlobal); + + try { + globalBufferedImage = ImageIO.read(byteArrInputGlobal); + if (globalBufferedImage != null) { + File globalFile = new File(strGlobalPicPathName); + if (globalFile != null) { + ImageIO.write(globalBufferedImage, "jpg", globalFile); + } + } + } catch (IOException e2) { + e2.printStackTrace(); + } + } else if (groupId == faceDetectInfo.stuObject.nRelativeID) { ///->保存人脸图 + if (faceDetectInfo.stuObject.stPicInfo != null) { + String strPersonPicPathName = path + "\\" + faceDetectInfo.UTC.toStringTitle() + "_FaceDetection_Person.jpg"; + byte[] bufferPerson = pBuffer.getByteArray(0, dwBufSize); + ByteArrayInputStream byteArrInputPerson = new ByteArrayInputStream(bufferPerson); + + try { + personBufferedImage = ImageIO.read(byteArrInputPerson); + if (personBufferedImage != null) { + File personFile = new File(strPersonPicPathName); + if (personFile != null) { + ImageIO.write(personBufferedImage, "jpg", personFile); + } + } + } catch (IOException e2) { + e2.printStackTrace(); + } + } + } + } + } + + private static class FaceRecognitionRunnable implements Runnable { + private BufferedImage globalBufferedImage; + private BufferedImage personBufferedImage; + private BufferedImage candidateBufferedImage; + private DEV_EVENT_FACERECOGNITION_INFO facerecognitionInfo; + private int index = -1; + + public FaceRecognitionRunnable(BufferedImage globalBufferedImage, + BufferedImage personBufferedImage, + BufferedImage candidateBufferedImage, + DEV_EVENT_FACERECOGNITION_INFO facerecognitionInfo, + int index) { + + this.globalBufferedImage = globalBufferedImage; + this.personBufferedImage = personBufferedImage; + this.candidateBufferedImage = candidateBufferedImage; + this.facerecognitionInfo = facerecognitionInfo; + this.index = index; + } + + @Override + public void run() { + if (!isAttach) { + return; } - - // 列表显示事件信息 - showFaceRecognitionEventInfo(globalBufferedImage, - personBufferedImage, - candidateBufferedImage, - facerecognitionInfo, - index); - } - } - - private static class FaceDetectRunnable implements Runnable { - private BufferedImage globalBufferedImage = null; - private BufferedImage personBufferedImage = null; - private DEV_EVENT_FACEDETECT_INFO facedetectInfo = null; - - public FaceDetectRunnable(BufferedImage globalBufferedImage, - BufferedImage personBufferedImage, - DEV_EVENT_FACEDETECT_INFO facedetectInfo) { - - - this.globalBufferedImage = globalBufferedImage; - this.personBufferedImage = personBufferedImage; - this.facedetectInfo = facedetectInfo; - } - - @Override - public void run() { - if(!isAttach) { - return; + + // 列表显示事件信息 + showFaceRecognitionEventInfo(globalBufferedImage, + personBufferedImage, + candidateBufferedImage, + facerecognitionInfo, + index); + } + } + + private static class FaceDetectRunnable implements Runnable { + private BufferedImage globalBufferedImage = null; + private BufferedImage personBufferedImage = null; + private DEV_EVENT_FACEDETECT_INFO facedetectInfo = null; + + public FaceDetectRunnable(BufferedImage globalBufferedImage, + BufferedImage personBufferedImage, + DEV_EVENT_FACEDETECT_INFO facedetectInfo) { + + + this.globalBufferedImage = globalBufferedImage; + this.personBufferedImage = personBufferedImage; + this.facedetectInfo = facedetectInfo; + } + + @Override + public void run() { + if (!isAttach) { + return; } - - showFaceDetectEventInfo(globalBufferedImage, - personBufferedImage, - facedetectInfo); - } - } - - private static void showFaceRecognitionEventInfo(BufferedImage globalBufferedImage, - BufferedImage personBufferedImage, - BufferedImage candidateBufferedImage, - DEV_EVENT_FACERECOGNITION_INFO facerecognitionInfo, - int index) { - globalPicLabel.setText(Res.string().getGlobalPicture() + " ------ [" + Res.string().getFaceRecognitionEvent() + "]"); - - // 全景图 - if(globalBufferedImage != null) { - globalPicShowPanel.setImage(globalBufferedImage); - globalPicShowPanel.setOpaque(false); - globalPicShowPanel.repaint(); + + showFaceDetectEventInfo(globalBufferedImage, + personBufferedImage, + facedetectInfo); + } + } + + private static void showFaceRecognitionEventInfo(BufferedImage globalBufferedImage, + BufferedImage personBufferedImage, + BufferedImage candidateBufferedImage, + DEV_EVENT_FACERECOGNITION_INFO facerecognitionInfo, + int index) { + globalPicLabel.setText(Res.string().getGlobalPicture() + " ------ [" + Res.string().getFaceRecognitionEvent() + "]"); + + // 全景图 + if (globalBufferedImage != null) { + globalPicShowPanel.setImage(globalBufferedImage); + globalPicShowPanel.setOpaque(false); + globalPicShowPanel.repaint(); } else { - globalPicShowPanel.setOpaque(true); - globalPicShowPanel.repaint(); + globalPicShowPanel.setOpaque(true); + globalPicShowPanel.repaint(); } - + // 人脸图 - if(personBufferedImage != null) { - personPicShowPanel.setImage(personBufferedImage); - personPicShowPanel.setOpaque(false); - personPicShowPanel.repaint(); + if (personBufferedImage != null) { + personPicShowPanel.setImage(personBufferedImage); + personPicShowPanel.setOpaque(false); + personPicShowPanel.repaint(); } else { - personPicShowPanel.setOpaque(true); - personPicShowPanel.repaint(); + personPicShowPanel.setOpaque(true); + personPicShowPanel.repaint(); } - + // 候选人图 - if(candidateBufferedImage != null) { - candidatePicShowPanel.setImage(candidateBufferedImage); - candidatePicShowPanel.setOpaque(false); - candidatePicShowPanel.repaint(); + if (candidateBufferedImage != null) { + candidatePicShowPanel.setImage(candidateBufferedImage); + candidatePicShowPanel.setOpaque(false); + candidatePicShowPanel.repaint(); } else { - candidatePicShowPanel.setOpaque(true); - candidatePicShowPanel.repaint(); + candidatePicShowPanel.setOpaque(true); + candidatePicShowPanel.repaint(); } - + // 时间 - if(facerecognitionInfo.UTC == null - || facerecognitionInfo.UTC.toString().equals("")) { - timeTextField.setText(""); + if (facerecognitionInfo.UTC == null + || facerecognitionInfo.UTC.toString().equals("")) { + timeTextField.setText(""); } else { - timeTextField.setText(facerecognitionInfo.UTC.toString()); + timeTextField.setText(facerecognitionInfo.UTC.toString()); } - + // 人脸信息 - if(facerecognitionInfo.stuFaceData == null) { - sexTextField.setText(""); - ageTextField.setText(""); - raceTextField.setText(""); - eyeTextField.setText(""); - mouthTextField.setText(""); - maskTextField.setText(""); - beardTextField.setText(""); + if (facerecognitionInfo.stuFaceData == null) { + sexTextField.setText(""); + ageTextField.setText(""); + raceTextField.setText(""); + eyeTextField.setText(""); + mouthTextField.setText(""); + maskTextField.setText(""); + beardTextField.setText(""); } else { - sexTextField.setText(Res.string().getSex(facerecognitionInfo.stuFaceData.emSex)); - if(facerecognitionInfo.stuFaceData.nAge == -1) { - ageTextField.setText(Res.string().getUnKnow()); - } else { - ageTextField.setText(String.valueOf(facerecognitionInfo.stuFaceData.nAge)); - } - raceTextField.setText(Res.string().getRace(facerecognitionInfo.stuFaceData.emRace)); - eyeTextField.setText(Res.string().getEyeState(facerecognitionInfo.stuFaceData.emEye)); - mouthTextField.setText(Res.string().getMouthState(facerecognitionInfo.stuFaceData.emMouth)); - maskTextField.setText(Res.string().getMaskState(facerecognitionInfo.stuFaceData.emMask)); - beardTextField.setText(Res.string().getBeardState(facerecognitionInfo.stuFaceData.emBeard)); + sexTextField.setText(Res.string().getSex(facerecognitionInfo.stuFaceData.emSex)); + if (facerecognitionInfo.stuFaceData.nAge == -1) { + ageTextField.setText(Res.string().getUnKnow()); + } else { + ageTextField.setText(String.valueOf(facerecognitionInfo.stuFaceData.nAge)); + } + raceTextField.setText(Res.string().getRace(facerecognitionInfo.stuFaceData.emRace)); + eyeTextField.setText(Res.string().getEyeState(facerecognitionInfo.stuFaceData.emEye)); + mouthTextField.setText(Res.string().getMouthState(facerecognitionInfo.stuFaceData.emMouth)); + maskTextField.setText(Res.string().getMaskState(facerecognitionInfo.stuFaceData.emMask)); + beardTextField.setText(Res.string().getBeardState(facerecognitionInfo.stuFaceData.emBeard)); } - + // 候选人信息 - if(facerecognitionInfo.nRetCandidatesExNum == 0 - || index == -1) { - nameTextField.setText(""); - sexTextField2.setText(""); - birthdayTextField.setText(""); - idNoTextField.setText(""); - groupIdTextField.setText(""); - groupNameTextField.setText(""); - similaryTextField.setText(Res.string().getStranger()); - } else { - sexTextField2.setText(Res.string().getSex(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.bySex & 0xff)); - birthdayTextField.setText(String.valueOf((int)facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.wYear) + "-" - + String.valueOf(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.byMonth & 0xff) + "-" - + String.valueOf(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.byDay & 0xff)); - - try { - nameTextField.setText(new String(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.szPersonName, "GBK").trim()); - idNoTextField.setText(new String(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.szID, "GBK").trim()); - groupIdTextField.setText(new String(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.szGroupID, "GBK").trim()); - groupNameTextField.setText(new String(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.szGroupName, "GBK").trim()); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - similaryTextField.setText(String.valueOf(facerecognitionInfo.stuCandidatesEx[index].bySimilarity & 0xff)); + if (facerecognitionInfo.nRetCandidatesExNum == 0 + || index == -1) { + nameTextField.setText(""); + sexTextField2.setText(""); + birthdayTextField.setText(""); + idNoTextField.setText(""); + groupIdTextField.setText(""); + groupNameTextField.setText(""); + similaryTextField.setText(Res.string().getStranger()); + } else { + sexTextField2.setText(Res.string().getSex(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.bySex & 0xff)); + birthdayTextField.setText(String.valueOf((int) facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.wYear) + "-" + + String.valueOf(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.byMonth & 0xff) + "-" + + String.valueOf(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.byDay & 0xff)); + + try { + nameTextField.setText(new String(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.szPersonName, "GBK").trim()); + idNoTextField.setText(new String(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.szID, "GBK").trim()); + groupIdTextField.setText(new String(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.szGroupID, "GBK").trim()); + groupNameTextField.setText(new String(facerecognitionInfo.stuCandidatesEx[index].stPersonInfo.szGroupName, "GBK").trim()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + similaryTextField.setText(String.valueOf(facerecognitionInfo.stuCandidatesEx[index].bySimilarity & 0xff)); } - } - - private static void showFaceDetectEventInfo(BufferedImage globalBufferedImage, - BufferedImage personBufferedImage, - DEV_EVENT_FACEDETECT_INFO facedetectInfo) { - - globalPicLabel.setText(Res.string().getGlobalPicture() + " ------ [" + Res.string().getFaceDetectEvent() + "]"); - - // 全景图 - if(globalBufferedImage != null) { - globalPicShowPanel.setImage(globalBufferedImage); - globalPicShowPanel.setOpaque(false); - globalPicShowPanel.repaint(); - } else { - globalPicShowPanel.setOpaque(true); - globalPicShowPanel.repaint(); - } - - // 人脸图 - if(personBufferedImage != null) { - personPicShowPanel.setImage(personBufferedImage); - personPicShowPanel.setOpaque(false); - personPicShowPanel.repaint(); - } else { - personPicShowPanel.setOpaque(true); - personPicShowPanel.repaint(); - } - + } + + private static void showFaceDetectEventInfo(BufferedImage globalBufferedImage, + BufferedImage personBufferedImage, + DEV_EVENT_FACEDETECT_INFO facedetectInfo) { + + globalPicLabel.setText(Res.string().getGlobalPicture() + " ------ [" + Res.string().getFaceDetectEvent() + "]"); + + // 全景图 + if (globalBufferedImage != null) { + globalPicShowPanel.setImage(globalBufferedImage); + globalPicShowPanel.setOpaque(false); + globalPicShowPanel.repaint(); + } else { + globalPicShowPanel.setOpaque(true); + globalPicShowPanel.repaint(); + } + + // 人脸图 + if (personBufferedImage != null) { + personPicShowPanel.setImage(personBufferedImage); + personPicShowPanel.setOpaque(false); + personPicShowPanel.repaint(); + } else { + personPicShowPanel.setOpaque(true); + personPicShowPanel.repaint(); + } + // 时间 - if(facedetectInfo.UTC == null - || facedetectInfo.UTC.toString().equals("")) { - timeTextField.setText(""); + if (facedetectInfo.UTC == null + || facedetectInfo.UTC.toString().equals("")) { + timeTextField.setText(""); } else { - timeTextField.setText(facedetectInfo.UTC.toString()); + timeTextField.setText(facedetectInfo.UTC.toString()); } - + // 人脸信息 - sexTextField.setText(Res.string().getSex(facedetectInfo.emSex)); - if(facedetectInfo.nAge == -1) { - ageTextField.setText(Res.string().getUnKnow()); - } else { - ageTextField.setText(String.valueOf(facedetectInfo.nAge)); - } - raceTextField.setText(Res.string().getRace(facedetectInfo.emRace)); - eyeTextField.setText(Res.string().getEyeState(facedetectInfo.emEye)); - mouthTextField.setText(Res.string().getMouthState(facedetectInfo.emMouth)); - maskTextField.setText(Res.string().getMaskState(facedetectInfo.emMask)); - beardTextField.setText(Res.string().getBeardState(facedetectInfo.emBeard)); - - // 候选人图和信息, 重绘清空 - candidatePicShowPanel.setOpaque(true); - candidatePicShowPanel.repaint(); - - nameTextField.setText(""); - sexTextField2.setText(""); - birthdayTextField.setText(""); - idNoTextField.setText(""); - groupIdTextField.setText(""); - groupNameTextField.setText(""); - similaryTextField.setText(""); - } - - private void setEnable(boolean bln) { - - chnComboBox.setEnabled(bln); - realplayBtn.setEnabled(bln); - attachBtn.setEnabled(bln); - faceDataBaseBtn.setEnabled(bln); - faceEventRecordBtn.setEnabled(bln); - } - - /* - * 登录 - */ - private LoginPanel loginPanel; - - /* - * 预览 - */ + sexTextField.setText(Res.string().getSex(facedetectInfo.emSex)); + if (facedetectInfo.nAge == -1) { + ageTextField.setText(Res.string().getUnKnow()); + } else { + ageTextField.setText(String.valueOf(facedetectInfo.nAge)); + } + raceTextField.setText(Res.string().getRace(facedetectInfo.emRace)); + eyeTextField.setText(Res.string().getEyeState(facedetectInfo.emEye)); + mouthTextField.setText(Res.string().getMouthState(facedetectInfo.emMouth)); + maskTextField.setText(Res.string().getMaskState(facedetectInfo.emMask)); + beardTextField.setText(Res.string().getBeardState(facedetectInfo.emBeard)); + + // 候选人图和信息, 重绘清空 + candidatePicShowPanel.setOpaque(true); + candidatePicShowPanel.repaint(); + + nameTextField.setText(""); + sexTextField2.setText(""); + birthdayTextField.setText(""); + idNoTextField.setText(""); + groupIdTextField.setText(""); + groupNameTextField.setText(""); + similaryTextField.setText(""); + } + + private void setEnable(boolean bln) { + + chnComboBox.setEnabled(bln); + realplayBtn.setEnabled(bln); + attachBtn.setEnabled(bln); + faceDataBaseBtn.setEnabled(bln); + faceEventRecordBtn.setEnabled(bln); + } + + /* + * 登录 + */ + private LoginPanel loginPanel; + + /* + * 预览 + */ private JLabel chnlabel; - private JComboBox chnComboBox; + private JComboBox chnComboBox; private JButton realplayBtn; private JButton attachBtn; private JButton faceDataBaseBtn; private JButton faceEventRecordBtn; - + private Panel realplayWindowPanel; - private static PaintPanel globalPicShowPanel; - private static PaintPanel personPicShowPanel; - private static PaintPanel candidatePicShowPanel; - - private static JLabel globalPicLabel; - + private static PaintPanel globalPicShowPanel; + private static PaintPanel personPicShowPanel; + private static PaintPanel candidatePicShowPanel; + + private static JLabel globalPicLabel; + /* * 人脸信息 */ - private static JTextField timeTextField; - private static JTextField sexTextField; - private static JTextField ageTextField; - private static JTextField raceTextField; - private static JTextField eyeTextField; - private static JTextField mouthTextField; - private static JTextField maskTextField; - private static JTextField beardTextField; - - /* - * 候选人信息 - */ - private static JTextField nameTextField; - private static JTextField sexTextField2; - private static JTextField birthdayTextField; - private static JTextField idNoTextField; - private static JTextField groupIdTextField; - private static JTextField groupNameTextField; - private static JTextField similaryTextField; + private static JTextField timeTextField; + private static JTextField sexTextField; + private static JTextField ageTextField; + private static JTextField raceTextField; + private static JTextField eyeTextField; + private static JTextField mouthTextField; + private static JTextField maskTextField; + private static JTextField beardTextField; + + /* + * 候选人信息 + */ + private static JTextField nameTextField; + private static JTextField sexTextField2; + private static JTextField birthdayTextField; + private static JTextField idNoTextField; + private static JTextField groupIdTextField; + private static JTextField groupNameTextField; + private static JTextField similaryTextField; } public class FaceRecognition { - public static void main(String[] args) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - FaceRecognitionFrame demo = new FaceRecognitionFrame(); - demo.setVisible(true); - } - }); - } + public static void main(String[] args) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + FaceRecognitionFrame demo = new FaceRecognitionFrame(); + demo.setVisible(true); + } + }); + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FindFaceEventRecordDialog.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FindFaceEventRecordDialog.java index 4601a99..1b82a53 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FindFaceEventRecordDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/FindFaceEventRecordDialog.java @@ -31,216 +31,216 @@ import javax.swing.SwingWorker; /** * 查找人脸事件的信息记录 */ -public class FindFaceEventRecordDialog extends JDialog{ - /** - * - */ - private static final long serialVersionUID = 1L; - - private Vector chnList = new Vector(); - - public FindFaceEventRecordDialog(){ - setTitle("查找人脸事件的信息记录"); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(750, 430); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - FaceEventRecordPanel faceRecordPanel = new FaceEventRecordPanel(); +public class FindFaceEventRecordDialog extends JDialog { + /** + * + */ + private static final long serialVersionUID = 1L; + + private Vector chnList = new Vector(); + + public FindFaceEventRecordDialog() { + setTitle("查找人脸事件的信息记录"); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(750, 430); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + FaceEventRecordPanel faceRecordPanel = new FaceEventRecordPanel(); add(faceRecordPanel, BorderLayout.CENTER); - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - dispose(); - } - }); - } - - public class FaceEventRecordPanel extends JPanel{ - /** - * - */ - private static final long serialVersionUID = 1L; - - public FaceEventRecordPanel() { - BorderEx.set(this, "", 4); - setLayout(new BorderLayout()); - - JPanel panel1 = new JPanel(); - JPanel panel2 = new JPanel(); - add(panel1, BorderLayout.NORTH); - add(panel2, BorderLayout.CENTER); - - // - JLabel chnlabel = new JLabel(Res.string().getChannel()); - chnComboBox = new JComboBox(); - for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { - chnList.add(Res.string().getChannel() + " " + String.valueOf(i)); - } - - // 登陆成功,将通道添加到控件 - chnComboBox.setModel(new DefaultComboBoxModel(chnList)); - chnComboBox.setPreferredSize(new Dimension(80, 20)); - - JLabel startLabel = new JLabel(Res.string().getStartTime()); - startTimeBtn = new DateChooserJButton("2018-10-30 11:11:11"); - - JLabel endLabel = new JLabel(Res.string().getEndTime()); - endTimeBtn = new DateChooserJButton(); - - searchBtn = new JButton(Res.string().getSearch()); - searchBtn.setPreferredSize(new Dimension(70, 20)); - - JButton downloadBth = new JButton("下载查询到的图片"); - downloadBth.setPreferredSize(new Dimension(140, 20)); - - msgTextArea = new JTextArea(); - - Dimension dimension1 = new Dimension(); - dimension1.width = 130; - dimension1.height = 20; - startTimeBtn.setPreferredSize(dimension1); - endTimeBtn.setPreferredSize(dimension1); - - panel1.setLayout(new FlowLayout()); - panel1.add(chnlabel); - panel1.add(chnComboBox); - panel1.add(startLabel); - panel1.add(startTimeBtn); - panel1.add(endLabel); - panel1.add(endTimeBtn); - panel1.add(searchBtn); - panel1.add(downloadBth); - - panel2.setLayout(new BorderLayout()); - panel2.add(new JScrollPane(msgTextArea), BorderLayout.CENTER); - - searchBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - searchBtn.setEnabled(false); - } - }); - findEventInfo(); - } - }); - - downloadBth.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - DownloadPictureDialog dialog = new DownloadPictureDialog(); - dialog.setVisible(true); - } - }); - } - } - - - private JComboBox chnComboBox; - private DateChooserJButton startTimeBtn; - private DateChooserJButton endTimeBtn; - private JTextArea msgTextArea; - private JButton searchBtn; - - public void findEventInfo() { - new SwingWorker() { - @Override - protected Boolean doInBackground() { - int count = 0; // 循环查询了几次 - int index = 0; // index + 1 为查询到的总个数 - int nFindCount = 10; // 每次查询的个数 - StringBuffer message = null; - msgTextArea.setText(""); - - // 获取查询句柄 - if(!FaceRecognitionModule.findFile(chnComboBox.getSelectedIndex(), startTimeBtn.getText(), endTimeBtn.getText())) { - message = new StringBuffer(); - message.append("未查询到相关信息"); - publish(message); - return false; - } - - // 查询具体信息, 循环查询, nFindCount为每次查询的个数 - while(true) { - NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO[] msg = FaceRecognitionModule.findNextFile(nFindCount); - if(msg == null) { - message = new StringBuffer(); - message.append("查询结束!"); - publish(message); - break; - } - - for(int i = 0; i < msg.length; i++) { - index = i + count * nFindCount + 1; - - // 清空 - message = new StringBuffer(); - - message.append("[" + index + "]通道号 :" + msg[i].nChannelId + "\n"); - message.append("[" + index + "]报警发生时间 :" + msg[i].stTime.toStringTime() + "\n"); - message.append("[" + index + "]全景图 :" + new String(msg[i].stGlobalScenePic.szFilePath).trim() + "\n"); - message.append("[" + index + "]人脸图路径 :" + new String(msg[i].stObjectPic.szFilePath).trim() + "\n"); - message.append("[" + index + "]匹配到的候选对象数量 :" + msg[i].nCandidateNum + "\n"); - - for(int j = 0; j < msg[i].nCandidateNum; j++) { - for(int k = 0; k < msg[i].stuCandidatesPic[j].nFileCount; k++) { - message.append("[" + index + "]对比图路径 :" + new String(msg[i].stuCandidatesPic[j].stFiles[k].szFilePath).trim() + "\n"); - } - } - - message.append("[" + index + "]匹配到的候选对象数量 :" + msg[i].nCandidateExNum + "\n"); - - // 对比信息 - for(int j = 0; j < msg[i].nCandidateExNum; j++) { - message.append("[" + index + "]人员唯一标识符 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szUID).trim() + "\n"); - - // 以下参数,设备有些功能没有解析,如果想要知道 对比图的人员信息,可以根据上面获取的 szUID,来查询人员信息。 - // findFaceRecognitionDB() 此示例的方法是根据 GroupId来查询的,这里的查询,GroupId不填,根据 szUID 来查询 - message.append("[" + index + "]姓名 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szPersonName).trim() + "\n"); - message.append("[" + index + "]相似度 :" + msg[i].stuCandidatesEx[j].bySimilarity + "\n"); - message.append("[" + index + "]年龄 :" + msg[i].stuCandidatesEx[j].stPersonInfo.byAge + "\n"); - message.append("[" + index + "]人脸库名称 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szGroupName).trim() + "\n"); - message.append("[" + index + "]人脸库ID :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szGroupID).trim() + "\n"); - } - message.append("\n"); - publish(message); - } - - if (msg.length < nFindCount) { - message = new StringBuffer(); - message.append("查询结束!"); - publish(message); - break; - } else { - count ++; - } - } - - // 关闭查询接口 - FaceRecognitionModule.findCloseFile(); - - return true; - } - - @Override - protected void process(java.util.List chunks) { - for(StringBuffer data : chunks) { - msgTextArea.append(data.toString()); - msgTextArea.updateUI(); - } - - super.process(chunks); - } - - @Override - protected void done() { - searchBtn.setEnabled(true); - } - }.execute(); - } + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + public class FaceEventRecordPanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + + public FaceEventRecordPanel() { + BorderEx.set(this, "", 4); + setLayout(new BorderLayout()); + + JPanel panel1 = new JPanel(); + JPanel panel2 = new JPanel(); + add(panel1, BorderLayout.NORTH); + add(panel2, BorderLayout.CENTER); + + // + JLabel chnlabel = new JLabel(Res.string().getChannel()); + chnComboBox = new JComboBox(); + for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { + chnList.add(Res.string().getChannel() + " " + String.valueOf(i)); + } + + // 登陆成功,将通道添加到控件 + chnComboBox.setModel(new DefaultComboBoxModel(chnList)); + chnComboBox.setPreferredSize(new Dimension(80, 20)); + + JLabel startLabel = new JLabel(Res.string().getStartTime()); + startTimeBtn = new DateChooserJButton("2018-10-30 11:11:11"); + + JLabel endLabel = new JLabel(Res.string().getEndTime()); + endTimeBtn = new DateChooserJButton(); + + searchBtn = new JButton(Res.string().getSearch()); + searchBtn.setPreferredSize(new Dimension(70, 20)); + + JButton downloadBth = new JButton("下载查询到的图片"); + downloadBth.setPreferredSize(new Dimension(140, 20)); + + msgTextArea = new JTextArea(); + + Dimension dimension1 = new Dimension(); + dimension1.width = 130; + dimension1.height = 20; + startTimeBtn.setPreferredSize(dimension1); + endTimeBtn.setPreferredSize(dimension1); + + panel1.setLayout(new FlowLayout()); + panel1.add(chnlabel); + panel1.add(chnComboBox); + panel1.add(startLabel); + panel1.add(startTimeBtn); + panel1.add(endLabel); + panel1.add(endTimeBtn); + panel1.add(searchBtn); + panel1.add(downloadBth); + + panel2.setLayout(new BorderLayout()); + panel2.add(new JScrollPane(msgTextArea), BorderLayout.CENTER); + + searchBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + searchBtn.setEnabled(false); + } + }); + findEventInfo(); + } + }); + + downloadBth.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + DownloadPictureDialog dialog = new DownloadPictureDialog(); + dialog.setVisible(true); + } + }); + } + } + + + private JComboBox chnComboBox; + private DateChooserJButton startTimeBtn; + private DateChooserJButton endTimeBtn; + private JTextArea msgTextArea; + private JButton searchBtn; + + public void findEventInfo() { + new SwingWorker() { + @Override + protected Boolean doInBackground() { + int count = 0; // 循环查询了几次 + int index = 0; // index + 1 为查询到的总个数 + int nFindCount = 10; // 每次查询的个数 + StringBuffer message = null; + msgTextArea.setText(""); + + // 获取查询句柄 + if (!FaceRecognitionModule.findFile(chnComboBox.getSelectedIndex(), startTimeBtn.getText(), endTimeBtn.getText())) { + message = new StringBuffer(); + message.append("未查询到相关信息"); + publish(message); + return false; + } + + // 查询具体信息, 循环查询, nFindCount为每次查询的个数 + while (true) { + NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO[] msg = FaceRecognitionModule.findNextFile(nFindCount); + if (msg == null) { + message = new StringBuffer(); + message.append("查询结束!"); + publish(message); + break; + } + + for (int i = 0; i < msg.length; i++) { + index = i + count * nFindCount + 1; + + // 清空 + message = new StringBuffer(); + + message.append("[" + index + "]通道号 :" + msg[i].nChannelId + "\n"); + message.append("[" + index + "]报警发生时间 :" + msg[i].stTime.toStringTime() + "\n"); + message.append("[" + index + "]全景图 :" + new String(msg[i].stGlobalScenePic.szFilePath).trim() + "\n"); + message.append("[" + index + "]人脸图路径 :" + new String(msg[i].stObjectPic.szFilePath).trim() + "\n"); + message.append("[" + index + "]匹配到的候选对象数量 :" + msg[i].nCandidateNum + "\n"); + + for (int j = 0; j < msg[i].nCandidateNum; j++) { + for (int k = 0; k < msg[i].stuCandidatesPic[j].nFileCount; k++) { + message.append("[" + index + "]对比图路径 :" + new String(msg[i].stuCandidatesPic[j].stFiles[k].szFilePath).trim() + "\n"); + } + } + + message.append("[" + index + "]匹配到的候选对象数量 :" + msg[i].nCandidateExNum + "\n"); + + // 对比信息 + for (int j = 0; j < msg[i].nCandidateExNum; j++) { + message.append("[" + index + "]人员唯一标识符 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szUID).trim() + "\n"); + + // 以下参数,设备有些功能没有解析,如果想要知道 对比图的人员信息,可以根据上面获取的 szUID,来查询人员信息。 + // findFaceRecognitionDB() 此示例的方法是根据 GroupId来查询的,这里的查询,GroupId不填,根据 szUID 来查询 + message.append("[" + index + "]姓名 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szPersonName).trim() + "\n"); + message.append("[" + index + "]相似度 :" + msg[i].stuCandidatesEx[j].bySimilarity + "\n"); + message.append("[" + index + "]年龄 :" + msg[i].stuCandidatesEx[j].stPersonInfo.byAge + "\n"); + message.append("[" + index + "]人脸库名称 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szGroupName).trim() + "\n"); + message.append("[" + index + "]人脸库ID :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szGroupID).trim() + "\n"); + } + message.append("\n"); + publish(message); + } + + if (msg.length < nFindCount) { + message = new StringBuffer(); + message.append("查询结束!"); + publish(message); + break; + } else { + count++; + } + } + + // 关闭查询接口 + FaceRecognitionModule.findCloseFile(); + + return true; + } + + @Override + protected void process(java.util.List chunks) { + for (StringBuffer data : chunks) { + msgTextArea.append(data.toString()); + msgTextArea.updateUI(); + } + + super.process(chunks); + } + + @Override + protected void done() { + searchBtn.setEnabled(true); + } + }.execute(); + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/GroupOperateDialog.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/GroupOperateDialog.java index eee3bf0..e7b4ba1 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/GroupOperateDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/GroupOperateDialog.java @@ -27,314 +27,317 @@ import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; -public class GroupOperateDialog extends JDialog{ - - /** - * - */ - private static final long serialVersionUID = 1L; - - // 人脸库名称 - private String inputGroupName = ""; - - // 布控界面 - public DispositionOperateDialog dispositionOperateDialog = null; - - // 人员操作界面 - public PersonOperateDialog personOperateDialog = null; - - public GroupOperateDialog() { - setTitle(Res.string().getGroupOperate()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(650, 360); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - GroupListPanel GroupPanel = new GroupListPanel(); - GroupOperatePanel GroupOperatePanel = new GroupOperatePanel(); - - add(GroupPanel, BorderLayout.CENTER); - add(GroupOperatePanel, BorderLayout.EAST); - - findGroupInfo(); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - dispose(); - } - }); - } - - /* - * 人脸库显示列表 - */ - private class GroupListPanel extends JPanel { - private static final long serialVersionUID = 1L; - public GroupListPanel() { - BorderEx.set(this, "", 2); - setLayout(new BorderLayout()); - - data = new Object[20][3]; - defaultTableModel = new DefaultTableModel(data, Res.string().getGroupTable()); - table = new JTable(defaultTableModel) { // 列表不可编辑 - private static final long serialVersionUID = 1L; - @Override - public boolean isCellEditable(int row, int column) { - return false; - } - }; - - table.getColumnModel().getColumn(0).setPreferredWidth(80); - table.getColumnModel().getColumn(1).setPreferredWidth(280); - table.getColumnModel().getColumn(2).setPreferredWidth(100); - - table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 - - DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); - dCellRenderer.setHorizontalAlignment(JLabel.CENTER); - table.setDefaultRenderer(Object.class, dCellRenderer); - - add(new JScrollPane(table), BorderLayout.CENTER); - - } - } - - /* - * 人脸库操作 - */ - private class GroupOperatePanel extends JPanel { - /** - * - */ - private static final long serialVersionUID = 1L; - public GroupOperatePanel() { - BorderEx.set(this, "", 2); - setLayout(new BorderLayout()); - - Dimension dimension = new Dimension(); - dimension.width = 230; - setPreferredSize(dimension); - - JPanel GroupPanel = new JPanel(); - JPanel panel = new JPanel(); - - add(GroupPanel, BorderLayout.CENTER); - add(panel, BorderLayout.SOUTH); - - JButton searchByPicBtn = new JButton("以图搜图"); - JButton personOperateBtn = new JButton(Res.string().getPersonOperate()); - panel.setPreferredSize(new Dimension(230, 45)); - panel.setLayout(new GridLayout(2, 1)); +public class GroupOperateDialog extends JDialog { + + /** + * + */ + private static final long serialVersionUID = 1L; + + // 人脸库名称 + private String inputGroupName = ""; + + // 布控界面 + public DispositionOperateDialog dispositionOperateDialog = null; + + // 人员操作界面 + public PersonOperateDialog personOperateDialog = null; + + public GroupOperateDialog() { + setTitle(Res.string().getGroupOperate()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(650, 360); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + GroupListPanel GroupPanel = new GroupListPanel(); + GroupOperatePanel GroupOperatePanel = new GroupOperatePanel(); + + add(GroupPanel, BorderLayout.CENTER); + add(GroupOperatePanel, BorderLayout.EAST); + + findGroupInfo(); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + /* + * 人脸库显示列表 + */ + private class GroupListPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public GroupListPanel() { + BorderEx.set(this, "", 2); + setLayout(new BorderLayout()); + + data = new Object[20][3]; + defaultTableModel = new DefaultTableModel(data, Res.string().getGroupTable()); + table = new JTable(defaultTableModel) { // 列表不可编辑 + private static final long serialVersionUID = 1L; + + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + }; + + table.getColumnModel().getColumn(0).setPreferredWidth(80); + table.getColumnModel().getColumn(1).setPreferredWidth(280); + table.getColumnModel().getColumn(2).setPreferredWidth(100); + + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 + + DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); + dCellRenderer.setHorizontalAlignment(JLabel.CENTER); + table.setDefaultRenderer(Object.class, dCellRenderer); + + add(new JScrollPane(table), BorderLayout.CENTER); + + } + } + + /* + * 人脸库操作 + */ + private class GroupOperatePanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + + public GroupOperatePanel() { + BorderEx.set(this, "", 2); + setLayout(new BorderLayout()); + + Dimension dimension = new Dimension(); + dimension.width = 230; + setPreferredSize(dimension); + + JPanel GroupPanel = new JPanel(); + JPanel panel = new JPanel(); + + add(GroupPanel, BorderLayout.CENTER); + add(panel, BorderLayout.SOUTH); + + JButton searchByPicBtn = new JButton("以图搜图"); + JButton personOperateBtn = new JButton(Res.string().getPersonOperate()); + panel.setPreferredSize(new Dimension(230, 45)); + panel.setLayout(new GridLayout(2, 1)); // panel.add(searchByPicBtn); - panel.add(personOperateBtn); - - /* - * 人脸库增删改, 布控、撤控 - */ - JButton refreshBtn = new JButton(Res.string().getFresh()); - JButton addGroupBtn = new JButton(Res.string().getAddGroup()); - JButton modifyGroupBtn = new JButton(Res.string().getModifyGroup()); - JButton deleteGroupBtn = new JButton(Res.string().getDelGroup()); - JButton dispositionBtn = new JButton(Res.string().getDisposition() + "/" + Res.string().getDelDisposition()); - - GroupPanel.setLayout(new GridLayout(12, 1)); - GroupPanel.add(refreshBtn); - GroupPanel.add(addGroupBtn); - GroupPanel.add(modifyGroupBtn); - GroupPanel.add(deleteGroupBtn); - GroupPanel.add(dispositionBtn); - - // 刷新人脸库列表 - refreshBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - findGroupInfo(); - } - }); - - // 添加人脸库 - addGroupBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent arg0) { - inputGroupName = JOptionPane.showInputDialog(GroupOperateDialog.this, - Res.string().getInputGroupName(), ""); - - if(inputGroupName == null) { // 取消或者关闭按钮 - return; - } - - if(FaceRecognitionModule.addGroup(inputGroupName)) { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - // 更新人脸库列表 - findGroupInfo(); - } - }); - - // 修改人脸库 - modifyGroupBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - inputGroupName = JOptionPane.showInputDialog(GroupOperateDialog.this, - Res.string().getInputGroupName(), String.valueOf(defaultTableModel.getValueAt(row, 1)).trim()); - - if(inputGroupName == null) { // 取消或者关闭按钮 - return; - } - - if(FaceRecognitionModule.modifyGroup(inputGroupName, String.valueOf(defaultTableModel.getValueAt(row, 0)).trim())) { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - // 更新人脸库列表 - findGroupInfo(); - } - }); - - // 删除人脸库 - deleteGroupBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - String groupId = String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(); - System.out.println("groupId:"+groupId); - if(!FaceRecognitionModule.deleteGroup(groupId)) { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - - // 更新人脸库列表 - findGroupInfo(); - } - }); - - // 布控/撤控 - dispositionBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - dispositionOperateDialog = new DispositionOperateDialog(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(), - String.valueOf(defaultTableModel.getValueAt(row, 1)).trim()); - dispositionOperateDialog.setVisible(true); - - } - }); - - // 以图搜图 - searchByPicBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SearchByPicDialog dialog = new SearchByPicDialog(); - dialog.setVisible(true); - } - }); - - // 人员操作 - personOperateBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - personOperateDialog = new PersonOperateDialog(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(), - String.valueOf(defaultTableModel.getValueAt(row, 1)).trim()); - personOperateDialog.setVisible(true); - } - }); - } - } - - /* - * 查找所有人脸库 - */ - private void findGroupInfo() { - // 清空列表 - for(int i = 0; i < 20; i++) { - for(int j = 0; j < 3; j++) { - defaultTableModel.setValueAt("", i, j); - } - } - - // 查询人脸库 - NetSDKLib.NET_FACERECONGNITION_GROUP_INFO[] groupInfoArr = FaceRecognitionModule.findGroupInfo(""); - if(groupInfoArr != null) { - for(int i = 0; i < groupInfoArr.length; i++) { - String groupId = new String(groupInfoArr[i].szGroupId).trim(); - System.out.println("groupId:"+groupId); - defaultTableModel.setValueAt(groupId, i, 0); - try { - String groupName = new String(groupInfoArr[i].szGroupName, "GBK").trim(); - System.out.println("groupName:"+groupName); - defaultTableModel.setValueAt(groupName, i, 1); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } - defaultTableModel.setValueAt(String.valueOf(groupInfoArr[i].nGroupSize).trim(), i, 2); - } - } - } - - private Object[][] data; - private DefaultTableModel defaultTableModel; - private JTable table; + panel.add(personOperateBtn); + + /* + * 人脸库增删改, 布控、撤控 + */ + JButton refreshBtn = new JButton(Res.string().getFresh()); + JButton addGroupBtn = new JButton(Res.string().getAddGroup()); + JButton modifyGroupBtn = new JButton(Res.string().getModifyGroup()); + JButton deleteGroupBtn = new JButton(Res.string().getDelGroup()); + JButton dispositionBtn = new JButton(Res.string().getDisposition() + "/" + Res.string().getDelDisposition()); + + GroupPanel.setLayout(new GridLayout(12, 1)); + GroupPanel.add(refreshBtn); + GroupPanel.add(addGroupBtn); + GroupPanel.add(modifyGroupBtn); + GroupPanel.add(deleteGroupBtn); + GroupPanel.add(dispositionBtn); + + // 刷新人脸库列表 + refreshBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + findGroupInfo(); + } + }); + + // 添加人脸库 + addGroupBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + inputGroupName = JOptionPane.showInputDialog(GroupOperateDialog.this, + Res.string().getInputGroupName(), ""); + + if (inputGroupName == null) { // 取消或者关闭按钮 + return; + } + + if (FaceRecognitionModule.addGroup(inputGroupName)) { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + // 更新人脸库列表 + findGroupInfo(); + } + }); + + // 修改人脸库 + modifyGroupBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + inputGroupName = JOptionPane.showInputDialog(GroupOperateDialog.this, + Res.string().getInputGroupName(), String.valueOf(defaultTableModel.getValueAt(row, 1)).trim()); + + if (inputGroupName == null) { // 取消或者关闭按钮 + return; + } + + if (FaceRecognitionModule.modifyGroup(inputGroupName, String.valueOf(defaultTableModel.getValueAt(row, 0)).trim())) { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + // 更新人脸库列表 + findGroupInfo(); + } + }); + + // 删除人脸库 + deleteGroupBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + String groupId = String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(); + System.out.println("groupId:" + groupId); + if (!FaceRecognitionModule.deleteGroup(groupId)) { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + + // 更新人脸库列表 + findGroupInfo(); + } + }); + + // 布控/撤控 + dispositionBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + dispositionOperateDialog = new DispositionOperateDialog(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(), + String.valueOf(defaultTableModel.getValueAt(row, 1)).trim()); + dispositionOperateDialog.setVisible(true); + + } + }); + + // 以图搜图 + searchByPicBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SearchByPicDialog dialog = new SearchByPicDialog(); + dialog.setVisible(true); + } + }); + + // 人员操作 + personOperateBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + personOperateDialog = new PersonOperateDialog(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(), + String.valueOf(defaultTableModel.getValueAt(row, 1)).trim()); + personOperateDialog.setVisible(true); + } + }); + } + } + + /* + * 查找所有人脸库 + */ + private void findGroupInfo() { + // 清空列表 + for (int i = 0; i < 20; i++) { + for (int j = 0; j < 3; j++) { + defaultTableModel.setValueAt("", i, j); + } + } + + // 查询人脸库 + NetSDKLib.NET_FACERECONGNITION_GROUP_INFO[] groupInfoArr = FaceRecognitionModule.findGroupInfo(""); + if (groupInfoArr != null) { + for (int i = 0; i < groupInfoArr.length; i++) { + String groupId = new String(groupInfoArr[i].szGroupId).trim(); + System.out.println("groupId:" + groupId); + defaultTableModel.setValueAt(groupId, i, 0); + try { + String groupName = new String(groupInfoArr[i].szGroupName, "GBK").trim(); + System.out.println("groupName:" + groupName); + defaultTableModel.setValueAt(groupName, i, 1); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + defaultTableModel.setValueAt(String.valueOf(groupInfoArr[i].nGroupSize).trim(), i, 2); + } + } + } + + private Object[][] data; + private DefaultTableModel defaultTableModel; + private JTable table; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/ModifyPersonDialog.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/ModifyPersonDialog.java index f9acad0..d927e1c 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/ModifyPersonDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/ModifyPersonDialog.java @@ -29,293 +29,295 @@ import com.example.dahua.module.FaceRecognitionModule; import com.sun.jna.Memory; -public class ModifyPersonDialog extends JDialog{ - /** - * - */ - private static final long serialVersionUID = 1L; - - private String groupId = ""; - private String groupName = ""; - private String uid = ""; - private String pszFileDst = ""; - private Memory memory = null; - private NetSDKLib.CANDIDATE_INFOEX stuCandidate = null; - - private WindowCloseListener listener; - public void addWindowCloseListener(WindowCloseListener listener) { - this.listener = listener; - } - - /** - * @param groupId 人脸库ID - * @param groupName 人脸库名称 - * @param uid 人员标识符 - * @param pszFileDst 下载到本地的图片路径 - * @param memory 图片数据 - * @param stuCandidate 人员信息 - */ - public ModifyPersonDialog(String groupId, - String groupName, - String uid, - String pszFileDst, - Memory memory, - CANDIDATE_INFOEX stuCandidate){ - - setTitle(Res.string().getModifyPerson()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(520, 400); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - this.groupId = groupId; - this.groupName = groupName; - this.uid = uid; - this.pszFileDst = pszFileDst; - this.memory = memory; - this.stuCandidate = stuCandidate; - - FaceServerAddPanel faceServerAddPanel = new FaceServerAddPanel(); +public class ModifyPersonDialog extends JDialog { + /** + * + */ + private static final long serialVersionUID = 1L; + + private String groupId = ""; + private String groupName = ""; + private String uid = ""; + private String pszFileDst = ""; + private Memory memory = null; + private NetSDKLib.CANDIDATE_INFOEX stuCandidate = null; + + private WindowCloseListener listener; + + public void addWindowCloseListener(WindowCloseListener listener) { + this.listener = listener; + } + + /** + * @param groupId 人脸库ID + * @param groupName 人脸库名称 + * @param uid 人员标识符 + * @param pszFileDst 下载到本地的图片路径 + * @param memory 图片数据 + * @param stuCandidate 人员信息 + */ + public ModifyPersonDialog(String groupId, + String groupName, + String uid, + String pszFileDst, + Memory memory, + CANDIDATE_INFOEX stuCandidate) { + + setTitle(Res.string().getModifyPerson()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(520, 400); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + this.groupId = groupId; + this.groupName = groupName; + this.uid = uid; + this.pszFileDst = pszFileDst; + this.memory = memory; + this.stuCandidate = stuCandidate; + + FaceServerAddPanel faceServerAddPanel = new FaceServerAddPanel(); add(faceServerAddPanel, BorderLayout.CENTER); - + showPersonInfo(); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - dispose(); - } - }); - } - public class FaceServerAddPanel extends JPanel{ - /** - * - */ - private static final long serialVersionUID = 1L; - - public FaceServerAddPanel() { - BorderEx.set(this, "", 4); - setLayout(new BorderLayout()); - - JPanel imagePanel = new JPanel(); - JPanel personInfoPanel = new JPanel(); - - Dimension dimension = this.getPreferredSize(); - dimension.height = 400; - dimension.width = 250; - personInfoPanel.setPreferredSize(dimension); - - add(imagePanel, BorderLayout.CENTER); - add(personInfoPanel, BorderLayout.WEST); - - /////////// 添加的人脸图片面板 ////////////////// - imagePanel.setLayout(new BorderLayout()); - addImagePanel = new PaintPanel(); // 添加的人员信息图片显示 - selectImageBtn = new JButton(Res.string().getSelectPicture()); - imagePanel.add(addImagePanel, BorderLayout.CENTER); - imagePanel.add(selectImageBtn, BorderLayout.SOUTH); - - ////////// 添加的人脸信息面板 ///////////////// - personInfoPanel.setLayout(new FlowLayout()); - JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); - JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); - JLabel uidLabel = new JLabel(Res.string().getUid(), JLabel.CENTER); - JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER); - JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER); - JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER); - JLabel idTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER); - JLabel idLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER); - - Dimension dimension2 = new Dimension(); - dimension2.width = 80; - dimension2.height = 20; - uidLabel.setPreferredSize(dimension2); - goroupIdLabel.setPreferredSize(dimension2); - goroupNameLabel.setPreferredSize(dimension2); - nameLabel.setPreferredSize(dimension2); - sexLabel.setPreferredSize(dimension2); - birthdayLabel.setPreferredSize(dimension2); - idTypeLabel.setPreferredSize(dimension2); - idLabel.setPreferredSize(dimension2); - - goroupIdTextField = new JTextField(); - goroupNameTextField = new JTextField(); - uidTextField = new JTextField(); - nameTextField = new JTextField(); - sexComboBox = new JComboBox(Res.string().getSexStrings()); - birthdayBtn = new DateChooserJButtonEx(""); - idTypeComboBox = new JComboBox(Res.string().getIdStrings()); - idTextField = new JTextField(); - birthdayCheckBox = new JCheckBox(); - - modifyBtn = new JButton(Res.string().getModify()); - cancelBtn = new JButton(Res.string().getCancel()); - - birthdayBtn.setStartYear(1900); - - Dimension dimension3 = new Dimension(); - dimension3.width = 150; - dimension3.height = 20; - - sexComboBox.setPreferredSize(dimension3); - idTypeComboBox.setPreferredSize(dimension3); - goroupIdTextField.setPreferredSize(dimension3); - goroupNameTextField.setPreferredSize(dimension3); - uidTextField.setPreferredSize(dimension3); - nameTextField.setPreferredSize(dimension3); - idTextField.setPreferredSize(dimension3); - birthdayBtn.setPreferredSize(new Dimension(130, 20)); - birthdayCheckBox.setPreferredSize(new Dimension(20, 20)); - modifyBtn.setPreferredSize(new Dimension(120, 20)); - cancelBtn.setPreferredSize(new Dimension(120, 20)); - - goroupIdTextField.setEditable(false); - goroupNameTextField.setEditable(false); - uidTextField.setEditable(false); - birthdayCheckBox.setSelected(true); - - goroupIdTextField.setText(groupId); - goroupNameTextField.setText(groupName); - uidTextField.setText(uid); - - personInfoPanel.add(goroupIdLabel); - personInfoPanel.add(goroupIdTextField); - personInfoPanel.add(goroupNameLabel); - personInfoPanel.add(goroupNameTextField); - personInfoPanel.add(uidLabel); - personInfoPanel.add(uidTextField); - personInfoPanel.add(nameLabel); - personInfoPanel.add(nameTextField); - personInfoPanel.add(sexLabel); - personInfoPanel.add(sexComboBox); - personInfoPanel.add(idTypeLabel); - personInfoPanel.add(idTypeComboBox); - personInfoPanel.add(idLabel); - personInfoPanel.add(idTextField); - personInfoPanel.add(birthdayLabel); - personInfoPanel.add(birthdayBtn); - personInfoPanel.add(birthdayCheckBox); - personInfoPanel.add(modifyBtn); - personInfoPanel.add(cancelBtn); - - birthdayCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent arg0) { - if(birthdayCheckBox.isSelected()) { - birthdayBtn.setEnabled(true); - } else { - birthdayBtn.setEnabled(false); - } - } - }); - - // 选择图片,获取图片的信息 - selectImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - String picPath = ""; - - // 选择图片,获取图片路径,并在界面显示 - picPath = ToolKits.openPictureFile(addImagePanel); - - if(!picPath.equals("")) { - memory = null; - memory = ToolKits.readPictureFile(picPath); - } - } - }); - - // 修改人员信息 - modifyBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - boolean bRet = FaceRecognitionModule.modifyPerson(groupId, uid, - memory, - nameTextField.getText(), - sexComboBox.getSelectedIndex(), - birthdayCheckBox.isSelected(), birthdayBtn.getText().toString(), - idTypeComboBox.getSelectedIndex(), idTextField.getText()); - - if(bRet) { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - dispose(); - - listener.windowClosing(); - } - }); - - // 取消,关闭 - cancelBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - dispose(); - } - }); - } - } - - private void showPersonInfo() { - File file = null; - if(!pszFileDst.equals("")) { - file = ToolKits.openPictureFile(pszFileDst, addImagePanel); - } - - if(file != null) { - file.delete(); - } - - try { - nameTextField.setText(new String(stuCandidate.stPersonInfo.szPersonName, "GBK").trim()); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - sexComboBox.setSelectedIndex(stuCandidate.stPersonInfo.bySex & 0xff); - - idTypeComboBox.setSelectedIndex(stuCandidate.stPersonInfo.byIDType & 0xff); - - idTextField.setText(new String(stuCandidate.stPersonInfo.szID).trim()); - - if(stuCandidate.stPersonInfo == null) { - birthdayCheckBox.setSelected(false); - birthdayBtn.setText(birthdayBtn.getDate().toString()); - } else { - if(String.valueOf((int)stuCandidate.stPersonInfo.wYear).equals("0000") - || String.valueOf((int)stuCandidate.stPersonInfo.wYear).equals("0") - || String.valueOf( stuCandidate.stPersonInfo.byMonth & 0xff).equals("0") - || String.valueOf( stuCandidate.stPersonInfo.byMonth & 0xff).equals("00") - || String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff).equals("0") - || String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff).equals("00")) { - birthdayCheckBox.setSelected(false); - birthdayBtn.setText(birthdayBtn.getDate().toString()); - } else { - birthdayCheckBox.setSelected(true); - birthdayBtn.setText(String.valueOf((int)stuCandidate.stPersonInfo.wYear) + "-" + - String.valueOf( stuCandidate.stPersonInfo.byMonth & 0xff) + "-" + - String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff)); - } - } - } - - // 添加人员信息窗口的组件 - public PaintPanel addImagePanel; - private JButton selectImageBtn; - - private JTextField goroupIdTextField; - private JTextField goroupNameTextField; - private JTextField uidTextField; - public JTextField nameTextField; - public JComboBox sexComboBox; - public DateChooserJButtonEx birthdayBtn; - public JComboBox idTypeComboBox; - public JTextField idTextField; - private JButton modifyBtn; - private JButton cancelBtn; - public JCheckBox birthdayCheckBox; + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + public class FaceServerAddPanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + + public FaceServerAddPanel() { + BorderEx.set(this, "", 4); + setLayout(new BorderLayout()); + + JPanel imagePanel = new JPanel(); + JPanel personInfoPanel = new JPanel(); + + Dimension dimension = this.getPreferredSize(); + dimension.height = 400; + dimension.width = 250; + personInfoPanel.setPreferredSize(dimension); + + add(imagePanel, BorderLayout.CENTER); + add(personInfoPanel, BorderLayout.WEST); + + /////////// 添加的人脸图片面板 ////////////////// + imagePanel.setLayout(new BorderLayout()); + addImagePanel = new PaintPanel(); // 添加的人员信息图片显示 + selectImageBtn = new JButton(Res.string().getSelectPicture()); + imagePanel.add(addImagePanel, BorderLayout.CENTER); + imagePanel.add(selectImageBtn, BorderLayout.SOUTH); + + ////////// 添加的人脸信息面板 ///////////////// + personInfoPanel.setLayout(new FlowLayout()); + JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); + JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); + JLabel uidLabel = new JLabel(Res.string().getUid(), JLabel.CENTER); + JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER); + JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER); + JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER); + JLabel idTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER); + JLabel idLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER); + + Dimension dimension2 = new Dimension(); + dimension2.width = 80; + dimension2.height = 20; + uidLabel.setPreferredSize(dimension2); + goroupIdLabel.setPreferredSize(dimension2); + goroupNameLabel.setPreferredSize(dimension2); + nameLabel.setPreferredSize(dimension2); + sexLabel.setPreferredSize(dimension2); + birthdayLabel.setPreferredSize(dimension2); + idTypeLabel.setPreferredSize(dimension2); + idLabel.setPreferredSize(dimension2); + + goroupIdTextField = new JTextField(); + goroupNameTextField = new JTextField(); + uidTextField = new JTextField(); + nameTextField = new JTextField(); + sexComboBox = new JComboBox(Res.string().getSexStrings()); + birthdayBtn = new DateChooserJButtonEx(""); + idTypeComboBox = new JComboBox(Res.string().getIdStrings()); + idTextField = new JTextField(); + birthdayCheckBox = new JCheckBox(); + + modifyBtn = new JButton(Res.string().getModify()); + cancelBtn = new JButton(Res.string().getCancel()); + + birthdayBtn.setStartYear(1900); + + Dimension dimension3 = new Dimension(); + dimension3.width = 150; + dimension3.height = 20; + + sexComboBox.setPreferredSize(dimension3); + idTypeComboBox.setPreferredSize(dimension3); + goroupIdTextField.setPreferredSize(dimension3); + goroupNameTextField.setPreferredSize(dimension3); + uidTextField.setPreferredSize(dimension3); + nameTextField.setPreferredSize(dimension3); + idTextField.setPreferredSize(dimension3); + birthdayBtn.setPreferredSize(new Dimension(130, 20)); + birthdayCheckBox.setPreferredSize(new Dimension(20, 20)); + modifyBtn.setPreferredSize(new Dimension(120, 20)); + cancelBtn.setPreferredSize(new Dimension(120, 20)); + + goroupIdTextField.setEditable(false); + goroupNameTextField.setEditable(false); + uidTextField.setEditable(false); + birthdayCheckBox.setSelected(true); + + goroupIdTextField.setText(groupId); + goroupNameTextField.setText(groupName); + uidTextField.setText(uid); + + personInfoPanel.add(goroupIdLabel); + personInfoPanel.add(goroupIdTextField); + personInfoPanel.add(goroupNameLabel); + personInfoPanel.add(goroupNameTextField); + personInfoPanel.add(uidLabel); + personInfoPanel.add(uidTextField); + personInfoPanel.add(nameLabel); + personInfoPanel.add(nameTextField); + personInfoPanel.add(sexLabel); + personInfoPanel.add(sexComboBox); + personInfoPanel.add(idTypeLabel); + personInfoPanel.add(idTypeComboBox); + personInfoPanel.add(idLabel); + personInfoPanel.add(idTextField); + personInfoPanel.add(birthdayLabel); + personInfoPanel.add(birthdayBtn); + personInfoPanel.add(birthdayCheckBox); + personInfoPanel.add(modifyBtn); + personInfoPanel.add(cancelBtn); + + birthdayCheckBox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent arg0) { + if (birthdayCheckBox.isSelected()) { + birthdayBtn.setEnabled(true); + } else { + birthdayBtn.setEnabled(false); + } + } + }); + + // 选择图片,获取图片的信息 + selectImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + String picPath = ""; + + // 选择图片,获取图片路径,并在界面显示 + picPath = ToolKits.openPictureFile(addImagePanel); + + if (!picPath.equals("")) { + memory = null; + memory = ToolKits.readPictureFile(picPath); + } + } + }); + + // 修改人员信息 + modifyBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + boolean bRet = FaceRecognitionModule.modifyPerson(groupId, uid, + memory, + nameTextField.getText(), + sexComboBox.getSelectedIndex(), + birthdayCheckBox.isSelected(), birthdayBtn.getText().toString(), + idTypeComboBox.getSelectedIndex(), idTextField.getText()); + + if (bRet) { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + dispose(); + + listener.windowClosing(); + } + }); + + // 取消,关闭 + cancelBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + dispose(); + } + }); + } + } + + private void showPersonInfo() { + File file = null; + if (!pszFileDst.equals("")) { + file = ToolKits.openPictureFile(pszFileDst, addImagePanel); + } + + if (file != null) { + file.delete(); + } + + try { + nameTextField.setText(new String(stuCandidate.stPersonInfo.szPersonName, "GBK").trim()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + sexComboBox.setSelectedIndex(stuCandidate.stPersonInfo.bySex & 0xff); + + idTypeComboBox.setSelectedIndex(stuCandidate.stPersonInfo.byIDType & 0xff); + + idTextField.setText(new String(stuCandidate.stPersonInfo.szID).trim()); + + if (stuCandidate.stPersonInfo == null) { + birthdayCheckBox.setSelected(false); + birthdayBtn.setText(birthdayBtn.getDate().toString()); + } else { + if (String.valueOf((int) stuCandidate.stPersonInfo.wYear).equals("0000") + || String.valueOf((int) stuCandidate.stPersonInfo.wYear).equals("0") + || String.valueOf(stuCandidate.stPersonInfo.byMonth & 0xff).equals("0") + || String.valueOf(stuCandidate.stPersonInfo.byMonth & 0xff).equals("00") + || String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff).equals("0") + || String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff).equals("00")) { + birthdayCheckBox.setSelected(false); + birthdayBtn.setText(birthdayBtn.getDate().toString()); + } else { + birthdayCheckBox.setSelected(true); + birthdayBtn.setText(String.valueOf((int) stuCandidate.stPersonInfo.wYear) + "-" + + String.valueOf(stuCandidate.stPersonInfo.byMonth & 0xff) + "-" + + String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff)); + } + } + } + + // 添加人员信息窗口的组件 + public PaintPanel addImagePanel; + private JButton selectImageBtn; + + private JTextField goroupIdTextField; + private JTextField goroupNameTextField; + private JTextField uidTextField; + public JTextField nameTextField; + public JComboBox sexComboBox; + public DateChooserJButtonEx birthdayBtn; + public JComboBox idTypeComboBox; + public JTextField idTextField; + private JButton modifyBtn; + private JButton cancelBtn; + public JCheckBox birthdayCheckBox; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/PersonOperateDialog.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/PersonOperateDialog.java index 6fe7d78..aa384b3 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/PersonOperateDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/PersonOperateDialog.java @@ -41,814 +41,818 @@ import com.example.dahua.module.FaceRecognitionModule; import com.sun.jna.Memory; -public class PersonOperateDialog extends JDialog{ - /** - * - */ - private static final long serialVersionUID = 1L; - - private String groupId = ""; - private String groupName = ""; - - // 添加人员界面 - public AddPersonDialog addPersonDialog = null; - - // 修改人员界面 - public ModifyPersonDialog modifyPersonDialog = null; - - // 查询起始索引 - private int nBeginNum = 0; - - // 页数 - private int nPagesNumber = 0; - - // 查询人员总数 - private int nTotalCount = 0; - - private HashMap cadidateHashMap = new HashMap(); - - public PersonOperateDialog(String groupId, String groupName) { - setTitle(Res.string().getPersonOperate()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(680, 520); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - this.groupId = groupId; - this.groupName = groupName; - - PersonInfoPanel personInfoPanel = new PersonInfoPanel(); - PersonInfoListPanel personInfoListPanel = new PersonInfoListPanel(); - - add(personInfoPanel, BorderLayout.NORTH); - add(personInfoListPanel, BorderLayout.CENTER); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - nBeginNum = 0; - nPagesNumber = 0; - nTotalCount = 0; - cadidateHashMap.clear(); - - dispose(); - } - }); - } - - - /* - * 查找条件信息 - */ - private class SearchInfoPanel extends JPanel { - private static final long serialVersionUID = 1L; - public SearchInfoPanel() { - BorderEx.set(this, Res.string().getFindCondition(), 1); - setLayout(new FlowLayout()); - - JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); - JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); - JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER); - JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER); - JLabel IdTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER); - JLabel IdLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER); - JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER); - JLabel lineLabel = new JLabel("-", JLabel.CENTER); - startBirthdayCheckBox = new JCheckBox(); - endBirthdayCheckBox = new JCheckBox(); - JLabel nullLabel = new JLabel(); - - Dimension dimension1 = new Dimension(); - dimension1.height = 20; - dimension1.width = 80; - goroupIdLabel.setPreferredSize(dimension1); - goroupNameLabel.setPreferredSize(dimension1); - nameLabel.setPreferredSize(dimension1); - sexLabel.setPreferredSize(dimension1); - IdTypeLabel.setPreferredSize(dimension1); - IdLabel.setPreferredSize(dimension1); - birthdayLabel.setPreferredSize(dimension1); - lineLabel.setPreferredSize(new Dimension(50, 20)); - nullLabel.setPreferredSize(new Dimension(180, 20)); - - goroupIdTextField = new JTextField(); - goroupNameTextField = new JTextField(); - nameTextField = new JTextField(); - sexComboBox = new JComboBox(Res.string().getSexStringsFind()); - idTypeComboBox = new JComboBox(Res.string().getIdStringsFind()); - idTextField = new JTextField(); - - startTimeBtn = new DateChooserJButtonEx("2018-07-01"); - endTimeBtn = new DateChooserJButtonEx(); - - startTimeBtn.setStartYear(1900); - endTimeBtn.setStartYear(1900); - - Dimension dimension2 = new Dimension(); - dimension2.height = 20; - goroupIdTextField.setPreferredSize(dimension2); - goroupNameTextField.setPreferredSize(dimension2); - nameTextField.setPreferredSize(dimension2); - idTextField.setPreferredSize(dimension2); - - goroupIdTextField.setPreferredSize(new Dimension(120, 20)); - goroupNameTextField.setPreferredSize(new Dimension(120, 20)); - nameTextField.setPreferredSize(new Dimension(120, 20)); - idTextField.setPreferredSize(new Dimension(120, 20)); - sexComboBox.setPreferredSize(new Dimension(120, 20)); - startTimeBtn.setPreferredSize(new Dimension(125, 20)); - endTimeBtn.setPreferredSize(new Dimension(125, 20)); - idTypeComboBox.setPreferredSize(new Dimension(120, 20)); - startBirthdayCheckBox.setPreferredSize(new Dimension(20, 20)); - endBirthdayCheckBox.setPreferredSize(new Dimension(20, 20)); - - add(goroupIdLabel); - add(goroupIdTextField); - add(goroupNameLabel); - add(goroupNameTextField); - add(nameLabel); - add(nameTextField); - add(sexLabel); - add(sexComboBox); - add(IdTypeLabel); - add(idTypeComboBox); - add(IdLabel); - add(idTextField); - add(birthdayLabel); - add(startTimeBtn); - add(startBirthdayCheckBox); - add(lineLabel); - add(endTimeBtn); - add(endBirthdayCheckBox); - add(nullLabel); - - goroupIdTextField.setEditable(false); - goroupNameTextField.setEditable(false); - startBirthdayCheckBox.setSelected(false); - endBirthdayCheckBox.setSelected(false); - startTimeBtn.setEnabled(false); - endTimeBtn.setEnabled(false); - } - } - /* - * 人员信息以及操作面板 - */ - private class PersonInfoPanel extends JPanel { - private static final long serialVersionUID = 1L; - public PersonInfoPanel() { - BorderEx.set(this, "", 2); - setLayout(new BorderLayout()); - - Dimension dimension = new Dimension(); - dimension.height = 150; - setPreferredSize(dimension); - - SearchInfoPanel searchInfoPanel = new SearchInfoPanel(); - JPanel operatePanel = new JPanel(); - - add(searchInfoPanel, BorderLayout.CENTER); - add(operatePanel, BorderLayout.SOUTH); - - /* - * 操作 - */ - searchPersonBtn = new JButton(Res.string().getFindPerson()); - JButton addPersonBtn = new JButton(Res.string().getAddPerson()); - JButton modifyPersonBtn = new JButton(Res.string().getModifyPerson()); - JButton deletePersonBtn = new JButton(Res.string().getDelPerson()); - - operatePanel.setLayout(new GridLayout(1, 4)); - - operatePanel.add(searchPersonBtn); - operatePanel.add(addPersonBtn); - operatePanel.add(modifyPersonBtn); - operatePanel.add(deletePersonBtn); - - goroupIdTextField.setText(groupId); - goroupNameTextField.setText(groupName); - - startBirthdayCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent arg0) { - if(startBirthdayCheckBox.isSelected()) { - startTimeBtn.setEnabled(true); - } else { - startTimeBtn.setEnabled(false); - } - } - }); - - endBirthdayCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent arg0) { - if(endBirthdayCheckBox.isSelected()) { - endTimeBtn.setEnabled(true); - } else { - endTimeBtn.setEnabled(false); - } - } - }); - - // 查找人员 - searchPersonBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - searchPersonBtn.setEnabled(false); - } - }); - - new SwingWorker() { - @Override - protected CANDIDATE_INFOEX[] doInBackground() { - nTotalCount = 0; - nBeginNum = 0; - cleanList(); - cadidateHashMap.clear(); - - nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(), - startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(), - endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(), - nameTextField.getText(), sexComboBox.getSelectedIndex(), - idTypeComboBox.getSelectedIndex(), idTextField.getText()); - - if(nTotalCount <= 0) { - searchPersonBtn.setEnabled(true); - previousPageBtn.setEnabled(false); - lastPageBtn.setEnabled(false); - numTextField.setText(""); - return null; - } - - CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); - return stuCandidatesEx; - } - - @Override - protected void done() { - try { - CANDIDATE_INFOEX[] stuCandidatesEx = get(); - findPersonInfo(stuCandidatesEx); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - }.execute(); - } - }); - - // 添加人员 - addPersonBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - addPersonDialog = new AddPersonDialog(groupId, groupName); - - addPersonDialog.addWindowCloseListener(new WindowCloseListener() { - @Override - public void windowClosing() { - new SwingWorker() { - @Override - protected CANDIDATE_INFOEX[] doInBackground() { - nTotalCount = 0; - nBeginNum = 0; - cleanList(); - cadidateHashMap.clear(); - - nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(), - startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(), - endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(), - nameTextField.getText(), sexComboBox.getSelectedIndex(), - idTypeComboBox.getSelectedIndex(), idTextField.getText()); - - if(nTotalCount <= 0) { - searchPersonBtn.setEnabled(true); - previousPageBtn.setEnabled(false); - lastPageBtn.setEnabled(false); - numTextField.setText(""); - return null; - } - - CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); - return stuCandidatesEx; - } - - @Override - protected void done() { - try { - CANDIDATE_INFOEX[] stuCandidatesEx = get(); - findPersonInfo(stuCandidatesEx); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - }.execute(); - } - }); - - addPersonDialog.setVisible(true); - } - }); - - // 修改人员 - modifyPersonBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - // 人员信息 - CANDIDATE_INFOEX stuCandidate = cadidateHashMap.get(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim()); - - // URL地址 - String szFilePath = stuCandidate.stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0); - - // 存放图片的本地路径 - String pszFileDst = "./person.jpg"; - - // 下载图片, 下载到本地, 图片路径 "./person.jpg" - boolean bRet = FaceRecognitionModule.downloadPersonPic(szFilePath, pszFileDst); - - Memory memory = null; - if(bRet) { - memory = ToolKits.readPictureFile(pszFileDst); - } else { - pszFileDst = ""; - } - - // 人员标识符 - String uid = String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(); - - modifyPersonDialog = new ModifyPersonDialog(groupId, groupName, uid, pszFileDst, memory, stuCandidate); - - modifyPersonDialog.addWindowCloseListener(new WindowCloseListener() { - @Override - public void windowClosing() { - new SwingWorker() { - @Override - protected CANDIDATE_INFOEX[] doInBackground() { - nTotalCount = 0; - nBeginNum = 0; - cleanList(); - cadidateHashMap.clear(); - - nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(), - startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(), - endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(), - nameTextField.getText(), sexComboBox.getSelectedIndex(), - idTypeComboBox.getSelectedIndex(), idTextField.getText()); - - if(nTotalCount <= 0) { - searchPersonBtn.setEnabled(true); - previousPageBtn.setEnabled(false); - lastPageBtn.setEnabled(false); - numTextField.setText(""); - return null; - } - - CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); - return stuCandidatesEx; - } - - @Override - protected void done() { - try { - CANDIDATE_INFOEX[] stuCandidatesEx = get(); - findPersonInfo(stuCandidatesEx); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - }.execute(); - } - }); - - modifyPersonDialog.setVisible(true); - } - }); - - // 删除人员 - deletePersonBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(!FaceRecognitionModule.delPerson(goroupIdTextField.getText(), String.valueOf(defaultTableModel.getValueAt(row, 0)).trim())) { - JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - - new SwingWorker() { - @Override - protected CANDIDATE_INFOEX[] doInBackground() { - nTotalCount = 0; - nBeginNum = 0; - cleanList(); - cadidateHashMap.clear(); - - nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(), - startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(), - endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(), - nameTextField.getText(), sexComboBox.getSelectedIndex(), - idTypeComboBox.getSelectedIndex(), idTextField.getText()); - - if(nTotalCount <= 0) { - searchPersonBtn.setEnabled(true); - previousPageBtn.setEnabled(false); - lastPageBtn.setEnabled(false); - numTextField.setText(""); - return null; - } - - CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); - return stuCandidatesEx; - } - - @Override - protected void done() { - - try { - CANDIDATE_INFOEX[] stuCandidatesEx = get(); - findPersonInfo(stuCandidatesEx); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - }.execute(); - } - }); - } - } - - /* - * 人员信息显示列表 - */ - private class PersonInfoListPanel extends JPanel { - private static final long serialVersionUID = 1L; - public PersonInfoListPanel() { - BorderEx.set(this, "", 2); - setLayout(new BorderLayout()); - - data = new Object[17][6]; - defaultTableModel = new DefaultTableModel(data, Res.string().getPersonTable()); - table = new JTable(defaultTableModel) { // 列表不可编辑 - private static final long serialVersionUID = 1L; - @Override - public boolean isCellEditable(int row, int column) { - return false; - } - }; - - table.getColumnModel().getColumn(0).setPreferredWidth(120); - table.getColumnModel().getColumn(1).setPreferredWidth(150); - table.getColumnModel().getColumn(2).setPreferredWidth(100); - table.getColumnModel().getColumn(3).setPreferredWidth(200); - table.getColumnModel().getColumn(4).setPreferredWidth(150); - table.getColumnModel().getColumn(5).setPreferredWidth(250); - - table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 - - DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); - dCellRenderer.setHorizontalAlignment(JLabel.CENTER); - table.setDefaultRenderer(Object.class, dCellRenderer); - - JPanel panel = new JPanel(); - previousPageBtn = new JButton(Res.string().getPreviousPage()); - lastPageBtn = new JButton(Res.string().getLastPage()); - JLabel numLabel = new JLabel(Res.string().getPagesNumber(), JLabel.CENTER); - numTextField = new JTextField(); - - numTextField.setHorizontalAlignment(JTextField.CENTER); - numTextField.setPreferredSize(new Dimension(80, 20)); - - Dimension dimension = new Dimension(); - dimension.height = 25; - panel.setPreferredSize(dimension); - - numLabel.setPreferredSize(new Dimension(80, 20)); - numTextField.setPreferredSize(new Dimension(120, 20)); - previousPageBtn.setPreferredSize(new Dimension(120, 20)); - lastPageBtn.setPreferredSize(new Dimension(120, 20)); - - panel.setLayout(new FlowLayout()); - panel.add(previousPageBtn); - panel.add(numLabel); - panel.add(numTextField); - panel.add(lastPageBtn); - - previousPageBtn.setEnabled(false); - lastPageBtn.setEnabled(false); - numTextField.setEnabled(false); - - add(new JScrollPane(table), BorderLayout.CENTER); - add(panel, BorderLayout.SOUTH); - - // 前一页 - previousPageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - previousPageBtn.setEnabled(false); - } - }); - - new SwingWorker() { - @Override - protected CANDIDATE_INFOEX[] doInBackground() { - nBeginNum -= 17; - - CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); - return stuCandidatesEx; - } - - @Override - protected void done() { - - try { - CANDIDATE_INFOEX[] stuCandidatesEx = get(); - findPreviousPage(stuCandidatesEx); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - }.execute(); - } - }); - - // 下一页 - lastPageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - lastPageBtn.setEnabled(false); - } - }); - - new SwingWorker() { - @Override - protected CANDIDATE_INFOEX[] doInBackground() { - nBeginNum += 17; - - CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); - return stuCandidatesEx; - } - - @Override - protected void done() { - - try { - CANDIDATE_INFOEX[] stuCandidatesEx = get(); - findLastPage(stuCandidatesEx); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - }.execute(); - } - }); - } - } - - - - /* - * 查找前17个 - */ - public void findPersonInfo(CANDIDATE_INFOEX[] stuCandidatesEx) { - if(stuCandidatesEx != null) { - searchPersonBtn.setEnabled(true); - previousPageBtn.setEnabled(false); - nPagesNumber = 1; - numTextField.setText(String.valueOf(nPagesNumber)); - - for(int i = 0; i < stuCandidatesEx.length; i++) { - if(!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) { - cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]); - } - - // UID - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0); - - // 姓名 - try { - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 性别 - defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2); - - // 生日 - defaultTableModel.setValueAt(String.valueOf((int)stuCandidatesEx[i].stPersonInfo.wYear) + "-" + - String.valueOf( stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" + - String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3); - - // 证件类型 - defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4); - - // 证件号 - try { - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - - if(nTotalCount > nBeginNum + stuCandidatesEx.length) { - lastPageBtn.setEnabled(true); - } - } else { - searchPersonBtn.setEnabled(true); - previousPageBtn.setEnabled(false); - lastPageBtn.setEnabled(false); - numTextField.setText(""); - } - } - - /* - * 上一页查找 - */ - private void findPreviousPage(CANDIDATE_INFOEX[] stuCandidatesEx) { - if(stuCandidatesEx != null) { - nPagesNumber -= 1; - numTextField.setText(String.valueOf(nPagesNumber)); - cadidateHashMap.clear(); - cleanList(); - lastPageBtn.setEnabled(true); - - for(int i = 0; i < stuCandidatesEx.length; i++) { - if(!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) { - cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]); - } - - // UID - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0); - - // 姓名 - try { - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 性别 - defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2); - - // 生日 - defaultTableModel.setValueAt(String.valueOf((int)stuCandidatesEx[i].stPersonInfo.wYear) + "-" + - String.valueOf( stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" + - String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3); - - // 证件类型 - defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4); - - // 证件号 - try { - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - - if(nBeginNum >= 17) { - previousPageBtn.setEnabled(true); - } else { - previousPageBtn.setEnabled(false); - } - } else{ - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - previousPageBtn.setEnabled(true); - nBeginNum += 17; - } - } - - /* - * 下一页查找 - */ - private void findLastPage(CANDIDATE_INFOEX[] stuCandidatesEx) { - if(stuCandidatesEx != null) { - nPagesNumber += 1; - numTextField.setText(String.valueOf(nPagesNumber)); - cadidateHashMap.clear(); - cleanList(); - previousPageBtn.setEnabled(true); - - for(int i = 0; i < stuCandidatesEx.length; i++) { - if(!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) { - cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]); - } - - // UID - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0); - - // 姓名 - try { - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 性别 - defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2); - - // 生日 - defaultTableModel.setValueAt(String.valueOf((int)stuCandidatesEx[i].stPersonInfo.wYear) + "-" + - String.valueOf( stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" + - String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3); - - // 证件类型 - defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4); - - // 证件号 - try { - defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - - if(nTotalCount > nBeginNum + stuCandidatesEx.length) { - lastPageBtn.setEnabled(true); - } else { - lastPageBtn.setEnabled(false); - } - } else { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - lastPageBtn.setEnabled(true); - nBeginNum -= 17; - } - } - - /* - * 清空列表 - */ - private void cleanList() { - for(int i = 0; i < 17; i++) { - for(int j = 0; j < 6; j++) { - defaultTableModel.setValueAt("", i, j); - } - } - } - - private Object[][] data; - private DefaultTableModel defaultTableModel; - private JTable table; - - private JButton previousPageBtn; - private JButton lastPageBtn; - private JTextField goroupIdTextField; - private JTextField goroupNameTextField; - private JTextField nameTextField; - private JComboBox sexComboBox; - private JComboBox idTypeComboBox; - private JTextField idTextField; - private JCheckBox startBirthdayCheckBox; - private JCheckBox endBirthdayCheckBox; - private DateChooserJButtonEx startTimeBtn; - private DateChooserJButtonEx endTimeBtn; - private JTextField numTextField; - private JButton searchPersonBtn; - +public class PersonOperateDialog extends JDialog { + /** + * + */ + private static final long serialVersionUID = 1L; + + private String groupId = ""; + private String groupName = ""; + + // 添加人员界面 + public AddPersonDialog addPersonDialog = null; + + // 修改人员界面 + public ModifyPersonDialog modifyPersonDialog = null; + + // 查询起始索引 + private int nBeginNum = 0; + + // 页数 + private int nPagesNumber = 0; + + // 查询人员总数 + private int nTotalCount = 0; + + private HashMap cadidateHashMap = new HashMap(); + + public PersonOperateDialog(String groupId, String groupName) { + setTitle(Res.string().getPersonOperate()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(680, 520); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + this.groupId = groupId; + this.groupName = groupName; + + PersonInfoPanel personInfoPanel = new PersonInfoPanel(); + PersonInfoListPanel personInfoListPanel = new PersonInfoListPanel(); + + add(personInfoPanel, BorderLayout.NORTH); + add(personInfoListPanel, BorderLayout.CENTER); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + nBeginNum = 0; + nPagesNumber = 0; + nTotalCount = 0; + cadidateHashMap.clear(); + + dispose(); + } + }); + } + + + /* + * 查找条件信息 + */ + private class SearchInfoPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public SearchInfoPanel() { + BorderEx.set(this, Res.string().getFindCondition(), 1); + setLayout(new FlowLayout()); + + JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER); + JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER); + JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER); + JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER); + JLabel IdTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER); + JLabel IdLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER); + JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER); + JLabel lineLabel = new JLabel("-", JLabel.CENTER); + startBirthdayCheckBox = new JCheckBox(); + endBirthdayCheckBox = new JCheckBox(); + JLabel nullLabel = new JLabel(); + + Dimension dimension1 = new Dimension(); + dimension1.height = 20; + dimension1.width = 80; + goroupIdLabel.setPreferredSize(dimension1); + goroupNameLabel.setPreferredSize(dimension1); + nameLabel.setPreferredSize(dimension1); + sexLabel.setPreferredSize(dimension1); + IdTypeLabel.setPreferredSize(dimension1); + IdLabel.setPreferredSize(dimension1); + birthdayLabel.setPreferredSize(dimension1); + lineLabel.setPreferredSize(new Dimension(50, 20)); + nullLabel.setPreferredSize(new Dimension(180, 20)); + + goroupIdTextField = new JTextField(); + goroupNameTextField = new JTextField(); + nameTextField = new JTextField(); + sexComboBox = new JComboBox(Res.string().getSexStringsFind()); + idTypeComboBox = new JComboBox(Res.string().getIdStringsFind()); + idTextField = new JTextField(); + + startTimeBtn = new DateChooserJButtonEx("2018-07-01"); + endTimeBtn = new DateChooserJButtonEx(); + + startTimeBtn.setStartYear(1900); + endTimeBtn.setStartYear(1900); + + Dimension dimension2 = new Dimension(); + dimension2.height = 20; + goroupIdTextField.setPreferredSize(dimension2); + goroupNameTextField.setPreferredSize(dimension2); + nameTextField.setPreferredSize(dimension2); + idTextField.setPreferredSize(dimension2); + + goroupIdTextField.setPreferredSize(new Dimension(120, 20)); + goroupNameTextField.setPreferredSize(new Dimension(120, 20)); + nameTextField.setPreferredSize(new Dimension(120, 20)); + idTextField.setPreferredSize(new Dimension(120, 20)); + sexComboBox.setPreferredSize(new Dimension(120, 20)); + startTimeBtn.setPreferredSize(new Dimension(125, 20)); + endTimeBtn.setPreferredSize(new Dimension(125, 20)); + idTypeComboBox.setPreferredSize(new Dimension(120, 20)); + startBirthdayCheckBox.setPreferredSize(new Dimension(20, 20)); + endBirthdayCheckBox.setPreferredSize(new Dimension(20, 20)); + + add(goroupIdLabel); + add(goroupIdTextField); + add(goroupNameLabel); + add(goroupNameTextField); + add(nameLabel); + add(nameTextField); + add(sexLabel); + add(sexComboBox); + add(IdTypeLabel); + add(idTypeComboBox); + add(IdLabel); + add(idTextField); + add(birthdayLabel); + add(startTimeBtn); + add(startBirthdayCheckBox); + add(lineLabel); + add(endTimeBtn); + add(endBirthdayCheckBox); + add(nullLabel); + + goroupIdTextField.setEditable(false); + goroupNameTextField.setEditable(false); + startBirthdayCheckBox.setSelected(false); + endBirthdayCheckBox.setSelected(false); + startTimeBtn.setEnabled(false); + endTimeBtn.setEnabled(false); + } + } + + /* + * 人员信息以及操作面板 + */ + private class PersonInfoPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public PersonInfoPanel() { + BorderEx.set(this, "", 2); + setLayout(new BorderLayout()); + + Dimension dimension = new Dimension(); + dimension.height = 150; + setPreferredSize(dimension); + + SearchInfoPanel searchInfoPanel = new SearchInfoPanel(); + JPanel operatePanel = new JPanel(); + + add(searchInfoPanel, BorderLayout.CENTER); + add(operatePanel, BorderLayout.SOUTH); + + /* + * 操作 + */ + searchPersonBtn = new JButton(Res.string().getFindPerson()); + JButton addPersonBtn = new JButton(Res.string().getAddPerson()); + JButton modifyPersonBtn = new JButton(Res.string().getModifyPerson()); + JButton deletePersonBtn = new JButton(Res.string().getDelPerson()); + + operatePanel.setLayout(new GridLayout(1, 4)); + + operatePanel.add(searchPersonBtn); + operatePanel.add(addPersonBtn); + operatePanel.add(modifyPersonBtn); + operatePanel.add(deletePersonBtn); + + goroupIdTextField.setText(groupId); + goroupNameTextField.setText(groupName); + + startBirthdayCheckBox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent arg0) { + if (startBirthdayCheckBox.isSelected()) { + startTimeBtn.setEnabled(true); + } else { + startTimeBtn.setEnabled(false); + } + } + }); + + endBirthdayCheckBox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent arg0) { + if (endBirthdayCheckBox.isSelected()) { + endTimeBtn.setEnabled(true); + } else { + endTimeBtn.setEnabled(false); + } + } + }); + + // 查找人员 + searchPersonBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + searchPersonBtn.setEnabled(false); + } + }); + + new SwingWorker() { + @Override + protected CANDIDATE_INFOEX[] doInBackground() { + nTotalCount = 0; + nBeginNum = 0; + cleanList(); + cadidateHashMap.clear(); + + nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(), + startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(), + endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(), + nameTextField.getText(), sexComboBox.getSelectedIndex(), + idTypeComboBox.getSelectedIndex(), idTextField.getText()); + + if (nTotalCount <= 0) { + searchPersonBtn.setEnabled(true); + previousPageBtn.setEnabled(false); + lastPageBtn.setEnabled(false); + numTextField.setText(""); + return null; + } + + CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); + return stuCandidatesEx; + } + + @Override + protected void done() { + try { + CANDIDATE_INFOEX[] stuCandidatesEx = get(); + findPersonInfo(stuCandidatesEx); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + }.execute(); + } + }); + + // 添加人员 + addPersonBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + addPersonDialog = new AddPersonDialog(groupId, groupName); + + addPersonDialog.addWindowCloseListener(new WindowCloseListener() { + @Override + public void windowClosing() { + new SwingWorker() { + @Override + protected CANDIDATE_INFOEX[] doInBackground() { + nTotalCount = 0; + nBeginNum = 0; + cleanList(); + cadidateHashMap.clear(); + + nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(), + startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(), + endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(), + nameTextField.getText(), sexComboBox.getSelectedIndex(), + idTypeComboBox.getSelectedIndex(), idTextField.getText()); + + if (nTotalCount <= 0) { + searchPersonBtn.setEnabled(true); + previousPageBtn.setEnabled(false); + lastPageBtn.setEnabled(false); + numTextField.setText(""); + return null; + } + + CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); + return stuCandidatesEx; + } + + @Override + protected void done() { + try { + CANDIDATE_INFOEX[] stuCandidatesEx = get(); + findPersonInfo(stuCandidatesEx); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + }.execute(); + } + }); + + addPersonDialog.setVisible(true); + } + }); + + // 修改人员 + modifyPersonBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + // 人员信息 + CANDIDATE_INFOEX stuCandidate = cadidateHashMap.get(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim()); + + // URL地址 + String szFilePath = stuCandidate.stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0); + + // 存放图片的本地路径 + String pszFileDst = "./person.jpg"; + + // 下载图片, 下载到本地, 图片路径 "./person.jpg" + boolean bRet = FaceRecognitionModule.downloadPersonPic(szFilePath, pszFileDst); + + Memory memory = null; + if (bRet) { + memory = ToolKits.readPictureFile(pszFileDst); + } else { + pszFileDst = ""; + } + + // 人员标识符 + String uid = String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(); + + modifyPersonDialog = new ModifyPersonDialog(groupId, groupName, uid, pszFileDst, memory, stuCandidate); + + modifyPersonDialog.addWindowCloseListener(new WindowCloseListener() { + @Override + public void windowClosing() { + new SwingWorker() { + @Override + protected CANDIDATE_INFOEX[] doInBackground() { + nTotalCount = 0; + nBeginNum = 0; + cleanList(); + cadidateHashMap.clear(); + + nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(), + startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(), + endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(), + nameTextField.getText(), sexComboBox.getSelectedIndex(), + idTypeComboBox.getSelectedIndex(), idTextField.getText()); + + if (nTotalCount <= 0) { + searchPersonBtn.setEnabled(true); + previousPageBtn.setEnabled(false); + lastPageBtn.setEnabled(false); + numTextField.setText(""); + return null; + } + + CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); + return stuCandidatesEx; + } + + @Override + protected void done() { + try { + CANDIDATE_INFOEX[] stuCandidatesEx = get(); + findPersonInfo(stuCandidatesEx); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + }.execute(); + } + }); + + modifyPersonDialog.setVisible(true); + } + }); + + // 删除人员 + deletePersonBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (!FaceRecognitionModule.delPerson(goroupIdTextField.getText(), String.valueOf(defaultTableModel.getValueAt(row, 0)).trim())) { + JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + + new SwingWorker() { + @Override + protected CANDIDATE_INFOEX[] doInBackground() { + nTotalCount = 0; + nBeginNum = 0; + cleanList(); + cadidateHashMap.clear(); + + nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(), + startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(), + endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(), + nameTextField.getText(), sexComboBox.getSelectedIndex(), + idTypeComboBox.getSelectedIndex(), idTextField.getText()); + + if (nTotalCount <= 0) { + searchPersonBtn.setEnabled(true); + previousPageBtn.setEnabled(false); + lastPageBtn.setEnabled(false); + numTextField.setText(""); + return null; + } + + CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); + return stuCandidatesEx; + } + + @Override + protected void done() { + + try { + CANDIDATE_INFOEX[] stuCandidatesEx = get(); + findPersonInfo(stuCandidatesEx); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + }.execute(); + } + }); + } + } + + /* + * 人员信息显示列表 + */ + private class PersonInfoListPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public PersonInfoListPanel() { + BorderEx.set(this, "", 2); + setLayout(new BorderLayout()); + + data = new Object[17][6]; + defaultTableModel = new DefaultTableModel(data, Res.string().getPersonTable()); + table = new JTable(defaultTableModel) { // 列表不可编辑 + private static final long serialVersionUID = 1L; + + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + }; + + table.getColumnModel().getColumn(0).setPreferredWidth(120); + table.getColumnModel().getColumn(1).setPreferredWidth(150); + table.getColumnModel().getColumn(2).setPreferredWidth(100); + table.getColumnModel().getColumn(3).setPreferredWidth(200); + table.getColumnModel().getColumn(4).setPreferredWidth(150); + table.getColumnModel().getColumn(5).setPreferredWidth(250); + + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 + + DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); + dCellRenderer.setHorizontalAlignment(JLabel.CENTER); + table.setDefaultRenderer(Object.class, dCellRenderer); + + JPanel panel = new JPanel(); + previousPageBtn = new JButton(Res.string().getPreviousPage()); + lastPageBtn = new JButton(Res.string().getLastPage()); + JLabel numLabel = new JLabel(Res.string().getPagesNumber(), JLabel.CENTER); + numTextField = new JTextField(); + + numTextField.setHorizontalAlignment(JTextField.CENTER); + numTextField.setPreferredSize(new Dimension(80, 20)); + + Dimension dimension = new Dimension(); + dimension.height = 25; + panel.setPreferredSize(dimension); + + numLabel.setPreferredSize(new Dimension(80, 20)); + numTextField.setPreferredSize(new Dimension(120, 20)); + previousPageBtn.setPreferredSize(new Dimension(120, 20)); + lastPageBtn.setPreferredSize(new Dimension(120, 20)); + + panel.setLayout(new FlowLayout()); + panel.add(previousPageBtn); + panel.add(numLabel); + panel.add(numTextField); + panel.add(lastPageBtn); + + previousPageBtn.setEnabled(false); + lastPageBtn.setEnabled(false); + numTextField.setEnabled(false); + + add(new JScrollPane(table), BorderLayout.CENTER); + add(panel, BorderLayout.SOUTH); + + // 前一页 + previousPageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + previousPageBtn.setEnabled(false); + } + }); + + new SwingWorker() { + @Override + protected CANDIDATE_INFOEX[] doInBackground() { + nBeginNum -= 17; + + CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); + return stuCandidatesEx; + } + + @Override + protected void done() { + + try { + CANDIDATE_INFOEX[] stuCandidatesEx = get(); + findPreviousPage(stuCandidatesEx); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + }.execute(); + } + }); + + // 下一页 + lastPageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + lastPageBtn.setEnabled(false); + } + }); + + new SwingWorker() { + @Override + protected CANDIDATE_INFOEX[] doInBackground() { + nBeginNum += 17; + + CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17); + return stuCandidatesEx; + } + + @Override + protected void done() { + + try { + CANDIDATE_INFOEX[] stuCandidatesEx = get(); + findLastPage(stuCandidatesEx); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + }.execute(); + } + }); + } + } + + + /* + * 查找前17个 + */ + public void findPersonInfo(CANDIDATE_INFOEX[] stuCandidatesEx) { + if (stuCandidatesEx != null) { + searchPersonBtn.setEnabled(true); + previousPageBtn.setEnabled(false); + nPagesNumber = 1; + numTextField.setText(String.valueOf(nPagesNumber)); + + for (int i = 0; i < stuCandidatesEx.length; i++) { + if (!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) { + cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]); + } + + // UID + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0); + + // 姓名 + try { + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 性别 + defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2); + + // 生日 + defaultTableModel.setValueAt(String.valueOf((int) stuCandidatesEx[i].stPersonInfo.wYear) + "-" + + String.valueOf(stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" + + String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3); + + // 证件类型 + defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4); + + // 证件号 + try { + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + if (nTotalCount > nBeginNum + stuCandidatesEx.length) { + lastPageBtn.setEnabled(true); + } + } else { + searchPersonBtn.setEnabled(true); + previousPageBtn.setEnabled(false); + lastPageBtn.setEnabled(false); + numTextField.setText(""); + } + } + + /* + * 上一页查找 + */ + private void findPreviousPage(CANDIDATE_INFOEX[] stuCandidatesEx) { + if (stuCandidatesEx != null) { + nPagesNumber -= 1; + numTextField.setText(String.valueOf(nPagesNumber)); + cadidateHashMap.clear(); + cleanList(); + lastPageBtn.setEnabled(true); + + for (int i = 0; i < stuCandidatesEx.length; i++) { + if (!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) { + cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]); + } + + // UID + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0); + + // 姓名 + try { + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 性别 + defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2); + + // 生日 + defaultTableModel.setValueAt(String.valueOf((int) stuCandidatesEx[i].stPersonInfo.wYear) + "-" + + String.valueOf(stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" + + String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3); + + // 证件类型 + defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4); + + // 证件号 + try { + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + if (nBeginNum >= 17) { + previousPageBtn.setEnabled(true); + } else { + previousPageBtn.setEnabled(false); + } + } else { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + previousPageBtn.setEnabled(true); + nBeginNum += 17; + } + } + + /* + * 下一页查找 + */ + private void findLastPage(CANDIDATE_INFOEX[] stuCandidatesEx) { + if (stuCandidatesEx != null) { + nPagesNumber += 1; + numTextField.setText(String.valueOf(nPagesNumber)); + cadidateHashMap.clear(); + cleanList(); + previousPageBtn.setEnabled(true); + + for (int i = 0; i < stuCandidatesEx.length; i++) { + if (!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) { + cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]); + } + + // UID + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0); + + // 姓名 + try { + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 性别 + defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2); + + // 生日 + defaultTableModel.setValueAt(String.valueOf((int) stuCandidatesEx[i].stPersonInfo.wYear) + "-" + + String.valueOf(stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" + + String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3); + + // 证件类型 + defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4); + + // 证件号 + try { + defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + if (nTotalCount > nBeginNum + stuCandidatesEx.length) { + lastPageBtn.setEnabled(true); + } else { + lastPageBtn.setEnabled(false); + } + } else { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + lastPageBtn.setEnabled(true); + nBeginNum -= 17; + } + } + + /* + * 清空列表 + */ + private void cleanList() { + for (int i = 0; i < 17; i++) { + for (int j = 0; j < 6; j++) { + defaultTableModel.setValueAt("", i, j); + } + } + } + + private Object[][] data; + private DefaultTableModel defaultTableModel; + private JTable table; + + private JButton previousPageBtn; + private JButton lastPageBtn; + private JTextField goroupIdTextField; + private JTextField goroupNameTextField; + private JTextField nameTextField; + private JComboBox sexComboBox; + private JComboBox idTypeComboBox; + private JTextField idTextField; + private JCheckBox startBirthdayCheckBox; + private JCheckBox endBirthdayCheckBox; + private DateChooserJButtonEx startTimeBtn; + private DateChooserJButtonEx endTimeBtn; + private JTextField numTextField; + private JButton searchPersonBtn; + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/SearchByPicDialog.java b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/SearchByPicDialog.java index 37fbd48..edbbf2f 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/SearchByPicDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/FaceRecognition/SearchByPicDialog.java @@ -41,547 +41,549 @@ import com.sun.jna.Pointer; public class SearchByPicDialog extends JDialog { - /** - * - */ - private static final long serialVersionUID = 1L; - - private Vector chnList = new Vector(); - private Memory memory = null; - private static volatile int nProgress = 0; // 设备处理进度 - private static volatile int nCount = 0; - - public SearchByPicDialog() { - setTitle("以图搜图"); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(780, 550); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - JPanel panel = new JPanel(); - progressBar = new JProgressBar(0, 100); - Dimension dimension = new Dimension(); - dimension.height = 18; - progressBar.setPreferredSize(dimension); - progressBar.setStringPainted(true); - - add(panel, BorderLayout.CENTER); - add(progressBar, BorderLayout.SOUTH); - - //////// - panel.setLayout(new BorderLayout()); - SearchPicConditionPanel searchPicConditionPanel = new SearchPicConditionPanel(); - searchPicInfoTextArea = new JTextArea(); - - Dimension dimension1 = new Dimension(); - dimension1.width = 220; - searchPicConditionPanel.setPreferredSize(dimension1); - - panel.add(searchPicConditionPanel, BorderLayout.WEST); - panel.add(new JScrollPane(searchPicInfoTextArea), BorderLayout.CENTER); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - dispose(); - } - }); - } - - private class SearchPicConditionPanel extends JPanel { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public SearchPicConditionPanel() { - setLayout(new BorderLayout()); - - JPanel panelNorth = new JPanel(); - JPanel panelSouth = new JPanel(); - - add(panelNorth, BorderLayout.NORTH); - add(panelSouth, BorderLayout.SOUTH); - - //////// - searchPicPanel = new PaintPanel(); - JButton selectPicBtn = new JButton(Res.string().getSelectPicture()); - JButton downloadBtn = new JButton("下载查询到的图片"); - - searchPicPanel.setPreferredSize(new Dimension(210, 270)); - selectPicBtn.setPreferredSize(new Dimension(210, 20)); - downloadBtn.setPreferredSize(new Dimension(210, 20)); - - panelNorth.setLayout(new FlowLayout()); - panelNorth.setPreferredSize(new Dimension(210, 330)); - panelNorth.add(searchPicPanel); - panelNorth.add(selectPicBtn); - panelNorth.add(downloadBtn); - - ///// - faceCheckBox = new JCheckBox("人脸库"); - historyCheckBox = new JCheckBox("历史库"); - faceCheckBox.setPreferredSize(new Dimension(100, 20)); - historyCheckBox.setPreferredSize(new Dimension(100, 20)); - - startTimeLabel = new JLabel(Res.string().getStartTime(), JLabel.CENTER); - endTimeLabel = new JLabel(Res.string().getEndTime(), JLabel.CENTER); - chnLabel = new JLabel(Res.string().getChannel(), JLabel.CENTER); - JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER); - - Dimension dimension1 = new Dimension(); - dimension1.width = 80; - dimension1.height = 20; - - startTimeLabel.setPreferredSize(dimension1); - endTimeLabel.setPreferredSize(dimension1); - chnLabel.setPreferredSize(dimension1); - similaryLabel.setPreferredSize(dimension1); - - startTimeBtn = new DateChooserJButtonEx("2018-11-07"); - endTimeBtn = new DateChooserJButtonEx(); - - chnComboBox = new JComboBox(); - for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { - chnList.add(Res.string().getChannel() + " " + String.valueOf(i)); - } - - // 登陆成功,将通道添加到控件 - chnComboBox.setModel(new DefaultComboBoxModel(chnList)); - - similaryTextField = new JTextField("60", JTextField.CENTER); - - Dimension dimension2 = new Dimension(); - dimension2.width = 120; - dimension2.height = 20; - - startTimeBtn.setPreferredSize(dimension2); - endTimeBtn.setPreferredSize(dimension2); - chnComboBox.setPreferredSize(dimension2); - similaryTextField.setPreferredSize(dimension2); - - searchPicBtn = new JButton(Res.string().getSearch()); - searchPicBtn.setPreferredSize(new Dimension(210, 20)); - - panelSouth.setLayout(new FlowLayout()); - panelSouth.setPreferredSize(new Dimension(210, 160)); - panelSouth.add(faceCheckBox); - panelSouth.add(historyCheckBox); - panelSouth.add(startTimeLabel); - panelSouth.add(startTimeBtn); - panelSouth.add(endTimeLabel); - panelSouth.add(endTimeBtn); - panelSouth.add(chnLabel); - panelSouth.add(chnComboBox); - panelSouth.add(similaryLabel); - panelSouth.add(similaryTextField); - panelSouth.add(searchPicBtn); - - historyCheckBox.setSelected(true); - faceCheckBox.setSelected(false); - - // 选择图片,获取图片的信息 - selectPicBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - String picPath = ""; - - // 选择图片,获取图片路径,并在界面显示 - picPath = ToolKits.openPictureFile(searchPicPanel); - - if(!picPath.equals("")) { - memory = ToolKits.readPictureFile(picPath); - } - - } - }); - - downloadBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - DownloadPictureDialog dialog = new DownloadPictureDialog(); - dialog.setVisible(true); - } - }); - - searchPicBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - searchPicBtn.setEnabled(false); - progressBar.setValue(0); - searchPicInfoTextArea.setText(""); - } - }); - - searchByPicture(); - } - }); - - faceCheckBox.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - if(faceCheckBox.isSelected()) { - historyCheckBox.setSelected(false); - chnLabel.setVisible(false); - chnComboBox.setVisible(false); - startTimeLabel.setVisible(false); - endTimeLabel.setVisible(false); - startTimeBtn.setVisible(false); - endTimeBtn.setVisible(false); - } else { - historyCheckBox.setSelected(true); - chnLabel.setVisible(true); - chnComboBox.setVisible(true); - startTimeLabel.setVisible(true); - endTimeLabel.setVisible(true); - startTimeBtn.setVisible(true); - endTimeBtn.setVisible(true); - } - } - }); - - historyCheckBox.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - if(historyCheckBox.isSelected()) { - faceCheckBox.setSelected(false); - chnLabel.setVisible(true); - chnComboBox.setVisible(true); - startTimeLabel.setVisible(true); - endTimeLabel.setVisible(true); - startTimeBtn.setVisible(true); - endTimeBtn.setVisible(true); - } else { - faceCheckBox.setSelected(true); - chnLabel.setVisible(false); - chnComboBox.setVisible(false); - startTimeLabel.setVisible(false); - endTimeLabel.setVisible(false); - startTimeBtn.setVisible(false); - endTimeBtn.setVisible(false); - } - } - }); - } - } - - private void searchByPicture() { - new SwingWorker() { - int nTotalCount = 0; // 查询到的总个数 - - @Override - protected Boolean doInBackground() { - int beginNum = 0; // 偏移量 - int nCount = 0; // 循环查询了几次 - int index = 0; // index + 1 为查询到的总个数 - int nFindCount = 10; // 每次查询的个数 - - StringBuffer message = null; - - if(memory == null) { - JOptionPane.showMessageDialog(null, "请先选择人脸图片", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - // 获取查询句柄 - nTotalCount = SearchByPictureModule.startFindPerson(memory, - startTimeBtn.getText(), - endTimeBtn.getText(), - historyCheckBox.isSelected(), - chnComboBox.getSelectedIndex(), - similaryTextField.getText()); - if(nTotalCount == 0) { // 查询失败 - // 查询失败,关闭查询 - SearchByPictureModule.doFindClosePerson(); - return false; - } else if(nTotalCount == -1) { // 设备正在处理,通过订阅来查询处理进度 - nProgress = 0; - nCount = 0; - SearchByPictureModule.attachFaceFindState(fFaceFindStateCb.getInstance()); - } else { - while(true) { - NetSDKLib.CANDIDATE_INFOEX[] caInfoexs = SearchByPictureModule.doFindNextPerson(beginNum, nFindCount); - if(caInfoexs == null) { - break; - } - - for(int i = 0; i < caInfoexs.length; i++) { - index = i + nFindCount * nCount + 1; - - // 清空 - message = new StringBuffer(); - - if(historyCheckBox.isSelected()) { // 历史库显示 - message.append("[" + index + "]时间 :" + caInfoexs[i].stTime.toStringTimeEx() + "\n"); - - message.append("[" + index + "]UID :" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n"); - message.append("[" + index + "]性别 :" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n"); - message.append("[" + index + "]年龄 :" + caInfoexs[i].stPersonInfo.byAge + "\n"); - message.append("[" + index + "]种族 :" + Res.string().getRace(caInfoexs[i].stPersonInfo.emRace) + "\n"); - message.append("[" + index + "]眼睛 :" + Res.string().getEyeState(caInfoexs[i].stPersonInfo.emEye) + "\n"); - message.append("[" + index + "]嘴巴 :" + Res.string().getMouthState(caInfoexs[i].stPersonInfo.emMouth) + "\n"); - message.append("[" + index + "]口罩 :" + Res.string().getMaskState(caInfoexs[i].stPersonInfo.emMask) + "\n"); - message.append("[" + index + "]胡子 :" + Res.string().getBeardState(caInfoexs[i].stPersonInfo.emBeard) + "\n"); - message.append("[" + index + "]眼镜 :" + Res.string().getGlasses(caInfoexs[i].stPersonInfo.byGlasses) + "\n"); - message.append("[" + index + "]相似度 :" + caInfoexs[i].bySimilarity + "\n"); - message.append("[" + index + "]图片路径 :" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n"); - - } else { // 人脸库显示 - message.append("[" + index + "]人脸库ID :" + new String(caInfoexs[i].stPersonInfo.szGroupID).trim() + "\n"); - try { - message.append("[" + index + "]人脸库名称 :" + new String(caInfoexs[i].stPersonInfo.szGroupName, "GBK").trim() + "\n"); - message.append("[" + index + "]姓名 :" + new String(caInfoexs[i].stPersonInfo.szPersonName, "GBK").trim() + "\n"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - message.append("[" + index + "]UID :" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n"); - message.append("[" + index + "]生日 :" + (caInfoexs[i].stPersonInfo.wYear) + "-" + - (0xff & caInfoexs[i].stPersonInfo.byMonth) + "-" + - (0xff & caInfoexs[i].stPersonInfo.byDay) + "\n"); - message.append("[" + index + "]性别 :" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n"); - message.append("[" + index + "]证件类型 :" + Res.string().getIdType(caInfoexs[i].stPersonInfo.byIDType) + "\n"); - message.append("[" + index + "]证件号 :" + new String(caInfoexs[i].stPersonInfo.szID).trim() + "\n"); - message.append("[" + index + "]相似度 :" + caInfoexs[i].bySimilarity + "\n"); - message.append("[" + index + "]图片路径 :" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n"); - } - - message.append("\n"); - publish(message); - } - - if(caInfoexs.length < nFindCount) { - System.out.printf("No More Record, Find End!\n"); - break; - } else { - beginNum += nFindCount; - nCount++; - } - } - - // 关闭查询 - SearchByPictureModule.doFindClosePerson(); - } - - return true; - } - - @Override - protected void process(java.util.List chunks) { - for(StringBuffer data : chunks) { - searchPicInfoTextArea.append(data.toString()); - searchPicInfoTextArea.updateUI(); - } - - super.process(chunks); - } - - @Override - protected void done() { - if(nTotalCount == 0) { // 查询总个数失败 - searchPicBtn.setEnabled(true); - progressBar.setValue(100); - searchPicInfoTextArea.append("未查询到相关信息... \n"); - searchPicInfoTextArea.updateUI(); - } else if(nTotalCount == -1){ // 设备在处理中 - searchPicInfoTextArea.append("设备正在处理中... \n"); - searchPicInfoTextArea.updateUI(); - } else { - try { - if(get()) { // 其他情况,查询信息结束 - searchPicBtn.setEnabled(true); - progressBar.setValue(100); - searchPicInfoTextArea.append("查询结束... \n"); - searchPicInfoTextArea.updateUI(); - } - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - } - }.execute(); - } - - /** - * 订阅人脸回调函数 - */ - private static class fFaceFindStateCb implements NetSDKLib.fFaceFindState { - private fFaceFindStateCb() {} - - private static class fFaceFindStateCbHolder { - private static final fFaceFindStateCb instance = new fFaceFindStateCb(); - } - - public static fFaceFindStateCb getInstance() { - return fFaceFindStateCbHolder.instance; - } - - @Override - public void invoke(LLong lLoginID, LLong lAttachHandle, - Pointer pstStates, int nStateNum, Pointer dwUser) { - if(nStateNum < 1) { - return; - } - NET_CB_FACE_FIND_STATE[] msg = new NET_CB_FACE_FIND_STATE[nStateNum]; - for(int i = 0; i < nStateNum; i++) { - msg[i] = new NET_CB_FACE_FIND_STATE(); - } - ToolKits.GetPointerDataToStructArr(pstStates, msg); - - for(int i = 0; i < nStateNum; i++) { - if(SearchByPictureModule.nToken == msg[i].nToken) { - nProgress = msg[i].nProgress; - nCount = msg[i].nCurrentCount; // 返回的总个数 - - // 刷新设备处理进度 - // UI线程 - EventQueue.invokeLater(new Runnable() { - @Override - public void run() { - progressBar.setValue(nProgress); - - if(nProgress == 100) { // 进度等于100,设备处理完毕,开始查询 - // 异步线程处理 - new SearchPictureWoker(nCount).execute(); - } - } - }); - } - } - } - } - - /** - * 用于订阅人脸状态后的查询 - * 以图搜图与查询人员信息的接口是一样的,只是逻辑不一样,doFindNextPerson接口时,都是指定每次查询的个数,最大20,然后根据偏移量循环查询 - * SwingWorker为异步线程,回调属于子线程,不能做耗时操作和刷新UI - */ - private static class SearchPictureWoker extends SwingWorker { - private int nTotalCount; // 查询到的总个数 - public SearchPictureWoker(int nTotalCount) { - this.nTotalCount = nTotalCount; - } - - @Override - protected Boolean doInBackground() { - int beginNum = 0; // 偏移量 - int nCount = 0; // 循环查询了几次 - int index = 0; // index + 1 为查询到的总个数 - int nFindCount = 10; // 每次查询的个数 - - StringBuffer message = null; - - // 进度达到100%,关闭订阅 - SearchByPictureModule.detachFaceFindState(); - System.out.println("nTotalCount = " + nTotalCount); - if(nTotalCount == 0) { - return false; - } - - while(true) { - CANDIDATE_INFOEX[] caInfoexs = SearchByPictureModule.doFindNextPerson(beginNum, nFindCount); - if(caInfoexs == null) { - break; - } - - for(int i = 0; i < caInfoexs.length; i++) { - index = i + nFindCount * nCount + 1; - - // 清空 - message = new StringBuffer(); - - if(historyCheckBox.isSelected()) { // 历史库显示 - message.append("[" + index + "]时间 :" + caInfoexs[i].stTime.toStringTimeEx() + "\n"); - - message.append("[" + index + "]UID :" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n"); - message.append("[" + index + "]性别 :" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n"); - message.append("[" + index + "]年龄 :" + caInfoexs[i].stPersonInfo.byAge + "\n"); - message.append("[" + index + "]种族 :" + Res.string().getRace(caInfoexs[i].stPersonInfo.emRace) + "\n"); - message.append("[" + index + "]眼睛 :" + Res.string().getEyeState(caInfoexs[i].stPersonInfo.emEye) + "\n"); - message.append("[" + index + "]嘴巴 :" + Res.string().getMouthState(caInfoexs[i].stPersonInfo.emMouth) + "\n"); - message.append("[" + index + "]口罩 :" + Res.string().getMaskState(caInfoexs[i].stPersonInfo.emMask) + "\n"); - message.append("[" + index + "]胡子 :" + Res.string().getBeardState(caInfoexs[i].stPersonInfo.emBeard) + "\n"); - message.append("[" + index + "]眼镜 :" + Res.string().getGlasses(caInfoexs[i].stPersonInfo.byGlasses) + "\n"); - message.append("[" + index + "]相似度 :" + caInfoexs[i].bySimilarity + "\n"); - message.append("[" + index + "]图片路径 :" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n"); - - } else { // 人脸库显示 - message.append("[" + index + "]人脸库ID :" + new String(caInfoexs[i].stPersonInfo.szGroupID).trim() + "\n"); - try { - message.append("[" + index + "]人脸库名称 :" + new String(caInfoexs[i].stPersonInfo.szGroupName, "GBK").trim() + "\n"); - message.append("[" + index + "]姓名 :" + new String(caInfoexs[i].stPersonInfo.szPersonName, "GBK").trim() + "\n"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - message.append("[" + index + "]UID :" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n"); - message.append("[" + index + "]生日 :" + (caInfoexs[i].stPersonInfo.wYear) + "-" + - (0xff & caInfoexs[i].stPersonInfo.byMonth) + "-" + - (0xff & caInfoexs[i].stPersonInfo.byDay) + "\n"); - message.append("[" + index + "]性别 :" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n"); - message.append("[" + index + "]证件类型 :" + Res.string().getIdType(caInfoexs[i].stPersonInfo.byIDType) + "\n"); - message.append("[" + index + "]证件号 :" + new String(caInfoexs[i].stPersonInfo.szID).trim() + "\n"); - message.append("[" + index + "]相似度 :" + caInfoexs[i].bySimilarity + "\n"); - message.append("[" + index + "]图片路径 :" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n"); - } - - message.append("\n"); - publish(message); - } - - if(caInfoexs.length < nFindCount) { - System.out.printf("No More Record, Find End!\n"); - break; - } else { - beginNum += nFindCount; - nCount++; - } - } - - // 关闭查询 - SearchByPictureModule.doFindClosePerson(); - - return true; - } - - @Override - protected void process(java.util.List chunks) { - for(StringBuffer data : chunks) { - searchPicInfoTextArea.append(data.toString()); - searchPicInfoTextArea.updateUI(); - } - - super.process(chunks); - } - - @Override - protected void done() { - searchPicBtn.setEnabled(true); - searchPicInfoTextArea.append("查询结束... \n"); - searchPicInfoTextArea.updateUI(); - } - } - - - private static JTextArea searchPicInfoTextArea; - private static JProgressBar progressBar; - private static JButton searchPicBtn; - - private PaintPanel searchPicPanel; - private JComboBox chnComboBox; - private JTextField similaryTextField; - private DateChooserJButtonEx startTimeBtn; - private DateChooserJButtonEx endTimeBtn; - private JLabel chnLabel; - private JLabel startTimeLabel; - private JLabel endTimeLabel; - - private JCheckBox faceCheckBox; - private static JCheckBox historyCheckBox; + /** + * + */ + private static final long serialVersionUID = 1L; + + private Vector chnList = new Vector(); + private Memory memory = null; + private static volatile int nProgress = 0; // 设备处理进度 + private static volatile int nCount = 0; + + public SearchByPicDialog() { + setTitle("以图搜图"); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(780, 550); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + JPanel panel = new JPanel(); + progressBar = new JProgressBar(0, 100); + Dimension dimension = new Dimension(); + dimension.height = 18; + progressBar.setPreferredSize(dimension); + progressBar.setStringPainted(true); + + add(panel, BorderLayout.CENTER); + add(progressBar, BorderLayout.SOUTH); + + //////// + panel.setLayout(new BorderLayout()); + SearchPicConditionPanel searchPicConditionPanel = new SearchPicConditionPanel(); + searchPicInfoTextArea = new JTextArea(); + + Dimension dimension1 = new Dimension(); + dimension1.width = 220; + searchPicConditionPanel.setPreferredSize(dimension1); + + panel.add(searchPicConditionPanel, BorderLayout.WEST); + panel.add(new JScrollPane(searchPicInfoTextArea), BorderLayout.CENTER); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + private class SearchPicConditionPanel extends JPanel { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public SearchPicConditionPanel() { + setLayout(new BorderLayout()); + + JPanel panelNorth = new JPanel(); + JPanel panelSouth = new JPanel(); + + add(panelNorth, BorderLayout.NORTH); + add(panelSouth, BorderLayout.SOUTH); + + //////// + searchPicPanel = new PaintPanel(); + JButton selectPicBtn = new JButton(Res.string().getSelectPicture()); + JButton downloadBtn = new JButton("下载查询到的图片"); + + searchPicPanel.setPreferredSize(new Dimension(210, 270)); + selectPicBtn.setPreferredSize(new Dimension(210, 20)); + downloadBtn.setPreferredSize(new Dimension(210, 20)); + + panelNorth.setLayout(new FlowLayout()); + panelNorth.setPreferredSize(new Dimension(210, 330)); + panelNorth.add(searchPicPanel); + panelNorth.add(selectPicBtn); + panelNorth.add(downloadBtn); + + ///// + faceCheckBox = new JCheckBox("人脸库"); + historyCheckBox = new JCheckBox("历史库"); + faceCheckBox.setPreferredSize(new Dimension(100, 20)); + historyCheckBox.setPreferredSize(new Dimension(100, 20)); + + startTimeLabel = new JLabel(Res.string().getStartTime(), JLabel.CENTER); + endTimeLabel = new JLabel(Res.string().getEndTime(), JLabel.CENTER); + chnLabel = new JLabel(Res.string().getChannel(), JLabel.CENTER); + JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER); + + Dimension dimension1 = new Dimension(); + dimension1.width = 80; + dimension1.height = 20; + + startTimeLabel.setPreferredSize(dimension1); + endTimeLabel.setPreferredSize(dimension1); + chnLabel.setPreferredSize(dimension1); + similaryLabel.setPreferredSize(dimension1); + + startTimeBtn = new DateChooserJButtonEx("2018-11-07"); + endTimeBtn = new DateChooserJButtonEx(); + + chnComboBox = new JComboBox(); + for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { + chnList.add(Res.string().getChannel() + " " + String.valueOf(i)); + } + + // 登陆成功,将通道添加到控件 + chnComboBox.setModel(new DefaultComboBoxModel(chnList)); + + similaryTextField = new JTextField("60", JTextField.CENTER); + + Dimension dimension2 = new Dimension(); + dimension2.width = 120; + dimension2.height = 20; + + startTimeBtn.setPreferredSize(dimension2); + endTimeBtn.setPreferredSize(dimension2); + chnComboBox.setPreferredSize(dimension2); + similaryTextField.setPreferredSize(dimension2); + + searchPicBtn = new JButton(Res.string().getSearch()); + searchPicBtn.setPreferredSize(new Dimension(210, 20)); + + panelSouth.setLayout(new FlowLayout()); + panelSouth.setPreferredSize(new Dimension(210, 160)); + panelSouth.add(faceCheckBox); + panelSouth.add(historyCheckBox); + panelSouth.add(startTimeLabel); + panelSouth.add(startTimeBtn); + panelSouth.add(endTimeLabel); + panelSouth.add(endTimeBtn); + panelSouth.add(chnLabel); + panelSouth.add(chnComboBox); + panelSouth.add(similaryLabel); + panelSouth.add(similaryTextField); + panelSouth.add(searchPicBtn); + + historyCheckBox.setSelected(true); + faceCheckBox.setSelected(false); + + // 选择图片,获取图片的信息 + selectPicBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + String picPath = ""; + + // 选择图片,获取图片路径,并在界面显示 + picPath = ToolKits.openPictureFile(searchPicPanel); + + if (!picPath.equals("")) { + memory = ToolKits.readPictureFile(picPath); + } + + } + }); + + downloadBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + DownloadPictureDialog dialog = new DownloadPictureDialog(); + dialog.setVisible(true); + } + }); + + searchPicBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + searchPicBtn.setEnabled(false); + progressBar.setValue(0); + searchPicInfoTextArea.setText(""); + } + }); + + searchByPicture(); + } + }); + + faceCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + if (faceCheckBox.isSelected()) { + historyCheckBox.setSelected(false); + chnLabel.setVisible(false); + chnComboBox.setVisible(false); + startTimeLabel.setVisible(false); + endTimeLabel.setVisible(false); + startTimeBtn.setVisible(false); + endTimeBtn.setVisible(false); + } else { + historyCheckBox.setSelected(true); + chnLabel.setVisible(true); + chnComboBox.setVisible(true); + startTimeLabel.setVisible(true); + endTimeLabel.setVisible(true); + startTimeBtn.setVisible(true); + endTimeBtn.setVisible(true); + } + } + }); + + historyCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + if (historyCheckBox.isSelected()) { + faceCheckBox.setSelected(false); + chnLabel.setVisible(true); + chnComboBox.setVisible(true); + startTimeLabel.setVisible(true); + endTimeLabel.setVisible(true); + startTimeBtn.setVisible(true); + endTimeBtn.setVisible(true); + } else { + faceCheckBox.setSelected(true); + chnLabel.setVisible(false); + chnComboBox.setVisible(false); + startTimeLabel.setVisible(false); + endTimeLabel.setVisible(false); + startTimeBtn.setVisible(false); + endTimeBtn.setVisible(false); + } + } + }); + } + } + + private void searchByPicture() { + new SwingWorker() { + int nTotalCount = 0; // 查询到的总个数 + + @Override + protected Boolean doInBackground() { + int beginNum = 0; // 偏移量 + int nCount = 0; // 循环查询了几次 + int index = 0; // index + 1 为查询到的总个数 + int nFindCount = 10; // 每次查询的个数 + + StringBuffer message = null; + + if (memory == null) { + JOptionPane.showMessageDialog(null, "请先选择人脸图片", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + // 获取查询句柄 + nTotalCount = SearchByPictureModule.startFindPerson(memory, + startTimeBtn.getText(), + endTimeBtn.getText(), + historyCheckBox.isSelected(), + chnComboBox.getSelectedIndex(), + similaryTextField.getText()); + if (nTotalCount == 0) { // 查询失败 + // 查询失败,关闭查询 + SearchByPictureModule.doFindClosePerson(); + return false; + } else if (nTotalCount == -1) { // 设备正在处理,通过订阅来查询处理进度 + nProgress = 0; + nCount = 0; + SearchByPictureModule.attachFaceFindState(fFaceFindStateCb.getInstance()); + } else { + while (true) { + NetSDKLib.CANDIDATE_INFOEX[] caInfoexs = SearchByPictureModule.doFindNextPerson(beginNum, nFindCount); + if (caInfoexs == null) { + break; + } + + for (int i = 0; i < caInfoexs.length; i++) { + index = i + nFindCount * nCount + 1; + + // 清空 + message = new StringBuffer(); + + if (historyCheckBox.isSelected()) { // 历史库显示 + message.append("[" + index + "]时间 :" + caInfoexs[i].stTime.toStringTimeEx() + "\n"); + + message.append("[" + index + "]UID :" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n"); + message.append("[" + index + "]性别 :" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n"); + message.append("[" + index + "]年龄 :" + caInfoexs[i].stPersonInfo.byAge + "\n"); + message.append("[" + index + "]种族 :" + Res.string().getRace(caInfoexs[i].stPersonInfo.emRace) + "\n"); + message.append("[" + index + "]眼睛 :" + Res.string().getEyeState(caInfoexs[i].stPersonInfo.emEye) + "\n"); + message.append("[" + index + "]嘴巴 :" + Res.string().getMouthState(caInfoexs[i].stPersonInfo.emMouth) + "\n"); + message.append("[" + index + "]口罩 :" + Res.string().getMaskState(caInfoexs[i].stPersonInfo.emMask) + "\n"); + message.append("[" + index + "]胡子 :" + Res.string().getBeardState(caInfoexs[i].stPersonInfo.emBeard) + "\n"); + message.append("[" + index + "]眼镜 :" + Res.string().getGlasses(caInfoexs[i].stPersonInfo.byGlasses) + "\n"); + message.append("[" + index + "]相似度 :" + caInfoexs[i].bySimilarity + "\n"); + message.append("[" + index + "]图片路径 :" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n"); + + } else { // 人脸库显示 + message.append("[" + index + "]人脸库ID :" + new String(caInfoexs[i].stPersonInfo.szGroupID).trim() + "\n"); + try { + message.append("[" + index + "]人脸库名称 :" + new String(caInfoexs[i].stPersonInfo.szGroupName, "GBK").trim() + "\n"); + message.append("[" + index + "]姓名 :" + new String(caInfoexs[i].stPersonInfo.szPersonName, "GBK").trim() + "\n"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + message.append("[" + index + "]UID :" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n"); + message.append("[" + index + "]生日 :" + (caInfoexs[i].stPersonInfo.wYear) + "-" + + (0xff & caInfoexs[i].stPersonInfo.byMonth) + "-" + + (0xff & caInfoexs[i].stPersonInfo.byDay) + "\n"); + message.append("[" + index + "]性别 :" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n"); + message.append("[" + index + "]证件类型 :" + Res.string().getIdType(caInfoexs[i].stPersonInfo.byIDType) + "\n"); + message.append("[" + index + "]证件号 :" + new String(caInfoexs[i].stPersonInfo.szID).trim() + "\n"); + message.append("[" + index + "]相似度 :" + caInfoexs[i].bySimilarity + "\n"); + message.append("[" + index + "]图片路径 :" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n"); + } + + message.append("\n"); + publish(message); + } + + if (caInfoexs.length < nFindCount) { + System.out.printf("No More Record, Find End!\n"); + break; + } else { + beginNum += nFindCount; + nCount++; + } + } + + // 关闭查询 + SearchByPictureModule.doFindClosePerson(); + } + + return true; + } + + @Override + protected void process(java.util.List chunks) { + for (StringBuffer data : chunks) { + searchPicInfoTextArea.append(data.toString()); + searchPicInfoTextArea.updateUI(); + } + + super.process(chunks); + } + + @Override + protected void done() { + if (nTotalCount == 0) { // 查询总个数失败 + searchPicBtn.setEnabled(true); + progressBar.setValue(100); + searchPicInfoTextArea.append("未查询到相关信息... \n"); + searchPicInfoTextArea.updateUI(); + } else if (nTotalCount == -1) { // 设备在处理中 + searchPicInfoTextArea.append("设备正在处理中... \n"); + searchPicInfoTextArea.updateUI(); + } else { + try { + if (get()) { // 其他情况,查询信息结束 + searchPicBtn.setEnabled(true); + progressBar.setValue(100); + searchPicInfoTextArea.append("查询结束... \n"); + searchPicInfoTextArea.updateUI(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + } + }.execute(); + } + + /** + * 订阅人脸回调函数 + */ + private static class fFaceFindStateCb implements NetSDKLib.fFaceFindState { + private fFaceFindStateCb() { + } + + private static class fFaceFindStateCbHolder { + private static final fFaceFindStateCb instance = new fFaceFindStateCb(); + } + + public static fFaceFindStateCb getInstance() { + return fFaceFindStateCbHolder.instance; + } + + @Override + public void invoke(LLong lLoginID, LLong lAttachHandle, + Pointer pstStates, int nStateNum, Pointer dwUser) { + if (nStateNum < 1) { + return; + } + NET_CB_FACE_FIND_STATE[] msg = new NET_CB_FACE_FIND_STATE[nStateNum]; + for (int i = 0; i < nStateNum; i++) { + msg[i] = new NET_CB_FACE_FIND_STATE(); + } + ToolKits.GetPointerDataToStructArr(pstStates, msg); + + for (int i = 0; i < nStateNum; i++) { + if (SearchByPictureModule.nToken == msg[i].nToken) { + nProgress = msg[i].nProgress; + nCount = msg[i].nCurrentCount; // 返回的总个数 + + // 刷新设备处理进度 + // UI线程 + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + progressBar.setValue(nProgress); + + if (nProgress == 100) { // 进度等于100,设备处理完毕,开始查询 + // 异步线程处理 + new SearchPictureWoker(nCount).execute(); + } + } + }); + } + } + } + } + + /** + * 用于订阅人脸状态后的查询 + * 以图搜图与查询人员信息的接口是一样的,只是逻辑不一样,doFindNextPerson接口时,都是指定每次查询的个数,最大20,然后根据偏移量循环查询 + * SwingWorker为异步线程,回调属于子线程,不能做耗时操作和刷新UI + */ + private static class SearchPictureWoker extends SwingWorker { + private int nTotalCount; // 查询到的总个数 + + public SearchPictureWoker(int nTotalCount) { + this.nTotalCount = nTotalCount; + } + + @Override + protected Boolean doInBackground() { + int beginNum = 0; // 偏移量 + int nCount = 0; // 循环查询了几次 + int index = 0; // index + 1 为查询到的总个数 + int nFindCount = 10; // 每次查询的个数 + + StringBuffer message = null; + + // 进度达到100%,关闭订阅 + SearchByPictureModule.detachFaceFindState(); + System.out.println("nTotalCount = " + nTotalCount); + if (nTotalCount == 0) { + return false; + } + + while (true) { + CANDIDATE_INFOEX[] caInfoexs = SearchByPictureModule.doFindNextPerson(beginNum, nFindCount); + if (caInfoexs == null) { + break; + } + + for (int i = 0; i < caInfoexs.length; i++) { + index = i + nFindCount * nCount + 1; + + // 清空 + message = new StringBuffer(); + + if (historyCheckBox.isSelected()) { // 历史库显示 + message.append("[" + index + "]时间 :" + caInfoexs[i].stTime.toStringTimeEx() + "\n"); + + message.append("[" + index + "]UID :" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n"); + message.append("[" + index + "]性别 :" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n"); + message.append("[" + index + "]年龄 :" + caInfoexs[i].stPersonInfo.byAge + "\n"); + message.append("[" + index + "]种族 :" + Res.string().getRace(caInfoexs[i].stPersonInfo.emRace) + "\n"); + message.append("[" + index + "]眼睛 :" + Res.string().getEyeState(caInfoexs[i].stPersonInfo.emEye) + "\n"); + message.append("[" + index + "]嘴巴 :" + Res.string().getMouthState(caInfoexs[i].stPersonInfo.emMouth) + "\n"); + message.append("[" + index + "]口罩 :" + Res.string().getMaskState(caInfoexs[i].stPersonInfo.emMask) + "\n"); + message.append("[" + index + "]胡子 :" + Res.string().getBeardState(caInfoexs[i].stPersonInfo.emBeard) + "\n"); + message.append("[" + index + "]眼镜 :" + Res.string().getGlasses(caInfoexs[i].stPersonInfo.byGlasses) + "\n"); + message.append("[" + index + "]相似度 :" + caInfoexs[i].bySimilarity + "\n"); + message.append("[" + index + "]图片路径 :" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n"); + + } else { // 人脸库显示 + message.append("[" + index + "]人脸库ID :" + new String(caInfoexs[i].stPersonInfo.szGroupID).trim() + "\n"); + try { + message.append("[" + index + "]人脸库名称 :" + new String(caInfoexs[i].stPersonInfo.szGroupName, "GBK").trim() + "\n"); + message.append("[" + index + "]姓名 :" + new String(caInfoexs[i].stPersonInfo.szPersonName, "GBK").trim() + "\n"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + message.append("[" + index + "]UID :" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n"); + message.append("[" + index + "]生日 :" + (caInfoexs[i].stPersonInfo.wYear) + "-" + + (0xff & caInfoexs[i].stPersonInfo.byMonth) + "-" + + (0xff & caInfoexs[i].stPersonInfo.byDay) + "\n"); + message.append("[" + index + "]性别 :" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n"); + message.append("[" + index + "]证件类型 :" + Res.string().getIdType(caInfoexs[i].stPersonInfo.byIDType) + "\n"); + message.append("[" + index + "]证件号 :" + new String(caInfoexs[i].stPersonInfo.szID).trim() + "\n"); + message.append("[" + index + "]相似度 :" + caInfoexs[i].bySimilarity + "\n"); + message.append("[" + index + "]图片路径 :" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n"); + } + + message.append("\n"); + publish(message); + } + + if (caInfoexs.length < nFindCount) { + System.out.printf("No More Record, Find End!\n"); + break; + } else { + beginNum += nFindCount; + nCount++; + } + } + + // 关闭查询 + SearchByPictureModule.doFindClosePerson(); + + return true; + } + + @Override + protected void process(java.util.List chunks) { + for (StringBuffer data : chunks) { + searchPicInfoTextArea.append(data.toString()); + searchPicInfoTextArea.updateUI(); + } + + super.process(chunks); + } + + @Override + protected void done() { + searchPicBtn.setEnabled(true); + searchPicInfoTextArea.append("查询结束... \n"); + searchPicInfoTextArea.updateUI(); + } + } + + + private static JTextArea searchPicInfoTextArea; + private static JProgressBar progressBar; + private static JButton searchPicBtn; + + private PaintPanel searchPicPanel; + private JComboBox chnComboBox; + private JTextField similaryTextField; + private DateChooserJButtonEx startTimeBtn; + private DateChooserJButtonEx endTimeBtn; + private JLabel chnLabel; + private JLabel startTimeLabel; + private JLabel endTimeLabel; + + private JCheckBox faceCheckBox; + private static JCheckBox historyCheckBox; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/Gate/AddCardDialog.java b/cloud/dahua/src/main/java/com/example/dahua/Gate/AddCardDialog.java index a7aca56..8ed46ed 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/Gate/AddCardDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/Gate/AddCardDialog.java @@ -27,298 +27,297 @@ import com.example.dahua.module.GateModule; import com.sun.jna.Memory; -public class AddCardDialog extends JDialog{ - - private static final long serialVersionUID = 1L; - - private Memory memory = null; - - private String picPath = ""; - - public AddCardDialog(){ - setTitle(Res.string().getAdd() + Res.string().getCardInfo()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(520, 390); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - CardInfoPanel cardInfoPanel = new CardInfoPanel(); - ImagePanel imagePanel = new ImagePanel(); - +public class AddCardDialog extends JDialog { + + private static final long serialVersionUID = 1L; + + private Memory memory = null; + + private String picPath = ""; + + public AddCardDialog() { + setTitle(Res.string().getAdd() + Res.string().getCardInfo()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(520, 390); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + CardInfoPanel cardInfoPanel = new CardInfoPanel(); + ImagePanel imagePanel = new ImagePanel(); + add(cardInfoPanel, BorderLayout.CENTER); add(imagePanel, BorderLayout.EAST); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - clear(); - dispose(); - } - }); - } - - /** - * 卡信息 - */ - private class CardInfoPanel extends JPanel { - - private static final long serialVersionUID = 1L; - - public CardInfoPanel() { - BorderEx.set(this, Res.string().getCardInfo(), 4); - setLayout(new FlowLayout()); - - JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER); - JLabel userIdLabel = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER); - JLabel cardNameLabel = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER); - JLabel cardPasswdLabel = new JLabel(Res.string().getCardPassword() + ":", JLabel.CENTER); - JLabel cardStatusLabel = new JLabel(Res.string().getCardStatus() + ":", JLabel.CENTER); - JLabel cardTypeLabel = new JLabel(Res.string().getCardType() + ":", JLabel.CENTER); - JLabel useTimesLabel = new JLabel(Res.string().getUseTimes() + ":", JLabel.CENTER); - JLabel validPeriodLabel = new JLabel(Res.string().getValidPeriod() + ":", JLabel.CENTER); - - Dimension dimension = new Dimension(); - dimension.width = 85; - dimension.height = 20; - cardNoLabel.setPreferredSize(dimension); - userIdLabel.setPreferredSize(dimension); - cardNameLabel.setPreferredSize(dimension); - cardPasswdLabel.setPreferredSize(dimension); - cardStatusLabel.setPreferredSize(dimension); - cardTypeLabel.setPreferredSize(dimension); - useTimesLabel.setPreferredSize(dimension); - validPeriodLabel.setPreferredSize(dimension); - - cardNoTextField = new JTextField(); - userIdTextField = new JTextField(); - cardNameTextField = new JTextField(); - cardPasswdField = new JPasswordField(); - cardStatusComboBox = new JComboBox(Res.string().getCardStatusList()); - cardTypeComboBox = new JComboBox(Res.string().getCardTypeList()); - useTimesTextField = new JTextField("0"); - firstEnterCheckBox = new JCheckBox(Res.string().getIsFirstEnter()); - enableCheckBox = new JCheckBox(Res.string().getEnable()); - startTimeBtn = new DateChooserJButton(); - endTimeBtn = new DateChooserJButton(); - - cardNoTextField.setPreferredSize(new Dimension(145, 20)); - userIdTextField.setPreferredSize(new Dimension(145, 20)); - cardNameTextField.setPreferredSize(new Dimension(145, 20)); - cardPasswdField.setPreferredSize(new Dimension(145, 20)); - useTimesTextField.setPreferredSize(new Dimension(145, 20)); - cardStatusComboBox.setPreferredSize(new Dimension(145, 20)); - cardTypeComboBox.setPreferredSize(new Dimension(145, 20)); - startTimeBtn.setPreferredSize(new Dimension(145, 20)); - endTimeBtn.setPreferredSize(new Dimension(145, 20)); - firstEnterCheckBox.setPreferredSize(new Dimension(100, 20)); - enableCheckBox.setPreferredSize(new Dimension(70, 20)); - - JLabel nullLabel1 = new JLabel(); - JLabel nullLabel2 = new JLabel(); - JLabel nullLabel3 = new JLabel(); - nullLabel1.setPreferredSize(new Dimension(5, 20)); - nullLabel2.setPreferredSize(new Dimension(30, 20)); - nullLabel3.setPreferredSize(new Dimension(85, 20)); - - addBtn = new JButton(Res.string().getAdd()); - cancelBtn = new JButton(Res.string().getCancel()); - JLabel nullLabel4 = new JLabel(); - nullLabel4.setPreferredSize(new Dimension(250, 20)); - addBtn.setPreferredSize(new Dimension(110, 20)); - cancelBtn.setPreferredSize(new Dimension(110, 20)); - - add(cardNoLabel); - add(cardNoTextField); - add(userIdLabel); - add(userIdTextField); - - add(cardNameLabel); - add(cardNameTextField); - add(cardPasswdLabel); - add(cardPasswdField); - - add(cardStatusLabel); - add(cardStatusComboBox); - add(cardTypeLabel); - add(cardTypeComboBox); - - add(useTimesLabel); - add(useTimesTextField); - add(nullLabel1); - add(firstEnterCheckBox); - add(nullLabel2); - add(enableCheckBox); - - add(validPeriodLabel); - add(startTimeBtn); - add(nullLabel3); - add(endTimeBtn); - - add(nullLabel4); - add(addBtn); - add(cancelBtn); - - // 添加 - addBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - if(cardNoTextField.getText().isEmpty()) { - JOptionPane.showMessageDialog(null, Res.string().getInputCardNo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(userIdTextField.getText().isEmpty()) { - JOptionPane.showMessageDialog(null, Res.string().getInputUserId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - - - if(memory == null) { - JOptionPane.showMessageDialog(null, Res.string().getSelectPicture(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - try { - if (cardNoTextField.getText().getBytes("UTF-8").length > 31) { - JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if (userIdTextField.getText().getBytes("UTF-8").length > 31) { - JOptionPane.showMessageDialog(null, Res.string().getUserIdExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if (cardNameTextField.getText().getBytes("UTF-8").length > 63) { - JOptionPane.showMessageDialog(null, Res.string().getCardNameExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if (new String(cardPasswdField.getPassword()).getBytes("UTF-8").length > 63) { - JOptionPane.showMessageDialog(null, Res.string().getCardPasswdExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - } catch (Exception e1) { - e1.printStackTrace(); - } - - // 先添加卡,卡添加成功后,再添加图片 - int useTimes = 0; - if(useTimesTextField.getText().isEmpty()) { - useTimes = 0; - } else { - useTimes = Integer.parseInt(useTimesTextField.getText()); - } - - int bCardFlags = GateModule.insertCard(cardNoTextField.getText(), userIdTextField.getText(), cardNameTextField.getText(), - new String(cardPasswdField.getPassword()), Res.string().getCardStatusInt(cardStatusComboBox.getSelectedIndex()), - Res.string().getCardTypeInt(cardTypeComboBox.getSelectedIndex()), useTimes, - firstEnterCheckBox.isSelected() ? 1:0, enableCheckBox.isSelected() ? 1:0, startTimeBtn.getText(), endTimeBtn.getText()); - String cardError = ""; - if(bCardFlags==-1) { - cardError = ToolKits.getErrorCodeShow(); - } - - - boolean bFaceFalgs = GateModule.addFaceInfo(userIdTextField.getText(), memory); - String faceError = ""; - if(!bFaceFalgs) { - faceError = ToolKits.getErrorCodeShow(); - } - - // 添加卡信息和人脸成功 - if(bCardFlags!=-1 && bFaceFalgs) { - JOptionPane.showMessageDialog(null, Res.string().getSucceedAddCardAndPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - dispose(); - } - - // 添加卡信息和人脸失败 - if(bCardFlags==-1 && !bFaceFalgs) { - JOptionPane.showMessageDialog(null, Res.string().getFailedAddCard() + " : " + cardError, - Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - // 添加卡信息成功,添加人脸失败 - if(bCardFlags!=-1 && !bFaceFalgs) { - JOptionPane.showMessageDialog(null, Res.string().getSucceedAddCardButFailedAddPerson() + " : " + faceError, Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - - // 卡信息已存在,添加人脸成功 - if(bCardFlags==-1 && bFaceFalgs) { - JOptionPane.showMessageDialog(null, Res.string().getCardExistedSucceedAddPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } - } - }); - - // 取消 - cancelBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - clear(); - dispose(); - } - }); - } - } - - /** - * 选择图片 - */ - private class ImagePanel extends JPanel { - - private static final long serialVersionUID = 1L; - - public ImagePanel() { - BorderEx.set(this, Res.string().getPersonPicture(), 4); - Dimension dimension = new Dimension(); - dimension.width = 250; - setPreferredSize(dimension); - setLayout(new BorderLayout()); - - addImagePanel = new PaintPanel(); // 添加的人员信息图片显示 - selectImageBtn = new JButton(Res.string().getSelectPicture()); - add(addImagePanel, BorderLayout.CENTER); - add(selectImageBtn, BorderLayout.SOUTH); - - // 选择图片,获取图片的信息 - selectImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - // 选择图片,获取图片路径,并在界面显示 - picPath = ToolKits.openPictureFile(addImagePanel); - - if(!picPath.isEmpty()) { - memory = ToolKits.readPictureFile(picPath); - } - - } - }); - } - } - - private void clear() { - memory = null; - picPath = ""; - } - - private PaintPanel addImagePanel; - private JButton selectImageBtn; - - private JTextField cardNoTextField; - private JTextField userIdTextField; - private JTextField cardNameTextField; - private JPasswordField cardPasswdField; - private JComboBox cardStatusComboBox; - private JComboBox cardTypeComboBox; - private JTextField useTimesTextField; - private JCheckBox firstEnterCheckBox; - private JCheckBox enableCheckBox; - private DateChooserJButton startTimeBtn; - private DateChooserJButton endTimeBtn; - - private JButton addBtn; - private JButton cancelBtn; + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + clear(); + dispose(); + } + }); + } + + /** + * 卡信息 + */ + private class CardInfoPanel extends JPanel { + + private static final long serialVersionUID = 1L; + + public CardInfoPanel() { + BorderEx.set(this, Res.string().getCardInfo(), 4); + setLayout(new FlowLayout()); + + JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER); + JLabel userIdLabel = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER); + JLabel cardNameLabel = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER); + JLabel cardPasswdLabel = new JLabel(Res.string().getCardPassword() + ":", JLabel.CENTER); + JLabel cardStatusLabel = new JLabel(Res.string().getCardStatus() + ":", JLabel.CENTER); + JLabel cardTypeLabel = new JLabel(Res.string().getCardType() + ":", JLabel.CENTER); + JLabel useTimesLabel = new JLabel(Res.string().getUseTimes() + ":", JLabel.CENTER); + JLabel validPeriodLabel = new JLabel(Res.string().getValidPeriod() + ":", JLabel.CENTER); + + Dimension dimension = new Dimension(); + dimension.width = 85; + dimension.height = 20; + cardNoLabel.setPreferredSize(dimension); + userIdLabel.setPreferredSize(dimension); + cardNameLabel.setPreferredSize(dimension); + cardPasswdLabel.setPreferredSize(dimension); + cardStatusLabel.setPreferredSize(dimension); + cardTypeLabel.setPreferredSize(dimension); + useTimesLabel.setPreferredSize(dimension); + validPeriodLabel.setPreferredSize(dimension); + + cardNoTextField = new JTextField(); + userIdTextField = new JTextField(); + cardNameTextField = new JTextField(); + cardPasswdField = new JPasswordField(); + cardStatusComboBox = new JComboBox(Res.string().getCardStatusList()); + cardTypeComboBox = new JComboBox(Res.string().getCardTypeList()); + useTimesTextField = new JTextField("0"); + firstEnterCheckBox = new JCheckBox(Res.string().getIsFirstEnter()); + enableCheckBox = new JCheckBox(Res.string().getEnable()); + startTimeBtn = new DateChooserJButton(); + endTimeBtn = new DateChooserJButton(); + + cardNoTextField.setPreferredSize(new Dimension(145, 20)); + userIdTextField.setPreferredSize(new Dimension(145, 20)); + cardNameTextField.setPreferredSize(new Dimension(145, 20)); + cardPasswdField.setPreferredSize(new Dimension(145, 20)); + useTimesTextField.setPreferredSize(new Dimension(145, 20)); + cardStatusComboBox.setPreferredSize(new Dimension(145, 20)); + cardTypeComboBox.setPreferredSize(new Dimension(145, 20)); + startTimeBtn.setPreferredSize(new Dimension(145, 20)); + endTimeBtn.setPreferredSize(new Dimension(145, 20)); + firstEnterCheckBox.setPreferredSize(new Dimension(100, 20)); + enableCheckBox.setPreferredSize(new Dimension(70, 20)); + + JLabel nullLabel1 = new JLabel(); + JLabel nullLabel2 = new JLabel(); + JLabel nullLabel3 = new JLabel(); + nullLabel1.setPreferredSize(new Dimension(5, 20)); + nullLabel2.setPreferredSize(new Dimension(30, 20)); + nullLabel3.setPreferredSize(new Dimension(85, 20)); + + addBtn = new JButton(Res.string().getAdd()); + cancelBtn = new JButton(Res.string().getCancel()); + JLabel nullLabel4 = new JLabel(); + nullLabel4.setPreferredSize(new Dimension(250, 20)); + addBtn.setPreferredSize(new Dimension(110, 20)); + cancelBtn.setPreferredSize(new Dimension(110, 20)); + + add(cardNoLabel); + add(cardNoTextField); + add(userIdLabel); + add(userIdTextField); + + add(cardNameLabel); + add(cardNameTextField); + add(cardPasswdLabel); + add(cardPasswdField); + + add(cardStatusLabel); + add(cardStatusComboBox); + add(cardTypeLabel); + add(cardTypeComboBox); + + add(useTimesLabel); + add(useTimesTextField); + add(nullLabel1); + add(firstEnterCheckBox); + add(nullLabel2); + add(enableCheckBox); + + add(validPeriodLabel); + add(startTimeBtn); + add(nullLabel3); + add(endTimeBtn); + + add(nullLabel4); + add(addBtn); + add(cancelBtn); + + // 添加 + addBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + if (cardNoTextField.getText().isEmpty()) { + JOptionPane.showMessageDialog(null, Res.string().getInputCardNo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (userIdTextField.getText().isEmpty()) { + JOptionPane.showMessageDialog(null, Res.string().getInputUserId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + + if (memory == null) { + JOptionPane.showMessageDialog(null, Res.string().getSelectPicture(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + try { + if (cardNoTextField.getText().getBytes("UTF-8").length > 31) { + JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (userIdTextField.getText().getBytes("UTF-8").length > 31) { + JOptionPane.showMessageDialog(null, Res.string().getUserIdExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (cardNameTextField.getText().getBytes("UTF-8").length > 63) { + JOptionPane.showMessageDialog(null, Res.string().getCardNameExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (new String(cardPasswdField.getPassword()).getBytes("UTF-8").length > 63) { + JOptionPane.showMessageDialog(null, Res.string().getCardPasswdExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + } catch (Exception e1) { + e1.printStackTrace(); + } + + // 先添加卡,卡添加成功后,再添加图片 + int useTimes = 0; + if (useTimesTextField.getText().isEmpty()) { + useTimes = 0; + } else { + useTimes = Integer.parseInt(useTimesTextField.getText()); + } + + int bCardFlags = GateModule.insertCard(cardNoTextField.getText(), userIdTextField.getText(), cardNameTextField.getText(), + new String(cardPasswdField.getPassword()), Res.string().getCardStatusInt(cardStatusComboBox.getSelectedIndex()), + Res.string().getCardTypeInt(cardTypeComboBox.getSelectedIndex()), useTimes, + firstEnterCheckBox.isSelected() ? 1 : 0, enableCheckBox.isSelected() ? 1 : 0, startTimeBtn.getText(), endTimeBtn.getText()); + String cardError = ""; + if (bCardFlags == -1) { + cardError = ToolKits.getErrorCodeShow(); + } + + + boolean bFaceFalgs = GateModule.addFaceInfo(userIdTextField.getText(), memory); + String faceError = ""; + if (!bFaceFalgs) { + faceError = ToolKits.getErrorCodeShow(); + } + + // 添加卡信息和人脸成功 + if (bCardFlags != -1 && bFaceFalgs) { + JOptionPane.showMessageDialog(null, Res.string().getSucceedAddCardAndPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + dispose(); + } + + // 添加卡信息和人脸失败 + if (bCardFlags == -1 && !bFaceFalgs) { + JOptionPane.showMessageDialog(null, Res.string().getFailedAddCard() + " : " + cardError, + Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + // 添加卡信息成功,添加人脸失败 + if (bCardFlags != -1 && !bFaceFalgs) { + JOptionPane.showMessageDialog(null, Res.string().getSucceedAddCardButFailedAddPerson() + " : " + faceError, Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + + // 卡信息已存在,添加人脸成功 + if (bCardFlags == -1 && bFaceFalgs) { + JOptionPane.showMessageDialog(null, Res.string().getCardExistedSucceedAddPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } + } + }); + + // 取消 + cancelBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + clear(); + dispose(); + } + }); + } + } + + /** + * 选择图片 + */ + private class ImagePanel extends JPanel { + + private static final long serialVersionUID = 1L; + + public ImagePanel() { + BorderEx.set(this, Res.string().getPersonPicture(), 4); + Dimension dimension = new Dimension(); + dimension.width = 250; + setPreferredSize(dimension); + setLayout(new BorderLayout()); + + addImagePanel = new PaintPanel(); // 添加的人员信息图片显示 + selectImageBtn = new JButton(Res.string().getSelectPicture()); + add(addImagePanel, BorderLayout.CENTER); + add(selectImageBtn, BorderLayout.SOUTH); + + // 选择图片,获取图片的信息 + selectImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + // 选择图片,获取图片路径,并在界面显示 + picPath = ToolKits.openPictureFile(addImagePanel); + + if (!picPath.isEmpty()) { + memory = ToolKits.readPictureFile(picPath); + } + + } + }); + } + } + + private void clear() { + memory = null; + picPath = ""; + } + + private PaintPanel addImagePanel; + private JButton selectImageBtn; + + private JTextField cardNoTextField; + private JTextField userIdTextField; + private JTextField cardNameTextField; + private JPasswordField cardPasswdField; + private JComboBox cardStatusComboBox; + private JComboBox cardTypeComboBox; + private JTextField useTimesTextField; + private JCheckBox firstEnterCheckBox; + private JCheckBox enableCheckBox; + private DateChooserJButton startTimeBtn; + private DateChooserJButton endTimeBtn; + + private JButton addBtn; + private JButton cancelBtn; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/Gate/CardManegerDialog.java b/cloud/dahua/src/main/java/com/example/dahua/Gate/CardManegerDialog.java index e040fd6..441a118 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/Gate/CardManegerDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/Gate/CardManegerDialog.java @@ -31,368 +31,372 @@ import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; -public class CardManegerDialog extends JDialog{ - private static final long serialVersionUID = 1L; - - private int count = 0; // 查询了几次 - private int index = 0; // 查询的卡信息索引 - private int nFindCount = 10; // 每次查询的次数 - - public CardManegerDialog(){ - setTitle(Res.string().getCardManager()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(700, 390); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - CardListPanel cardListPanel = new CardListPanel(); - CardOperatePanel cardOperatePanel = new CardOperatePanel(); - +public class CardManegerDialog extends JDialog { + private static final long serialVersionUID = 1L; + + private int count = 0; // 查询了几次 + private int index = 0; // 查询的卡信息索引 + private int nFindCount = 10; // 每次查询的次数 + + public CardManegerDialog() { + setTitle(Res.string().getCardManager()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(700, 390); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + CardListPanel cardListPanel = new CardListPanel(); + CardOperatePanel cardOperatePanel = new CardOperatePanel(); + add(cardListPanel, BorderLayout.CENTER); add(cardOperatePanel, BorderLayout.EAST); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - dispose(); - } - }); - - setOnClickListener(); - } - - /** - * 卡信息列表 - */ - private class CardListPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public CardListPanel() { - BorderEx.set(this, Res.string().getCardInfo(), 2); - setLayout(new BorderLayout()); - - defaultModel = new DefaultTableModel(null, Res.string().getCardTable()); - table = new JTable(defaultModel) { // 列表不可编辑 - private static final long serialVersionUID = 1L; - @Override - public boolean isCellEditable(int row, int column) { - return false; - } - }; - defaultModel.setRowCount(18); - - table.getColumnModel().getColumn(0).setPreferredWidth(80); - table.getColumnModel().getColumn(1).setPreferredWidth(120); - table.getColumnModel().getColumn(2).setPreferredWidth(100); - table.getColumnModel().getColumn(3).setPreferredWidth(100); - table.getColumnModel().getColumn(4).setPreferredWidth(100); - table.getColumnModel().getColumn(5).setPreferredWidth(100); - table.getColumnModel().getColumn(6).setPreferredWidth(100); - table.getColumnModel().getColumn(7).setPreferredWidth(100); - table.getColumnModel().getColumn(8).setPreferredWidth(100); - table.getColumnModel().getColumn(9).setPreferredWidth(100); - table.getColumnModel().getColumn(10).setPreferredWidth(100); - table.getColumnModel().getColumn(11).setPreferredWidth(150); - table.getColumnModel().getColumn(12).setPreferredWidth(150); - - // 列表显示居中 - DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); - dCellRenderer.setHorizontalAlignment(JLabel.CENTER); - table.setDefaultRenderer(Object.class, dCellRenderer); - ((DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); - - table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - JScrollPane scrollPane = new JScrollPane(table); - add(scrollPane, BorderLayout.CENTER); - } - - } - - /** - * 卡操作 - */ - private class CardOperatePanel extends JPanel { - private static final long serialVersionUID = 1L; - - public CardOperatePanel() { - BorderEx.set(this, Res.string().getCardOperate(), 2); - setLayout(new BorderLayout()); - Dimension dimension = new Dimension(); - dimension.width = 210; - setPreferredSize(dimension); - - Panel panel1 = new Panel(); - Panel panel2 = new Panel(); - - add(panel1, BorderLayout.NORTH); - add(panel2, BorderLayout.CENTER); - - // - JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER); - cardNoTextField = new JTextField(""); - - cardNoLabel.setPreferredSize(new Dimension(50, 20)); - cardNoTextField.setPreferredSize(new Dimension(120, 20)); - cardNoTextField.setHorizontalAlignment(JTextField.CENTER); - - panel1.setLayout(new FlowLayout()); - panel1.add(cardNoLabel); - panel1.add(cardNoTextField); - - // - searchBtn = new JButton(Res.string().getSearch()); - addBtn = new JButton(Res.string().getAdd()); - modifyBtn = new JButton(Res.string().getModify()); - deleteBtn = new JButton(Res.string().getDelete()); - clearBtn = new JButton(Res.string().getClear()); - - searchBtn.setPreferredSize(new Dimension(180, 21)); - addBtn.setPreferredSize(new Dimension(180, 21)); - modifyBtn.setPreferredSize(new Dimension(180, 21)); - deleteBtn.setPreferredSize(new Dimension(180, 21)); - clearBtn.setPreferredSize(new Dimension(180, 21)); - - JLabel nullLabel = new JLabel(); - nullLabel.setPreferredSize(new Dimension(180, 30)); - - panel2.setLayout(new FlowLayout()); - panel2.add(nullLabel); - panel2.add(searchBtn); - panel2.add(addBtn); - panel2.add(modifyBtn); - panel2.add(deleteBtn); - panel2.add(clearBtn); - } - } - - private void setOnClickListener() { - searchBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - try { - if (cardNoTextField.getText().getBytes("UTF-8").length > 31) { - JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - } catch (Exception e1) { - e1.printStackTrace(); - } - - searchBtn.setEnabled(false); - defaultModel.setRowCount(0); - defaultModel.setRowCount(18); - } - }); - - findCardInfo(); - } - }); - - addBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - AddCardDialog dialog = new AddCardDialog(); - dialog.setVisible(true); - } - }); - - modifyBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultModel.getValueAt(row, 3) == null || String.valueOf(defaultModel.getValueAt(row, 3)).trim().isEmpty()) { - JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - Vector vector = (Vector) defaultModel.getDataVector().get(row); - - ModifyCardDialog dialog = new ModifyCardDialog(vector); - dialog.setVisible(true); - } - }); - - deleteBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - int row = -1; - row = table.getSelectedRow(); //获得所选的单行 - - if(row < 0) { - JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if(defaultModel.getValueAt(row, 3) == null || String.valueOf(defaultModel.getValueAt(row, 3)).trim().isEmpty()) { - JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - Vector v = (Vector)defaultModel.getDataVector().get(row); - - String recordNo = v.get(3).toString(); // 记录集编号 - String userId = v.get(4).toString(); // 用户ID - - // 删除人脸和卡信息 - if( - !GateModule.deleteCard(Integer.parseInt(recordNo))) { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - defaultModel.removeRow(row); - table.updateUI(); - } - } - }); - - clearBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - int result = JOptionPane.showConfirmDialog(null, Res.string().getWantClearAllInfo(), Res.string().getPromptMessage(), JOptionPane.YES_NO_OPTION); - if(result == 0) { // 0-是, 1-否 - // 清空人脸和卡信息 - if(true) { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - defaultModel.setRowCount(0); - defaultModel.setRowCount(18); - } - } - } - }); - } - - /** - * 查询卡的信息 - */ - public void findCardInfo() { - new SwingWorker() { - @Override - protected Boolean doInBackground() { - count = 0; - index = 0; - nFindCount = 10; - - // 卡号: 为空,查询所有的卡信息 - // 获取查询句柄 - if(!GateModule.findCard(cardNoTextField.getText())) { - return false; - } - - // 查询具体信息 - while(true) { - NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD[] pstRecord = GateModule.findNextCard(nFindCount); - if(pstRecord == null) { - break; - } - - for(int i = 0; i < pstRecord.length; i++) { - index = i + count * nFindCount; - - try { - Vector vector = new Vector(); - vector.add(String.valueOf(index + 1)); // 序号 - vector.add(new String(pstRecord[i].szCardNo).trim()); // 卡号 - vector.add(new String(pstRecord[i].szCardName, "GBK").trim()); // 卡名 - vector.add(String.valueOf(pstRecord[i].nRecNo)); // 记录集编号 - vector.add(new String(pstRecord[i].szUserID).trim()); // 用户ID - vector.add(new String(pstRecord[i].szPsw).trim()); // 卡密码 - vector.add(Res.string().getCardStatus(pstRecord[i].emStatus)); // 卡状态 - vector.add(Res.string().getCardType(pstRecord[i].emType)); // 卡类型 - vector.add(String.valueOf(pstRecord[i].nUserTime)); // 使用次数 - vector.add(pstRecord[i].bFirstEnter == 1 ? Res.string().getFirstEnter() : Res.string().getNoFirstEnter()); // 是否首卡 - vector.add(pstRecord[i].bIsValid == 1? Res.string().getValid() : Res.string().getInValid()); // 是否有效 - vector.add(pstRecord[i].stuValidStartTime.toStringTimeEx()); // 有效开始时间 - vector.add(pstRecord[i].stuValidEndTime.toStringTimeEx()); // 有效结束时间 - - CardData data = new CardData(); - data.setIndex(index); - data.setVector(vector); - - publish(data); - - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - - if (pstRecord.length < nFindCount) { - break; - } else { - count ++; - } - - } - - // 关闭查询接口 - GateModule.findCardClose(); - - return true; - } - - @Override - protected void process(java.util.List chunks) { - for(CardData data : chunks) { - defaultModel.insertRow(data.getIndex(), data.getVector()); - if(data.getIndex() < 18) { - defaultModel.setRowCount(18); - } else { - defaultModel.setRowCount(data.getIndex() + 1); - } - - table.updateUI(); - } - - super.process(chunks); - } - - @Override - protected void done() { - searchBtn.setEnabled(true); - } - }.execute(); - } - - class CardData { - private int nIndex = 0; - private Vector vector = null; - - public int getIndex() { - return nIndex; - } - public void setIndex(int index) { - this.nIndex = index; - } - public Vector getVector() { - return vector; - } - public void setVector(Vector vector) { - this.vector = vector; - } - } - - - /// - private DefaultTableModel defaultModel; - private JTable table; - - private JTextField cardNoTextField; - - private JButton searchBtn; - private JButton addBtn; - private JButton modifyBtn; - private JButton deleteBtn; - private JButton clearBtn; + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + + setOnClickListener(); + } + + /** + * 卡信息列表 + */ + private class CardListPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public CardListPanel() { + BorderEx.set(this, Res.string().getCardInfo(), 2); + setLayout(new BorderLayout()); + + defaultModel = new DefaultTableModel(null, Res.string().getCardTable()); + table = new JTable(defaultModel) { // 列表不可编辑 + private static final long serialVersionUID = 1L; + + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + }; + defaultModel.setRowCount(18); + + table.getColumnModel().getColumn(0).setPreferredWidth(80); + table.getColumnModel().getColumn(1).setPreferredWidth(120); + table.getColumnModel().getColumn(2).setPreferredWidth(100); + table.getColumnModel().getColumn(3).setPreferredWidth(100); + table.getColumnModel().getColumn(4).setPreferredWidth(100); + table.getColumnModel().getColumn(5).setPreferredWidth(100); + table.getColumnModel().getColumn(6).setPreferredWidth(100); + table.getColumnModel().getColumn(7).setPreferredWidth(100); + table.getColumnModel().getColumn(8).setPreferredWidth(100); + table.getColumnModel().getColumn(9).setPreferredWidth(100); + table.getColumnModel().getColumn(10).setPreferredWidth(100); + table.getColumnModel().getColumn(11).setPreferredWidth(150); + table.getColumnModel().getColumn(12).setPreferredWidth(150); + + // 列表显示居中 + DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer(); + dCellRenderer.setHorizontalAlignment(JLabel.CENTER); + table.setDefaultRenderer(Object.class, dCellRenderer); + ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); + + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + JScrollPane scrollPane = new JScrollPane(table); + add(scrollPane, BorderLayout.CENTER); + } + + } + + /** + * 卡操作 + */ + private class CardOperatePanel extends JPanel { + private static final long serialVersionUID = 1L; + + public CardOperatePanel() { + BorderEx.set(this, Res.string().getCardOperate(), 2); + setLayout(new BorderLayout()); + Dimension dimension = new Dimension(); + dimension.width = 210; + setPreferredSize(dimension); + + Panel panel1 = new Panel(); + Panel panel2 = new Panel(); + + add(panel1, BorderLayout.NORTH); + add(panel2, BorderLayout.CENTER); + + // + JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER); + cardNoTextField = new JTextField(""); + + cardNoLabel.setPreferredSize(new Dimension(50, 20)); + cardNoTextField.setPreferredSize(new Dimension(120, 20)); + cardNoTextField.setHorizontalAlignment(JTextField.CENTER); + + panel1.setLayout(new FlowLayout()); + panel1.add(cardNoLabel); + panel1.add(cardNoTextField); + + // + searchBtn = new JButton(Res.string().getSearch()); + addBtn = new JButton(Res.string().getAdd()); + modifyBtn = new JButton(Res.string().getModify()); + deleteBtn = new JButton(Res.string().getDelete()); + clearBtn = new JButton(Res.string().getClear()); + + searchBtn.setPreferredSize(new Dimension(180, 21)); + addBtn.setPreferredSize(new Dimension(180, 21)); + modifyBtn.setPreferredSize(new Dimension(180, 21)); + deleteBtn.setPreferredSize(new Dimension(180, 21)); + clearBtn.setPreferredSize(new Dimension(180, 21)); + + JLabel nullLabel = new JLabel(); + nullLabel.setPreferredSize(new Dimension(180, 30)); + + panel2.setLayout(new FlowLayout()); + panel2.add(nullLabel); + panel2.add(searchBtn); + panel2.add(addBtn); + panel2.add(modifyBtn); + panel2.add(deleteBtn); + panel2.add(clearBtn); + } + } + + private void setOnClickListener() { + searchBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + try { + if (cardNoTextField.getText().getBytes("UTF-8").length > 31) { + JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + } catch (Exception e1) { + e1.printStackTrace(); + } + + searchBtn.setEnabled(false); + defaultModel.setRowCount(0); + defaultModel.setRowCount(18); + } + }); + + findCardInfo(); + } + }); + + addBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + AddCardDialog dialog = new AddCardDialog(); + dialog.setVisible(true); + } + }); + + modifyBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultModel.getValueAt(row, 3) == null || String.valueOf(defaultModel.getValueAt(row, 3)).trim().isEmpty()) { + JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + Vector vector = (Vector) defaultModel.getDataVector().get(row); + + ModifyCardDialog dialog = new ModifyCardDialog(vector); + dialog.setVisible(true); + } + }); + + deleteBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + int row = -1; + row = table.getSelectedRow(); //获得所选的单行 + + if (row < 0) { + JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (defaultModel.getValueAt(row, 3) == null || String.valueOf(defaultModel.getValueAt(row, 3)).trim().isEmpty()) { + JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + Vector v = (Vector) defaultModel.getDataVector().get(row); + + String recordNo = v.get(3).toString(); // 记录集编号 + String userId = v.get(4).toString(); // 用户ID + + // 删除人脸和卡信息 + if ( + !GateModule.deleteCard(Integer.parseInt(recordNo))) { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + defaultModel.removeRow(row); + table.updateUI(); + } + } + }); + + clearBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + int result = JOptionPane.showConfirmDialog(null, Res.string().getWantClearAllInfo(), Res.string().getPromptMessage(), JOptionPane.YES_NO_OPTION); + if (result == 0) { // 0-是, 1-否 + // 清空人脸和卡信息 + if (true) { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + defaultModel.setRowCount(0); + defaultModel.setRowCount(18); + } + } + } + }); + } + + /** + * 查询卡的信息 + */ + public void findCardInfo() { + new SwingWorker() { + @Override + protected Boolean doInBackground() { + count = 0; + index = 0; + nFindCount = 10; + + // 卡号: 为空,查询所有的卡信息 + // 获取查询句柄 + if (!GateModule.findCard(cardNoTextField.getText())) { + return false; + } + + // 查询具体信息 + while (true) { + NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD[] pstRecord = GateModule.findNextCard(nFindCount); + if (pstRecord == null) { + break; + } + + for (int i = 0; i < pstRecord.length; i++) { + index = i + count * nFindCount; + + try { + Vector vector = new Vector(); + vector.add(String.valueOf(index + 1)); // 序号 + vector.add(new String(pstRecord[i].szCardNo).trim()); // 卡号 + vector.add(new String(pstRecord[i].szCardName, "GBK").trim()); // 卡名 + vector.add(String.valueOf(pstRecord[i].nRecNo)); // 记录集编号 + vector.add(new String(pstRecord[i].szUserID).trim()); // 用户ID + vector.add(new String(pstRecord[i].szPsw).trim()); // 卡密码 + vector.add(Res.string().getCardStatus(pstRecord[i].emStatus)); // 卡状态 + vector.add(Res.string().getCardType(pstRecord[i].emType)); // 卡类型 + vector.add(String.valueOf(pstRecord[i].nUserTime)); // 使用次数 + vector.add(pstRecord[i].bFirstEnter == 1 ? Res.string().getFirstEnter() : Res.string().getNoFirstEnter()); // 是否首卡 + vector.add(pstRecord[i].bIsValid == 1 ? Res.string().getValid() : Res.string().getInValid()); // 是否有效 + vector.add(pstRecord[i].stuValidStartTime.toStringTimeEx()); // 有效开始时间 + vector.add(pstRecord[i].stuValidEndTime.toStringTimeEx()); // 有效结束时间 + + CardData data = new CardData(); + data.setIndex(index); + data.setVector(vector); + + publish(data); + + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + if (pstRecord.length < nFindCount) { + break; + } else { + count++; + } + + } + + // 关闭查询接口 + GateModule.findCardClose(); + + return true; + } + + @Override + protected void process(java.util.List chunks) { + for (CardData data : chunks) { + defaultModel.insertRow(data.getIndex(), data.getVector()); + if (data.getIndex() < 18) { + defaultModel.setRowCount(18); + } else { + defaultModel.setRowCount(data.getIndex() + 1); + } + + table.updateUI(); + } + + super.process(chunks); + } + + @Override + protected void done() { + searchBtn.setEnabled(true); + } + }.execute(); + } + + class CardData { + private int nIndex = 0; + private Vector vector = null; + + public int getIndex() { + return nIndex; + } + + public void setIndex(int index) { + this.nIndex = index; + } + + public Vector getVector() { + return vector; + } + + public void setVector(Vector vector) { + this.vector = vector; + } + } + + + /// + private DefaultTableModel defaultModel; + private JTable table; + + private JTextField cardNoTextField; + + private JButton searchBtn; + private JButton addBtn; + private JButton modifyBtn; + private JButton deleteBtn; + private JButton clearBtn; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/Gate/Gate.java b/cloud/dahua/src/main/java/com/example/dahua/Gate/Gate.java index d7c9652..29d5db8 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/Gate/Gate.java +++ b/cloud/dahua/src/main/java/com/example/dahua/Gate/Gate.java @@ -40,504 +40,503 @@ import com.example.dahua.module.LoginModule; import com.sun.jna.Pointer; class GateFrame extends JFrame { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - // 获取界面窗口 - private static JFrame frame = new JFrame(); + // 获取界面窗口 + private static JFrame frame = new JFrame(); - // 设备断线通知回调 - private static DisConnect disConnect = new DisConnect(); + // 设备断线通知回调 + private static DisConnect disConnect = new DisConnect(); - // 网络连接恢复 - private static HaveReConnect haveReConnect = new HaveReConnect(); + // 网络连接恢复 + private static HaveReConnect haveReConnect = new HaveReConnect(); - // 订阅句柄 - public static LLong m_hAttachHandle = new LLong(0); + // 订阅句柄 + public static LLong m_hAttachHandle = new LLong(0); - private Vector chnList = new Vector(); + private Vector chnList = new Vector(); - private AnalyzerDataCB analyzerCallback = new AnalyzerDataCB(); + private AnalyzerDataCB analyzerCallback = new AnalyzerDataCB(); - private java.awt.Component target = this; + private java.awt.Component target = this; - private boolean isAttach = false; + private boolean isAttach = false; - public GateFrame() { - setTitle(Res.string().getGate()); - setLayout(new BorderLayout()); - pack(); - setSize(800, 400); - setResizable(false); - setLocationRelativeTo(null); - LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化 + public GateFrame() { + setTitle(Res.string().getGate()); + setLayout(new BorderLayout()); + pack(); + setSize(800, 400); + setResizable(false); + setLocationRelativeTo(null); + LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化 - try { + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { - e.printStackTrace(); + e.printStackTrace(); } - loginPanel = new LoginPanel(); - GatePanel gatePanel = new GatePanel(); - - - add(loginPanel, BorderLayout.NORTH); - add(gatePanel, BorderLayout.CENTER); - - - loginPanel.addLoginBtnActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(loginPanel.checkLoginText()) { - if(login()) { - frame = ToolKits.getFrame(e); - frame.setTitle(Res.string().getGate() + " : " + Res.string().getOnline()); - } - } - } - }); - - loginPanel.addLogoutBtnActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - frame.setTitle(Res.string().getGate()); - logout(); - } - }); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - GateModule.stopRealLoadPic(m_hAttachHandle); - LoginModule.logout(); - LoginModule.cleanup(); // 关闭工程,释放资源 - - dispose(); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - FunctionList demo = new FunctionList(); - demo.setVisible(true); - } - }); - } - }); - } - - /////////////////面板/////////////////// - // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 - private static class DisConnect implements NetSDKLib.fDisConnect { - public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); - // 断线提示 - SwingUtilities.invokeLater(new Runnable() { - public void run() { - frame.setTitle(Res.string().getGate() + " : " + Res.string().getDisConnectReconnecting()); - } - }); - } - } - - // 网络连接恢复,设备重连成功回调 - // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数 - private static class HaveReConnect implements NetSDKLib.fHaveReConnect { - public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); - - // 重连提示 - SwingUtilities.invokeLater(new Runnable() { - public void run() { - frame.setTitle(Res.string().getGate() + " : " + Res.string().getOnline()); - } - }); - } - } - - // 登录 - public boolean login() { - if(LoginModule.login(loginPanel.ipTextArea.getText(), - Integer.parseInt(loginPanel.portTextArea.getText()), - loginPanel.nameTextArea.getText(), - new String(loginPanel.passwordTextArea.getPassword()))) { - - for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { - chnList.add(Res.string().getChannel() + " " + String.valueOf(i)); - } - - // 登陆成功,将通道添加到控件 - chnComboBox.setModel(new DefaultComboBoxModel(chnList)); - - loginPanel.setButtonEnable(true); - setEnable(true); - - } else { - JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - return true; - } - - // 登出 - public void logout() { - GateModule.stopRealLoadPic(m_hAttachHandle); - LoginModule.logout(); - - loginPanel.setButtonEnable(false); - - for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) { - chnList.clear(); - } - - chnComboBox.setModel(new DefaultComboBoxModel()); - setEnable(false); - detachBtn.setEnabled(false); - - isAttach = false; - - clearPanel(); - } - - /** - * 闸机界面面板 - */ - private class GatePanel extends JPanel { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public GatePanel() { - BorderEx.set(this, "", 4); - setLayout(new BorderLayout()); - - JPanel gateOperatePanel = new JPanel(); - JPanel gateShowPanel = new JPanel(); - - add(gateOperatePanel, BorderLayout.WEST); - add(gateShowPanel, BorderLayout.CENTER); - - /** - * 闸机操作面板 - */ - gateOperatePanel.setLayout(new BorderLayout()); - gateOperatePanel.setPreferredSize(new Dimension(250, 70)); - - JPanel channelPanel = new JPanel(); - JPanel operatePanel = new JPanel(); - gateOperatePanel.add(channelPanel, BorderLayout.NORTH); - gateOperatePanel.add(operatePanel, BorderLayout.CENTER); - - // 通道面板 - channelPanel.setBorder(BorderFactory.createTitledBorder("")); - channelPanel.setPreferredSize(new Dimension(220, 70)); - channelPanel.setLayout(new FlowLayout()); - - JLabel channelLabel = new JLabel(Res.string().getChannel()); - chnComboBox = new JComboBox(); - - chnComboBox.setPreferredSize(new Dimension(100, 20)); - - channelPanel.add(channelLabel); - channelPanel.add(chnComboBox); - - // 按钮面板 - operatePanel.setBorder(BorderFactory.createTitledBorder(Res.string().getOperate())); - operatePanel.setLayout(new FlowLayout()); - - attachBtn = new JButton(Res.string().getAttach()); - detachBtn = new JButton(Res.string().getDetach()); - cardOperateBtn = new JButton(Res.string().getCardOperate()); - JLabel nullJLabel = new JLabel(""); - - nullJLabel.setPreferredSize(new Dimension(205, 40)); - attachBtn.setPreferredSize(new Dimension(100, 20)); - detachBtn.setPreferredSize(new Dimension(100, 20)); - cardOperateBtn.setPreferredSize(new Dimension(205, 20)); - - operatePanel.add(attachBtn); - operatePanel.add(detachBtn); - operatePanel.add(nullJLabel); - operatePanel.add(cardOperateBtn); - - setEnable(false); - detachBtn.setEnabled(false); - - /** - * 闸机订阅展示面板 - */ - gateShowPanel.setBorder(BorderFactory.createTitledBorder("")); - gateShowPanel.setLayout(new BorderLayout()); - - personPaintPanel = new PaintPanel(); - JPanel cardInfoPanel = new JPanel(); - - personPaintPanel.setPreferredSize(new Dimension(250, 70)); - - gateShowPanel.add(personPaintPanel, BorderLayout.WEST); - gateShowPanel.add(cardInfoPanel, BorderLayout.CENTER); - - // - cardInfoPanel.setLayout(new FlowLayout()); - - JLabel timeLable = new JLabel(Res.string().getTime() + ":", JLabel.CENTER); - JLabel openStatusLable = new JLabel(Res.string().getOpenStatus() + ":", JLabel.CENTER); - JLabel openMethodLable = new JLabel(Res.string().getOpenMethod() + ":", JLabel.CENTER); - JLabel cardNameLable = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER); - JLabel cardNoLable = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER); - JLabel userIdLable = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER); - - timeLable.setPreferredSize(new Dimension(80, 20)); - openStatusLable.setPreferredSize(new Dimension(80, 20)); - openMethodLable.setPreferredSize(new Dimension(80, 20)); - cardNameLable.setPreferredSize(new Dimension(80, 20)); - cardNoLable.setPreferredSize(new Dimension(80, 20)); - userIdLable.setPreferredSize(new Dimension(80, 20)); - - timeTextField = new JTextField(""); - openStatusTextField = new JTextField(""); - openMethodTextField = new JTextField(""); - cardNameTextField = new JTextField(""); - cardNoTextField = new JTextField(""); - userIdTextField = new JTextField(""); - - Dimension dimension = new Dimension(); - dimension.width = 150; - dimension.height = 20; - timeTextField.setPreferredSize(dimension); - openStatusTextField.setPreferredSize(dimension); - openMethodTextField.setPreferredSize(dimension); - cardNameTextField.setPreferredSize(dimension); - cardNoTextField.setPreferredSize(dimension); - userIdTextField.setPreferredSize(dimension); - - timeTextField.setHorizontalAlignment(JTextField.CENTER); - openStatusTextField.setHorizontalAlignment(JTextField.CENTER); - openMethodTextField.setHorizontalAlignment(JTextField.CENTER); - cardNameTextField.setHorizontalAlignment(JTextField.CENTER); - cardNoTextField.setHorizontalAlignment(JTextField.CENTER); - userIdTextField.setHorizontalAlignment(JTextField.CENTER); - - timeTextField.setEditable(false); - openStatusTextField.setEditable(false); - openMethodTextField.setEditable(false); - cardNameTextField.setEditable(false); - cardNoTextField.setEditable(false); - userIdTextField.setEditable(false); - - cardInfoPanel.add(timeLable); - cardInfoPanel.add(timeTextField); - cardInfoPanel.add(openStatusLable); - cardInfoPanel.add(openStatusTextField); - cardInfoPanel.add(openMethodLable); - cardInfoPanel.add(openMethodTextField); - cardInfoPanel.add(cardNameLable); - cardInfoPanel.add(cardNameTextField); - cardInfoPanel.add(cardNoLable); - cardInfoPanel.add(cardNoTextField); - cardInfoPanel.add(userIdLable); - cardInfoPanel.add(userIdTextField); - - setOnClickListener(); - } - } - - // 监听 - private void setOnClickListener() { - // 订阅 - attachBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - m_hAttachHandle = GateModule.realLoadPic(chnComboBox.getSelectedIndex(), analyzerCallback,null); - if(m_hAttachHandle.longValue() != 0) { - isAttach = true; - attachBtn.setEnabled(false); - detachBtn.setEnabled(true); - } else { - JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } - }); - - // 取消订阅 - detachBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - GateModule.stopRealLoadPic(m_hAttachHandle); - synchronized (this) { - isAttach = false; - } - attachBtn.setEnabled(true); - detachBtn.setEnabled(false); - - clearPanel(); - } - }); - - - // 卡操作 - cardOperateBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - CardManegerDialog dialog = new CardManegerDialog(); - dialog.setVisible(true); - } - }); - } - - private void setEnable(boolean bln) { - chnComboBox.setEnabled(bln); - attachBtn.setEnabled(bln); - cardOperateBtn.setEnabled(bln); - } - - private void clearPanel() { - personPaintPanel.setOpaque(true); - personPaintPanel.repaint(); - - timeTextField.setText(""); - openStatusTextField.setText(""); - openMethodTextField.setText(""); - cardNameTextField.setText(""); - cardNoTextField.setText(""); - userIdTextField.setText(""); - } - - private class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { - private BufferedImage gateBufferedImage = null; + loginPanel = new LoginPanel(); + GatePanel gatePanel = new GatePanel(); + + + add(loginPanel, BorderLayout.NORTH); + add(gatePanel, BorderLayout.CENTER); + + + loginPanel.addLoginBtnActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (loginPanel.checkLoginText()) { + if (login()) { + frame = ToolKits.getFrame(e); + frame.setTitle(Res.string().getGate() + " : " + Res.string().getOnline()); + } + } + } + }); + + loginPanel.addLogoutBtnActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + frame.setTitle(Res.string().getGate()); + logout(); + } + }); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + GateModule.stopRealLoadPic(m_hAttachHandle); + LoginModule.logout(); + LoginModule.cleanup(); // 关闭工程,释放资源 + + dispose(); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + FunctionList demo = new FunctionList(); + demo.setVisible(true); + } + }); + } + }); + } + + /////////////////面板/////////////////// + // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 + private static class DisConnect implements NetSDKLib.fDisConnect { + public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); + // 断线提示 + SwingUtilities.invokeLater(new Runnable() { + public void run() { + frame.setTitle(Res.string().getGate() + " : " + Res.string().getDisConnectReconnecting()); + } + }); + } + } + + // 网络连接恢复,设备重连成功回调 + // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数 + private static class HaveReConnect implements NetSDKLib.fHaveReConnect { + public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); + + // 重连提示 + SwingUtilities.invokeLater(new Runnable() { + public void run() { + frame.setTitle(Res.string().getGate() + " : " + Res.string().getOnline()); + } + }); + } + } + + // 登录 + public boolean login() { + if (LoginModule.login(loginPanel.ipTextArea.getText(), + Integer.parseInt(loginPanel.portTextArea.getText()), + loginPanel.nameTextArea.getText(), + new String(loginPanel.passwordTextArea.getPassword()))) { + + for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) { + chnList.add(Res.string().getChannel() + " " + String.valueOf(i)); + } + + // 登陆成功,将通道添加到控件 + chnComboBox.setModel(new DefaultComboBoxModel(chnList)); + + loginPanel.setButtonEnable(true); + setEnable(true); + + } else { + JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + return true; + } + + // 登出 + public void logout() { + GateModule.stopRealLoadPic(m_hAttachHandle); + LoginModule.logout(); + + loginPanel.setButtonEnable(false); + + for (int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) { + chnList.clear(); + } + + chnComboBox.setModel(new DefaultComboBoxModel()); + setEnable(false); + detachBtn.setEnabled(false); + + isAttach = false; + + clearPanel(); + } + + /** + * 闸机界面面板 + */ + private class GatePanel extends JPanel { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public GatePanel() { + BorderEx.set(this, "", 4); + setLayout(new BorderLayout()); + + JPanel gateOperatePanel = new JPanel(); + JPanel gateShowPanel = new JPanel(); + + add(gateOperatePanel, BorderLayout.WEST); + add(gateShowPanel, BorderLayout.CENTER); + + /** + * 闸机操作面板 + */ + gateOperatePanel.setLayout(new BorderLayout()); + gateOperatePanel.setPreferredSize(new Dimension(250, 70)); + + JPanel channelPanel = new JPanel(); + JPanel operatePanel = new JPanel(); + gateOperatePanel.add(channelPanel, BorderLayout.NORTH); + gateOperatePanel.add(operatePanel, BorderLayout.CENTER); + + // 通道面板 + channelPanel.setBorder(BorderFactory.createTitledBorder("")); + channelPanel.setPreferredSize(new Dimension(220, 70)); + channelPanel.setLayout(new FlowLayout()); + + JLabel channelLabel = new JLabel(Res.string().getChannel()); + chnComboBox = new JComboBox(); + + chnComboBox.setPreferredSize(new Dimension(100, 20)); + + channelPanel.add(channelLabel); + channelPanel.add(chnComboBox); + + // 按钮面板 + operatePanel.setBorder(BorderFactory.createTitledBorder(Res.string().getOperate())); + operatePanel.setLayout(new FlowLayout()); + + attachBtn = new JButton(Res.string().getAttach()); + detachBtn = new JButton(Res.string().getDetach()); + cardOperateBtn = new JButton(Res.string().getCardOperate()); + JLabel nullJLabel = new JLabel(""); + + nullJLabel.setPreferredSize(new Dimension(205, 40)); + attachBtn.setPreferredSize(new Dimension(100, 20)); + detachBtn.setPreferredSize(new Dimension(100, 20)); + cardOperateBtn.setPreferredSize(new Dimension(205, 20)); + + operatePanel.add(attachBtn); + operatePanel.add(detachBtn); + operatePanel.add(nullJLabel); + operatePanel.add(cardOperateBtn); + + setEnable(false); + detachBtn.setEnabled(false); + + /** + * 闸机订阅展示面板 + */ + gateShowPanel.setBorder(BorderFactory.createTitledBorder("")); + gateShowPanel.setLayout(new BorderLayout()); + + personPaintPanel = new PaintPanel(); + JPanel cardInfoPanel = new JPanel(); + + personPaintPanel.setPreferredSize(new Dimension(250, 70)); + + gateShowPanel.add(personPaintPanel, BorderLayout.WEST); + gateShowPanel.add(cardInfoPanel, BorderLayout.CENTER); + + // + cardInfoPanel.setLayout(new FlowLayout()); + + JLabel timeLable = new JLabel(Res.string().getTime() + ":", JLabel.CENTER); + JLabel openStatusLable = new JLabel(Res.string().getOpenStatus() + ":", JLabel.CENTER); + JLabel openMethodLable = new JLabel(Res.string().getOpenMethod() + ":", JLabel.CENTER); + JLabel cardNameLable = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER); + JLabel cardNoLable = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER); + JLabel userIdLable = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER); + + timeLable.setPreferredSize(new Dimension(80, 20)); + openStatusLable.setPreferredSize(new Dimension(80, 20)); + openMethodLable.setPreferredSize(new Dimension(80, 20)); + cardNameLable.setPreferredSize(new Dimension(80, 20)); + cardNoLable.setPreferredSize(new Dimension(80, 20)); + userIdLable.setPreferredSize(new Dimension(80, 20)); + + timeTextField = new JTextField(""); + openStatusTextField = new JTextField(""); + openMethodTextField = new JTextField(""); + cardNameTextField = new JTextField(""); + cardNoTextField = new JTextField(""); + userIdTextField = new JTextField(""); + + Dimension dimension = new Dimension(); + dimension.width = 150; + dimension.height = 20; + timeTextField.setPreferredSize(dimension); + openStatusTextField.setPreferredSize(dimension); + openMethodTextField.setPreferredSize(dimension); + cardNameTextField.setPreferredSize(dimension); + cardNoTextField.setPreferredSize(dimension); + userIdTextField.setPreferredSize(dimension); + + timeTextField.setHorizontalAlignment(JTextField.CENTER); + openStatusTextField.setHorizontalAlignment(JTextField.CENTER); + openMethodTextField.setHorizontalAlignment(JTextField.CENTER); + cardNameTextField.setHorizontalAlignment(JTextField.CENTER); + cardNoTextField.setHorizontalAlignment(JTextField.CENTER); + userIdTextField.setHorizontalAlignment(JTextField.CENTER); + + timeTextField.setEditable(false); + openStatusTextField.setEditable(false); + openMethodTextField.setEditable(false); + cardNameTextField.setEditable(false); + cardNoTextField.setEditable(false); + userIdTextField.setEditable(false); + + cardInfoPanel.add(timeLable); + cardInfoPanel.add(timeTextField); + cardInfoPanel.add(openStatusLable); + cardInfoPanel.add(openStatusTextField); + cardInfoPanel.add(openMethodLable); + cardInfoPanel.add(openMethodTextField); + cardInfoPanel.add(cardNameLable); + cardInfoPanel.add(cardNameTextField); + cardInfoPanel.add(cardNoLable); + cardInfoPanel.add(cardNoTextField); + cardInfoPanel.add(userIdLable); + cardInfoPanel.add(userIdTextField); + + setOnClickListener(); + } + } + + // 监听 + private void setOnClickListener() { + // 订阅 + attachBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + m_hAttachHandle = GateModule.realLoadPic(chnComboBox.getSelectedIndex(), analyzerCallback, null); + if (m_hAttachHandle.longValue() != 0) { + isAttach = true; + attachBtn.setEnabled(false); + detachBtn.setEnabled(true); + } else { + JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } + }); + + // 取消订阅 + detachBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + GateModule.stopRealLoadPic(m_hAttachHandle); + synchronized (this) { + isAttach = false; + } + attachBtn.setEnabled(true); + detachBtn.setEnabled(false); + + clearPanel(); + } + }); + + + // 卡操作 + cardOperateBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + CardManegerDialog dialog = new CardManegerDialog(); + dialog.setVisible(true); + } + }); + } + + private void setEnable(boolean bln) { + chnComboBox.setEnabled(bln); + attachBtn.setEnabled(bln); + cardOperateBtn.setEnabled(bln); + } + + private void clearPanel() { + personPaintPanel.setOpaque(true); + personPaintPanel.repaint(); + + timeTextField.setText(""); + openStatusTextField.setText(""); + openMethodTextField.setText(""); + cardNameTextField.setText(""); + cardNoTextField.setText(""); + userIdTextField.setText(""); + } + + private class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { + private BufferedImage gateBufferedImage = null; public int invoke(LLong lAnalyzerHandle, int dwAlarmType, - Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, - Pointer dwUser, int nSequence, Pointer reserved) - { + Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, + Pointer dwUser, int nSequence, Pointer reserved) { if (lAnalyzerHandle.longValue() == 0 || pAlarmInfo == null) { return -1; } - File path = new File("./GateSnapPicture/"); + File path = new File("./GateSnapPicture/"); if (!path.exists()) { path.mkdir(); } ///< 门禁事件 - if(dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) { - DEV_EVENT_ACCESS_CTL_INFO msg = new DEV_EVENT_ACCESS_CTL_INFO(); + if (dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) { + DEV_EVENT_ACCESS_CTL_INFO msg = new DEV_EVENT_ACCESS_CTL_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); // 保存图片,获取图片缓存 - String snapPicPath = path + "\\" + System.currentTimeMillis() + "GateSnapPicture.jpg"; // 保存图片地址 - byte[] buffer = pBuffer.getByteArray(0, dwBufSize); - ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer); - - try { - gateBufferedImage = ImageIO.read(byteArrInputGlobal); - if(gateBufferedImage != null) { - ImageIO.write(gateBufferedImage, "jpg", new File(snapPicPath)); - } - } catch (IOException e2) { - e2.printStackTrace(); - } - - // 图片以及门禁信息界面显示 - EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); - if (eventQueue != null) { - eventQueue.postEvent( new AccessEvent(target, - gateBufferedImage, - msg)); - } - } - - return 0; + String snapPicPath = path + "\\" + System.currentTimeMillis() + "GateSnapPicture.jpg"; // 保存图片地址 + byte[] buffer = pBuffer.getByteArray(0, dwBufSize); + ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer); + + try { + gateBufferedImage = ImageIO.read(byteArrInputGlobal); + if (gateBufferedImage != null) { + ImageIO.write(gateBufferedImage, "jpg", new File(snapPicPath)); + } + } catch (IOException e2) { + e2.printStackTrace(); + } + + // 图片以及门禁信息界面显示 + EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); + if (eventQueue != null) { + eventQueue.postEvent(new AccessEvent(target, + gateBufferedImage, + msg)); + } + } + + return 0; } - } - - class AccessEvent extends AWTEvent { - /** - * - */ - private static final long serialVersionUID = 1L; - public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1; - - private BufferedImage gateBufferedImage = null; - private DEV_EVENT_ACCESS_CTL_INFO msg = null; - - public AccessEvent(Object target, - BufferedImage gateBufferedImage, - DEV_EVENT_ACCESS_CTL_INFO msg) { - super(target, EVENT_ID); - this.gateBufferedImage = gateBufferedImage; - this.msg = msg; - } - - public BufferedImage getGateBufferedImage() { - return gateBufferedImage; - } - - public DEV_EVENT_ACCESS_CTL_INFO getAccessInfo() { - return msg; - } - } - - @Override + } + + class AccessEvent extends AWTEvent { + /** + * + */ + private static final long serialVersionUID = 1L; + public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1; + + private BufferedImage gateBufferedImage = null; + private DEV_EVENT_ACCESS_CTL_INFO msg = null; + + public AccessEvent(Object target, + BufferedImage gateBufferedImage, + DEV_EVENT_ACCESS_CTL_INFO msg) { + super(target, EVENT_ID); + this.gateBufferedImage = gateBufferedImage; + this.msg = msg; + } + + public BufferedImage getGateBufferedImage() { + return gateBufferedImage; + } + + public DEV_EVENT_ACCESS_CTL_INFO getAccessInfo() { + return msg; + } + } + + @Override protected void processEvent(AWTEvent event) { - if (event instanceof AccessEvent) { // 门禁事件处理 - AccessEvent ev = (AccessEvent) event; + if (event instanceof AccessEvent) { // 门禁事件处理 + AccessEvent ev = (AccessEvent) event; - BufferedImage gateBufferedImage = ev.getGateBufferedImage(); - DEV_EVENT_ACCESS_CTL_INFO msg = ev.getAccessInfo(); + BufferedImage gateBufferedImage = ev.getGateBufferedImage(); + DEV_EVENT_ACCESS_CTL_INFO msg = ev.getAccessInfo(); - if(!isAttach) { - return; + if (!isAttach) { + return; } - // 图片显示 - if(gateBufferedImage != null) { - personPaintPanel.setImage(gateBufferedImage); - personPaintPanel.setOpaque(false); - personPaintPanel.repaint(); - } else { - personPaintPanel.setOpaque(true); - personPaintPanel.repaint(); - } - - // 时间 - if(msg.UTC == null || msg.UTC.toString().isEmpty()) { - timeTextField.setText(""); - } else { - timeTextField.setText(msg.UTC.toString()); - } - - // 开门状态 - if(msg.bStatus == 1) { - openStatusTextField.setText(Res.string().getSucceed()); - } else { - openStatusTextField.setText(Res.string().getFailed()); - } - - // 开门方式 - openMethodTextField.setText(Res.string().getOpenMethods(msg.emOpenMethod)); - - // 卡名 - try { - cardNameTextField.setText(new String(msg.szCardName, "GBK").trim()); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 卡号 - cardNoTextField.setText(new String(msg.szCardNo).trim()); - - // 用户ID - userIdTextField.setText(new String(msg.szUserID).trim()); + // 图片显示 + if (gateBufferedImage != null) { + personPaintPanel.setImage(gateBufferedImage); + personPaintPanel.setOpaque(false); + personPaintPanel.repaint(); + } else { + personPaintPanel.setOpaque(true); + personPaintPanel.repaint(); + } + + // 时间 + if (msg.UTC == null || msg.UTC.toString().isEmpty()) { + timeTextField.setText(""); + } else { + timeTextField.setText(msg.UTC.toString()); + } + + // 开门状态 + if (msg.bStatus == 1) { + openStatusTextField.setText(Res.string().getSucceed()); + } else { + openStatusTextField.setText(Res.string().getFailed()); + } + + // 开门方式 + openMethodTextField.setText(Res.string().getOpenMethods(msg.emOpenMethod)); + + // 卡名 + try { + cardNameTextField.setText(new String(msg.szCardName, "GBK").trim()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 卡号 + cardNoTextField.setText(new String(msg.szCardNo).trim()); + + // 用户ID + userIdTextField.setText(new String(msg.szUserID).trim()); } else { super.processEvent(event); } } - /* - * 登录控件 - */ - private LoginPanel loginPanel; + /* + * 登录控件 + */ + private LoginPanel loginPanel; private JComboBox chnComboBox; private JButton attachBtn; @@ -555,12 +554,12 @@ class GateFrame extends JFrame { } public class Gate { - public static void main(String[] args) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - GateFrame demo = new GateFrame(); - demo.setVisible(true); - } - }); - } + public static void main(String[] args) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + GateFrame demo = new GateFrame(); + demo.setVisible(true); + } + }); + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/Gate/ModifyCardDialog.java b/cloud/dahua/src/main/java/com/example/dahua/Gate/ModifyCardDialog.java index c4531a2..d58275d 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/Gate/ModifyCardDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/Gate/ModifyCardDialog.java @@ -27,307 +27,307 @@ import com.example.dahua.module.GateModule; import com.sun.jna.Memory; -public class ModifyCardDialog extends JDialog{ - - private static final long serialVersionUID = 1L; - - private Memory memory = null; - - private Vector vector = null; - - private String picPath = ""; - - public ModifyCardDialog(Vector v){ - setTitle(Res.string().getModify() + Res.string().getCardInfo()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(520, 390); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - CardInfoPanel cardInfoPanel = new CardInfoPanel(); - ImagePanel imagePanel = new ImagePanel(); - +public class ModifyCardDialog extends JDialog { + + private static final long serialVersionUID = 1L; + + private Memory memory = null; + + private Vector vector = null; + + private String picPath = ""; + + public ModifyCardDialog(Vector v) { + setTitle(Res.string().getModify() + Res.string().getCardInfo()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(520, 390); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + CardInfoPanel cardInfoPanel = new CardInfoPanel(); + ImagePanel imagePanel = new ImagePanel(); + add(cardInfoPanel, BorderLayout.CENTER); add(imagePanel, BorderLayout.EAST); - + this.vector = v; showCardInfo(); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e){ - clear(); - dispose(); - } - }); - } - - /** - * 卡信息 - */ - private class CardInfoPanel extends JPanel { - - private static final long serialVersionUID = 1L; - - public CardInfoPanel() { - BorderEx.set(this, Res.string().getCardInfo(), 4); - - JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER); - JLabel userIdLabel = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER); - JLabel cardNameLabel = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER); - JLabel cardPasswdLabel = new JLabel(Res.string().getCardPassword() + ":", JLabel.CENTER); - JLabel cardStatusLabel = new JLabel(Res.string().getCardStatus() + ":", JLabel.CENTER); - JLabel cardTypeLabel = new JLabel(Res.string().getCardType() + ":", JLabel.CENTER); - JLabel useTimesLabel = new JLabel(Res.string().getUseTimes() + ":", JLabel.CENTER); - JLabel validPeriodLabel = new JLabel(Res.string().getValidPeriod() + ":", JLabel.CENTER); - - Dimension dimension = new Dimension(); - dimension.width = 85; - dimension.height = 20; - cardNoLabel.setPreferredSize(dimension); - userIdLabel.setPreferredSize(dimension); - cardNameLabel.setPreferredSize(dimension); - cardPasswdLabel.setPreferredSize(dimension); - cardStatusLabel.setPreferredSize(dimension); - cardTypeLabel.setPreferredSize(dimension); - useTimesLabel.setPreferredSize(dimension); - validPeriodLabel.setPreferredSize(dimension); - - cardNoTextField = new JTextField(); - userIdTextField = new JTextField(); - cardNameTextField = new JTextField(); - cardPasswdField = new JPasswordField(); - cardStatusComboBox = new JComboBox(Res.string().getCardStatusList()); - cardTypeComboBox = new JComboBox(Res.string().getCardTypeList()); - useTimesTextField = new JTextField(); - firstEnterCheckBox = new JCheckBox(Res.string().getIsFirstEnter()); - enableCheckBox = new JCheckBox(Res.string().getEnable()); - startTimeBtn = new DateChooserJButton(); - endTimeBtn = new DateChooserJButton(); - - cardNoTextField.setPreferredSize(new Dimension(145, 20)); - userIdTextField.setPreferredSize(new Dimension(145, 20)); - cardNameTextField.setPreferredSize(new Dimension(145, 20)); - cardPasswdField.setPreferredSize(new Dimension(145, 20)); - useTimesTextField.setPreferredSize(new Dimension(145, 20)); - cardStatusComboBox.setPreferredSize(new Dimension(145, 20)); - cardTypeComboBox.setPreferredSize(new Dimension(145, 20)); - startTimeBtn.setPreferredSize(new Dimension(145, 20)); - endTimeBtn.setPreferredSize(new Dimension(145, 20)); - firstEnterCheckBox.setPreferredSize(new Dimension(100, 20)); - enableCheckBox.setPreferredSize(new Dimension(70, 20)); - - JLabel nullLabel1 = new JLabel(); - JLabel nullLabel2 = new JLabel(); - JLabel nullLabel3 = new JLabel(); - nullLabel1.setPreferredSize(new Dimension(5, 20)); - nullLabel2.setPreferredSize(new Dimension(30, 20)); - nullLabel3.setPreferredSize(new Dimension(85, 20)); - - cardNoTextField.setEditable(false); - userIdTextField.setEditable(false); - - modifyBtn = new JButton(Res.string().getModify()); - cancelBtn = new JButton(Res.string().getCancel()); - JLabel nullLabel4 = new JLabel(); - nullLabel4.setPreferredSize(new Dimension(250, 20)); - modifyBtn.setPreferredSize(new Dimension(110, 20)); - cancelBtn.setPreferredSize(new Dimension(110, 20)); - - add(cardNoLabel); - add(cardNoTextField); - add(userIdLabel); - add(userIdTextField); - - add(cardNameLabel); - add(cardNameTextField); - add(cardPasswdLabel); - add(cardPasswdField); - - add(cardStatusLabel); - add(cardStatusComboBox); - add(cardTypeLabel); - add(cardTypeComboBox); - - add(useTimesLabel); - add(useTimesTextField); - add(nullLabel1); - add(firstEnterCheckBox); - add(nullLabel2); - add(enableCheckBox); - - add(validPeriodLabel); - add(startTimeBtn); - add(nullLabel3); - add(endTimeBtn); - - add(nullLabel4); - add(modifyBtn); - add(cancelBtn); - - // 修改 - modifyBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - try { - if (cardNameTextField.getText().getBytes("UTF-8").length > 63) { - JOptionPane.showMessageDialog(null, Res.string().getCardNameExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if (new String(cardPasswdField.getPassword()).getBytes("UTF-8").length > 63) { - JOptionPane.showMessageDialog(null, Res.string().getCardPasswdExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - } catch (Exception e1) { - e1.printStackTrace(); - } - - int useTimes = 0; - if(useTimesTextField.getText().isEmpty()) { - useTimes = 0; - } else { - useTimes = Integer.parseInt(useTimesTextField.getText()); - } - - if(GateModule.modifyCard(Integer.parseInt(vector.get(3).toString()), cardNoTextField.getText(), - userIdTextField.getText(), cardNameTextField.getText(), - new String(cardPasswdField.getPassword()), - Res.string().getCardStatusInt(cardStatusComboBox.getSelectedIndex()), - Res.string().getCardTypeInt(cardTypeComboBox.getSelectedIndex()), - useTimes, firstEnterCheckBox.isSelected() ? 1:0, - enableCheckBox.isSelected() ? 1:0, startTimeBtn.getText(), endTimeBtn.getText())) { - if(memory == null) { - JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCard(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - dispose(); - } else { - if(GateModule.modifyFaceInfo(userIdTextField.getText(), memory)) { - JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCardAndPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - dispose(); - } else { - JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCardButFailedModifyPerson() + " : " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } - } else { - JOptionPane.showMessageDialog(null, Res.string().getFailedModifyCard() + " : " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } - }); - - // 取消 - cancelBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - clear(); - dispose(); - } - }); - } - } - - /** - * 选择图片 - */ - private class ImagePanel extends JPanel { - - private static final long serialVersionUID = 1L; - - public ImagePanel() { - BorderEx.set(this, Res.string().getPersonPicture(), 4); - Dimension dimension = new Dimension(); - dimension.width = 250; - setPreferredSize(dimension); - setLayout(new BorderLayout()); - - addImagePanel = new PaintPanel(); // 添加的人员信息图片显示 - selectImageBtn = new JButton(Res.string().getSelectPicture()); - add(addImagePanel, BorderLayout.CENTER); - add(selectImageBtn, BorderLayout.SOUTH); - - // 选择图片,获取图片的信息 - selectImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - // 选择图片,获取图片路径,并在界面显示 - picPath = ToolKits.openPictureFile(addImagePanel); - - if(!picPath.isEmpty()) { - memory = ToolKits.readPictureFile(picPath); - } - } - }); - } - } - - /** - * 界面显示要修改的卡信息 - */ - private void showCardInfo() { - // 卡号 - cardNoTextField.setText(vector.get(1).toString()); - - // 卡名 - cardNameTextField.setText(vector.get(2).toString()); - - // 用户ID - userIdTextField.setText(vector.get(4).toString()); - - // 卡密码 - cardPasswdField.setText(vector.get(5).toString()); - - // 卡状态 - cardStatusComboBox.setSelectedIndex(Res.string().getCardStatusChomBoxIndex(vector.get(6).toString())); - - // 卡类型 - cardTypeComboBox.setSelectedIndex(Res.string().getCardTypeChomBoxIndex(vector.get(7).toString())); - - // 使用次数 - useTimesTextField.setText(vector.get(8).toString()); - - // 是否首卡 - if(vector.get(9).toString().equals(Res.string().getFirstEnter())) { - firstEnterCheckBox.setSelected(true); - } else { - firstEnterCheckBox.setSelected(false); - } - - // 是否有效 - if(vector.get(10).toString().equals(Res.string().getValid())) { - enableCheckBox.setSelected(true); - } else { - enableCheckBox.setSelected(false); - } - - // 有效开始时间 - startTimeBtn.setText(vector.get(11).toString()); - - // 有效结束时间 - endTimeBtn.setText(vector.get(12).toString()); - } - - private void clear() { - memory = null; - vector = null; - picPath = ""; - } - - private PaintPanel addImagePanel; - private JButton selectImageBtn; - - private JTextField cardNoTextField; - private JTextField userIdTextField; - private JTextField cardNameTextField; - private JPasswordField cardPasswdField; - private JComboBox cardStatusComboBox; - private JComboBox cardTypeComboBox; - private JTextField useTimesTextField; - private JCheckBox firstEnterCheckBox; - private JCheckBox enableCheckBox; - private DateChooserJButton startTimeBtn; - private DateChooserJButton endTimeBtn; - - private JButton modifyBtn; - private JButton cancelBtn; + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + clear(); + dispose(); + } + }); + } + + /** + * 卡信息 + */ + private class CardInfoPanel extends JPanel { + + private static final long serialVersionUID = 1L; + + public CardInfoPanel() { + BorderEx.set(this, Res.string().getCardInfo(), 4); + + JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER); + JLabel userIdLabel = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER); + JLabel cardNameLabel = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER); + JLabel cardPasswdLabel = new JLabel(Res.string().getCardPassword() + ":", JLabel.CENTER); + JLabel cardStatusLabel = new JLabel(Res.string().getCardStatus() + ":", JLabel.CENTER); + JLabel cardTypeLabel = new JLabel(Res.string().getCardType() + ":", JLabel.CENTER); + JLabel useTimesLabel = new JLabel(Res.string().getUseTimes() + ":", JLabel.CENTER); + JLabel validPeriodLabel = new JLabel(Res.string().getValidPeriod() + ":", JLabel.CENTER); + + Dimension dimension = new Dimension(); + dimension.width = 85; + dimension.height = 20; + cardNoLabel.setPreferredSize(dimension); + userIdLabel.setPreferredSize(dimension); + cardNameLabel.setPreferredSize(dimension); + cardPasswdLabel.setPreferredSize(dimension); + cardStatusLabel.setPreferredSize(dimension); + cardTypeLabel.setPreferredSize(dimension); + useTimesLabel.setPreferredSize(dimension); + validPeriodLabel.setPreferredSize(dimension); + + cardNoTextField = new JTextField(); + userIdTextField = new JTextField(); + cardNameTextField = new JTextField(); + cardPasswdField = new JPasswordField(); + cardStatusComboBox = new JComboBox(Res.string().getCardStatusList()); + cardTypeComboBox = new JComboBox(Res.string().getCardTypeList()); + useTimesTextField = new JTextField(); + firstEnterCheckBox = new JCheckBox(Res.string().getIsFirstEnter()); + enableCheckBox = new JCheckBox(Res.string().getEnable()); + startTimeBtn = new DateChooserJButton(); + endTimeBtn = new DateChooserJButton(); + + cardNoTextField.setPreferredSize(new Dimension(145, 20)); + userIdTextField.setPreferredSize(new Dimension(145, 20)); + cardNameTextField.setPreferredSize(new Dimension(145, 20)); + cardPasswdField.setPreferredSize(new Dimension(145, 20)); + useTimesTextField.setPreferredSize(new Dimension(145, 20)); + cardStatusComboBox.setPreferredSize(new Dimension(145, 20)); + cardTypeComboBox.setPreferredSize(new Dimension(145, 20)); + startTimeBtn.setPreferredSize(new Dimension(145, 20)); + endTimeBtn.setPreferredSize(new Dimension(145, 20)); + firstEnterCheckBox.setPreferredSize(new Dimension(100, 20)); + enableCheckBox.setPreferredSize(new Dimension(70, 20)); + + JLabel nullLabel1 = new JLabel(); + JLabel nullLabel2 = new JLabel(); + JLabel nullLabel3 = new JLabel(); + nullLabel1.setPreferredSize(new Dimension(5, 20)); + nullLabel2.setPreferredSize(new Dimension(30, 20)); + nullLabel3.setPreferredSize(new Dimension(85, 20)); + + cardNoTextField.setEditable(false); + userIdTextField.setEditable(false); + + modifyBtn = new JButton(Res.string().getModify()); + cancelBtn = new JButton(Res.string().getCancel()); + JLabel nullLabel4 = new JLabel(); + nullLabel4.setPreferredSize(new Dimension(250, 20)); + modifyBtn.setPreferredSize(new Dimension(110, 20)); + cancelBtn.setPreferredSize(new Dimension(110, 20)); + + add(cardNoLabel); + add(cardNoTextField); + add(userIdLabel); + add(userIdTextField); + + add(cardNameLabel); + add(cardNameTextField); + add(cardPasswdLabel); + add(cardPasswdField); + + add(cardStatusLabel); + add(cardStatusComboBox); + add(cardTypeLabel); + add(cardTypeComboBox); + + add(useTimesLabel); + add(useTimesTextField); + add(nullLabel1); + add(firstEnterCheckBox); + add(nullLabel2); + add(enableCheckBox); + + add(validPeriodLabel); + add(startTimeBtn); + add(nullLabel3); + add(endTimeBtn); + + add(nullLabel4); + add(modifyBtn); + add(cancelBtn); + + // 修改 + modifyBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + try { + if (cardNameTextField.getText().getBytes("UTF-8").length > 63) { + JOptionPane.showMessageDialog(null, Res.string().getCardNameExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (new String(cardPasswdField.getPassword()).getBytes("UTF-8").length > 63) { + JOptionPane.showMessageDialog(null, Res.string().getCardPasswdExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + } catch (Exception e1) { + e1.printStackTrace(); + } + + int useTimes = 0; + if (useTimesTextField.getText().isEmpty()) { + useTimes = 0; + } else { + useTimes = Integer.parseInt(useTimesTextField.getText()); + } + + if (GateModule.modifyCard(Integer.parseInt(vector.get(3).toString()), cardNoTextField.getText(), + userIdTextField.getText(), cardNameTextField.getText(), + new String(cardPasswdField.getPassword()), + Res.string().getCardStatusInt(cardStatusComboBox.getSelectedIndex()), + Res.string().getCardTypeInt(cardTypeComboBox.getSelectedIndex()), + useTimes, firstEnterCheckBox.isSelected() ? 1 : 0, + enableCheckBox.isSelected() ? 1 : 0, startTimeBtn.getText(), endTimeBtn.getText())) { + if (memory == null) { + JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCard(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + dispose(); + } else { + if (GateModule.modifyFaceInfo(userIdTextField.getText(), memory)) { + JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCardAndPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + dispose(); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCardButFailedModifyPerson() + " : " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } + } else { + JOptionPane.showMessageDialog(null, Res.string().getFailedModifyCard() + " : " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } + }); + + // 取消 + cancelBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + clear(); + dispose(); + } + }); + } + } + + /** + * 选择图片 + */ + private class ImagePanel extends JPanel { + + private static final long serialVersionUID = 1L; + + public ImagePanel() { + BorderEx.set(this, Res.string().getPersonPicture(), 4); + Dimension dimension = new Dimension(); + dimension.width = 250; + setPreferredSize(dimension); + setLayout(new BorderLayout()); + + addImagePanel = new PaintPanel(); // 添加的人员信息图片显示 + selectImageBtn = new JButton(Res.string().getSelectPicture()); + add(addImagePanel, BorderLayout.CENTER); + add(selectImageBtn, BorderLayout.SOUTH); + + // 选择图片,获取图片的信息 + selectImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + // 选择图片,获取图片路径,并在界面显示 + picPath = ToolKits.openPictureFile(addImagePanel); + + if (!picPath.isEmpty()) { + memory = ToolKits.readPictureFile(picPath); + } + } + }); + } + } + + /** + * 界面显示要修改的卡信息 + */ + private void showCardInfo() { + // 卡号 + cardNoTextField.setText(vector.get(1).toString()); + + // 卡名 + cardNameTextField.setText(vector.get(2).toString()); + + // 用户ID + userIdTextField.setText(vector.get(4).toString()); + + // 卡密码 + cardPasswdField.setText(vector.get(5).toString()); + + // 卡状态 + cardStatusComboBox.setSelectedIndex(Res.string().getCardStatusChomBoxIndex(vector.get(6).toString())); + + // 卡类型 + cardTypeComboBox.setSelectedIndex(Res.string().getCardTypeChomBoxIndex(vector.get(7).toString())); + + // 使用次数 + useTimesTextField.setText(vector.get(8).toString()); + + // 是否首卡 + if (vector.get(9).toString().equals(Res.string().getFirstEnter())) { + firstEnterCheckBox.setSelected(true); + } else { + firstEnterCheckBox.setSelected(false); + } + + // 是否有效 + if (vector.get(10).toString().equals(Res.string().getValid())) { + enableCheckBox.setSelected(true); + } else { + enableCheckBox.setSelected(false); + } + + // 有效开始时间 + startTimeBtn.setText(vector.get(11).toString()); + + // 有效结束时间 + endTimeBtn.setText(vector.get(12).toString()); + } + + private void clear() { + memory = null; + vector = null; + picPath = ""; + } + + private PaintPanel addImagePanel; + private JButton selectImageBtn; + + private JTextField cardNoTextField; + private JTextField userIdTextField; + private JTextField cardNameTextField; + private JPasswordField cardPasswdField; + private JComboBox cardStatusComboBox; + private JComboBox cardTypeComboBox; + private JTextField useTimesTextField; + private JCheckBox firstEnterCheckBox; + private JCheckBox enableCheckBox; + private DateChooserJButton startTimeBtn; + private DateChooserJButton endTimeBtn; + + private JButton modifyBtn; + private JButton cancelBtn; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java index 4a2b88c..a2a2360 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java @@ -234,19 +234,19 @@ public class MyTask implements ApplicationRunner { public synchronized void reloadPic() { isHasNewDevice = false; - if (null!=deviceInfoBeans&&deviceInfoBeans.size()>0){ - for (DeviceInfoBean dev : - deviceInfoBeans) { + if (null != deviceInfoBeans && deviceInfoBeans.size() > 0) { + for (DeviceInfoBean dev : + deviceInfoBeans) { // FileUtils.getInstance().writeLogs(dev.getDevcieId() + "------" + lLongMap.get(dev.getDevcieId()), FileUtils.device_login); - if (lLongMap.get(dev.getDevcieId()).intValue() > 0){ - NetSDKLib.LLong lLong = GateModule.realLoadPic(0, analyzerCallback, lLongMap.get(dev.getDevcieId())); - if (lLong.intValue()!=-1){ - deviceInfoBeans.remove(dev); + if (lLongMap.get(dev.getDevcieId()).intValue() > 0) { + NetSDKLib.LLong lLong = GateModule.realLoadPic(0, analyzerCallback, lLongMap.get(dev.getDevcieId())); + if (lLong.intValue() != -1) { + deviceInfoBeans.remove(dev); + } } - } - } - } + } + } } @@ -289,11 +289,11 @@ public class MyTask implements ApplicationRunner { if (gateBufferedImage != null) { ImageIO.write(gateBufferedImage, "png", new File(snapPicPath)); } - card=cardNo(card); + card = cardNo(card); CardBean cardBean = userDao.getCards(card);//根据卡号获取身份信息 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); snapPicPath = snapPicPath.replaceFirst("\\.", "http://121.40.109.21:8991"); - snapPicPath = snapPicPath.replace("FaceRecoder","image"); + snapPicPath = snapPicPath.replace("FaceRecoder", "image"); if (cardBean.getType() == 0) {//老师 TeacherBean teacherBean = userDao.getTeacherWithId(cardBean.getUser_id()); sendRecordDao.addFaceRecoder("", teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card); diff --git a/cloud/dahua/src/main/java/com/example/dahua/Test.java b/cloud/dahua/src/main/java/com/example/dahua/Test.java index 2385e7d..cded388 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/Test.java +++ b/cloud/dahua/src/main/java/com/example/dahua/Test.java @@ -1,10 +1,12 @@ package com.example.dahua; +import net.sourceforge.pinyin4j.PinyinHelper; import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Async; import org.springframework.web.client.RestTemplate; +import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; @@ -17,8 +19,50 @@ public class Test { Test test = new Test(); + File file = new File("C:\\Users\\Administrator\\Documents\\专业.txt"); + + try { + BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); + + String content = null; + + while ((content = bufferedReader.readLine()) != null) { + + System.out.println(test.getPinYinHeadChar(content)); + + } + + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // 返回中文的首字母 + public String getPinYinHeadChar(String str) { + String temp = ""; + String demo = ""; + String convert = ""; + for (int j = 0; j < str.length(); j++) { + char word = str.charAt(j); + String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word); + if (pinyinArray != null) { + convert += pinyinArray[0].charAt(0); + } else { + convert += word; + } + } + for (int i = 0; i < convert.length(); i++) {//convert目前为小写首字母,下面是将小写首字母转化为大写 + if (convert.charAt(i) >= 'a' && convert.charAt(i) <= 'z') { + temp = convert.substring(i, i + 1).toUpperCase(); + demo += temp; + } + } + return demo; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/TestFrame.java b/cloud/dahua/src/main/java/com/example/dahua/TestFrame.java index 4f10b59..c17bb40 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/TestFrame.java +++ b/cloud/dahua/src/main/java/com/example/dahua/TestFrame.java @@ -5,9 +5,9 @@ import java.awt.*; public class TestFrame extends JFrame { - public TestFrame(){ + public TestFrame() { setTitle("test"); - setSize(400,400); + setSize(400, 400); // setLayout(new FlowLayout()); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/alarmListen/AlarmListenModule.java b/cloud/dahua/src/main/java/com/example/dahua/alarmListen/AlarmListenModule.java index 587b273..98e343d 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/alarmListen/AlarmListenModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/alarmListen/AlarmListenModule.java @@ -16,59 +16,59 @@ import com.example.dahua.module.LoginModule; */ public class AlarmListenModule { - private static boolean bListening = false; + private static boolean bListening = false; - - /** - * \if ENGLISH_LANG - * start alarm listen - * \else - * 向设备订阅报警 - * \endif - */ - public static boolean startListen(NetSDKLib.fMessCallBack cbMessage, NetSDKLib.LLong lLong) { - - if (bListening) { + + /** + * \if ENGLISH_LANG + * start alarm listen + * \else + * 向设备订阅报警 + * \endif + */ + public static boolean startListen(NetSDKLib.fMessCallBack cbMessage, NetSDKLib.LLong lLong) { + + if (bListening) { // System.out.println("Had Subscribe Alarm."); - return true; - } - - LoginModule.netsdk.CLIENT_SetDVRMessCallBack(cbMessage, null); // set alarm listen callback - - if (!LoginModule.netsdk.CLIENT_StartListenEx(lLong)) { - System.err.printf("CLIENT_StartListenEx Failed!" + ToolKits.getErrorCodePrint()); - return false; - } else { - System.out.println("CLIENT_StartListenEx success."); - } - - bListening = true; - return true; - } - - /** - * \if ENGLISH_LANG - * stop alarm listen - * \else - * 停止订阅报警 - * \endif - */ - public static boolean stopListen() { - - if (!bListening) { - return true; - } - - if (!LoginModule.netsdk.CLIENT_StopListen(LoginModule.m_hLoginHandle)) { - System.err.printf("CLIENT_StopListen Failed!" + ToolKits.getErrorCodePrint()); - return false; - } else { - System.out.println("CLIENT_StopListen success."); - } - - bListening = false; - return true; - } + return true; + } + + LoginModule.netsdk.CLIENT_SetDVRMessCallBack(cbMessage, null); // set alarm listen callback + + if (!LoginModule.netsdk.CLIENT_StartListenEx(lLong)) { + System.err.printf("CLIENT_StartListenEx Failed!" + ToolKits.getErrorCodePrint()); + return false; + } else { + System.out.println("CLIENT_StartListenEx success."); + } + + bListening = true; + return true; + } + + /** + * \if ENGLISH_LANG + * stop alarm listen + * \else + * 停止订阅报警 + * \endif + */ + public static boolean stopListen() { + + if (!bListening) { + return true; + } + + if (!LoginModule.netsdk.CLIENT_StopListen(LoginModule.m_hLoginHandle)) { + System.err.printf("CLIENT_StopListen Failed!" + ToolKits.getErrorCodePrint()); + return false; + } else { + System.out.println("CLIENT_StopListen success."); + } + + bListening = false; + return true; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/async/ImageUtils.java b/cloud/dahua/src/main/java/com/example/dahua/async/ImageUtils.java index 2028a3d..6658c5d 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/async/ImageUtils.java +++ b/cloud/dahua/src/main/java/com/example/dahua/async/ImageUtils.java @@ -15,7 +15,7 @@ import java.util.Iterator; public class ImageUtils { - /* *//** + /* *//** * 获取图片正确显示需要旋转的角度(顺时针) * @return *//* @@ -94,9 +94,10 @@ public class ImageUtils { /** * 旋转照片 + * * @return */ - public static String rotatePhonePhoto(String fullPath, int angel){ + public static String rotatePhonePhoto(String fullPath, int angel) { BufferedImage src; try { @@ -104,17 +105,17 @@ public class ImageUtils { int src_width = src.getWidth(null); int src_height = src.getHeight(null); - int swidth=src_width; - int sheight=src_height; + int swidth = src_width; + int sheight = src_height; - if(angel==90||angel==270){ + if (angel == 90 || angel == 270) { swidth = src_height; - sheight= src_width; + sheight = src_width; } - Rectangle rect_des = new Rectangle(new Dimension(swidth,sheight)); + Rectangle rect_des = new Rectangle(new Dimension(swidth, sheight)); - BufferedImage res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB); + BufferedImage res = new BufferedImage(rect_des.width, rect_des.height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = res.createGraphics(); g2.translate((rect_des.width - src_width) / 2, diff --git a/cloud/dahua/src/main/java/com/example/dahua/async/MyScheduledTask.java b/cloud/dahua/src/main/java/com/example/dahua/async/MyScheduledTask.java index fd38d91..cb7f270 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/async/MyScheduledTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/async/MyScheduledTask.java @@ -63,7 +63,7 @@ public class MyScheduledTask { private String imgFilPath = "C:\\EhomePicServer";//抓拍图片路径 -// @Scheduled(fixedRate = 5000) + // @Scheduled(fixedRate = 5000) private void sendErrorInfo() throws InterruptedException { System.out.println("---------------------------sendErrorInfo:"); // System.out.println("定时任务执行中...."); @@ -184,12 +184,12 @@ public class MyScheduledTask { if (!isSendMQ) { isSendMQ = true; String fileName = simpleDateFormat.format(new Date()); -// String filePath = "D:\\wg_log\\info\\kaoInfo\\" + fileName + ".log"; - String filePath = "C:\\Users\\Administrator\\Desktop\\2020-04-30 08.log"; + String filePath = "D:\\wg_log\\info\\kaoInfo\\" + fileName + ".log"; +// String filePath = "C:\\Users\\Administrator\\Desktop\\2020-04-30 08.log"; if (!readLineMap.containsKey(fileName)) readLineNum = -1;//更新文件后从头开始 File file = new File(filePath); try { - if (!file.exists()){ + if (!file.exists()) { System.out.println("文件不存在:" + filePath); return; } @@ -201,7 +201,7 @@ public class MyScheduledTask { int indexLineNum = 0;//当前文件的行 while ((content = bufferedReader.readLine()) != null) { indexLineNum++; - System.out.println("indexLineNum:"+indexLineNum+" ----------readLineNum:"+readLineNum); +// System.out.println("indexLineNum:"+indexLineNum+" ----------readLineNum:"+readLineNum); if (indexLineNum >= readLineNum) { readLineNum++; sendMQMess(content); @@ -238,21 +238,40 @@ public class MyScheduledTask { private void sendMQMess(String content) { String cardNum = content.substring(content.indexOf("卡号") + 3, content.indexOf("卡号") + 11); - System.out.println("cardNum:" + cardNum); +// System.out.println("cardNum:" + cardNum); String inOrOut = content.substring(content.indexOf("方向:") + 3, content.indexOf("方向:") + 5).endsWith("进门") ? "0" : "1"; - System.out.println("inOrOut:" + inOrOut); + String qiandaoDevId = content.substring(content.indexOf("设备") + 3, content.indexOf("设备") + 12); + //获取寝室关联的场景id + String placeId = userDao.getPlaceIdWithKaoqinDevid(qiandaoDevId); - List clintIds = userDao.getClintIds(); - for (int i = 0; i < clintIds.size(); i++) { - String clintId = clintIds.get(i); +// System.out.println("qiandaoDevId:" + qiandaoDevId); +// System.out.println("placeId:" + placeId); - String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + clintId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; + if (null != placeId) { + //关联的显示看板设备 + List kanbanIds = userDao.getKanBanIdWithPlaceId(placeId); - mqttManager.sendMq(clintId, data); + for (int i = 0; i < kanbanIds.size(); i++) { + String kanbanId = kanbanIds.get(i); + String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + kanbanId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; + mqttManager.sendMqQD(kanbanId, data); + } + + } else { + +// String schoolId = userDao.getSchoolIdWidthCardNum(cardNum); + List clintIds = userDao.getClintIds("4"); + for (int i = 0; i < clintIds.size(); i++) { + String clintId = clintIds.get(i); + String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + clintId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; + mqttManager.sendMqQD(clintId, data); + } } + + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java b/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java index b8ebdbc..774ebca 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java @@ -42,7 +42,7 @@ public class SendUserInfoTask { @Autowired SendRecordDao sendRecordDao; -// @Async("taskExecutor") + // @Async("taskExecutor") public void doTaskOne(String file, List attendanceBeans, UserInfoBean userInfoBean, String schoolId, int failType, int userType) throws Exception { File studentFile = new File(file); String studentCode = studentFile.getName().split("\\.")[0]; @@ -70,7 +70,7 @@ public class SendUserInfoTask { sendUserInfoToDev(file, attendanceBeans, userInfoBean, userType + "", sendRecordBean); } -// @Async("taskExecutor") + // @Async("taskExecutor") public void doTaskSendUserInfos(String schoolId, String clint_type, int type, int failtype) { try { String filePathStudent = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\Student"; @@ -314,9 +314,9 @@ public class SendUserInfoTask { String cardNum = cardNo(student_num); if (bCardFlags != -1) {//修改卡信息 - GateModule.modifyCard(bCardFlags,cardNum,user_id,name,"123456",Res.string().getCardStatusInt(1),Res.string().getCardTypeInt(1), - 0,0,1,startTime,endTime,loginHandleLong); - userDao.updateRecordNo(user_id,bCardFlags,attendanceBean.getClint_id()); + GateModule.modifyCard(bCardFlags, cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), + 0, 0, 1, startTime, endTime, loginHandleLong); + userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id()); bFaceFalgs = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong); //卡号添加成功,但是人脸不成功的话,就需要新增人脸 if (!bFaceFalgs) @@ -366,9 +366,9 @@ public class SendUserInfoTask { // 添加卡信息和人脸失败 if (bCardFlags == -1 && !bFaceFalgs) { - FileUtils.getInstance().writeLogs("下发人脸和卡号失败:" + cardNum + " user_id: " + user_id+" loginHandleLong: "+loginHandleLong, FileUtils.sendUserErrTxt); + FileUtils.getInstance().writeLogs("下发人脸和卡号失败:" + cardNum + " user_id: " + user_id + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt); // System.out.println("添加卡信息和人脸失败"); - System.out.println("下发人脸和卡号失败" + "sendRecordBean:" + sendRecordBean.getDeviceID()+" ,"+sendRecordBean.getNum()+","+loginHandleLong+",bCardFlags:"+bCardFlags+"\r\n"); + System.out.println("下发人脸和卡号失败" + "sendRecordBean:" + sendRecordBean.getDeviceID() + " ," + sendRecordBean.getNum() + "," + loginHandleLong + ",bCardFlags:" + bCardFlags + "\r\n"); sendRecordBean.setFailContent("下发人脸和卡号失败"); sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 7);//更新下发失败状态 sendRecordBean.setFailType(8); @@ -379,7 +379,7 @@ public class SendUserInfoTask { if (bCardFlags != -1 && !bFaceFalgs) { FileUtils.getInstance().writeLogs("下发卡号成功,人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt); // System.out.println("添加卡信息成功,添加人脸失败"); - System.out.println("customerId:" + sendRecordBean.getCustomerid() + " deviceId:" + sendRecordBean.getDeviceID() + " failType:" + sendRecordBean.getFailType()+"\r\n"); + System.out.println("customerId:" + sendRecordBean.getCustomerid() + " deviceId:" + sendRecordBean.getDeviceID() + " failType:" + sendRecordBean.getFailType() + "\r\n"); sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 5);//更新下发失败状态 sendRecordBean.setFailContent("下发卡号成功,人脸失败:照片特征值提取失败"); sendRecordBean.setFailType(5); @@ -414,7 +414,7 @@ public class SendUserInfoTask { String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", sendRecordBean.getSchoolId(), sendRecordBean.getUserType() == 1 ? "Teacher" : "Student")); sendRecordDao.addFaceFail(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(), - sendRecordBean.getSchoolName(), imagePath , sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), 22); + sendRecordBean.getSchoolName(), imagePath, sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), 22); // } } @@ -499,7 +499,7 @@ public class SendUserInfoTask { // int bCardFlags = -1;//记录集编号,存在于设备的 int bCardFlags = userDao.getRecordNo(user_id, deviceId) == null ? -1 : Integer.parseInt(userDao.getRecordNo(user_id, deviceId)); System.out.println("bCardFlags:" + bCardFlags); - if (bCardFlags == -1)bCardFlags = 10; + if (bCardFlags == -1) bCardFlags = 10; if (bCardFlags != -1) { GateModule.deleteCard(bCardFlags, MyTask.lLongMap.get(deviceId)); } @@ -660,37 +660,36 @@ public class SendUserInfoTask { } -// @Async("taskExecutor") - public void testSMS(){ + // @Async("taskExecutor") + public void testSMS() { RestTemplate restTemplate = new RestTemplate(); String LoginName = "13095656162"; - String MessageContent ="你好,五一快乐"; + String MessageContent = "你好,五一快乐"; String MessageType = "2"; String Password = "yxt_123456"; String ScheduleTime = ""; String SerialNumber = ""; - String SpCode ="13095656162"; - String UserNumber=""; - String f= "1"; + String SpCode = "13095656162"; + String UserNumber = ""; + String f = "1"; long now = System.currentTimeMillis(); String time = new SimpleDateFormat("yyyy").format(new Date()); - int ran = new Random().nextInt(999)+1; - SerialNumber = now+time+ran; - if (SerialNumber.length()<20)SerialNumber=SerialNumber+"0"; - System.out.println("SerialNumber:"+SerialNumber); - UserNumber = "130"+(new Random().nextInt(100000000)+1); - if (UserNumber.length()<11)UserNumber = UserNumber+"0"; + int ran = new Random().nextInt(999) + 1; + SerialNumber = now + time + ran; + if (SerialNumber.length() < 20) SerialNumber = SerialNumber + "0"; + System.out.println("SerialNumber:" + SerialNumber); + UserNumber = "130" + (new Random().nextInt(100000000) + 1); + if (UserNumber.length() < 11) UserNumber = UserNumber + "0"; // SpCode = "130"+(new Random().nextInt(100000000)+1); ScheduleTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); - String url = String.format("http://121.40.109.21:8083/haikang/sms/sendMsg?LoginName=%s&MessageContent=%s" + - "&MessageType=%s&Password=%s&ScheduleTime=%s&SerialNumber=%s&SpCode=%s&UserNumber=%s&f=%s",LoginName, - MessageContent,MessageType,Password,ScheduleTime,SerialNumber,SpCode,UserNumber,f); + "&MessageType=%s&Password=%s&ScheduleTime=%s&SerialNumber=%s&SpCode=%s&UserNumber=%s&f=%s", LoginName, + MessageContent, MessageType, Password, ScheduleTime, SerialNumber, SpCode, UserNumber, f); - ResponseEntity responseEntity = restTemplate.getForEntity(url,String.class); - System.out.println("responseEntity:"+responseEntity.getBody()+"---url:"+url); + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + System.out.println("responseEntity:" + responseEntity.getBody() + "---url:" + url); } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/attendance/AddFingerPrintDialog.java b/cloud/dahua/src/main/java/com/example/dahua/attendance/AddFingerPrintDialog.java index d1ef2a7..ead1438 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/attendance/AddFingerPrintDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/attendance/AddFingerPrintDialog.java @@ -31,175 +31,175 @@ import com.sun.jna.Pointer; /** * 添加指纹信息 */ -public class AddFingerPrintDialog extends JDialog{ - - /** - * - */ - private static final long serialVersionUID = 1L; - private static final int CHANNEL_ID = 0; // 门禁序号 - private static final String READER_ID = "1"; // 读卡器ID - private static final long TIMER_DELAY = 30000; // 定时器超时时间 - - private String userID = null; - private byte []collectionData = null; - private Timer timer = new Timer(); // 指纹采集定时器 - private ReentrantLock lock = new ReentrantLock(); - - public AddFingerPrintDialog(String userId) { - - setTitle(Res.string().getAddFingerPrint()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(300, 180); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); - - //////////采集面板 ///////////////// - JPanel collectionPanel = new JPanel(); - BorderEx.set(collectionPanel, Res.string().getcFingerPrintCollection(), 4); - collectionPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 35, 25)); - collectionBtn = new JButton(Res.string().getStartCollection()); - collectionBtn.setPreferredSize(new Dimension(150, 20)); - promptLabel = new JLabel(); - promptLabel.setPreferredSize(new Dimension(150, 20)); - promptLabel.setHorizontalAlignment(JLabel.CENTER); - - collectionPanel.add(collectionBtn); - collectionPanel.add(promptLabel); - - //////////功能面板 ///////////////// - JPanel functionPanel = new JPanel(); - addBtn = new JButton(Res.string().getAdd()); - cancelBtn = new JButton(Res.string().getCancel()); - addBtn.setPreferredSize(new Dimension(100, 20)); - cancelBtn.setPreferredSize(new Dimension(100, 20)); - - functionPanel.add(addBtn); - functionPanel.add(cancelBtn); - - add(collectionPanel, BorderLayout.CENTER); - add(functionPanel, BorderLayout.SOUTH); - - addBtn.setEnabled(false); - userID = userId; - - cbMessage = new fCollectionDataCB(); - - collectionBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - collectionFinger(); - } - }); - - addBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (AttendanceModule.insertFingerByUserId(userID, collectionData)) { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getFailed() , Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - dispose(); - } - - }); - - cancelBtn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - AlarmListenModule.stopListen(); - timer.cancel(); - dispose(); - } - }); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - AlarmListenModule.stopListen(); - timer.cancel(); - dispose(); - } - }); - } - - public void collectionFinger() { - - if (!AlarmListenModule.startListen(cbMessage)) { - JOptionPane.showMessageDialog(null, Res.string().getCollectionFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - collectionData = null; - if (!AttendanceModule.collectionFinger(CHANNEL_ID, READER_ID)) { - JOptionPane.showMessageDialog(null, Res.string().getCollectionFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - promptLabel.setText(Res.string().getInCollection()); - collectionBtn.setEnabled(false); - } - }); - - timer.schedule(new TimerTask() { - public void run() { - lock.lock(); - if (collectionData == null) { - AlarmListenModule.stopListen(); - promptLabel.setText(Res.string().getCollectionFailed()); - collectionBtn.setEnabled(true); - } - lock.unlock(); - } - - }, TIMER_DELAY); - } - - /** - * 指纹采集监听回调 - **/ +public class AddFingerPrintDialog extends JDialog { + + /** + * + */ + private static final long serialVersionUID = 1L; + private static final int CHANNEL_ID = 0; // 门禁序号 + private static final String READER_ID = "1"; // 读卡器ID + private static final long TIMER_DELAY = 30000; // 定时器超时时间 + + private String userID = null; + private byte[] collectionData = null; + private Timer timer = new Timer(); // 指纹采集定时器 + private ReentrantLock lock = new ReentrantLock(); + + public AddFingerPrintDialog(String userId) { + + setTitle(Res.string().getAddFingerPrint()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(300, 180); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + + //////////采集面板 ///////////////// + JPanel collectionPanel = new JPanel(); + BorderEx.set(collectionPanel, Res.string().getcFingerPrintCollection(), 4); + collectionPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 35, 25)); + collectionBtn = new JButton(Res.string().getStartCollection()); + collectionBtn.setPreferredSize(new Dimension(150, 20)); + promptLabel = new JLabel(); + promptLabel.setPreferredSize(new Dimension(150, 20)); + promptLabel.setHorizontalAlignment(JLabel.CENTER); + + collectionPanel.add(collectionBtn); + collectionPanel.add(promptLabel); + + //////////功能面板 ///////////////// + JPanel functionPanel = new JPanel(); + addBtn = new JButton(Res.string().getAdd()); + cancelBtn = new JButton(Res.string().getCancel()); + addBtn.setPreferredSize(new Dimension(100, 20)); + cancelBtn.setPreferredSize(new Dimension(100, 20)); + + functionPanel.add(addBtn); + functionPanel.add(cancelBtn); + + add(collectionPanel, BorderLayout.CENTER); + add(functionPanel, BorderLayout.SOUTH); + + addBtn.setEnabled(false); + userID = userId; + + cbMessage = new fCollectionDataCB(); + + collectionBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + collectionFinger(); + } + }); + + addBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (AttendanceModule.insertFingerByUserId(userID, collectionData)) { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + dispose(); + } + + }); + + cancelBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + AlarmListenModule.stopListen(); + timer.cancel(); + dispose(); + } + }); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + AlarmListenModule.stopListen(); + timer.cancel(); + dispose(); + } + }); + } + + public void collectionFinger() { + + if (!AlarmListenModule.startListen(cbMessage)) { + JOptionPane.showMessageDialog(null, Res.string().getCollectionFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + collectionData = null; + if (!AttendanceModule.collectionFinger(CHANNEL_ID, READER_ID)) { + JOptionPane.showMessageDialog(null, Res.string().getCollectionFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + promptLabel.setText(Res.string().getInCollection()); + collectionBtn.setEnabled(false); + } + }); + + timer.schedule(new TimerTask() { + public void run() { + lock.lock(); + if (collectionData == null) { + AlarmListenModule.stopListen(); + promptLabel.setText(Res.string().getCollectionFailed()); + collectionBtn.setEnabled(true); + } + lock.unlock(); + } + + }, TIMER_DELAY); + } + + /** + * 指纹采集监听回调 + **/ private class fCollectionDataCB implements fMessCallBack { - - @Override - public boolean invoke(int lCommand, LLong lLoginID, - Pointer pStuEvent, int dwBufLen, String strDeviceIP, - NativeLong nDevicePort, Pointer dwUser) { - - if (lCommand == NetSDKLib.NET_ALARM_FINGER_PRINT) { - lock.lock(); - if (collectionData == null) { - timer.cancel(); - ALARM_CAPTURE_FINGER_PRINT_INFO msg = new ALARM_CAPTURE_FINGER_PRINT_INFO(); - ToolKits.GetPointerData(pStuEvent, msg); - collectionData = new byte[msg.nPacketLen * msg.nPacketNum]; - msg.szFingerPrintInfo.read(0, collectionData, 0, msg.nPacketLen * msg.nPacketNum); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - AlarmListenModule.stopListen(); - promptLabel.setText(Res.string().getcCompleteCollection()); - addBtn.setEnabled(true); - } - }); - } - lock.unlock(); - } - - return true; - } - + + @Override + public boolean invoke(int lCommand, LLong lLoginID, + Pointer pStuEvent, int dwBufLen, String strDeviceIP, + NativeLong nDevicePort, Pointer dwUser) { + + if (lCommand == NetSDKLib.NET_ALARM_FINGER_PRINT) { + lock.lock(); + if (collectionData == null) { + timer.cancel(); + ALARM_CAPTURE_FINGER_PRINT_INFO msg = new ALARM_CAPTURE_FINGER_PRINT_INFO(); + ToolKits.GetPointerData(pStuEvent, msg); + collectionData = new byte[msg.nPacketLen * msg.nPacketNum]; + msg.szFingerPrintInfo.read(0, collectionData, 0, msg.nPacketLen * msg.nPacketNum); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + AlarmListenModule.stopListen(); + promptLabel.setText(Res.string().getcCompleteCollection()); + addBtn.setEnabled(true); + } + }); + } + lock.unlock(); + } + + return true; + } + } - - private fMessCallBack cbMessage; // 指纹采集回调 - private JLabel promptLabel; // 提示信息 - private JButton collectionBtn; // 采集按钮 - private JButton addBtn; // 添加按钮 - private JButton cancelBtn; // 取消按钮 + + private fMessCallBack cbMessage; // 指纹采集回调 + private JLabel promptLabel; // 提示信息 + private JButton collectionBtn; // 采集按钮 + private JButton addBtn; // 添加按钮 + private JButton cancelBtn; // 取消按钮 } diff --git a/cloud/dahua/src/main/java/com/example/dahua/attendance/Attendance.java b/cloud/dahua/src/main/java/com/example/dahua/attendance/Attendance.java index 6134f32..b46bba1 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/attendance/Attendance.java +++ b/cloud/dahua/src/main/java/com/example/dahua/attendance/Attendance.java @@ -25,141 +25,142 @@ import com.sun.jna.Pointer; /** * 考勤机Demo:包含门禁事件订阅、人员操作、指纹操作 */ -class AttendanceFrame extends JFrame{ - /** - * - */ - private static final long serialVersionUID = 1L; - - // 设备断线通知回调 - private DisConnect disConnect = new DisConnect(); - - // 获取界面窗口 - private static JFrame frame = new JFrame(); - - public AttendanceFrame(){ - setTitle(Res.string().getAttendance()); - setLayout(new BorderLayout()); - pack(); - setSize(800, 555); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - LoginModule.init(disConnect, null); // 打开工程,初始化 - - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (Exception e) { - e.printStackTrace(); - } - - loginPanel = new LoginPanel(); - showPanel = new AttendanceShowPanel(); - operatePanel = new AttendanceFunctionOperatePanel(showPanel); - - JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, loginPanel, operatePanel); - splitPane.setDividerSize(0); - splitPane.setBorder(null); - add(splitPane, BorderLayout.NORTH); - add(showPanel, BorderLayout.CENTER); - - loginPanel.addLoginBtnActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(loginPanel.checkLoginText()) { - if(login()) { - frame = ToolKits.getFrame(e); - frame.setTitle(Res.string().getAttendance() + " : " + Res.string().getOnline()); - } - } - } - }); - - loginPanel.addLogoutBtnActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - logout(); - } - }); - } - }); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - AttendanceModule.stopRealLoadPicture(); - LoginModule.logout(); - LoginModule.cleanup(); // 关闭工程,释放资源 - dispose(); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - FunctionList demo = new FunctionList(); - demo.setVisible(true); - } - }); - } - }); - } - - // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 - private class DisConnect implements NetSDKLib.fDisConnect { - public DisConnect() { } - - public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { - System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); - // 断线提示 - SwingUtilities.invokeLater(new Runnable() { - public void run() { - JOptionPane.showMessageDialog(null, Res.string().getDisConnect(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - logout(); - } - }); - } - } - - // 登录 - public boolean login() { - if(LoginModule.login(loginPanel.ipTextArea.getText(), - Integer.parseInt(loginPanel.portTextArea.getText()), - loginPanel.nameTextArea.getText(), - new String(loginPanel.passwordTextArea.getPassword()))) { - - loginPanel.setButtonEnable(true); - operatePanel.setButtonEnable(true); - - } else { - JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - return true; - } - - // 登出 - public void logout() { - AttendanceModule.stopRealLoadPicture(); - LoginModule.logout(); - - frame.setTitle(Res.string().getAttendance()); - loginPanel.setButtonEnable(false); - operatePanel.setButtonEnable(false); - showPanel.clearup(); - } - - private LoginPanel loginPanel; // 登陆面板 - private AttendanceFunctionOperatePanel operatePanel; // 操作面板 - private AttendanceShowPanel showPanel; // 显示面板 +class AttendanceFrame extends JFrame { + /** + * + */ + private static final long serialVersionUID = 1L; + + // 设备断线通知回调 + private DisConnect disConnect = new DisConnect(); + + // 获取界面窗口 + private static JFrame frame = new JFrame(); + + public AttendanceFrame() { + setTitle(Res.string().getAttendance()); + setLayout(new BorderLayout()); + pack(); + setSize(800, 555); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + LoginModule.init(disConnect, null); // 打开工程,初始化 + + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + e.printStackTrace(); + } + + loginPanel = new LoginPanel(); + showPanel = new AttendanceShowPanel(); + operatePanel = new AttendanceFunctionOperatePanel(showPanel); + + JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, loginPanel, operatePanel); + splitPane.setDividerSize(0); + splitPane.setBorder(null); + add(splitPane, BorderLayout.NORTH); + add(showPanel, BorderLayout.CENTER); + + loginPanel.addLoginBtnActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (loginPanel.checkLoginText()) { + if (login()) { + frame = ToolKits.getFrame(e); + frame.setTitle(Res.string().getAttendance() + " : " + Res.string().getOnline()); + } + } + } + }); + + loginPanel.addLogoutBtnActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + logout(); + } + }); + } + }); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + AttendanceModule.stopRealLoadPicture(); + LoginModule.logout(); + LoginModule.cleanup(); // 关闭工程,释放资源 + dispose(); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + FunctionList demo = new FunctionList(); + demo.setVisible(true); + } + }); + } + }); + } + + // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 + private class DisConnect implements NetSDKLib.fDisConnect { + public DisConnect() { + } + + public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { + System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); + // 断线提示 + SwingUtilities.invokeLater(new Runnable() { + public void run() { + JOptionPane.showMessageDialog(null, Res.string().getDisConnect(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + logout(); + } + }); + } + } + + // 登录 + public boolean login() { + if (LoginModule.login(loginPanel.ipTextArea.getText(), + Integer.parseInt(loginPanel.portTextArea.getText()), + loginPanel.nameTextArea.getText(), + new String(loginPanel.passwordTextArea.getPassword()))) { + + loginPanel.setButtonEnable(true); + operatePanel.setButtonEnable(true); + + } else { + JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + return true; + } + + // 登出 + public void logout() { + AttendanceModule.stopRealLoadPicture(); + LoginModule.logout(); + + frame.setTitle(Res.string().getAttendance()); + loginPanel.setButtonEnable(false); + operatePanel.setButtonEnable(false); + showPanel.clearup(); + } + + private LoginPanel loginPanel; // 登陆面板 + private AttendanceFunctionOperatePanel operatePanel; // 操作面板 + private AttendanceShowPanel showPanel; // 显示面板 } public class Attendance { - public static void main(String[] args) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - AttendanceFrame demo = new AttendanceFrame(); - demo.setVisible(true); - } - }); - } + public static void main(String[] args) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + AttendanceFrame demo = new AttendanceFrame(); + demo.setVisible(true); + } + }); + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceFunctionOperatePanel.java b/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceFunctionOperatePanel.java index 4afce3d..ae57e58 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceFunctionOperatePanel.java +++ b/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceFunctionOperatePanel.java @@ -17,308 +17,314 @@ import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; + import com.example.dahua.module.AttendanceModule.*; + import javax.swing.SwingWorker; + import com.example.dahua.attendance.AttendanceShowPanel.*; /** * 考勤机操作面板 */ -public class AttendanceFunctionOperatePanel extends JPanel{ - /** - * - */ - private static final long serialVersionUID = 1L; - public static boolean bLogout = false; - public AttendanceShowPanel showPanel; // 显示面板 - private AttendanceFunctionOperatePanel target = this; // 为了传值 - - public AttendanceFunctionOperatePanel(AttendanceShowPanel showPanel) { - - setLayout(new BorderLayout()); - setPreferredSize(new Dimension(800, 120)); - - listener = new UserOperateActionListener(); - - userPanel = new FunctionOperatePanel(); - subscribePanel = new SubscribePanel(showPanel.eventShowPanel); - - JSplitPane splitPane = new JSplitPane(); - splitPane.setDividerSize(0); - splitPane.setBorder(null); - splitPane.add(userPanel, JSplitPane.LEFT); - splitPane.add(subscribePanel, JSplitPane.RIGHT); - - add(splitPane, BorderLayout.CENTER); - - this.showPanel = showPanel; - this.showPanel.userShowPanel.prePageBtn.addActionListener(listener); - this.showPanel.userShowPanel.nextPageBtn.addActionListener(listener); - } - - public void setButtonEnable(boolean b) { - bLogout=!b; - userPanel.setButtonEnable(b); - subscribePanel.setButtonEnable(b); - } - - public void setSearchEnable(boolean b) { - showPanel.userShowPanel.setButtonEnable(b); - userPanel.searchPersonBtn.setEnabled(b); - } - - public void insertData(UserData[] arrUserData) { - showPanel.userShowPanel.insertData(arrUserData); - } - - public void insertData(UserData userData) { - showPanel.userShowPanel.insertData(userData); - } - - /** - * 总的功能操作面板 - */ - public class FunctionOperatePanel extends JPanel{ - /** - * - */ - private static final long serialVersionUID = 1L; - public FunctionOperatePanel() { +public class AttendanceFunctionOperatePanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + public static boolean bLogout = false; + public AttendanceShowPanel showPanel; // 显示面板 + private AttendanceFunctionOperatePanel target = this; // 为了传值 + + public AttendanceFunctionOperatePanel(AttendanceShowPanel showPanel) { + + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(800, 120)); + + listener = new UserOperateActionListener(); + + userPanel = new FunctionOperatePanel(); + subscribePanel = new SubscribePanel(showPanel.eventShowPanel); + + JSplitPane splitPane = new JSplitPane(); + splitPane.setDividerSize(0); + splitPane.setBorder(null); + splitPane.add(userPanel, JSplitPane.LEFT); + splitPane.add(subscribePanel, JSplitPane.RIGHT); + + add(splitPane, BorderLayout.CENTER); + + this.showPanel = showPanel; + this.showPanel.userShowPanel.prePageBtn.addActionListener(listener); + this.showPanel.userShowPanel.nextPageBtn.addActionListener(listener); + } + + public void setButtonEnable(boolean b) { + bLogout = !b; + userPanel.setButtonEnable(b); + subscribePanel.setButtonEnable(b); + } + + public void setSearchEnable(boolean b) { + showPanel.userShowPanel.setButtonEnable(b); + userPanel.searchPersonBtn.setEnabled(b); + } + + public void insertData(UserData[] arrUserData) { + showPanel.userShowPanel.insertData(arrUserData); + } + + public void insertData(UserData userData) { + showPanel.userShowPanel.insertData(userData); + } + + /** + * 总的功能操作面板 + */ + public class FunctionOperatePanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + + public FunctionOperatePanel() { // BorderEx.set(this, Res.string().getOperateByUser(), 1); - setLayout(new BorderLayout()); - setPreferredSize(new Dimension(600, 60)); - - ////////// 查询条件 ///////////////// - JLabel userIdLabel = new JLabel(Res.string().getUserId(), JLabel.CENTER); - userIdTextField = new JTextField(); - userIdLabel.setPreferredSize(new Dimension(80, 20)); - userIdTextField.setPreferredSize(new Dimension(110, 20)); - - ////////// 功能面板 ///////////////// - // 用户功能面板 - JPanel userFunctionPanel = new JPanel(); - userFunctionPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); - BorderEx.set(userFunctionPanel, Res.string().getUserOperate(), 1); - searchPersonBtn = new JButton(Res.string().getSearch()); - addPersonBtn = new JButton(Res.string().getAdd()); - modifyPersonBtn = new JButton(Res.string().getModify()); - deletePersonBtn = new JButton(Res.string().getDelete()); - - searchPersonBtn.setPreferredSize(new Dimension(90, 20)); - addPersonBtn.setPreferredSize(new Dimension(90, 20)); - modifyPersonBtn.setPreferredSize(new Dimension(90, 20)); - deletePersonBtn.setPreferredSize(new Dimension(90, 20)); - - userFunctionPanel.add(userIdLabel); - userFunctionPanel.add(userIdTextField); - userFunctionPanel.add(searchPersonBtn); - userFunctionPanel.add(addPersonBtn); - userFunctionPanel.add(modifyPersonBtn); - userFunctionPanel.add(deletePersonBtn); - - // 指纹功能面板 - JPanel fingerPrintFunctionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - BorderEx.set(fingerPrintFunctionPanel, Res.string().getFingerPrintOperate(), 1); - operateByUserIdBtn = new JButton(Res.string().getOperateByUserId()); - operateByFingerPrintIdBtn = new JButton(Res.string().getOperateByFingerPrintId()); - - operateByUserIdBtn.setPreferredSize(new Dimension(260, 20)); - operateByFingerPrintIdBtn.setPreferredSize(new Dimension(260, 20)); - fingerPrintFunctionPanel.add(operateByUserIdBtn); - fingerPrintFunctionPanel.add(operateByFingerPrintIdBtn); - - JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); - splitPane.setDividerSize(0); - splitPane.setBorder(null); - splitPane.add(userFunctionPanel, JSplitPane.TOP); - splitPane.add(fingerPrintFunctionPanel, JSplitPane.BOTTOM); - add(splitPane, BorderLayout.CENTER); - - searchPersonBtn.addActionListener(listener); - addPersonBtn.addActionListener(listener); - modifyPersonBtn.addActionListener(listener); - deletePersonBtn.addActionListener(listener); - operateByUserIdBtn.addActionListener(listener); - operateByFingerPrintIdBtn.addActionListener(listener); - - setButtonEnable(false); - } - - public void setButtonEnable(boolean b) { - searchPersonBtn.setEnabled(b); - addPersonBtn.setEnabled(b); - modifyPersonBtn.setEnabled(b); - deletePersonBtn.setEnabled(b); - operateByUserIdBtn.setEnabled(b); - operateByFingerPrintIdBtn.setEnabled(b); - } - - public void searchPerson(OPERATE_TYPE type) { // flush 为 true 时 强制刷新 - if (type == OPERATE_TYPE.SEARCH_USER && !userIdTextField.getText().isEmpty()) { - UserData userData = AttendanceModule.getUser(userIdTextField.getText()); - if (userData == null) { - JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - showPanel.userShowPanel.insertData(userData); - }else { - setSearchEnable(false); - new SearchPersonSwingWorker(type, target).execute(); - } - } - - private JTextField userIdTextField; - public JButton searchPersonBtn; - private JButton addPersonBtn; - private JButton modifyPersonBtn; - private JButton deletePersonBtn; - private JButton operateByUserIdBtn; - private JButton operateByFingerPrintIdBtn; - } - - /** - * 按键监听实现类 - */ - private class UserOperateActionListener implements ActionListener { - - @Override - public void actionPerformed(ActionEvent arg0) { - - OPERATE_TYPE emType = getOperateType(arg0.getSource()); - switch(emType) { - case SEARCH_USER: - case PRE_SEARCH_USER: - case NEXT_SEARCH_USER: - SwingUtilities.invokeLater(new SearchRunnable(emType)); - break; - case ADD_USER: - new AttendanceOperateShareDialog(emType, null, "").setVisible(true); - break; - case MODIFIY_USER: - case DELETE_USER: - case FINGERPRINT_OPEARTE_BY_USERID: - UserData userData = showPanel.userShowPanel.GetSelectedItem(); - if(userData == null) { - JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - if (emType == OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_USERID) { - new OperateByUserIdDialog(userData).setVisible(true); - }else { - new AttendanceOperateShareDialog(emType, userData).setVisible(true); - } - - break; - case FINGERPRINT_OPEARTE_BY_ID: - new OperateByFingerPrintIdDialog().setVisible(true); - default: - break; - } - } - - private OPERATE_TYPE getOperateType(Object btn) { - OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN; - - if (btn == userPanel.searchPersonBtn) { // 查找人员 - type = OPERATE_TYPE.SEARCH_USER; - }else if (btn == showPanel.userShowPanel.prePageBtn) { // 上一页查找人员 - type = OPERATE_TYPE.PRE_SEARCH_USER; - }else if (btn == showPanel.userShowPanel.nextPageBtn) { // 下一页查找人员 - type = OPERATE_TYPE.NEXT_SEARCH_USER; - }else if (btn == userPanel.addPersonBtn) { // 添加人员 - type = OPERATE_TYPE.ADD_USER; - }else if (btn == userPanel.modifyPersonBtn) { // 修改人员 - type = OPERATE_TYPE.MODIFIY_USER; - }else if (btn == userPanel.deletePersonBtn) { // 删除人员 - type = OPERATE_TYPE.DELETE_USER; - }else if (btn == userPanel.operateByUserIdBtn) { // 通过用户ID操作指纹 - type = OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_USERID; - }else if (btn == userPanel.operateByFingerPrintIdBtn) { // 通过指纹ID操作指纹 - type = OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_ID; - }else { - System.err.println("Unknown Event: " + btn); - } - - return type; - - } - } - - public class SearchRunnable implements Runnable { - private OPERATE_TYPE searchType; - public SearchRunnable(OPERATE_TYPE searchType) { - this.searchType = searchType; - } - - @Override - public void run() { - userPanel.searchPerson(searchType); - } - } - - /** - * 人员搜索工作线程(完成异步搜索) - */ - public class SearchPersonSwingWorker extends SwingWorker { - private AttendanceFunctionOperatePanel operatePanel; - private int offset = 0; - private OPERATE_TYPE type; - public SearchPersonSwingWorker(OPERATE_TYPE type, AttendanceFunctionOperatePanel operatePanel) { - this.operatePanel = operatePanel; - this.type = type; - } - - protected UserData[] doInBackground() throws Exception { - - switch(type) { - case SEARCH_USER: - offset = 0; - break; - case PRE_SEARCH_USER: - offset = UserInfoShowPanel.QUERY_SHOW_COUNT * ((AttendanceShowPanel.userIndex-1)/UserInfoShowPanel.QUERY_SHOW_COUNT - 1); - break; - case NEXT_SEARCH_USER: - offset = AttendanceShowPanel.userIndex; - break; - default: - break; - } - - UserData[] arrUserData = AttendanceModule.findUser(offset, UserInfoShowPanel.QUERY_SHOW_COUNT); - - return arrUserData; - } - - @Override - protected void done() { - if (bLogout) { - return; - } - - try { - - UserData[] arrUserData = get(); - if (arrUserData == null) { - JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if (type == OPERATE_TYPE.SEARCH_USER || - type == OPERATE_TYPE.PRE_SEARCH_USER) { // 更新userIndex - AttendanceShowPanel.userIndex = offset; - } - operatePanel.insertData(arrUserData); - } catch (Exception e) { + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(600, 60)); + + ////////// 查询条件 ///////////////// + JLabel userIdLabel = new JLabel(Res.string().getUserId(), JLabel.CENTER); + userIdTextField = new JTextField(); + userIdLabel.setPreferredSize(new Dimension(80, 20)); + userIdTextField.setPreferredSize(new Dimension(110, 20)); + + ////////// 功能面板 ///////////////// + // 用户功能面板 + JPanel userFunctionPanel = new JPanel(); + userFunctionPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); + BorderEx.set(userFunctionPanel, Res.string().getUserOperate(), 1); + searchPersonBtn = new JButton(Res.string().getSearch()); + addPersonBtn = new JButton(Res.string().getAdd()); + modifyPersonBtn = new JButton(Res.string().getModify()); + deletePersonBtn = new JButton(Res.string().getDelete()); + + searchPersonBtn.setPreferredSize(new Dimension(90, 20)); + addPersonBtn.setPreferredSize(new Dimension(90, 20)); + modifyPersonBtn.setPreferredSize(new Dimension(90, 20)); + deletePersonBtn.setPreferredSize(new Dimension(90, 20)); + + userFunctionPanel.add(userIdLabel); + userFunctionPanel.add(userIdTextField); + userFunctionPanel.add(searchPersonBtn); + userFunctionPanel.add(addPersonBtn); + userFunctionPanel.add(modifyPersonBtn); + userFunctionPanel.add(deletePersonBtn); + + // 指纹功能面板 + JPanel fingerPrintFunctionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + BorderEx.set(fingerPrintFunctionPanel, Res.string().getFingerPrintOperate(), 1); + operateByUserIdBtn = new JButton(Res.string().getOperateByUserId()); + operateByFingerPrintIdBtn = new JButton(Res.string().getOperateByFingerPrintId()); + + operateByUserIdBtn.setPreferredSize(new Dimension(260, 20)); + operateByFingerPrintIdBtn.setPreferredSize(new Dimension(260, 20)); + fingerPrintFunctionPanel.add(operateByUserIdBtn); + fingerPrintFunctionPanel.add(operateByFingerPrintIdBtn); + + JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + splitPane.setDividerSize(0); + splitPane.setBorder(null); + splitPane.add(userFunctionPanel, JSplitPane.TOP); + splitPane.add(fingerPrintFunctionPanel, JSplitPane.BOTTOM); + add(splitPane, BorderLayout.CENTER); + + searchPersonBtn.addActionListener(listener); + addPersonBtn.addActionListener(listener); + modifyPersonBtn.addActionListener(listener); + deletePersonBtn.addActionListener(listener); + operateByUserIdBtn.addActionListener(listener); + operateByFingerPrintIdBtn.addActionListener(listener); + + setButtonEnable(false); + } + + public void setButtonEnable(boolean b) { + searchPersonBtn.setEnabled(b); + addPersonBtn.setEnabled(b); + modifyPersonBtn.setEnabled(b); + deletePersonBtn.setEnabled(b); + operateByUserIdBtn.setEnabled(b); + operateByFingerPrintIdBtn.setEnabled(b); + } + + public void searchPerson(OPERATE_TYPE type) { // flush 为 true 时 强制刷新 + if (type == OPERATE_TYPE.SEARCH_USER && !userIdTextField.getText().isEmpty()) { + UserData userData = AttendanceModule.getUser(userIdTextField.getText()); + if (userData == null) { + JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + showPanel.userShowPanel.insertData(userData); + } else { + setSearchEnable(false); + new SearchPersonSwingWorker(type, target).execute(); + } + } + + private JTextField userIdTextField; + public JButton searchPersonBtn; + private JButton addPersonBtn; + private JButton modifyPersonBtn; + private JButton deletePersonBtn; + private JButton operateByUserIdBtn; + private JButton operateByFingerPrintIdBtn; + } + + /** + * 按键监听实现类 + */ + private class UserOperateActionListener implements ActionListener { + + @Override + public void actionPerformed(ActionEvent arg0) { + + OPERATE_TYPE emType = getOperateType(arg0.getSource()); + switch (emType) { + case SEARCH_USER: + case PRE_SEARCH_USER: + case NEXT_SEARCH_USER: + SwingUtilities.invokeLater(new SearchRunnable(emType)); + break; + case ADD_USER: + new AttendanceOperateShareDialog(emType, null, "").setVisible(true); + break; + case MODIFIY_USER: + case DELETE_USER: + case FINGERPRINT_OPEARTE_BY_USERID: + UserData userData = showPanel.userShowPanel.GetSelectedItem(); + if (userData == null) { + JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + if (emType == OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_USERID) { + new OperateByUserIdDialog(userData).setVisible(true); + } else { + new AttendanceOperateShareDialog(emType, userData).setVisible(true); + } + + break; + case FINGERPRINT_OPEARTE_BY_ID: + new OperateByFingerPrintIdDialog().setVisible(true); + default: + break; + } + } + + private OPERATE_TYPE getOperateType(Object btn) { + OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN; + + if (btn == userPanel.searchPersonBtn) { // 查找人员 + type = OPERATE_TYPE.SEARCH_USER; + } else if (btn == showPanel.userShowPanel.prePageBtn) { // 上一页查找人员 + type = OPERATE_TYPE.PRE_SEARCH_USER; + } else if (btn == showPanel.userShowPanel.nextPageBtn) { // 下一页查找人员 + type = OPERATE_TYPE.NEXT_SEARCH_USER; + } else if (btn == userPanel.addPersonBtn) { // 添加人员 + type = OPERATE_TYPE.ADD_USER; + } else if (btn == userPanel.modifyPersonBtn) { // 修改人员 + type = OPERATE_TYPE.MODIFIY_USER; + } else if (btn == userPanel.deletePersonBtn) { // 删除人员 + type = OPERATE_TYPE.DELETE_USER; + } else if (btn == userPanel.operateByUserIdBtn) { // 通过用户ID操作指纹 + type = OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_USERID; + } else if (btn == userPanel.operateByFingerPrintIdBtn) { // 通过指纹ID操作指纹 + type = OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_ID; + } else { + System.err.println("Unknown Event: " + btn); + } + + return type; + + } + } + + public class SearchRunnable implements Runnable { + private OPERATE_TYPE searchType; + + public SearchRunnable(OPERATE_TYPE searchType) { + this.searchType = searchType; + } + + @Override + public void run() { + userPanel.searchPerson(searchType); + } + } + + /** + * 人员搜索工作线程(完成异步搜索) + */ + public class SearchPersonSwingWorker extends SwingWorker { + private AttendanceFunctionOperatePanel operatePanel; + private int offset = 0; + private OPERATE_TYPE type; + + public SearchPersonSwingWorker(OPERATE_TYPE type, AttendanceFunctionOperatePanel operatePanel) { + this.operatePanel = operatePanel; + this.type = type; + } + + protected UserData[] doInBackground() throws Exception { + + switch (type) { + case SEARCH_USER: + offset = 0; + break; + case PRE_SEARCH_USER: + offset = UserInfoShowPanel.QUERY_SHOW_COUNT * ((AttendanceShowPanel.userIndex - 1) / UserInfoShowPanel.QUERY_SHOW_COUNT - 1); + break; + case NEXT_SEARCH_USER: + offset = AttendanceShowPanel.userIndex; + break; + default: + break; + } + + UserData[] arrUserData = AttendanceModule.findUser(offset, UserInfoShowPanel.QUERY_SHOW_COUNT); + + return arrUserData; + } + + @Override + protected void done() { + if (bLogout) { + return; + } + + try { + + UserData[] arrUserData = get(); + if (arrUserData == null) { + JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (type == OPERATE_TYPE.SEARCH_USER || + type == OPERATE_TYPE.PRE_SEARCH_USER) { // 更新userIndex + AttendanceShowPanel.userIndex = offset; + } + operatePanel.insertData(arrUserData); + } catch (Exception e) { // e.printStackTrace(); - }finally { - operatePanel.setSearchEnable(true); - } - - } - } - - private UserOperateActionListener listener; - public FunctionOperatePanel userPanel; - public SubscribePanel subscribePanel; + } finally { + operatePanel.setSearchEnable(true); + } + + } + } + + private UserOperateActionListener listener; + public FunctionOperatePanel userPanel; + public SubscribePanel subscribePanel; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceOperateShareDialog.java b/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceOperateShareDialog.java index 17324d8..524c9cd 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceOperateShareDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceOperateShareDialog.java @@ -17,249 +17,250 @@ import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; + import com.example.dahua.module.AttendanceModule.*; /** * 考勤机操作对话框 */ -public class AttendanceOperateShareDialog extends JDialog{ - - /** - * - */ - private static final long serialVersionUID = 1L; - private OPERATE_TYPE emType = OPERATE_TYPE.UNKNOWN; // 操作类型 - private boolean bSuccess = false; // 接口调用结果 - - public AttendanceOperateShareDialog(OPERATE_TYPE emType, UserData userData) { - this(emType, userData, ""); - } - - public AttendanceOperateShareDialog(OPERATE_TYPE emType, String fingerPrintId) { - this(emType, null, fingerPrintId); - } - - public AttendanceOperateShareDialog(OPERATE_TYPE emType, UserData userData, String fingerPrintId) { - - setTitle(Res.string().getPersonOperate()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(300, 200); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); - - //////////人员信息面板 ///////////////// - - JPanel personInfoPanel = new JPanel(); - BorderEx.set(personInfoPanel, "", 4); - Dimension dimLable = new Dimension(80, 20); - JLabel userIdLabel = new JLabel(Res.string().getUserId()); - JLabel userNameLabel = new JLabel(Res.string().getUserName(true)); - JLabel cardNoLabel = new JLabel(Res.string().getCardNo()); - JLabel fingerPrintIdLabel = new JLabel(Res.string().getFingerPrintId()); - userIdLabel.setPreferredSize(dimLable); - userNameLabel.setPreferredSize(dimLable); - cardNoLabel.setPreferredSize(dimLable); - fingerPrintIdLabel.setPreferredSize(new Dimension(85, 20)); - - Dimension dimValue = new Dimension(150, 20); - userIdTextField = new JTextField(); - userNameTextField = new JTextField(); - cardNoTextField = new JTextField(); - fingerPrintIdTextField = new JTextField(); - userIdTextField.setPreferredSize(dimValue); - userNameTextField.setPreferredSize(dimValue); - cardNoTextField.setPreferredSize(dimValue); - fingerPrintIdTextField.setPreferredSize(dimValue); - - // 数据处理 - if (userData != null) { - if (userData.userId != null) { - userIdTextField.setText(userData.userId); - } - - if (userData.userName != null) { - userNameTextField.setText(userData.userName); - } - - if (userData.cardNo != null) { - cardNoTextField.setText(userData.cardNo); - } - } - - if (!fingerPrintId.isEmpty()) { - fingerPrintIdTextField.setText(fingerPrintId); - } - - if (emType == OPERATE_TYPE.DELETE_FINGERPRINT_BY_ID) { // 根据指纹ID删除用户 - JPanel fingerPrintPanel = new JPanel(); - fingerPrintPanel.add(fingerPrintIdLabel); - fingerPrintPanel.add(fingerPrintIdTextField); - personInfoPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 40)); - personInfoPanel.add(fingerPrintPanel); - }else { - personInfoPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 10)); - personInfoPanel.add(userIdLabel); - personInfoPanel.add(userIdTextField); - personInfoPanel.add(userNameLabel); - personInfoPanel.add(userNameTextField); - personInfoPanel.add(cardNoLabel); - personInfoPanel.add(cardNoTextField); - - if (emType == OPERATE_TYPE.DELETE_FINGERPRINT_BY_USERID - || emType == OPERATE_TYPE.DELETE_USER) { - JLabel promptLabel = new JLabel(" " + Res.string().getDeleteFingerPrintPrompt() + " "); - promptLabel.setEnabled(false); - personInfoPanel.add(promptLabel); - } - } - - //////////功能面板 ///////////////// - JPanel functionPanel = new JPanel(); - confirmBtn = new JButton(Res.string().getConfirm()); - cancelBtn = new JButton(Res.string().getCancel()); - confirmBtn.setPreferredSize(new Dimension(100, 20)); - cancelBtn.setPreferredSize(new Dimension(100, 20)); - - functionPanel.add(confirmBtn); - functionPanel.add(cancelBtn); - - add(personInfoPanel, BorderLayout.CENTER); - add(functionPanel, BorderLayout.SOUTH); - - operateListener = new UserOperateListener(); - confirmBtn.addActionListener(operateListener); - cancelBtn.addActionListener(operateListener); - - this.emType = emType; - switch(emType) { - case ADD_USER: - setTitle(Res.string().getAddPerson()); - confirmBtn.setText(Res.string().getAdd()); - break; - case MODIFIY_USER: - setTitle(Res.string().getModifyPerson()); - confirmBtn.setText(Res.string().getModify()); - userIdTextField.setEnabled(false); - break; - case DELETE_USER: - setTitle(Res.string().getDelPerson()); - confirmBtn.setText(Res.string().getDelete()); - userIdTextField.setEnabled(false); - userNameTextField.setEnabled(false); - cardNoTextField.setEnabled(false); - break; - case DELETE_FINGERPRINT_BY_USERID: - case DELETE_FINGERPRINT_BY_ID: - setTitle(Res.string().getDeleteFingerPrint()); - confirmBtn.setText(Res.string().getDelete()); - userIdTextField.setEnabled(false); - userNameTextField.setEnabled(false); - cardNoTextField.setEnabled(false); - fingerPrintIdTextField.setEditable(false); - default: - break; - } - } - - public boolean checkDataValidity() { - - if (emType == OPERATE_TYPE.ADD_USER) { - if (userIdTextField.getText().isEmpty()) { - JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - try { - if (userIdTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_COMMON_STRING_32-1) { - JOptionPane.showMessageDialog(null, Res.string().getUserIdExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - }catch (Exception e){ - - } - } - - try { - if (userNameTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_ATTENDANCE_USERNAME_LEN-1) { - JOptionPane.showMessageDialog(null, Res.string().getUserNameExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if (cardNoTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_COMMON_STRING_32-1) { - JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - }catch (Exception e){ - - } - - - return true; - } - - public UserData getUserData() { - UserData userData = new UserData(); - userData.cardNo = userIdTextField.getText(); - userData.userName = userNameTextField.getText(); - userData.cardNo = cardNoTextField.getText(); - return userData; - } - - private class UserOperateListener implements ActionListener { - @Override - public void actionPerformed(ActionEvent arg0) { - - if (arg0.getSource() == cancelBtn) { - dispose(); - }else if (arg0.getSource() == confirmBtn) { - switch(emType) { - case ADD_USER: - if (!checkDataValidity()) { - return; - } - bSuccess = AttendanceModule.addUser(userIdTextField.getText(), userNameTextField.getText(), cardNoTextField.getText()); - break; - case MODIFIY_USER: - if (!checkDataValidity()) { - return; - } - bSuccess = AttendanceModule.modifyUser(userIdTextField.getText(), userNameTextField.getText(), cardNoTextField.getText()); - break; - case DELETE_USER: - bSuccess = AttendanceModule.deleteUser(userIdTextField.getText()); - break; - case DELETE_FINGERPRINT_BY_USERID: - bSuccess = AttendanceModule.removeFingerByUserId(userIdTextField.getText()); - break; - case DELETE_FINGERPRINT_BY_ID: - bSuccess = AttendanceModule.removeFingerRecord(Integer.parseInt(fingerPrintIdTextField.getText())); - break; - default: - System.err.println("Can't Deal Operate Type: " + emType); - break; - } - - if(bSuccess) { - JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - dispose(); - }else { - System.err.println("Unknown Event: " + arg0.getSource()); - } - } - } - - private UserOperateListener operateListener; // 按键监听 - private JTextField userIdTextField; // 用户ID - private JTextField userNameTextField; // 用户名 - private JTextField cardNoTextField; // 卡号 - private JTextField fingerPrintIdTextField; // 指纹ID - private JButton confirmBtn; // 确认(根据emType类型变化) - private JButton cancelBtn; // 取消 +public class AttendanceOperateShareDialog extends JDialog { + + /** + * + */ + private static final long serialVersionUID = 1L; + private OPERATE_TYPE emType = OPERATE_TYPE.UNKNOWN; // 操作类型 + private boolean bSuccess = false; // 接口调用结果 + + public AttendanceOperateShareDialog(OPERATE_TYPE emType, UserData userData) { + this(emType, userData, ""); + } + + public AttendanceOperateShareDialog(OPERATE_TYPE emType, String fingerPrintId) { + this(emType, null, fingerPrintId); + } + + public AttendanceOperateShareDialog(OPERATE_TYPE emType, UserData userData, String fingerPrintId) { + + setTitle(Res.string().getPersonOperate()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(300, 200); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + + //////////人员信息面板 ///////////////// + + JPanel personInfoPanel = new JPanel(); + BorderEx.set(personInfoPanel, "", 4); + Dimension dimLable = new Dimension(80, 20); + JLabel userIdLabel = new JLabel(Res.string().getUserId()); + JLabel userNameLabel = new JLabel(Res.string().getUserName(true)); + JLabel cardNoLabel = new JLabel(Res.string().getCardNo()); + JLabel fingerPrintIdLabel = new JLabel(Res.string().getFingerPrintId()); + userIdLabel.setPreferredSize(dimLable); + userNameLabel.setPreferredSize(dimLable); + cardNoLabel.setPreferredSize(dimLable); + fingerPrintIdLabel.setPreferredSize(new Dimension(85, 20)); + + Dimension dimValue = new Dimension(150, 20); + userIdTextField = new JTextField(); + userNameTextField = new JTextField(); + cardNoTextField = new JTextField(); + fingerPrintIdTextField = new JTextField(); + userIdTextField.setPreferredSize(dimValue); + userNameTextField.setPreferredSize(dimValue); + cardNoTextField.setPreferredSize(dimValue); + fingerPrintIdTextField.setPreferredSize(dimValue); + + // 数据处理 + if (userData != null) { + if (userData.userId != null) { + userIdTextField.setText(userData.userId); + } + + if (userData.userName != null) { + userNameTextField.setText(userData.userName); + } + + if (userData.cardNo != null) { + cardNoTextField.setText(userData.cardNo); + } + } + + if (!fingerPrintId.isEmpty()) { + fingerPrintIdTextField.setText(fingerPrintId); + } + + if (emType == OPERATE_TYPE.DELETE_FINGERPRINT_BY_ID) { // 根据指纹ID删除用户 + JPanel fingerPrintPanel = new JPanel(); + fingerPrintPanel.add(fingerPrintIdLabel); + fingerPrintPanel.add(fingerPrintIdTextField); + personInfoPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 40)); + personInfoPanel.add(fingerPrintPanel); + } else { + personInfoPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 10)); + personInfoPanel.add(userIdLabel); + personInfoPanel.add(userIdTextField); + personInfoPanel.add(userNameLabel); + personInfoPanel.add(userNameTextField); + personInfoPanel.add(cardNoLabel); + personInfoPanel.add(cardNoTextField); + + if (emType == OPERATE_TYPE.DELETE_FINGERPRINT_BY_USERID + || emType == OPERATE_TYPE.DELETE_USER) { + JLabel promptLabel = new JLabel(" " + Res.string().getDeleteFingerPrintPrompt() + " "); + promptLabel.setEnabled(false); + personInfoPanel.add(promptLabel); + } + } + + //////////功能面板 ///////////////// + JPanel functionPanel = new JPanel(); + confirmBtn = new JButton(Res.string().getConfirm()); + cancelBtn = new JButton(Res.string().getCancel()); + confirmBtn.setPreferredSize(new Dimension(100, 20)); + cancelBtn.setPreferredSize(new Dimension(100, 20)); + + functionPanel.add(confirmBtn); + functionPanel.add(cancelBtn); + + add(personInfoPanel, BorderLayout.CENTER); + add(functionPanel, BorderLayout.SOUTH); + + operateListener = new UserOperateListener(); + confirmBtn.addActionListener(operateListener); + cancelBtn.addActionListener(operateListener); + + this.emType = emType; + switch (emType) { + case ADD_USER: + setTitle(Res.string().getAddPerson()); + confirmBtn.setText(Res.string().getAdd()); + break; + case MODIFIY_USER: + setTitle(Res.string().getModifyPerson()); + confirmBtn.setText(Res.string().getModify()); + userIdTextField.setEnabled(false); + break; + case DELETE_USER: + setTitle(Res.string().getDelPerson()); + confirmBtn.setText(Res.string().getDelete()); + userIdTextField.setEnabled(false); + userNameTextField.setEnabled(false); + cardNoTextField.setEnabled(false); + break; + case DELETE_FINGERPRINT_BY_USERID: + case DELETE_FINGERPRINT_BY_ID: + setTitle(Res.string().getDeleteFingerPrint()); + confirmBtn.setText(Res.string().getDelete()); + userIdTextField.setEnabled(false); + userNameTextField.setEnabled(false); + cardNoTextField.setEnabled(false); + fingerPrintIdTextField.setEditable(false); + default: + break; + } + } + + public boolean checkDataValidity() { + + if (emType == OPERATE_TYPE.ADD_USER) { + if (userIdTextField.getText().isEmpty()) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + try { + if (userIdTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_COMMON_STRING_32 - 1) { + JOptionPane.showMessageDialog(null, Res.string().getUserIdExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + } catch (Exception e) { + + } + } + + try { + if (userNameTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_ATTENDANCE_USERNAME_LEN - 1) { + JOptionPane.showMessageDialog(null, Res.string().getUserNameExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (cardNoTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_COMMON_STRING_32 - 1) { + JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + } catch (Exception e) { + + } + + + return true; + } + + public UserData getUserData() { + UserData userData = new UserData(); + userData.cardNo = userIdTextField.getText(); + userData.userName = userNameTextField.getText(); + userData.cardNo = cardNoTextField.getText(); + return userData; + } + + private class UserOperateListener implements ActionListener { + @Override + public void actionPerformed(ActionEvent arg0) { + + if (arg0.getSource() == cancelBtn) { + dispose(); + } else if (arg0.getSource() == confirmBtn) { + switch (emType) { + case ADD_USER: + if (!checkDataValidity()) { + return; + } + bSuccess = AttendanceModule.addUser(userIdTextField.getText(), userNameTextField.getText(), cardNoTextField.getText()); + break; + case MODIFIY_USER: + if (!checkDataValidity()) { + return; + } + bSuccess = AttendanceModule.modifyUser(userIdTextField.getText(), userNameTextField.getText(), cardNoTextField.getText()); + break; + case DELETE_USER: + bSuccess = AttendanceModule.deleteUser(userIdTextField.getText()); + break; + case DELETE_FINGERPRINT_BY_USERID: + bSuccess = AttendanceModule.removeFingerByUserId(userIdTextField.getText()); + break; + case DELETE_FINGERPRINT_BY_ID: + bSuccess = AttendanceModule.removeFingerRecord(Integer.parseInt(fingerPrintIdTextField.getText())); + break; + default: + System.err.println("Can't Deal Operate Type: " + emType); + break; + } + + if (bSuccess) { + JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + dispose(); + } else { + System.err.println("Unknown Event: " + arg0.getSource()); + } + } + } + + private UserOperateListener operateListener; // 按键监听 + private JTextField userIdTextField; // 用户ID + private JTextField userNameTextField; // 用户名 + private JTextField cardNoTextField; // 卡号 + private JTextField fingerPrintIdTextField; // 指纹ID + private JButton confirmBtn; // 确认(根据emType类型变化) + private JButton cancelBtn; // 取消 } \ No newline at end of file diff --git a/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceShowPanel.java b/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceShowPanel.java index 5dad028..b6acffb 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceShowPanel.java +++ b/cloud/dahua/src/main/java/com/example/dahua/attendance/AttendanceShowPanel.java @@ -22,349 +22,350 @@ import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; + import com.example.dahua.module.AttendanceModule.*; public class AttendanceShowPanel extends JPanel { - /** - * - */ - private static final long serialVersionUID = 1L; - public static int userIndex = 0; - public static int eventIndex = 0; - - public AttendanceShowPanel() { - setLayout(new BorderLayout()); - - userShowPanel = new UserInfoShowPanel(); - eventShowPanel = new EventInfoShowPanel(); - - JSplitPane splitPane = new JSplitPane(); - splitPane.setDividerSize(0); - splitPane.setBorder(null); - splitPane.add(userShowPanel, JSplitPane.LEFT); - splitPane.add(eventShowPanel, JSplitPane.RIGHT); - - add(splitPane); - } - - public void clearup() { - userShowPanel.clearData(); - eventShowPanel.clearEvent(); - } - - /** + /** + * + */ + private static final long serialVersionUID = 1L; + public static int userIndex = 0; + public static int eventIndex = 0; + + public AttendanceShowPanel() { + setLayout(new BorderLayout()); + + userShowPanel = new UserInfoShowPanel(); + eventShowPanel = new EventInfoShowPanel(); + + JSplitPane splitPane = new JSplitPane(); + splitPane.setDividerSize(0); + splitPane.setBorder(null); + splitPane.add(userShowPanel, JSplitPane.LEFT); + splitPane.add(eventShowPanel, JSplitPane.RIGHT); + + add(splitPane); + } + + public void clearup() { + userShowPanel.clearData(); + eventShowPanel.clearEvent(); + } + + /** * 用户信息显示界面 - * */ + */ public class UserInfoShowPanel extends JPanel { - /** - * - */ - private static final long serialVersionUID = 1L; - public static final int INDEX = 0; - public static final int USER_ID = 1; - public static final int USER_NAME = 2; - public static final int CARD_NO = 3; - public static final int FINGERPRINT_ID = 4; - public static final int FINGERPRINT_DATA = 5; - - public final static int QUERY_SHOW_COUNT = 15; // 查询人数 - private int realRows = 0; // 实际显示个数 - - public UserInfoShowPanel() { - BorderEx.set(this, Res.string().getUserList(), 1); - setLayout(new BorderLayout()); - setPreferredSize(new Dimension(395, 400)); - Vector columnNames = new Vector(); - columnNames.add(Res.string().getIndex()); // 序号 - columnNames.add(Res.string().getUserId()); // 用户编号 - columnNames.add(Res.string().getUserName()); // 用户名 - columnNames.add(Res.string().getCardNo()); // 卡号 - - tableModel = new DefaultTableModel(null, columnNames); - table = new JTable(tableModel) { - private static final long serialVersionUID = 1L; - - public boolean isCellEditable(int rowIndex, int columnIndex) { // 不可编辑 - return false; - } - }; - - tableModel.setRowCount(QUERY_SHOW_COUNT); // 设置最小显示行 - - table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 - - table.getColumnModel().getColumn(INDEX).setPreferredWidth(80); - table.getColumnModel().getColumn(USER_ID).setPreferredWidth(150); - table.getColumnModel().getColumn(USER_NAME).setPreferredWidth(150); - table.getColumnModel().getColumn(CARD_NO).setPreferredWidth(150); - - ((DefaultTableCellRenderer) - table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); - - table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - - JScrollPane scrollPane = new JScrollPane(table); - scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); - scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - - JPanel functionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - prePageBtn = new JButton(Res.string().getPreviousPage()); - nextPageBtn = new JButton(Res.string().getNextPage()); - prePageBtn.setPreferredSize(new Dimension(120, 20)); - nextPageBtn.setPreferredSize(new Dimension(120, 20)); - - prePageBtn.setEnabled(false); - nextPageBtn.setEnabled(false); - - functionPanel.add(prePageBtn); - functionPanel.add(new JLabel(" ")); - functionPanel.add(nextPageBtn); - - add(scrollPane, BorderLayout.CENTER); - add(functionPanel, BorderLayout.SOUTH); - } - - public int getRows(){ - return realRows; - } - - public UserData GetSelectedItem() { - int currentRow = table.getSelectedRow(); //获得所选的单行 - if(currentRow < 0 || currentRow + 1 > realRows) { - return null; - } - UserData userData = new UserData(); - - userData.userId = (String) tableModel.getValueAt(currentRow, 1); - userData.userName = (String) tableModel.getValueAt(currentRow, 2); - userData.cardNo = (String) tableModel.getValueAt(currentRow, 3); - - return userData; - } - - public void updateSelectedItem(UserData userData) { - - int currentRow = table.getSelectedRow(); //获得所选的单行 - if(currentRow < 0 || currentRow + 1 > realRows) { - return; - } - + /** + * + */ + private static final long serialVersionUID = 1L; + public static final int INDEX = 0; + public static final int USER_ID = 1; + public static final int USER_NAME = 2; + public static final int CARD_NO = 3; + public static final int FINGERPRINT_ID = 4; + public static final int FINGERPRINT_DATA = 5; + + public final static int QUERY_SHOW_COUNT = 15; // 查询人数 + private int realRows = 0; // 实际显示个数 + + public UserInfoShowPanel() { + BorderEx.set(this, Res.string().getUserList(), 1); + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(395, 400)); + Vector columnNames = new Vector(); + columnNames.add(Res.string().getIndex()); // 序号 + columnNames.add(Res.string().getUserId()); // 用户编号 + columnNames.add(Res.string().getUserName()); // 用户名 + columnNames.add(Res.string().getCardNo()); // 卡号 + + tableModel = new DefaultTableModel(null, columnNames); + table = new JTable(tableModel) { + private static final long serialVersionUID = 1L; + + public boolean isCellEditable(int rowIndex, int columnIndex) { // 不可编辑 + return false; + } + }; + + tableModel.setRowCount(QUERY_SHOW_COUNT); // 设置最小显示行 + + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 + + table.getColumnModel().getColumn(INDEX).setPreferredWidth(80); + table.getColumnModel().getColumn(USER_ID).setPreferredWidth(150); + table.getColumnModel().getColumn(USER_NAME).setPreferredWidth(150); + table.getColumnModel().getColumn(CARD_NO).setPreferredWidth(150); + + ((DefaultTableCellRenderer) + table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); + + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + JScrollPane scrollPane = new JScrollPane(table); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + + JPanel functionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + prePageBtn = new JButton(Res.string().getPreviousPage()); + nextPageBtn = new JButton(Res.string().getNextPage()); + prePageBtn.setPreferredSize(new Dimension(120, 20)); + nextPageBtn.setPreferredSize(new Dimension(120, 20)); + + prePageBtn.setEnabled(false); + nextPageBtn.setEnabled(false); + + functionPanel.add(prePageBtn); + functionPanel.add(new JLabel(" ")); + functionPanel.add(nextPageBtn); + + add(scrollPane, BorderLayout.CENTER); + add(functionPanel, BorderLayout.SOUTH); + } + + public int getRows() { + return realRows; + } + + public UserData GetSelectedItem() { + int currentRow = table.getSelectedRow(); //获得所选的单行 + if (currentRow < 0 || currentRow + 1 > realRows) { + return null; + } + UserData userData = new UserData(); + + userData.userId = (String) tableModel.getValueAt(currentRow, 1); + userData.userName = (String) tableModel.getValueAt(currentRow, 2); + userData.cardNo = (String) tableModel.getValueAt(currentRow, 3); + + return userData; + } + + public void updateSelectedItem(UserData userData) { + + int currentRow = table.getSelectedRow(); //获得所选的单行 + if (currentRow < 0 || currentRow + 1 > realRows) { + return; + } + // tableModel.setValueAt(userData.userId, currentRow, 1); - tableModel.setValueAt(userData.userName, currentRow, 2); - tableModel.setValueAt(userData.cardNo, currentRow, 3); - table.updateUI(); - } - - public void insertData(UserData[] arrUserData) { - if (arrUserData == null) { - return; - } - - realRows = 0; - tableModel.setRowCount(0); - - for (UserData userData : arrUserData) { - insertUserData(userData); - } - - tableModel.setRowCount(QUERY_SHOW_COUNT); - table.updateUI(); - - setButtonEnable(true); - } - - public void setButtonEnable(boolean b) { - if (b) { - if (UserData.nTotalUser - userIndex > 0) { - nextPageBtn.setEnabled(true); - }else { - nextPageBtn.setEnabled(false); - } - - if (userIndex - QUERY_SHOW_COUNT > 0) { - prePageBtn.setEnabled(true); - }else { - prePageBtn.setEnabled(false); - } - }else { - prePageBtn.setEnabled(false); - nextPageBtn.setEnabled(false); - } - } - - public void insertData(UserData userData) { - if (userData == null) { - return; - } - - clearData(); - tableModel.setRowCount(0); - - insertUserData(userData); - - tableModel.setRowCount(QUERY_SHOW_COUNT); - table.updateUI(); - - setButtonEnable(false); - } - - - private void insertUserData(UserData userData) { - ++userIndex; - ++realRows; - Vector vector = new Vector(); - vector.add(String.valueOf(userIndex)); - vector.add(userData.userId); - vector.add(userData.userName); - vector.add(userData.cardNo); - - tableModel.addRow(vector); - } - - public void clearData() { - realRows = 0; - userIndex = 0; - tableModel.setRowCount(0); - tableModel.setRowCount(QUERY_SHOW_COUNT); - table.updateUI(); - prePageBtn.setEnabled(false); - nextPageBtn.setEnabled(false); - } - - private JTable table = null; - private DefaultTableModel tableModel = null; - public JButton prePageBtn; - public JButton nextPageBtn; + tableModel.setValueAt(userData.userName, currentRow, 2); + tableModel.setValueAt(userData.cardNo, currentRow, 3); + table.updateUI(); + } + + public void insertData(UserData[] arrUserData) { + if (arrUserData == null) { + return; + } + + realRows = 0; + tableModel.setRowCount(0); + + for (UserData userData : arrUserData) { + insertUserData(userData); + } + + tableModel.setRowCount(QUERY_SHOW_COUNT); + table.updateUI(); + + setButtonEnable(true); + } + + public void setButtonEnable(boolean b) { + if (b) { + if (UserData.nTotalUser - userIndex > 0) { + nextPageBtn.setEnabled(true); + } else { + nextPageBtn.setEnabled(false); + } + + if (userIndex - QUERY_SHOW_COUNT > 0) { + prePageBtn.setEnabled(true); + } else { + prePageBtn.setEnabled(false); + } + } else { + prePageBtn.setEnabled(false); + nextPageBtn.setEnabled(false); + } + } + + public void insertData(UserData userData) { + if (userData == null) { + return; + } + + clearData(); + tableModel.setRowCount(0); + + insertUserData(userData); + + tableModel.setRowCount(QUERY_SHOW_COUNT); + table.updateUI(); + + setButtonEnable(false); + } + + + private void insertUserData(UserData userData) { + ++userIndex; + ++realRows; + Vector vector = new Vector(); + vector.add(String.valueOf(userIndex)); + vector.add(userData.userId); + vector.add(userData.userName); + vector.add(userData.cardNo); + + tableModel.addRow(vector); + } + + public void clearData() { + realRows = 0; + userIndex = 0; + tableModel.setRowCount(0); + tableModel.setRowCount(QUERY_SHOW_COUNT); + table.updateUI(); + prePageBtn.setEnabled(false); + nextPageBtn.setEnabled(false); + } + + private JTable table = null; + private DefaultTableModel tableModel = null; + public JButton prePageBtn; + public JButton nextPageBtn; } - + /** * 门禁事件显示界面 - * */ + */ public class EventInfoShowPanel extends JPanel { - /** - * - */ - private static final long serialVersionUID = 1L; - private static final int INDEX = 0; - private static final int USER_ID = 1; - private static final int CARD_NO = 2; - private static final int EVENT_TIME = 3; - private static final int DOOR_OPEN_METHOD = 4; - - private final static int MIN_SHOW_LINES = 17; + /** + * + */ + private static final long serialVersionUID = 1L; + private static final int INDEX = 0; + private static final int USER_ID = 1; + private static final int CARD_NO = 2; + private static final int EVENT_TIME = 3; + private static final int DOOR_OPEN_METHOD = 4; + + private final static int MIN_SHOW_LINES = 17; private final static int MAX_SHOW_LINES = 50; - - public EventInfoShowPanel() { - BorderEx.set(this, Res.string().getEventInfo(), 1); - setLayout(new BorderLayout()); - setPreferredSize(new Dimension(395, 400)); - - Vector columnNames = new Vector(); - columnNames.add(Res.string().getIndex()); // 序号 - columnNames.add(Res.string().getUserId()); // 用户编号 - columnNames.add(Res.string().getCardNo()); // 卡号 - columnNames.add(Res.string().getEventTime()); // 事件时间 - columnNames.add(Res.string().getDoorOpenMethod()); // 开门方式 - - tableModel = new DefaultTableModel(null, columnNames); - table = new JTable(tableModel) { - private static final long serialVersionUID = 1L; - - public boolean isCellEditable(int rowIndex, int columnIndex) { - return false; - } - }; - - tableModel.setRowCount(MIN_SHOW_LINES); // 设置最小显示行 - - table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 - - table.getColumnModel().getColumn(INDEX).setPreferredWidth(80); - table.getColumnModel().getColumn(USER_ID).setPreferredWidth(150); - table.getColumnModel().getColumn(CARD_NO).setPreferredWidth(150); - table.getColumnModel().getColumn(EVENT_TIME).setPreferredWidth(150); - table.getColumnModel().getColumn(DOOR_OPEN_METHOD).setPreferredWidth(120); - - ((DefaultTableCellRenderer) - table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); - - table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - - JScrollPane scrollPane = new JScrollPane(table); - scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); - scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - add(scrollPane, BorderLayout.CENTER); - } - - public void clearEvent() { - eventIndex = 0; - tableModel.setRowCount(0); - tableModel.setRowCount(MIN_SHOW_LINES); - table.updateUI(); - } - - public void insertEvent(AccessEventInfo accessEventInfo) { - if (accessEventInfo == null) { - return; - } - ++eventIndex; - tableModel.insertRow(0, convertEventData(accessEventInfo)); - if (eventIndex <= MIN_SHOW_LINES) { - tableModel.setRowCount(MIN_SHOW_LINES); - }else if (eventIndex >= MAX_SHOW_LINES){ - tableModel.setRowCount(MAX_SHOW_LINES); - } - - table.updateUI(); - } - - private Vector convertEventData(AccessEventInfo accessEventInfo) { - Vector vector = new Vector(); - vector.add(String.valueOf(eventIndex)); - vector.add(accessEventInfo.userId); - vector.add(accessEventInfo.cardNo); - vector.add(accessEventInfo.eventTime.replace("/", "-")); - String openDoor = openDoorMethodMap.get(accessEventInfo.openDoorMethod); - if (openDoor == null) { - openDoor = Res.string().getUnKnow(); - } - vector.add(openDoor); - - return vector; - } - - private JTable table = null; - private DefaultTableModel tableModel = null; + + public EventInfoShowPanel() { + BorderEx.set(this, Res.string().getEventInfo(), 1); + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(395, 400)); + + Vector columnNames = new Vector(); + columnNames.add(Res.string().getIndex()); // 序号 + columnNames.add(Res.string().getUserId()); // 用户编号 + columnNames.add(Res.string().getCardNo()); // 卡号 + columnNames.add(Res.string().getEventTime()); // 事件时间 + columnNames.add(Res.string().getDoorOpenMethod()); // 开门方式 + + tableModel = new DefaultTableModel(null, columnNames); + table = new JTable(tableModel) { + private static final long serialVersionUID = 1L; + + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + }; + + tableModel.setRowCount(MIN_SHOW_LINES); // 设置最小显示行 + + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行 + + table.getColumnModel().getColumn(INDEX).setPreferredWidth(80); + table.getColumnModel().getColumn(USER_ID).setPreferredWidth(150); + table.getColumnModel().getColumn(CARD_NO).setPreferredWidth(150); + table.getColumnModel().getColumn(EVENT_TIME).setPreferredWidth(150); + table.getColumnModel().getColumn(DOOR_OPEN_METHOD).setPreferredWidth(120); + + ((DefaultTableCellRenderer) + table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); + + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + JScrollPane scrollPane = new JScrollPane(table); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + add(scrollPane, BorderLayout.CENTER); + } + + public void clearEvent() { + eventIndex = 0; + tableModel.setRowCount(0); + tableModel.setRowCount(MIN_SHOW_LINES); + table.updateUI(); + } + + public void insertEvent(AccessEventInfo accessEventInfo) { + if (accessEventInfo == null) { + return; + } + ++eventIndex; + tableModel.insertRow(0, convertEventData(accessEventInfo)); + if (eventIndex <= MIN_SHOW_LINES) { + tableModel.setRowCount(MIN_SHOW_LINES); + } else if (eventIndex >= MAX_SHOW_LINES) { + tableModel.setRowCount(MAX_SHOW_LINES); + } + + table.updateUI(); + } + + private Vector convertEventData(AccessEventInfo accessEventInfo) { + Vector vector = new Vector(); + vector.add(String.valueOf(eventIndex)); + vector.add(accessEventInfo.userId); + vector.add(accessEventInfo.cardNo); + vector.add(accessEventInfo.eventTime.replace("/", "-")); + String openDoor = openDoorMethodMap.get(accessEventInfo.openDoorMethod); + if (openDoor == null) { + openDoor = Res.string().getUnKnow(); + } + vector.add(openDoor); + + return vector; + } + + private JTable table = null; + private DefaultTableModel tableModel = null; } - + private static HashMap openDoorMethodMap = new HashMap() { - - private static final long serialVersionUID = 1L; - { - put(NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT, Res.string().getFingerPrint()); - put(NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD, Res.string().getCard()); - } + private static final long serialVersionUID = 1L; + + { + put(NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT, Res.string().getFingerPrint()); + put(NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD, Res.string().getCard()); + } }; - + public UserInfoShowPanel userShowPanel; public EventInfoShowPanel eventShowPanel; - + public static void main(String[] args) { - try { + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { - e.printStackTrace(); + e.printStackTrace(); } - - Res.string().switchLanguage(Res.LanguageType.English); - - AttendanceShowPanel demo = new AttendanceShowPanel(); - JFrame frame = new JFrame(); - frame.setSize(800, 560); - frame.add(demo); - System.out.println("AttendanceShowPanel Test"); - frame.setVisible(true); - } + + Res.string().switchLanguage(Res.LanguageType.English); + + AttendanceShowPanel demo = new AttendanceShowPanel(); + JFrame frame = new JFrame(); + frame.setSize(800, 560); + frame.add(demo); + System.out.println("AttendanceShowPanel Test"); + frame.setVisible(true); + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByFingerPrintIdDialog.java b/cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByFingerPrintIdDialog.java index ec410a8..1c41a2c 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByFingerPrintIdDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByFingerPrintIdDialog.java @@ -20,190 +20,193 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; + import com.example.dahua.module.AttendanceModule.*; /** * 通过指纹ID操作指纹对话框 */ -public class OperateByFingerPrintIdDialog extends JDialog{ - /** - * - */ - private static final long serialVersionUID = 1L; - - public OperateByFingerPrintIdDialog() { - setTitle(Res.string().getOperateByFingerPrintId()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(600, 500); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); - - ////////// 查询条件 ///////////////// - JLabel fingerPrintIdLabel = new JLabel(Res.string().getFingerPrintId(), JLabel.CENTER); - fingerPrintIdTextField = new JTextField(); - fingerPrintIdLabel.setPreferredSize(new Dimension(85, 20)); - fingerPrintIdTextField.setPreferredSize(new Dimension(100, 20)); - - ////////// 指纹功能 ///////////////// - searchFingerPrintBtn = new JButton(Res.string().getSearchFingerPrint()); - deleteFingerPrintBtn = new JButton(Res.string().getDeleteFingerPrint()); - - searchFingerPrintBtn.setPreferredSize(new Dimension(140, 20)); - deleteFingerPrintBtn.setPreferredSize(new Dimension(140, 20)); - - JPanel functionPanel = new JPanel(); - BorderEx.set(functionPanel, Res.string().getOperateByFingerPrintId(), 1); - functionPanel.add(fingerPrintIdLabel); - functionPanel.add(fingerPrintIdTextField); - functionPanel.add(searchFingerPrintBtn); - functionPanel.add(deleteFingerPrintBtn); - - //////////指纹信息 ///////////////// - JPanel fingerPrintPanel = new JPanel(); - BorderEx.set(fingerPrintPanel, Res.string().getFingerPrintInfo(), 1); - fingerPrintPanel.setLayout(null); - JLabel userIdLabel = new JLabel(Res.string().getUserId()); - userId = new JLabel(); - JLabel fingerPrintDataLabel = new JLabel(Res.string().getFingerPrintData()); - fingerPrintData = new JTextArea(); - fingerPrintData.setBackground(null); - fingerPrintData.setEditable(false); - fingerPrintData.setLineWrap(true); - JScrollPane scrollPane = new JScrollPane(fingerPrintData); - userIdLabel.setBounds(30, 30, 90, 20); - userId.setBounds(150, 30, 300, 20); - fingerPrintDataLabel.setBounds(30, 60, 150, 20); - fingerPrintData.setBounds(30, 80, 600, 20); - scrollPane.setBounds(30, 80, 550, 300); - scrollPane.setBorder(null); - - fingerPrintPanel.add(userIdLabel); - fingerPrintPanel.add(userId); - fingerPrintPanel.add(fingerPrintDataLabel); - fingerPrintPanel.add(scrollPane); - - add(functionPanel, BorderLayout.NORTH); - add(fingerPrintPanel, BorderLayout.CENTER); - - fingerPrintIdTextField.addKeyListener(new KeyListener() { - - public void keyTyped(KeyEvent e) { - int key = e.getKeyChar(); - if (key < 48 || key > 57) { - e.consume(); - } - } - - public void keyPressed(KeyEvent e) {} - - public void keyReleased(KeyEvent e) {} - }); - - listener = new FingerPrintIdOperateActionListener(); - searchFingerPrintBtn.addActionListener(listener); - deleteFingerPrintBtn.addActionListener(listener); - } - - public String getFingerPrintId() { - - if (fingerPrintIdTextField.getText().isEmpty()) { - JOptionPane.showMessageDialog(null, Res.string().getInput()+Res.string().getFingerPrintId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return null; - } - - try { - Integer.parseInt(fingerPrintIdTextField.getText()); - }catch (NumberFormatException e){ - JOptionPane.showMessageDialog(null, Res.string().getFingerPrintIdIllegal(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return null; - } - return fingerPrintIdTextField.getText(); - } - - public void searchFingerPrint() { - clearFingerPrintInfo(); - - String fingerPrintId = getFingerPrintId(); - if (fingerPrintId == null) { - return; - } - UserData userData = AttendanceModule.getFingerRecord(Integer.parseInt(fingerPrintId)); - if (userData == null) { - JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - if (userData.szFingerPrintInfo[0].length == 0) { - JOptionPane.showMessageDialog(null, Res.string().getFingerPrintIdNotExist(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - - dealFingerPrintInfo(userData); - } - - public void dealFingerPrintInfo(UserData userData) { - userId.setText(userData.userId); - fingerPrintData.setText(formatFingerPrintData(userData.szFingerPrintInfo[0])); - } - - private String formatFingerPrintData(byte[] fingerPrintData) { - String formatData = Base64.getEncoder().encodeToString(fingerPrintData); - return formatData; - } - - public void clearFingerPrintInfo() { - userId.setText(""); - fingerPrintData.setText(""); - } - - /** - * 按键监听实现类 - */ - private class FingerPrintIdOperateActionListener implements ActionListener { - - @Override - public void actionPerformed(ActionEvent arg0) { - - OPERATE_TYPE emType = getOperateType(arg0.getSource()); - switch(emType) { - case SEARCH_FINGERPRINT_BY_ID: - searchFingerPrint(); - break; - case DELETE_FINGERPRINT_BY_ID: - String fingerPrintId = getFingerPrintId(); - if (fingerPrintId == null) { - return; - } - new AttendanceOperateShareDialog(emType, fingerPrintId).setVisible(true); - break; - default: - break; - } - } - - private OPERATE_TYPE getOperateType(Object btn) { - OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN; - if (btn == searchFingerPrintBtn) { // 查找指纹 - type = OPERATE_TYPE.SEARCH_FINGERPRINT_BY_ID; - }else if (btn == deleteFingerPrintBtn) { // 删除指纹 - type = OPERATE_TYPE.DELETE_FINGERPRINT_BY_ID; - }else { - System.err.println("Unknown Event: " + btn); - } - - return type; - - } - } - - private JTextField fingerPrintIdTextField; - public JButton searchFingerPrintBtn; - private JButton deleteFingerPrintBtn; - private JLabel userId; - private JTextArea fingerPrintData; - private FingerPrintIdOperateActionListener listener; +public class OperateByFingerPrintIdDialog extends JDialog { + /** + * + */ + private static final long serialVersionUID = 1L; + + public OperateByFingerPrintIdDialog() { + setTitle(Res.string().getOperateByFingerPrintId()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(600, 500); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + + ////////// 查询条件 ///////////////// + JLabel fingerPrintIdLabel = new JLabel(Res.string().getFingerPrintId(), JLabel.CENTER); + fingerPrintIdTextField = new JTextField(); + fingerPrintIdLabel.setPreferredSize(new Dimension(85, 20)); + fingerPrintIdTextField.setPreferredSize(new Dimension(100, 20)); + + ////////// 指纹功能 ///////////////// + searchFingerPrintBtn = new JButton(Res.string().getSearchFingerPrint()); + deleteFingerPrintBtn = new JButton(Res.string().getDeleteFingerPrint()); + + searchFingerPrintBtn.setPreferredSize(new Dimension(140, 20)); + deleteFingerPrintBtn.setPreferredSize(new Dimension(140, 20)); + + JPanel functionPanel = new JPanel(); + BorderEx.set(functionPanel, Res.string().getOperateByFingerPrintId(), 1); + functionPanel.add(fingerPrintIdLabel); + functionPanel.add(fingerPrintIdTextField); + functionPanel.add(searchFingerPrintBtn); + functionPanel.add(deleteFingerPrintBtn); + + //////////指纹信息 ///////////////// + JPanel fingerPrintPanel = new JPanel(); + BorderEx.set(fingerPrintPanel, Res.string().getFingerPrintInfo(), 1); + fingerPrintPanel.setLayout(null); + JLabel userIdLabel = new JLabel(Res.string().getUserId()); + userId = new JLabel(); + JLabel fingerPrintDataLabel = new JLabel(Res.string().getFingerPrintData()); + fingerPrintData = new JTextArea(); + fingerPrintData.setBackground(null); + fingerPrintData.setEditable(false); + fingerPrintData.setLineWrap(true); + JScrollPane scrollPane = new JScrollPane(fingerPrintData); + userIdLabel.setBounds(30, 30, 90, 20); + userId.setBounds(150, 30, 300, 20); + fingerPrintDataLabel.setBounds(30, 60, 150, 20); + fingerPrintData.setBounds(30, 80, 600, 20); + scrollPane.setBounds(30, 80, 550, 300); + scrollPane.setBorder(null); + + fingerPrintPanel.add(userIdLabel); + fingerPrintPanel.add(userId); + fingerPrintPanel.add(fingerPrintDataLabel); + fingerPrintPanel.add(scrollPane); + + add(functionPanel, BorderLayout.NORTH); + add(fingerPrintPanel, BorderLayout.CENTER); + + fingerPrintIdTextField.addKeyListener(new KeyListener() { + + public void keyTyped(KeyEvent e) { + int key = e.getKeyChar(); + if (key < 48 || key > 57) { + e.consume(); + } + } + + public void keyPressed(KeyEvent e) { + } + + public void keyReleased(KeyEvent e) { + } + }); + + listener = new FingerPrintIdOperateActionListener(); + searchFingerPrintBtn.addActionListener(listener); + deleteFingerPrintBtn.addActionListener(listener); + } + + public String getFingerPrintId() { + + if (fingerPrintIdTextField.getText().isEmpty()) { + JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getFingerPrintId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return null; + } + + try { + Integer.parseInt(fingerPrintIdTextField.getText()); + } catch (NumberFormatException e) { + JOptionPane.showMessageDialog(null, Res.string().getFingerPrintIdIllegal(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return null; + } + return fingerPrintIdTextField.getText(); + } + + public void searchFingerPrint() { + clearFingerPrintInfo(); + + String fingerPrintId = getFingerPrintId(); + if (fingerPrintId == null) { + return; + } + UserData userData = AttendanceModule.getFingerRecord(Integer.parseInt(fingerPrintId)); + if (userData == null) { + JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + if (userData.szFingerPrintInfo[0].length == 0) { + JOptionPane.showMessageDialog(null, Res.string().getFingerPrintIdNotExist(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + + dealFingerPrintInfo(userData); + } + + public void dealFingerPrintInfo(UserData userData) { + userId.setText(userData.userId); + fingerPrintData.setText(formatFingerPrintData(userData.szFingerPrintInfo[0])); + } + + private String formatFingerPrintData(byte[] fingerPrintData) { + String formatData = Base64.getEncoder().encodeToString(fingerPrintData); + return formatData; + } + + public void clearFingerPrintInfo() { + userId.setText(""); + fingerPrintData.setText(""); + } + + /** + * 按键监听实现类 + */ + private class FingerPrintIdOperateActionListener implements ActionListener { + + @Override + public void actionPerformed(ActionEvent arg0) { + + OPERATE_TYPE emType = getOperateType(arg0.getSource()); + switch (emType) { + case SEARCH_FINGERPRINT_BY_ID: + searchFingerPrint(); + break; + case DELETE_FINGERPRINT_BY_ID: + String fingerPrintId = getFingerPrintId(); + if (fingerPrintId == null) { + return; + } + new AttendanceOperateShareDialog(emType, fingerPrintId).setVisible(true); + break; + default: + break; + } + } + + private OPERATE_TYPE getOperateType(Object btn) { + OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN; + if (btn == searchFingerPrintBtn) { // 查找指纹 + type = OPERATE_TYPE.SEARCH_FINGERPRINT_BY_ID; + } else if (btn == deleteFingerPrintBtn) { // 删除指纹 + type = OPERATE_TYPE.DELETE_FINGERPRINT_BY_ID; + } else { + System.err.println("Unknown Event: " + btn); + } + + return type; + + } + } + + private JTextField fingerPrintIdTextField; + public JButton searchFingerPrintBtn; + private JButton deleteFingerPrintBtn; + private JLabel userId; + private JTextArea fingerPrintData; + private FingerPrintIdOperateActionListener listener; } \ No newline at end of file diff --git a/cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByUserIdDialog.java b/cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByUserIdDialog.java index f1787e8..581b2de 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByUserIdDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/attendance/OperateByUserIdDialog.java @@ -24,258 +24,259 @@ import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; + import com.example.dahua.module.AttendanceModule.*; -public class OperateByUserIdDialog extends JDialog{ - /** - * - */ - private static final long serialVersionUID = 1L; - private UserData userData; - - public OperateByUserIdDialog(UserData userData) { - setTitle(Res.string().getOperateByUserId()); - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(570, 383); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); - - ////////// 用户信息 (不可改变)///////////////// - JPanel userInfoPanel = new JPanel(); - userInfoPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); - BorderEx.set(userInfoPanel, Res.string().getUserInfo(), 2); - - JLabel userIdLabel = new JLabel(Res.string().getUserId(), JLabel.CENTER); - JTextField userIdTextField = new JTextField(userData.userId); - JLabel userNameLabel = new JLabel(Res.string().getUserName(true), JLabel.CENTER); - JTextField userNameTextField = new JTextField(userData.userName); - JLabel cardNoLabel = new JLabel(Res.string().getCardNo(), JLabel.CENTER); - JTextField cardNoTextField = new JTextField(userData.cardNo); - - userIdTextField.setEnabled(false); - userNameTextField.setEnabled(false); - cardNoTextField.setEnabled(false); - - Dimension dimLable = new Dimension(55, 20); - userIdLabel.setPreferredSize(dimLable); - userNameLabel.setPreferredSize(dimLable); - cardNoLabel.setPreferredSize(dimLable); - Dimension dimValue = new Dimension(100, 20); - userIdTextField.setPreferredSize(dimValue); - userNameTextField.setPreferredSize(dimValue); - cardNoTextField.setPreferredSize(dimValue); - - userInfoPanel.add(userIdLabel); - userInfoPanel.add(userIdTextField); - userInfoPanel.add(userNameLabel); - userInfoPanel.add(userNameTextField); - userInfoPanel.add(cardNoLabel); - userInfoPanel.add(cardNoTextField); - - ////////// 指纹功能 ///////////////// - JPanel functionPanel = new JPanel(); - BorderEx.set(functionPanel, Res.string().getOperateByUserId(), 2); - searchFingerPrintBtn = new JButton(Res.string().getSearchFingerPrint()); - addFingerPrintBtn = new JButton(Res.string().getAddFingerPrint()); - deleteFingerPrintBtn = new JButton(Res.string().getDeleteFingerPrint()); - - searchFingerPrintBtn.setPreferredSize(new Dimension(150, 20)); - addFingerPrintBtn.setPreferredSize(new Dimension(150, 20)); - deleteFingerPrintBtn.setPreferredSize(new Dimension(150, 20)); - - functionPanel.add(searchFingerPrintBtn); - functionPanel.add(addFingerPrintBtn); - functionPanel.add(deleteFingerPrintBtn); - - //////////布局 ///////////////// - JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); - splitPane.setDividerSize(0); - splitPane.setBorder(null); - splitPane.add(userInfoPanel, JSplitPane.TOP); - splitPane.add(functionPanel, JSplitPane.BOTTOM); - add(splitPane, BorderLayout.NORTH); - - fingerPrintShowPanel = new FingerPrintShowPanel(); - add(fingerPrintShowPanel, BorderLayout.CENTER); - - listener = new UserIdOperateActionListener(); - searchFingerPrintBtn.addActionListener(listener); - addFingerPrintBtn.addActionListener(listener); - deleteFingerPrintBtn.addActionListener(listener); - - this.userData = userData; - } - - public void searchFingerPrint() { - clearTable(); - boolean bSuccess = AttendanceModule.getFingerByUserId(userData.userId, userData); - if (bSuccess){ - fingerPrintShowPanel.insertData(userData); - } else { - JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - } - } - - public void clearTable() { - fingerPrintShowPanel.clearData(); - } - - public void addFingerPrint(int fingerPrintId, byte[] fingerPrintData) { - fingerPrintShowPanel.insertData(fingerPrintId, fingerPrintData); - } - - /** - * 按键监听实现类 - */ - private class UserIdOperateActionListener implements ActionListener { - - @Override - public void actionPerformed(ActionEvent arg0) { - - OPERATE_TYPE emType = getOperateType(arg0.getSource()); - switch(emType) { - case SEARCH_FINGERPRINT_BY_USERID: - searchFingerPrint(); - break; - case ADD_FINGERPRINT: - new AddFingerPrintDialog(userData.userId).setVisible(true); - break; - case DELETE_FINGERPRINT_BY_USERID: - new AttendanceOperateShareDialog(emType, userData).setVisible(true); - break; - default: - break; - } - } - - private OPERATE_TYPE getOperateType(Object btn) { - OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN; - if (btn == searchFingerPrintBtn) { // 查找指纹 - type = OPERATE_TYPE.SEARCH_FINGERPRINT_BY_USERID; - }else if (btn == addFingerPrintBtn) { // 添加指纹 - type = OPERATE_TYPE.ADD_FINGERPRINT; - }else if (btn == deleteFingerPrintBtn) { // 删除指纹(用户ID) - type = OPERATE_TYPE.DELETE_FINGERPRINT_BY_USERID; - }else { - System.err.println("Unknown Event: " + btn); - } - - return type; - - } - } - - /** +public class OperateByUserIdDialog extends JDialog { + /** + * + */ + private static final long serialVersionUID = 1L; + private UserData userData; + + public OperateByUserIdDialog(UserData userData) { + setTitle(Res.string().getOperateByUserId()); + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(570, 383); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + + ////////// 用户信息 (不可改变)///////////////// + JPanel userInfoPanel = new JPanel(); + userInfoPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); + BorderEx.set(userInfoPanel, Res.string().getUserInfo(), 2); + + JLabel userIdLabel = new JLabel(Res.string().getUserId(), JLabel.CENTER); + JTextField userIdTextField = new JTextField(userData.userId); + JLabel userNameLabel = new JLabel(Res.string().getUserName(true), JLabel.CENTER); + JTextField userNameTextField = new JTextField(userData.userName); + JLabel cardNoLabel = new JLabel(Res.string().getCardNo(), JLabel.CENTER); + JTextField cardNoTextField = new JTextField(userData.cardNo); + + userIdTextField.setEnabled(false); + userNameTextField.setEnabled(false); + cardNoTextField.setEnabled(false); + + Dimension dimLable = new Dimension(55, 20); + userIdLabel.setPreferredSize(dimLable); + userNameLabel.setPreferredSize(dimLable); + cardNoLabel.setPreferredSize(dimLable); + Dimension dimValue = new Dimension(100, 20); + userIdTextField.setPreferredSize(dimValue); + userNameTextField.setPreferredSize(dimValue); + cardNoTextField.setPreferredSize(dimValue); + + userInfoPanel.add(userIdLabel); + userInfoPanel.add(userIdTextField); + userInfoPanel.add(userNameLabel); + userInfoPanel.add(userNameTextField); + userInfoPanel.add(cardNoLabel); + userInfoPanel.add(cardNoTextField); + + ////////// 指纹功能 ///////////////// + JPanel functionPanel = new JPanel(); + BorderEx.set(functionPanel, Res.string().getOperateByUserId(), 2); + searchFingerPrintBtn = new JButton(Res.string().getSearchFingerPrint()); + addFingerPrintBtn = new JButton(Res.string().getAddFingerPrint()); + deleteFingerPrintBtn = new JButton(Res.string().getDeleteFingerPrint()); + + searchFingerPrintBtn.setPreferredSize(new Dimension(150, 20)); + addFingerPrintBtn.setPreferredSize(new Dimension(150, 20)); + deleteFingerPrintBtn.setPreferredSize(new Dimension(150, 20)); + + functionPanel.add(searchFingerPrintBtn); + functionPanel.add(addFingerPrintBtn); + functionPanel.add(deleteFingerPrintBtn); + + //////////布局 ///////////////// + JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + splitPane.setDividerSize(0); + splitPane.setBorder(null); + splitPane.add(userInfoPanel, JSplitPane.TOP); + splitPane.add(functionPanel, JSplitPane.BOTTOM); + add(splitPane, BorderLayout.NORTH); + + fingerPrintShowPanel = new FingerPrintShowPanel(); + add(fingerPrintShowPanel, BorderLayout.CENTER); + + listener = new UserIdOperateActionListener(); + searchFingerPrintBtn.addActionListener(listener); + addFingerPrintBtn.addActionListener(listener); + deleteFingerPrintBtn.addActionListener(listener); + + this.userData = userData; + } + + public void searchFingerPrint() { + clearTable(); + boolean bSuccess = AttendanceModule.getFingerByUserId(userData.userId, userData); + if (bSuccess) { + fingerPrintShowPanel.insertData(userData); + } else { + JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + } + } + + public void clearTable() { + fingerPrintShowPanel.clearData(); + } + + public void addFingerPrint(int fingerPrintId, byte[] fingerPrintData) { + fingerPrintShowPanel.insertData(fingerPrintId, fingerPrintData); + } + + /** + * 按键监听实现类 + */ + private class UserIdOperateActionListener implements ActionListener { + + @Override + public void actionPerformed(ActionEvent arg0) { + + OPERATE_TYPE emType = getOperateType(arg0.getSource()); + switch (emType) { + case SEARCH_FINGERPRINT_BY_USERID: + searchFingerPrint(); + break; + case ADD_FINGERPRINT: + new AddFingerPrintDialog(userData.userId).setVisible(true); + break; + case DELETE_FINGERPRINT_BY_USERID: + new AttendanceOperateShareDialog(emType, userData).setVisible(true); + break; + default: + break; + } + } + + private OPERATE_TYPE getOperateType(Object btn) { + OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN; + if (btn == searchFingerPrintBtn) { // 查找指纹 + type = OPERATE_TYPE.SEARCH_FINGERPRINT_BY_USERID; + } else if (btn == addFingerPrintBtn) { // 添加指纹 + type = OPERATE_TYPE.ADD_FINGERPRINT; + } else if (btn == deleteFingerPrintBtn) { // 删除指纹(用户ID) + type = OPERATE_TYPE.DELETE_FINGERPRINT_BY_USERID; + } else { + System.err.println("Unknown Event: " + btn); + } + + return type; + + } + } + + /** * 指纹信息显示界面 - * */ + */ public class FingerPrintShowPanel extends JPanel { - /** - * - */ - private static final long serialVersionUID = 1L; - public static final int INDEX = 0; - public static final int USER_ID = 1; - public static final int FINGERPRINT_ID = 2; - public static final int FINGERPRINT_DATA = 3; - - public final static int MAX_FINGERPRINT_NUM = 10; // 最大指纹个数, 也做为显示个数 - private int realRows = 0; // 实际显示个数 - - public FingerPrintShowPanel() { - BorderEx.set(this, Res.string().getFingerPrintInfo(), 1); - setLayout(new BorderLayout()); - setPreferredSize(new Dimension(550, 375)); - Vector columnNames = new Vector(); - columnNames.add(Res.string().getIndex()); // 序号 - columnNames.add(Res.string().getUserId()); // 用户编号 - columnNames.add(Res.string().getFingerPrintId()); // 指纹ID - columnNames.add(Res.string().getFingerPrintData()); // 指纹 - - tableModel = new DefaultTableModel(null, columnNames); - table = new JTable(tableModel) { - private static final long serialVersionUID = 1L; - - public boolean isCellEditable(int rowIndex, int columnIndex) { // 不可编辑 - return false; - } - }; - - tableModel.setRowCount(MAX_FINGERPRINT_NUM); // 设置最小显示行 - - table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行(其实无意义) - - table.getColumnModel().getColumn(INDEX).setPreferredWidth(80); - table.getColumnModel().getColumn(USER_ID).setPreferredWidth(100); - table.getColumnModel().getColumn(FINGERPRINT_ID).setPreferredWidth(100); - table.getColumnModel().getColumn(FINGERPRINT_DATA).setPreferredWidth(8888); - - ((DefaultTableCellRenderer) - table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); - - table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - - JScrollPane scrollPane = new JScrollPane(table); - scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); - scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - - add(scrollPane, BorderLayout.CENTER); - } - - public void insertData(UserData userData) { - if (userData.nFingerPrintIDs == null) { - return; - } - - clearData(); - tableModel.setRowCount(0); - for (int i = 0; i < userData.nFingerPrintIDs.length; ++i) { - insertFingerPrintData(userData.nFingerPrintIDs[i], userData.szFingerPrintInfo[i]); - } - - tableModel.setRowCount(MAX_FINGERPRINT_NUM); - table.updateUI(); - } - - public void insertData(int fingerPrintId, byte[] fingerPrintData) { - tableModel.setRowCount(realRows); - insertFingerPrintData(fingerPrintId, fingerPrintData); - tableModel.setRowCount(MAX_FINGERPRINT_NUM); - table.updateUI(); - } - - private void insertFingerPrintData(int fingerPrintId, byte[] fingerPrintData) { - ++realRows; - Vector vector = new Vector(); - vector.add(String.valueOf(realRows)); - vector.add(userData.userId); - vector.add(String.valueOf(fingerPrintId)); - vector.add(formatFingerPrintData(fingerPrintData)); - tableModel.addRow(vector); - } - - private String formatFingerPrintData(byte[] fingerPrintData) { - String formatData = Base64.getEncoder().encodeToString(fingerPrintData); - return formatData; - } - - public void clearData() { - realRows = 0; - tableModel.setRowCount(0); - tableModel.setRowCount(MAX_FINGERPRINT_NUM); - table.updateUI(); - } - - private JTable table = null; - private DefaultTableModel tableModel = null; + /** + * + */ + private static final long serialVersionUID = 1L; + public static final int INDEX = 0; + public static final int USER_ID = 1; + public static final int FINGERPRINT_ID = 2; + public static final int FINGERPRINT_DATA = 3; + + public final static int MAX_FINGERPRINT_NUM = 10; // 最大指纹个数, 也做为显示个数 + private int realRows = 0; // 实际显示个数 + + public FingerPrintShowPanel() { + BorderEx.set(this, Res.string().getFingerPrintInfo(), 1); + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(550, 375)); + Vector columnNames = new Vector(); + columnNames.add(Res.string().getIndex()); // 序号 + columnNames.add(Res.string().getUserId()); // 用户编号 + columnNames.add(Res.string().getFingerPrintId()); // 指纹ID + columnNames.add(Res.string().getFingerPrintData()); // 指纹 + + tableModel = new DefaultTableModel(null, columnNames); + table = new JTable(tableModel) { + private static final long serialVersionUID = 1L; + + public boolean isCellEditable(int rowIndex, int columnIndex) { // 不可编辑 + return false; + } + }; + + tableModel.setRowCount(MAX_FINGERPRINT_NUM); // 设置最小显示行 + + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行(其实无意义) + + table.getColumnModel().getColumn(INDEX).setPreferredWidth(80); + table.getColumnModel().getColumn(USER_ID).setPreferredWidth(100); + table.getColumnModel().getColumn(FINGERPRINT_ID).setPreferredWidth(100); + table.getColumnModel().getColumn(FINGERPRINT_DATA).setPreferredWidth(8888); + + ((DefaultTableCellRenderer) + table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); + + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + JScrollPane scrollPane = new JScrollPane(table); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + + add(scrollPane, BorderLayout.CENTER); + } + + public void insertData(UserData userData) { + if (userData.nFingerPrintIDs == null) { + return; + } + + clearData(); + tableModel.setRowCount(0); + for (int i = 0; i < userData.nFingerPrintIDs.length; ++i) { + insertFingerPrintData(userData.nFingerPrintIDs[i], userData.szFingerPrintInfo[i]); + } + + tableModel.setRowCount(MAX_FINGERPRINT_NUM); + table.updateUI(); + } + + public void insertData(int fingerPrintId, byte[] fingerPrintData) { + tableModel.setRowCount(realRows); + insertFingerPrintData(fingerPrintId, fingerPrintData); + tableModel.setRowCount(MAX_FINGERPRINT_NUM); + table.updateUI(); + } + + private void insertFingerPrintData(int fingerPrintId, byte[] fingerPrintData) { + ++realRows; + Vector vector = new Vector(); + vector.add(String.valueOf(realRows)); + vector.add(userData.userId); + vector.add(String.valueOf(fingerPrintId)); + vector.add(formatFingerPrintData(fingerPrintData)); + tableModel.addRow(vector); + } + + private String formatFingerPrintData(byte[] fingerPrintData) { + String formatData = Base64.getEncoder().encodeToString(fingerPrintData); + return formatData; + } + + public void clearData() { + realRows = 0; + tableModel.setRowCount(0); + tableModel.setRowCount(MAX_FINGERPRINT_NUM); + table.updateUI(); + } + + private JTable table = null; + private DefaultTableModel tableModel = null; } - - public JButton searchFingerPrintBtn; - private JButton addFingerPrintBtn; - private JButton deleteFingerPrintBtn; - private UserIdOperateActionListener listener; - private FingerPrintShowPanel fingerPrintShowPanel; + + public JButton searchFingerPrintBtn; + private JButton addFingerPrintBtn; + private JButton deleteFingerPrintBtn; + private UserIdOperateActionListener listener; + private FingerPrintShowPanel fingerPrintShowPanel; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/attendance/SubscribePanel.java b/cloud/dahua/src/main/java/com/example/dahua/attendance/SubscribePanel.java index 5e1ec84..6aad51f 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/attendance/SubscribePanel.java +++ b/cloud/dahua/src/main/java/com/example/dahua/attendance/SubscribePanel.java @@ -26,128 +26,130 @@ import com.example.dahua.module.AttendanceModule.*; /** * 订阅面板 */ -public class SubscribePanel extends JPanel{ - /** - * - */ - private static final long serialVersionUID = 1L; - private java.awt.Component target = this; // 目标 - private boolean bSubscribe = false; // 订阅标志 - private EventInfoShowPanel eventShowPanel; // 事件显示界面 - public SubscribePanel(EventInfoShowPanel eventPanel) { - BorderEx.set(this, Res.string().getSubscribe(), 1); - setLayout(new FlowLayout(FlowLayout.CENTER, 5, 30)); - setPreferredSize(new Dimension(180, 80)); - - eventShowPanel = eventPanel; - callback = new fAnalyzerDataCB(); - - subscribeBtn = new JButton(Res.string().getSubscribe()); - subscribeBtn.setPreferredSize(new Dimension(150, 20)); - - add(subscribeBtn); - - subscribeBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (bSubscribe) { - AttendanceModule.stopRealLoadPicture(); - eventShowPanel.clearEvent(); - setSubscribeStatus(false); - }else { - if (AttendanceModule.realLoadPicture(callback,null)) { - setSubscribeStatus(true); - }else { - JOptionPane.showMessageDialog(null, Res.string().getSubscribeFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return; - } - } - } - - }); - - subscribeBtn.setEnabled(false); - } - - public void setButtonEnable(boolean b) { - setSubscribeStatus(false); - subscribeBtn.setEnabled(b); - } - - public void setSubscribeStatus(boolean b) { - bSubscribe = b; - if (bSubscribe) { - subscribeBtn.setText(Res.string().getUnSubscribe()); - }else { - subscribeBtn.setText(Res.string().getSubscribe()); - } - } - - /** +public class SubscribePanel extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + private java.awt.Component target = this; // 目标 + private boolean bSubscribe = false; // 订阅标志 + private EventInfoShowPanel eventShowPanel; // 事件显示界面 + + public SubscribePanel(EventInfoShowPanel eventPanel) { + BorderEx.set(this, Res.string().getSubscribe(), 1); + setLayout(new FlowLayout(FlowLayout.CENTER, 5, 30)); + setPreferredSize(new Dimension(180, 80)); + + eventShowPanel = eventPanel; + callback = new fAnalyzerDataCB(); + + subscribeBtn = new JButton(Res.string().getSubscribe()); + subscribeBtn.setPreferredSize(new Dimension(150, 20)); + + add(subscribeBtn); + + subscribeBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (bSubscribe) { + AttendanceModule.stopRealLoadPicture(); + eventShowPanel.clearEvent(); + setSubscribeStatus(false); + } else { + if (AttendanceModule.realLoadPicture(callback, null)) { + setSubscribeStatus(true); + } else { + JOptionPane.showMessageDialog(null, Res.string().getSubscribeFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return; + } + } + } + + }); + + subscribeBtn.setEnabled(false); + } + + public void setButtonEnable(boolean b) { + setSubscribeStatus(false); + subscribeBtn.setEnabled(b); + } + + public void setSubscribeStatus(boolean b) { + bSubscribe = b; + if (bSubscribe) { + subscribeBtn.setText(Res.string().getUnSubscribe()); + } else { + subscribeBtn.setText(Res.string().getSubscribe()); + } + } + + /** * 智能报警事件回调 **/ public class fAnalyzerDataCB implements fAnalyzerDataCallBack { - public final EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); - @Override - public int invoke(LLong lAnalyzerHandle, int dwAlarmType, - Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, - Pointer dwUser, int nSequence, Pointer reserved) { - if(pAlarmInfo == null) { - return 0; - } - - switch(dwAlarmType) { - case NetSDKLib.EVENT_IVS_ACCESS_CTL: // 门禁事件 - DEV_EVENT_ACCESS_CTL_INFO event = new DEV_EVENT_ACCESS_CTL_INFO(); - ToolKits.GetPointerData(pAlarmInfo, event); - AccessEventInfo accessEvent = new AccessEventInfo(); - accessEvent.userId = new String(event.szUserID).trim(); - accessEvent.cardNo = new String(event.szCardNo).trim(); - accessEvent.eventTime = event.UTC.toStringTime(); - accessEvent.openDoorMethod = event.emOpenMethod; - if (eventQueue != null) { - eventQueue.postEvent(new AccessEvent(target, accessEvent)); - } - break; + public final EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); + + @Override + public int invoke(LLong lAnalyzerHandle, int dwAlarmType, + Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, + Pointer dwUser, int nSequence, Pointer reserved) { + if (pAlarmInfo == null) { + return 0; + } + + switch (dwAlarmType) { + case NetSDKLib.EVENT_IVS_ACCESS_CTL: // 门禁事件 + DEV_EVENT_ACCESS_CTL_INFO event = new DEV_EVENT_ACCESS_CTL_INFO(); + ToolKits.GetPointerData(pAlarmInfo, event); + AccessEventInfo accessEvent = new AccessEventInfo(); + accessEvent.userId = new String(event.szUserID).trim(); + accessEvent.cardNo = new String(event.szCardNo).trim(); + accessEvent.eventTime = event.UTC.toStringTime(); + accessEvent.openDoorMethod = event.emOpenMethod; + if (eventQueue != null) { + eventQueue.postEvent(new AccessEvent(target, accessEvent)); + } + break; default: - break; - } + break; + } - return 0; - } - } + return 0; + } + } /** * 门禁事件 **/ - class AccessEvent extends AWTEvent { - /** - * - */ - private static final long serialVersionUID = 1L; - public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1; - private AccessEventInfo accessEvent; - - public AccessEvent(Object target, AccessEventInfo accessEvent) { - super(target, EVENT_ID); - this.accessEvent = accessEvent; - } - - public AccessEventInfo getAccessEventInfo() { - return this.accessEvent; - } - } - - @Override - protected void processEvent( AWTEvent event) { - if ( event instanceof AccessEvent) { - AccessEventInfo accessEventInfo = ((AccessEvent)event).getAccessEventInfo(); - eventShowPanel.insertEvent(accessEventInfo); - } else { + class AccessEvent extends AWTEvent { + /** + * + */ + private static final long serialVersionUID = 1L; + public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1; + private AccessEventInfo accessEvent; + + public AccessEvent(Object target, AccessEventInfo accessEvent) { + super(target, EVENT_ID); + this.accessEvent = accessEvent; + } + + public AccessEventInfo getAccessEventInfo() { + return this.accessEvent; + } + } + + @Override + protected void processEvent(AWTEvent event) { + if (event instanceof AccessEvent) { + AccessEventInfo accessEventInfo = ((AccessEvent) event).getAccessEventInfo(); + eventShowPanel.insertEvent(accessEventInfo); + } else { super.processEvent(event); } } - private JButton subscribeBtn; // 订阅按钮 - private fAnalyzerDataCallBack callback; // 事件回调 + private JButton subscribeBtn; // 订阅按钮 + private fAnalyzerDataCallBack callback; // 事件回调 } diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/DeviceInfoBean.java b/cloud/dahua/src/main/java/com/example/dahua/bean/DeviceInfoBean.java index 2ec2d67..0513fd4 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/bean/DeviceInfoBean.java +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/DeviceInfoBean.java @@ -14,6 +14,7 @@ public class DeviceInfoBean { public String getDevcieId() { return devcieId; } + public void setDevcieId(String devcieId) { this.devcieId = devcieId; } @@ -21,6 +22,7 @@ public class DeviceInfoBean { public String getDeviceIp() { return deviceIp; } + public void setDeviceIp(String deviceIp) { this.deviceIp = deviceIp; } @@ -28,6 +30,7 @@ public class DeviceInfoBean { public int getDevicePort() { return port; } + public void setDevicePort(int port) { this.port = port; } @@ -35,6 +38,7 @@ public class DeviceInfoBean { public String getUsername() { return username; } + public void setUsername(String username) { this.username = username; } @@ -42,6 +46,7 @@ public class DeviceInfoBean { public String getPassword() { return password; } + public void setPassword(String password) { this.password = password; } @@ -49,6 +54,7 @@ public class DeviceInfoBean { public NetSDKLib.LLong getLoginHandle() { return loginHandle; } + public void setLoginHandle(NetSDKLib.LLong loginHandle) { this.loginHandle = loginHandle; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/SendCards.java b/cloud/dahua/src/main/java/com/example/dahua/bean/SendCards.java new file mode 100644 index 0000000..f17f28a --- /dev/null +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/SendCards.java @@ -0,0 +1,86 @@ +package com.example.dahua.bean; + +public class SendCards { + + private String cardNo; + + private String endTime; + + private String id; + + private String shiduan; + + private String sn; + + private String startTime; + + private String type; + + private String updateId; + + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShiduan() { + return shiduan; + } + + public void setShiduan(String shiduan) { + this.shiduan = shiduan; + } + + public String getSn() { + return sn; + } + + public void setSn(String sn) { + this.sn = sn; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getUpdateId() { + return updateId; + } + + public void setUpdateId(String updateId) { + this.updateId = updateId; + } + + +} diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java b/cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java index dd3d1d2..db156d2 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java @@ -35,7 +35,7 @@ public class StudentBean implements Serializable { private Date AddTime; - private int Sex; + private int Sex; private String Face; @@ -45,6 +45,26 @@ public class StudentBean implements Serializable { private String student_id; + private String user_id; + + private String studentcode; + + public String getUser_id() { + return user_id; + } + + public void setUser_id(String user_id) { + this.user_id = user_id; + } + + public String getStudentcode() { + return studentcode; + } + + public void setStudentcode(String studentcode) { + this.studentcode = studentcode; + } + public String getUserId() { return UserId; } @@ -228,6 +248,8 @@ public class StudentBean implements Serializable { ", StudentCode='" + StudentCode + '\'' + ", student_num='" + student_num + '\'' + ", student_id='" + student_id + '\'' + + ", user_id='" + user_id + '\'' + + ", studentcode='" + studentcode + '\'' + '}'; } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/UserInfoBean.java b/cloud/dahua/src/main/java/com/example/dahua/bean/UserInfoBean.java index b08335f..e7ad18a 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/bean/UserInfoBean.java +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/UserInfoBean.java @@ -20,6 +20,16 @@ public class UserInfoBean implements Serializable { private String photo; + private String class_id; + + public String getClass_id() { + return class_id; + } + + public void setClass_id(String class_id) { + this.class_id = class_id; + } + public String getPhoto() { return photo; } @@ -86,14 +96,16 @@ public class UserInfoBean implements Serializable { @Override public String toString() { - return student_num; - /* return "UserInfoBean{" + + return "UserInfoBean{" + "student_id='" + student_id + '\'' + ", student_num='" + student_num + '\'' + ", name='" + name + '\'' + ", class_name='" + class_name + '\'' + ", user_id='" + user_id + '\'' + ", studentcode='" + studentcode + '\'' + - '}';*/ + ", school_id='" + school_id + '\'' + + ", photo='" + photo + '\'' + + ", class_id='" + class_id + '\'' + + '}'; } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/Base64.java b/cloud/dahua/src/main/java/com/example/dahua/common/Base64.java index 9241deb..e646e64 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/Base64.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/Base64.java @@ -26,6 +26,7 @@ // Base64解码 使用1.8版本源码 鉴于1.8部分特性1.6版本使用不到 故只保留能使用到的代码 其余删除 package com.example.dahua.common; + import java.util.Arrays; /** @@ -47,22 +48,23 @@ import java.util.Arrays; * method of this class will cause a {@link NullPointerException * NullPointerException} to be thrown. * - * @author Xueming Shen - * @since 1.8 + * @author Xueming Shen + * @since 1.8 */ public class Base64 { - private Base64() {} + private Base64() { + } /** * Returns a {@link Encoder} that encodes using the * Basic type base64 encoding scheme. * - * @return A Base64 encoder. + * @return A Base64 encoder. */ public static Encoder getEncoder() { - return Encoder.RFC4648; + return Encoder.RFC4648; } /** @@ -77,8 +79,8 @@ public class Base64 { * {@link NullPointerException NullPointerException} to * be thrown. * - * @see Decoder - * @since 1.8 + * @see Decoder + * @since 1.8 */ public static class Encoder { @@ -100,11 +102,11 @@ public class Base64 { * in "Table 1: The Base64 Alphabet" of RFC 2045 (and RFC 4648). */ private static final char[] toBase64 = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; /** @@ -113,11 +115,11 @@ public class Base64 { * '_'. This table is used when BASE64_URL is specified. */ private static final char[] toBase64URL = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_' + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_' }; static final Encoder RFC4648 = new Encoder(false, null, -1, true); @@ -140,17 +142,16 @@ public class Base64 { * byte array using the {@link Base64} encoding scheme. The returned byte * array is of the length of the resulting bytes. * - * @param src - * the byte array to encode - * @return A newly-allocated byte array containing the resulting - * encoded bytes. + * @param src the byte array to encode + * @return A newly-allocated byte array containing the resulting + * encoded bytes. */ public byte[] encode(byte[] src) { int len = outLength(src.length); // dst array size byte[] dst = new byte[len]; int ret = encode0(src, 0, src.length, dst); if (ret != dst.length) - return Arrays.copyOf(dst, ret); + return Arrays.copyOf(dst, ret); return dst; } @@ -164,20 +165,17 @@ public class Base64 { * all bytes from the input byte array. No bytes will be written to the * output byte array if the output byte array is not big enough. * - * @param src - * the byte array to encode - * @param dst - * the output byte array - * @return The number of bytes written to the output byte array - * - * @throws IllegalArgumentException if {@code dst} does not have enough - * space for encoding all input bytes. + * @param src the byte array to encode + * @param dst the output byte array + * @return The number of bytes written to the output byte array + * @throws IllegalArgumentException if {@code dst} does not have enough + * space for encoding all input bytes. */ public int encode(byte[] src, byte[] dst) { int len = outLength(src.length); // dst array size if (dst.length < len) throw new IllegalArgumentException( - "Output byte array is too small for encoding all input bytes"); + "Output byte array is too small for encoding all input bytes"); return encode0(src, 0, src.length, dst); } @@ -189,9 +187,8 @@ public class Base64 { * effect as invoking * {@code new String(encode(src), StandardCharsets.ISO_8859_1)}. * - * @param src - * the byte array to encode - * @return A String containing the resulting Base64 encoded characters + * @param src the byte array to encode + * @return A String containing the resulting Base64 encoded characters */ @SuppressWarnings("deprecation") public String encodeToString(byte[] src) { @@ -209,7 +206,7 @@ public class Base64 { * non-padding encoding operation. * * @return an equivalent encoder that encodes without adding any - * padding character at the end + * padding character at the end */ public Encoder withoutPadding() { if (!doPadding) @@ -222,42 +219,42 @@ public class Base64 { int sp = off; int slen = (end - off) / 3 * 3; int sl = off + slen; - if (linemax > 0 && slen > linemax / 4 * 3) + if (linemax > 0 && slen > linemax / 4 * 3) slen = linemax / 4 * 3; int dp = 0; while (sp < sl) { int sl0 = Math.min(sp + slen, sl); - for (int sp0 = sp, dp0 = dp ; sp0 < sl0; ) { + for (int sp0 = sp, dp0 = dp; sp0 < sl0; ) { int bits = (src[sp0++] & 0xff) << 16 | - (src[sp0++] & 0xff) << 8 | - (src[sp0++] & 0xff); - dst[dp0++] = (byte)base64[(bits >>> 18) & 0x3f]; - dst[dp0++] = (byte)base64[(bits >>> 12) & 0x3f]; - dst[dp0++] = (byte)base64[(bits >>> 6) & 0x3f]; - dst[dp0++] = (byte)base64[bits & 0x3f]; + (src[sp0++] & 0xff) << 8 | + (src[sp0++] & 0xff); + dst[dp0++] = (byte) base64[(bits >>> 18) & 0x3f]; + dst[dp0++] = (byte) base64[(bits >>> 12) & 0x3f]; + dst[dp0++] = (byte) base64[(bits >>> 6) & 0x3f]; + dst[dp0++] = (byte) base64[bits & 0x3f]; } int dlen = (sl0 - sp) / 3 * 4; dp += dlen; sp = sl0; if (dlen == linemax && sp < end) { - for (byte b : newline){ + for (byte b : newline) { dst[dp++] = b; } } } if (sp < end) { // 1 or 2 leftover bytes int b0 = src[sp++] & 0xff; - dst[dp++] = (byte)base64[b0 >> 2]; + dst[dp++] = (byte) base64[b0 >> 2]; if (sp == end) { - dst[dp++] = (byte)base64[(b0 << 4) & 0x3f]; + dst[dp++] = (byte) base64[(b0 << 4) & 0x3f]; if (doPadding) { dst[dp++] = '='; dst[dp++] = '='; } } else { int b1 = src[sp++] & 0xff; - dst[dp++] = (byte)base64[(b0 << 4) & 0x3f | (b1 >> 4)]; - dst[dp++] = (byte)base64[(b1 << 2) & 0x3f]; + dst[dp++] = (byte) base64[(b0 << 4) & 0x3f | (b1 >> 4)]; + dst[dp++] = (byte) base64[(b1 << 2) & 0x3f]; if (doPadding) { dst[dp++] = '='; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/BorderEx.java b/cloud/dahua/src/main/java/com/example/dahua/common/BorderEx.java index a690206..8594093 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/BorderEx.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/BorderEx.java @@ -8,10 +8,10 @@ import javax.swing.border.Border; * 边框设置 */ public class BorderEx { - public static void set(JComponent object, String title, int width) { - Border innerBorder = BorderFactory.createTitledBorder(title); - Border outerBorder = BorderFactory.createEmptyBorder(width, width, width, width); - object.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder)); - } + public static void set(JComponent object, String title, int width) { + Border innerBorder = BorderFactory.createTitledBorder(title); + Border outerBorder = BorderFactory.createEmptyBorder(width, width, width, width); + object.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder)); + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButton.java b/cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButton.java index e587b4b..d45eac0 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButton.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButton.java @@ -34,36 +34,36 @@ import javax.swing.event.ChangeListener; * 时间选择器, 年月日-时分秒 */ public class DateChooserJButton extends JButton { - private static final long serialVersionUID = 1L; - + private static final long serialVersionUID = 1L; + int startYear = 1980; // 默认【最小】显示年份 int lastYear = 2050; // 默认【最大】显示年份 - + private DateChooser dateChooser = null; private String preLabel = ""; private String originalText = null; private SimpleDateFormat sdf = null; - + private JSpinner yearSpin; private JSpinner monthSpin; private JSpinner daySpin; private JSpinner hourSpin; private JSpinner minuteSpin; private JSpinner secondSpin; - + public DateChooserJButton() { - this(getNowDate()); - - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (Exception e) { - e.printStackTrace(); - } + this(getNowDate()); + + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + e.printStackTrace(); + } } public DateChooserJButton(String dateString) { - this(); - + this(); + setText(getDefaultDateFormat(), dateString); //保存原始是日期时间 initOriginalText(dateString); @@ -110,11 +110,11 @@ public class DateChooserJButton extends JButton { dateChooser = new DateChooser(); } - dateChooser.showDateChooser(); + dateChooser.showDateChooser(); } }); } - + public DateChooserJButton(int startYear, int lastYear) { this(); this.startYear = startYear; @@ -131,12 +131,13 @@ public class DateChooserJButton extends JButton { /** * 得到当前使用的日期格式化器 + * * @return 日期格式化器 */ - public SimpleDateFormat getCurrentSimpleDateFormat(){ - if(this.sdf != null){ + public SimpleDateFormat getCurrentSimpleDateFormat() { + if (this.sdf != null) { return sdf; - }else{ + } else { return getDefaultDateFormat(); } } @@ -152,8 +153,9 @@ public class DateChooserJButton extends JButton { this.originalText = preLabel + getDefaultDateFormat().format(date); } - /** + /** * 得到当前记忆的原始日期时间 + * * @return 当前记忆的原始日期时间(未修改前的日期时间) */ public String getOriginalText() { @@ -198,8 +200,9 @@ public class DateChooserJButton extends JButton { } } - /** + /** * 覆盖父类的方法使之无效 + * * @param listener 响应监听器 */ @Override @@ -211,15 +214,15 @@ public class DateChooserJButton extends JButton { * 然后再创建一个JDialog,把本内部类定义的JPanel放入JDialog的内容区 */ private class DateChooser extends JPanel implements MouseListener, ChangeListener { - private static final long serialVersionUID = 1L; - + private static final long serialVersionUID = 1L; + JLabel yearLabel; JLabel monthLabel; JLabel dayLabel; JLabel hourLabel; JLabel minuteLabel; JLabel secondLabel; - + int width = 485; // 界面宽度 int height = 230; // 界面高度 Color backGroundColor = Color.gray; // 底色 @@ -232,8 +235,10 @@ public class DateChooserJButton extends JButton { // 控制条配色------------------// Color controlLineColor = Color.pink; // 控制条底色 Color controlTextColor = Color.white; // 控制条标签文字色 - - /** 点击DateChooserButton时弹出的对话框,日历内容在这个对话框内 */ + + /** + * 点击DateChooserButton时弹出的对话框,日历内容在这个对话框内 + */ JDialog dialog; JLabel[][] daysLabels = new JLabel[6][7]; @@ -330,7 +335,7 @@ public class DateChooserJButton extends JButton { } private JPanel createWeekAndDayPanal() { - Res.string().getWeek(); + Res.string().getWeek(); JPanel result = new JPanel(); // 设置固定字体,以免调用环境改变影响界面美观 result.setFont(new Font("宋体", Font.PLAIN, 12)); @@ -360,9 +365,9 @@ public class DateChooserJButton extends JButton { numberLabel.setBackground(palletTableColor); numberLabel.setForeground(dateFontColor); if (j == 0 || j == 6) { - numberLabel.setForeground(weekendFontColor); + numberLabel.setForeground(weekendFontColor); } else { - numberLabel.setForeground(dateFontColor); + numberLabel.setForeground(dateFontColor); } daysLabels[i][j] = numberLabel; result.add(numberLabel); @@ -373,12 +378,16 @@ public class DateChooserJButton extends JButton { return result; } - /** 得到DateChooserButton的当前text,本方法是为按钮事件匿名类准备的。 */ + /** + * 得到DateChooserButton的当前text,本方法是为按钮事件匿名类准备的。 + */ public String getTextOfDateChooserButton() { return getText(); } - /** 恢复DateChooserButton的原始日期时间text,本方法是为按钮事件匿名类准备的。 */ + /** + * 恢复DateChooserButton的原始日期时间text,本方法是为按钮事件匿名类准备的。 + */ public void restoreTheOriginalDate() { String originalText = getOriginalText(); setText(originalText); @@ -407,7 +416,7 @@ public class DateChooserJButton extends JButton { @Override public void actionPerformed(ActionEvent e) { //恢复原始的日期时间 - restoreTheOriginalDate(); + restoreTheOriginalDate(); //隐藏日历对话框 dialog.setVisible(false); } @@ -424,17 +433,17 @@ public class DateChooserJButton extends JButton { result.getContentPane().add(this, BorderLayout.CENTER); result.pack(); result.setSize(width, height); - result.setModal(true); - + result.setModal(true); + result.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - //恢复原始的日期时间 - restoreTheOriginalDate(); + public void windowClosing(WindowEvent e) { + //恢复原始的日期时间 + restoreTheOriginalDate(); //隐藏日历对话框 dialog.setVisible(false); - } + } }); - + return result; } @@ -481,13 +490,13 @@ public class DateChooserJButton extends JButton { int i = actionCommandId / 7; int j = actionCommandId % 7; if (isOldDay) { - daysLabels[i][j].setForeground(dateFontColor); + daysLabels[i][j].setForeground(dateFontColor); } else { - daysLabels[i][j].setForeground(todayBackColor); + daysLabels[i][j].setForeground(todayBackColor); } } - private void flushWeekAndDay() { + private void flushWeekAndDay() { Calendar c = getCalendar(); c.set(Calendar.DAY_OF_MONTH, 1); int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH); @@ -515,31 +524,31 @@ public class DateChooserJButton extends JButton { secondSpin.setValue(new Integer(date2[2])); // 重置日历天的数字颜色 - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 7; j++) { - if(!daysLabels[i][j].getText().equals("")) { - daysLabels[i][j].setForeground(Color.BLACK); - } - } + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 7; j++) { + if (!daysLabels[i][j].getText().equals("")) { + daysLabels[i][j].setForeground(Color.BLACK); + } + } } - + // 重置日历星期六、星期日的数字颜色 - for(int i = 0; i < 6; i++) { - if(!daysLabels[i][0].getText().equals("")) { - daysLabels[i][0].setForeground(weekendFontColor); - } - if(!daysLabels[i][6].getText().equals("")) { - daysLabels[i][6].setForeground(weekendFontColor); - } + for (int i = 0; i < 6; i++) { + if (!daysLabels[i][0].getText().equals("")) { + daysLabels[i][0].setForeground(weekendFontColor); + } + if (!daysLabels[i][6].getText().equals("")) { + daysLabels[i][6].setForeground(weekendFontColor); + } } - + // 设置当天的数字颜色 - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 7; j++) { - if(daysLabels[i][j].getText().equals(date1[2])) { - daysLabels[i][j].setForeground(todayBackColor); - } - } + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 7; j++) { + if (daysLabels[i][j].getText().equals(date1[2])) { + daysLabels[i][j].setForeground(todayBackColor); + } + } } dayColorUpdate(false); @@ -582,8 +591,8 @@ public class DateChooserJButton extends JButton { /** * 选择日期时的响应事件 */ - @Override - public void mouseClicked(MouseEvent e) { + @Override + public void mouseClicked(MouseEvent e) { JLabel source = (JLabel) e.getSource(); if (source.getText().length() == 0) { return; @@ -596,30 +605,30 @@ public class DateChooserJButton extends JButton { setDate(c.getTime()); //把daySpin中的值也变了 daySpin.setValue(Integer.valueOf(newDay)); - } - - @Override - public void mouseEntered(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseExited(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void mousePressed(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseReleased(MouseEvent arg0) { - // TODO Auto-generated method stub - - } + } + + @Override + public void mouseEntered(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseExited(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mousePressed(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseReleased(MouseEvent arg0) { + // TODO Auto-generated method stub + + } } } \ No newline at end of file diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButtonEx.java b/cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButtonEx.java index 228492b..c7a79c8 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButtonEx.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/DateChooserJButtonEx.java @@ -34,36 +34,36 @@ import javax.swing.event.ChangeListener; * 时间选择器, 年月日 */ public class DateChooserJButtonEx extends JButton { - private static final long serialVersionUID = 1L; - + private static final long serialVersionUID = 1L; + int startYear = 1980; // 默认【最小】显示年份 int lastYear = 2050; // 默认【最大】显示年份 - + private DateChooser dateChooser = null; private String preLabel = ""; private String originalText = null; private SimpleDateFormat sdf = null; - + private JSpinner yearSpin; private JSpinner monthSpin; private JSpinner daySpin; private JSpinner hourSpin; private JSpinner minuteSpin; private JSpinner secondSpin; - + public DateChooserJButtonEx() { - this(getNowDate()); - - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (Exception e) { - e.printStackTrace(); - } + this(getNowDate()); + + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + e.printStackTrace(); + } } public DateChooserJButtonEx(String dateString) { - this(); - + this(); + setText(getDefaultDateFormat(), dateString); //保存原始是日期时间 initOriginalText(dateString); @@ -110,15 +110,15 @@ public class DateChooserJButtonEx extends JButton { dateChooser = new DateChooser(); } - dateChooser.showDateChooser(); + dateChooser.showDateChooser(); } }); } - + public void setStartYear(int startYear) { this.startYear = startYear; } - + public void setLastYear(int lastYear) { this.lastYear = lastYear; } @@ -133,12 +133,13 @@ public class DateChooserJButtonEx extends JButton { /** * 得到当前使用的日期格式化器 + * * @return 日期格式化器 */ - public SimpleDateFormat getCurrentSimpleDateFormat(){ - if(this.sdf != null){ + public SimpleDateFormat getCurrentSimpleDateFormat() { + if (this.sdf != null) { return sdf; - }else{ + } else { return getDefaultDateFormat(); } } @@ -154,8 +155,9 @@ public class DateChooserJButtonEx extends JButton { this.originalText = preLabel + getDefaultDateFormat().format(date); } - /** + /** * 得到当前记忆的原始日期时间 + * * @return 当前记忆的原始日期时间(未修改前的日期时间) */ public String getOriginalText() { @@ -200,8 +202,9 @@ public class DateChooserJButtonEx extends JButton { } } - /** + /** * 覆盖父类的方法使之无效 + * * @param listener 响应监听器 */ @Override @@ -213,12 +216,12 @@ public class DateChooserJButtonEx extends JButton { * 然后再创建一个JDialog,把本内部类定义的JPanel放入JDialog的内容区 */ private class DateChooser extends JPanel implements MouseListener, ChangeListener { - private static final long serialVersionUID = 1L; - + private static final long serialVersionUID = 1L; + JLabel yearLabel; JLabel monthLabel; JLabel dayLabel; - + int width = 485; // 界面宽度 int height = 230; // 界面高度 Color backGroundColor = Color.gray; // 底色 @@ -231,8 +234,10 @@ public class DateChooserJButtonEx extends JButton { // 控制条配色------------------// Color controlLineColor = Color.pink; // 控制条底色 Color controlTextColor = Color.white; // 控制条标签文字色 - - /** 点击DateChooserButton时弹出的对话框,日历内容在这个对话框内 */ + + /** + * 点击DateChooserButton时弹出的对话框,日历内容在这个对话框内 + */ JDialog dialog; JLabel[][] daysLabels = new JLabel[6][7]; @@ -290,13 +295,13 @@ public class DateChooserJButtonEx extends JButton { dayLabel = new JLabel(Res.string().getDay()); dayLabel.setForeground(controlTextColor); - result.add(dayLabel); + result.add(dayLabel); return result; } private JPanel createWeekAndDayPanal() { - Res.string().getWeek(); + Res.string().getWeek(); JPanel result = new JPanel(); // 设置固定字体,以免调用环境改变影响界面美观 result.setFont(new Font("宋体", Font.PLAIN, 12)); @@ -326,9 +331,9 @@ public class DateChooserJButtonEx extends JButton { numberLabel.setBackground(palletTableColor); numberLabel.setForeground(dateFontColor); if (j == 0 || j == 6) { - numberLabel.setForeground(weekendFontColor); + numberLabel.setForeground(weekendFontColor); } else { - numberLabel.setForeground(dateFontColor); + numberLabel.setForeground(dateFontColor); } daysLabels[i][j] = numberLabel; result.add(numberLabel); @@ -339,12 +344,16 @@ public class DateChooserJButtonEx extends JButton { return result; } - /** 得到DateChooserButton的当前text,本方法是为按钮事件匿名类准备的。 */ + /** + * 得到DateChooserButton的当前text,本方法是为按钮事件匿名类准备的。 + */ public String getTextOfDateChooserButton() { return getText(); } - /** 恢复DateChooserButton的原始日期时间text,本方法是为按钮事件匿名类准备的。 */ + /** + * 恢复DateChooserButton的原始日期时间text,本方法是为按钮事件匿名类准备的。 + */ public void restoreTheOriginalDate() { String originalText = getOriginalText(); setText(originalText); @@ -373,7 +382,7 @@ public class DateChooserJButtonEx extends JButton { @Override public void actionPerformed(ActionEvent e) { //恢复原始的日期时间 - restoreTheOriginalDate(); + restoreTheOriginalDate(); //隐藏日历对话框 dialog.setVisible(false); } @@ -390,17 +399,17 @@ public class DateChooserJButtonEx extends JButton { result.getContentPane().add(this, BorderLayout.CENTER); result.pack(); result.setSize(width, height); - result.setModal(true); - + result.setModal(true); + result.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - //恢复原始的日期时间 - restoreTheOriginalDate(); + public void windowClosing(WindowEvent e) { + //恢复原始的日期时间 + restoreTheOriginalDate(); //隐藏日历对话框 dialog.setVisible(false); - } + } }); - + return result; } @@ -447,13 +456,13 @@ public class DateChooserJButtonEx extends JButton { int i = actionCommandId / 7; int j = actionCommandId % 7; if (isOldDay) { - daysLabels[i][j].setForeground(dateFontColor); + daysLabels[i][j].setForeground(dateFontColor); } else { - daysLabels[i][j].setForeground(todayBackColor); + daysLabels[i][j].setForeground(todayBackColor); } } - private void flushWeekAndDay() { + private void flushWeekAndDay() { Calendar c = getCalendar(); c.set(Calendar.DAY_OF_MONTH, 1); int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH); @@ -477,31 +486,31 @@ public class DateChooserJButtonEx extends JButton { daySpin.setValue(new Integer(date1[2])); // 重置日历天的数字颜色 - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 7; j++) { - if(!daysLabels[i][j].getText().equals("")) { - daysLabels[i][j].setForeground(Color.BLACK); - } - } + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 7; j++) { + if (!daysLabels[i][j].getText().equals("")) { + daysLabels[i][j].setForeground(Color.BLACK); + } + } } - + // 重置日历星期六、星期日的数字颜色 - for(int i = 0; i < 6; i++) { - if(!daysLabels[i][0].getText().equals("")) { - daysLabels[i][0].setForeground(weekendFontColor); - } - if(!daysLabels[i][6].getText().equals("")) { - daysLabels[i][6].setForeground(weekendFontColor); - } + for (int i = 0; i < 6; i++) { + if (!daysLabels[i][0].getText().equals("")) { + daysLabels[i][0].setForeground(weekendFontColor); + } + if (!daysLabels[i][6].getText().equals("")) { + daysLabels[i][6].setForeground(weekendFontColor); + } } - + // 设置当天的数字颜色 - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 7; j++) { - if(daysLabels[i][j].getText().equals(date1[2])) { - daysLabels[i][j].setForeground(todayBackColor); - } - } + for (int i = 0; i < 6; i++) { + for (int j = 0; j < 7; j++) { + if (daysLabels[i][j].getText().equals(date1[2])) { + daysLabels[i][j].setForeground(todayBackColor); + } + } } dayColorUpdate(false); @@ -544,8 +553,8 @@ public class DateChooserJButtonEx extends JButton { /** * 选择日期时的响应事件 */ - @Override - public void mouseClicked(MouseEvent e) { + @Override + public void mouseClicked(MouseEvent e) { JLabel source = (JLabel) e.getSource(); if (source.getText().length() == 0) { return; @@ -558,30 +567,30 @@ public class DateChooserJButtonEx extends JButton { setDate(c.getTime()); //把daySpin中的值也变了 daySpin.setValue(Integer.valueOf(newDay)); - } - - @Override - public void mouseEntered(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseExited(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void mousePressed(MouseEvent arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseReleased(MouseEvent arg0) { - // TODO Auto-generated method stub - - } + } + + @Override + public void mouseEntered(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseExited(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mousePressed(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseReleased(MouseEvent arg0) { + // TODO Auto-generated method stub + + } } } \ No newline at end of file diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/DeviceManagerListener.java b/cloud/dahua/src/main/java/com/example/dahua/common/DeviceManagerListener.java index 21b2611..31a02d4 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/DeviceManagerListener.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/DeviceManagerListener.java @@ -1,5 +1,5 @@ package com.example.dahua.common; public interface DeviceManagerListener { - void onDeviceManager(String deviceId, String username, String password); + void onDeviceManager(String deviceId, String username, String password); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/ErrorCode.java b/cloud/dahua/src/main/java/com/example/dahua/common/ErrorCode.java index c22babb..107cad2 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/ErrorCode.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/ErrorCode.java @@ -8,865 +8,866 @@ import com.example.dahua.lib.NetSDKLib; */ public class ErrorCode { - /** - * 登录设备设备错误状态中英文 - * @param err 接口CLIENT_GetLastError返回, error code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) +") - * @return - */ - public static String getErrorCode(int err) { - String msg = ""; - switch(err) { - case NetSDKLib.NET_NOERROR: // 0 没有错误 - msg = Res.string().getBundle().getString("NET_ERROR"); - break; - case NetSDKLib.NET_ERROR: // -1 未知错误 - msg = Res.string().getBundle().getString("NET_ERROR"); - break; - case NetSDKLib.NET_SYSTEM_ERROR: // (0x80000000|1) Windows系统出错 - msg = Res.string().getBundle().getString("NET_SYSTEM_ERROR"); - break; - case NetSDKLib.NET_NETWORK_ERROR: // (0x80000000|2) 网络错误,可能是因为网络超时 - msg = Res.string().getBundle().getString("NET_NETWORK_ERROR"); - break; - case NetSDKLib.NET_DEV_VER_NOMATCH: // (0x80000000|3) 设备协议不匹配 - msg = Res.string().getBundle().getString("NET_DEV_VER_NOMATCH"); - break; - case NetSDKLib.NET_INVALID_HANDLE: // (0x80000000|4) 句柄无效 - msg = Res.string().getBundle().getString("NET_INVALID_HANDLE"); - break; - case NetSDKLib.NET_OPEN_CHANNEL_ERROR: // (0x80000000|5) 打开通道失败 - msg = Res.string().getBundle().getString("NET_OPEN_CHANNEL_ERROR"); - break; - case NetSDKLib.NET_CLOSE_CHANNEL_ERROR: // (0x80000000|6) 关闭通道失败 - msg = Res.string().getBundle().getString("NET_CLOSE_CHANNEL_ERROR"); - break; - case NetSDKLib.NET_ILLEGAL_PARAM: // (0x80000000|7) 用户参数不合法 - msg = Res.string().getBundle().getString("NET_ILLEGAL_PARAM"); - break; - case NetSDKLib.NET_SDK_INIT_ERROR: // (0x80000000|8) SDK初始化出错 - msg = Res.string().getBundle().getString("NET_SDK_INIT_ERROR"); - break; - case NetSDKLib.NET_SDK_UNINIT_ERROR: // (0x80000000|9) SDK清理出错 - msg = Res.string().getBundle().getString("NET_SDK_UNINIT_ERROR"); - break; - case NetSDKLib.NET_RENDER_OPEN_ERROR: // (0x80000000|10) 申请render资源出错 - msg = Res.string().getBundle().getString("NET_RENDER_OPEN_ERROR"); - break; - case NetSDKLib.NET_DEC_OPEN_ERROR: // (0x80000000|11) 打开解码库出错 - msg = Res.string().getBundle().getString("NET_DEC_OPEN_ERROR"); - break; - case NetSDKLib.NET_DEC_CLOSE_ERROR: // (0x80000000|12) 关闭解码库出错 - msg = Res.string().getBundle().getString("NET_DEC_CLOSE_ERROR"); - break; - case NetSDKLib.NET_MULTIPLAY_NOCHANNEL: // (0x80000000|13) 多画面预览中检测到通道数为0 - msg = Res.string().getBundle().getString("NET_MULTIPLAY_NOCHANNEL"); - break; - case NetSDKLib.NET_TALK_INIT_ERROR: // (0x80000000|14) 录音库初始化失败 - msg = Res.string().getBundle().getString("NET_TALK_INIT_ERROR"); - break; - case NetSDKLib.NET_TALK_NOT_INIT: // (0x80000000|15) 录音库未经初始化 - msg = Res.string().getBundle().getString("NET_TALK_NOT_INIT"); - break; - case NetSDKLib.NET_TALK_SENDDATA_ERROR: // (0x80000000|16) 发送音频数据出错 - msg = Res.string().getBundle().getString("NET_TALK_SENDDATA_ERROR"); - break; - case NetSDKLib.NET_REAL_ALREADY_SAVING: // (0x80000000|17) 实时数据已经处于保存状态 - msg = Res.string().getBundle().getString("NET_REAL_ALREADY_SAVING"); - break; - case NetSDKLib.NET_NOT_SAVING: // (0x80000000|18) 未保存实时数据 - msg = Res.string().getBundle().getString("NET_NOT_SAVING"); - break; - case NetSDKLib.NET_OPEN_FILE_ERROR: // (0x80000000|19) 打开文件出错 - msg = Res.string().getBundle().getString("NET_OPEN_FILE_ERROR"); - break; - case NetSDKLib.NET_PTZ_SET_TIMER_ERROR: // (0x80000000|20) 启动云台控制定时器失败 - msg = Res.string().getBundle().getString("NET_PTZ_SET_TIMER_ERROR"); - break; - case NetSDKLib.NET_RETURN_DATA_ERROR: // (0x80000000|21) 对返回数据的校验出错 - msg = Res.string().getBundle().getString("NET_RETURN_DATA_ERROR"); - break; - case NetSDKLib.NET_INSUFFICIENT_BUFFER: // (0x80000000|22) 没有足够的缓存 - msg = Res.string().getBundle().getString("NET_INSUFFICIENT_BUFFER"); - break; - case NetSDKLib.NET_NOT_SUPPORTED: // (0x80000000|23) 当前SDK未支持该功能 - msg = Res.string().getBundle().getString("NET_NOT_SUPPORTED"); - break; - case NetSDKLib.NET_NO_RECORD_FOUND: // (0x80000000|24) 查询不到录像 - msg = Res.string().getBundle().getString("NET_NO_RECORD_FOUND"); - break; - case NetSDKLib.NET_NOT_AUTHORIZED: // (0x80000000|25) 无操作权限 - msg = Res.string().getBundle().getString("NET_NOT_AUTHORIZED"); - break; - case NetSDKLib.NET_NOT_NOW: // (0x80000000|26) 暂时无法执行 - msg = Res.string().getBundle().getString("NET_NOT_NOW"); - break; - case NetSDKLib.NET_NO_TALK_CHANNEL: // (0x80000000|27) 未发现对讲通道 - msg = Res.string().getBundle().getString("NET_NO_TALK_CHANNEL"); - break; - case NetSDKLib.NET_NO_AUDIO: // (0x80000000|28) 未发现音频 - msg = Res.string().getBundle().getString("NET_NO_AUDIO"); - break; - case NetSDKLib.NET_NO_INIT: // (0x80000000|29) 网络SDK未经初始化 - msg = Res.string().getBundle().getString("NET_NO_INIT"); - break; - case NetSDKLib.NET_DOWNLOAD_END: // (0x80000000|30) 下载已结束 - msg = Res.string().getBundle().getString("NET_DOWNLOAD_END"); - break; - case NetSDKLib.NET_EMPTY_LIST: // (0x80000000|31) 查询结果为空 - msg = Res.string().getBundle().getString("NET_EMPTY_LIST"); - break; - case NetSDKLib.NET_ERROR_GETCFG_SYSATTR: // (0x80000000|32) 获取系统属性配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SYSATTR"); - break; - case NetSDKLib.NET_ERROR_GETCFG_SERIAL: // (0x80000000|33) 获取序列号失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SERIAL"); - break; - case NetSDKLib.NET_ERROR_GETCFG_GENERAL: // (0x80000000|34) 获取常规属性失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_GENERAL"); - break; - case NetSDKLib.NET_ERROR_GETCFG_DSPCAP: // (0x80000000|35) 获取DSP能力描述失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DSPCAP"); - break; - case NetSDKLib.NET_ERROR_GETCFG_NETCFG: // (0x80000000|36) 获取网络配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_NETCFG"); - break; - case NetSDKLib.NET_ERROR_GETCFG_CHANNAME: // (0x80000000|37) 获取通道名称失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_CHANNAME"); - break; - case NetSDKLib.NET_ERROR_GETCFG_VIDEO: // (0x80000000|38) 获取视频属性失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEO"); - break; - case NetSDKLib.NET_ERROR_GETCFG_RECORD: // (0x80000000|39) 获取录象配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_RECORD"); - break; - case NetSDKLib.NET_ERROR_GETCFG_PRONAME: // (0x80000000|40) 获取解码器协议名称失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_PRONAME"); - break; - case NetSDKLib.NET_ERROR_GETCFG_FUNCNAME: // (0x80000000|41) 获取232串口功能名称失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_FUNCNAME"); - break; - case NetSDKLib.NET_ERROR_GETCFG_485DECODER: // (0x80000000|42) 获取解码器属性失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_485DECODER"); - break; - case NetSDKLib.NET_ERROR_GETCFG_232COM: // (0x80000000|43) 获取232串口配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_232COM"); - break; - case NetSDKLib.NET_ERROR_GETCFG_ALARMIN: // (0x80000000|44) 获取外部报警输入配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ALARMIN"); - break; - case NetSDKLib.NET_ERROR_GETCFG_ALARMDET: // (0x80000000|45) 获取动态检测报警失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ALARMDET"); - break; - case NetSDKLib.NET_ERROR_GETCFG_SYSTIME: // (0x80000000|46) 获取设备时间失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SYSTIME"); - break; - case NetSDKLib.NET_ERROR_GETCFG_PREVIEW: // (0x80000000|47) 获取预览参数失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_PREVIEW"); - break; - case NetSDKLib.NET_ERROR_GETCFG_AUTOMT: // (0x80000000|48) 获取自动维护配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_AUTOMT"); - break; - case NetSDKLib.NET_ERROR_GETCFG_VIDEOMTRX: // (0x80000000|49) 获取视频矩阵配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEOMTRX"); - break; - case NetSDKLib.NET_ERROR_GETCFG_COVER: // (0x80000000|50) 获取区域遮挡配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_COVER"); - break; - case NetSDKLib.NET_ERROR_GETCFG_WATERMAKE: // (0x80000000|51) 获取图象水印配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WATERMAKE"); - break; - case NetSDKLib.NET_ERROR_GETCFG_MULTICAST: // (0x80000000|52) 获取配置失败位置:组播端口按通道配置 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MULTICAST"); - break; - case NetSDKLib.NET_ERROR_SETCFG_GENERAL: // (0x80000000|55) 修改常规属性失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_GENERAL"); - break; - case NetSDKLib.NET_ERROR_SETCFG_NETCFG: // (0x80000000|56) 改网络配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_NETCFG"); - break; - case NetSDKLib.NET_ERROR_SETCFG_CHANNAME: // (0x80000000|57) 修改通道名称失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_CHANNAME"); - break; - case NetSDKLib.NET_ERROR_SETCFG_VIDEO: // (0x80000000|58) 修改视频属性失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEO"); - break; - case NetSDKLib.NET_ERROR_SETCFG_RECORD: // (0x80000000|59) 修改录象配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_RECORD"); - break; - case NetSDKLib.NET_ERROR_SETCFG_485DECODER: // (0x80000000|60) 修改解码器属性失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_485DECODER"); - break; - case NetSDKLib.NET_ERROR_SETCFG_232COM: // (0x80000000|61) 修改232串口配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_232COM"); - break; - case NetSDKLib.NET_ERROR_SETCFG_ALARMIN: // (0x80000000|62) 修改外部输入报警配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ALARMIN"); - break; - case NetSDKLib.NET_ERROR_SETCFG_ALARMDET: // (0x80000000|63) 修改动态检测报警配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ALARMDET"); - break; - case NetSDKLib.NET_ERROR_SETCFG_SYSTIME: // (0x80000000|64) 修改设备时间失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SYSTIME"); - break; - case NetSDKLib.NET_ERROR_SETCFG_PREVIEW: // (0x80000000|65) 修改预览参数失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_PREVIEW"); - break; - case NetSDKLib.NET_ERROR_SETCFG_AUTOMT: // (0x80000000|66) 修改自动维护配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_AUTOMT"); - break; - case NetSDKLib.NET_ERROR_SETCFG_VIDEOMTRX: // (0x80000000|67) 修改视频矩阵配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEOMTRX"); - break; - case NetSDKLib.NET_ERROR_SETCFG_COVER: // (0x80000000|68) 修改区域遮挡配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_COVER"); - break; - case NetSDKLib.NET_ERROR_SETCFG_WATERMAKE: // (0x80000000|69) 修改图象水印配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WATERMAKE"); - break; - case NetSDKLib.NET_ERROR_SETCFG_WLAN: // (0x80000000|70) 修改无线网络信息失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WLAN"); - break; - case NetSDKLib.NET_ERROR_SETCFG_WLANDEV: // (0x80000000|71) 选择无线网络设备失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WLANDEV"); - break; - case NetSDKLib.NET_ERROR_SETCFG_REGISTER: // (0x80000000|72) 修改主动注册参数配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_REGISTER"); - break; - case NetSDKLib.NET_ERROR_SETCFG_CAMERA: // (0x80000000|73) 修改摄像头属性配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_CAMERA"); - break; - case NetSDKLib.NET_ERROR_SETCFG_INFRARED: // (0x80000000|74) 修改红外报警配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_INFRARED"); - break; - case NetSDKLib.NET_ERROR_SETCFG_SOUNDALARM: // (0x80000000|75) 修改音频报警配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SOUNDALARM"); - break; - case NetSDKLib.NET_ERROR_SETCFG_STORAGE: // (0x80000000|76) 修改存储位置配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_STORAGE"); - break; - case NetSDKLib.NET_AUDIOENCODE_NOTINIT: // (0x80000000|77) 音频编码接口没有成功初始化 - msg = Res.string().getBundle().getString("NET_AUDIOENCODE_NOTINIT"); - break; - case NetSDKLib.NET_DATA_TOOLONGH: // (0x80000000|78) 数据过长 - msg = Res.string().getBundle().getString("NET_DATA_TOOLONGH"); - break; - case NetSDKLib.NET_UNSUPPORTED: // (0x80000000|79) 备不支持该操作 - msg = Res.string().getBundle().getString("NET_UNSUPPORTED"); - break; - case NetSDKLib.NET_DEVICE_BUSY: // (0x80000000|80) 设备资源不足 - msg = Res.string().getBundle().getString("NET_DEVICE_BUSY"); - break; - case NetSDKLib.NET_SERVER_STARTED: // (0x80000000|81) 服务器已经启动 - msg = Res.string().getBundle().getString("NET_SERVER_STARTED"); - break; - case NetSDKLib.NET_SERVER_STOPPED: // (0x80000000|82) 服务器尚未成功启动 - msg = Res.string().getBundle().getString("NET_SERVER_STOPPED"); - break; - case NetSDKLib.NET_LISTER_INCORRECT_SERIAL: // (0x80000000|83) 输入序列号有误 - msg = Res.string().getBundle().getString("NET_LISTER_INCORRECT_SERIAL"); - break; - case NetSDKLib.NET_QUERY_DISKINFO_FAILED: // (0x80000000|84) 获取硬盘信息失败 - msg = Res.string().getBundle().getString("NET_QUERY_DISKINFO_FAILED"); - break; - case NetSDKLib.NET_ERROR_GETCFG_SESSION: // (0x80000000|85) 获取连接Session信息 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SESSION"); - break; - case NetSDKLib.NET_USER_FLASEPWD_TRYTIME: // (0x80000000|86) 输入密码错误超过限制次数 - msg = Res.string().getBundle().getString("NET_USER_FLASEPWD_TRYTIME"); - break; - case NetSDKLib.NET_LOGIN_ERROR_PASSWORD: // (0x80000000|100) 密码不正确 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_PASSWORD"); - break; - case NetSDKLib.NET_LOGIN_ERROR_USER: // (0x80000000|101) 帐户不存在 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_USER"); - break; - case NetSDKLib.NET_LOGIN_ERROR_TIMEOUT: // (0x80000000|102) 等待登录返回超时 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_TIMEOUT"); - break; - case NetSDKLib.NET_LOGIN_ERROR_RELOGGIN: // (0x80000000|103) 帐号已登录 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_RELOGGIN"); - break; - case NetSDKLib.NET_LOGIN_ERROR_LOCKED: // (0x80000000|104) 帐号已被锁定 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_LOCKED"); - break; - case NetSDKLib.NET_LOGIN_ERROR_BLACKLIST: // (0x80000000|105) 帐号已被列为黑名单 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_BLACKLIST"); - break; - case NetSDKLib.NET_LOGIN_ERROR_BUSY: // (0x80000000|106) 资源不足,系统忙 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_BUSY"); - break; - case NetSDKLib.NET_LOGIN_ERROR_CONNECT: // (0x80000000|107) 登录设备超时,请检查网络并重试 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_CONNECT"); - break; - case NetSDKLib.NET_LOGIN_ERROR_NETWORK: // (0x80000000|108) 网络连接失败 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_NETWORK"); - break; - case NetSDKLib.NET_LOGIN_ERROR_SUBCONNECT: // (0x80000000|109) 登录设备成功,但无法创建视频通道,请检查网 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_SUBCONNECT"); - break; - case NetSDKLib.NET_LOGIN_ERROR_MAXCONNECT: // (0x80000000|110) 超过最大连接数 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_MAXCONNECT"); - break; - case NetSDKLib.NET_LOGIN_ERROR_PROTOCOL3_ONLY: // (0x80000000|111) 只支持3代协议 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_PROTOCOL3_ONLY"); - break; - case NetSDKLib.NET_LOGIN_ERROR_UKEY_LOST: // (0x80000000|112) 插入U盾或U盾信息错误 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_UKEY_LOST"); - break; - case NetSDKLib.NET_LOGIN_ERROR_NO_AUTHORIZED: // (0x80000000|113) 客户端IP地址没有登录权限 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_NO_AUTHORIZED"); - break; - case NetSDKLib.NET_LOGIN_ERROR_USER_OR_PASSOWRD: // (0x80000000|117) 账号或密码错误 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_USER_OR_PASSOWRD"); - break; - case NetSDKLib.NET_LOGIN_ERROR_DEVICE_NOT_INIT: // (0x80000000|118) 设备尚未初始化,不能登录,请先初始化设备 - msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_DEVICE_NOT_INIT"); - break; - case NetSDKLib.NET_RENDER_SOUND_ON_ERROR: // (0x80000000|120) Render库打开音频出错 - msg = Res.string().getBundle().getString("NET_RENDER_SOUND_ON_ERROR"); - break; - case NetSDKLib.NET_RENDER_SOUND_OFF_ERROR: // (0x80000000|121) Render库关闭音频出错 - msg = Res.string().getBundle().getString("NET_RENDER_SOUND_OFF_ERROR"); - break; - case NetSDKLib.NET_RENDER_SET_VOLUME_ERROR: // (0x80000000|122) Render库控制音量出错 - msg = Res.string().getBundle().getString("NET_RENDER_SET_VOLUME_ERROR"); - break; - case NetSDKLib.NET_RENDER_ADJUST_ERROR: // (0x80000000|123) Render库设置画面参数出错 - msg = Res.string().getBundle().getString("NET_RENDER_ADJUST_ERROR"); - break; - case NetSDKLib.NET_RENDER_PAUSE_ERROR: // (0x80000000|124) Render库暂停播放出错 - msg = Res.string().getBundle().getString("NET_RENDER_PAUSE_ERROR"); - break; - case NetSDKLib.NET_RENDER_SNAP_ERROR: // (0x80000000|125) Render库抓图出错 - msg = Res.string().getBundle().getString("NET_RENDER_SNAP_ERROR"); - break; - case NetSDKLib.NET_RENDER_STEP_ERROR: // (0x80000000|126) Render库步进出错 - msg = Res.string().getBundle().getString("NET_RENDER_STEP_ERROR"); - break; - case NetSDKLib.NET_RENDER_FRAMERATE_ERROR: // (0x80000000|127) Render库设置帧率出错 - msg = Res.string().getBundle().getString("NET_RENDER_FRAMERATE_ERROR"); - break; - case NetSDKLib.NET_RENDER_DISPLAYREGION_ERROR: // (0x80000000|128) Render库设置显示区域出错 - msg = Res.string().getBundle().getString("NET_RENDER_DISPLAYREGION_ERROR"); - break; - case NetSDKLib.NET_RENDER_GETOSDTIME_ERROR: // (0x80000000|129) Render库获取当前播放时间出错 - msg = Res.string().getBundle().getString("NET_RENDER_GETOSDTIME_ERROR"); - break; - case NetSDKLib.NET_GROUP_EXIST: // (0x80000000|140) 组名已存在 - msg = Res.string().getBundle().getString("NET_GROUP_EXIST"); - break; - case NetSDKLib.NET_GROUP_NOEXIST: // (0x80000000|141) 组名不存在 - msg = Res.string().getBundle().getString("NET_GROUP_NOEXIST"); - break; - case NetSDKLib.NET_GROUP_RIGHTOVER: // (0x80000000|142) 组的权限超出权限列表范围 - msg = Res.string().getBundle().getString("NET_GROUP_RIGHTOVER"); - break; - case NetSDKLib.NET_GROUP_HAVEUSER: // (0x80000000|143) 组下有用户,不能删除 - msg = Res.string().getBundle().getString("NET_GROUP_HAVEUSER"); - break; - case NetSDKLib.NET_GROUP_RIGHTUSE: // (0x80000000|144) 组的某个权限被用户使用,不能出除 - msg = Res.string().getBundle().getString("NET_GROUP_RIGHTUSE"); - break; - case NetSDKLib.NET_GROUP_SAMENAME: // (0x80000000|145) 新组名同已有组名重复 - msg = Res.string().getBundle().getString("NET_GROUP_SAMENAME"); - break; - case NetSDKLib.NET_USER_EXIST: // (0x80000000|146) 用户已存在 - msg = Res.string().getBundle().getString("NET_USER_EXIST"); - break; - case NetSDKLib.NET_USER_NOEXIST: // (0x80000000|147) 用户不存在 - msg = Res.string().getBundle().getString("NET_USER_NOEXIST"); - break; - case NetSDKLib.NET_USER_RIGHTOVER: // (0x80000000|148) 用户权限超出组权限 - msg = Res.string().getBundle().getString("NET_USER_RIGHTOVER"); - break; - case NetSDKLib.NET_USER_PWD: // (0x80000000|149) 保留帐号,不容许修改密码 - msg = Res.string().getBundle().getString("NET_USER_PWD"); - break; - case NetSDKLib.NET_USER_FLASEPWD: // (0x80000000|150) 密码不正确 - msg = Res.string().getBundle().getString("NET_USER_FLASEPWD"); - break; - case NetSDKLib.NET_USER_NOMATCHING: // (0x80000000|151) 密码不匹配 - msg = Res.string().getBundle().getString("NET_USER_NOMATCHING"); - break; - case NetSDKLib.NET_USER_INUSE: // (0x80000000|152) 账号正在使用中 - msg = Res.string().getBundle().getString("NET_USER_INUSE"); - break; - case NetSDKLib.NET_ERROR_GETCFG_ETHERNET: // (0x80000000|300) 获取网卡配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ETHERNET"); - break; - case NetSDKLib.NET_ERROR_GETCFG_WLAN: // (0x80000000|301) 获取无线网络信息失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WLAN"); - break; - case NetSDKLib.NET_ERROR_GETCFG_WLANDEV: // (0x80000000|302) 获取无线网络设备失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WLANDEV"); - break; - case NetSDKLib.NET_ERROR_GETCFG_REGISTER: // (0x80000000|303) 获取主动注册参数失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_REGISTER"); - break; - case NetSDKLib.NET_ERROR_GETCFG_CAMERA: // (0x80000000|304) 获取摄像头属性失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_CAMERA"); - break; - case NetSDKLib.NET_ERROR_GETCFG_INFRARED: // (0x80000000|305) 获取红外报警配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_INFRARED"); - break; - case NetSDKLib.NET_ERROR_GETCFG_SOUNDALARM: // (0x80000000|306) 获取音频报警配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SOUNDALARM"); - break; - case NetSDKLib.NET_ERROR_GETCFG_STORAGE: // (0x80000000|307) 获取存储位置配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_STORAGE"); - break; - case NetSDKLib.NET_ERROR_GETCFG_MAIL: // (0x80000000|308) 获取邮件配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MAIL"); - break; - case NetSDKLib.NET_CONFIG_DEVBUSY: // (0x80000000|309) 暂时无法设置 - msg = Res.string().getBundle().getString("NET_CONFIG_DEVBUSY"); - break; - case NetSDKLib.NET_CONFIG_DATAILLEGAL: // (0x80000000|310) 配置数据不合法 - msg = Res.string().getBundle().getString("NET_CONFIG_DATAILLEGAL"); - break; - case NetSDKLib.NET_ERROR_GETCFG_DST: // (0x80000000|311) 获取夏令时配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DST"); - break; - case NetSDKLib.NET_ERROR_SETCFG_DST: // (0x80000000|312) 设置夏令时配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_DST"); - break; - case NetSDKLib.NET_ERROR_GETCFG_VIDEO_OSD: // (0x80000000|313) 获取视频OSD叠加配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEO_OSD"); - break; - case NetSDKLib.NET_ERROR_SETCFG_VIDEO_OSD: // (0x80000000|314) 设置视频OSD叠加配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEO_OSD"); - break; - case NetSDKLib.NET_ERROR_GETCFG_GPRSCDMA: // (0x80000000|315) 获取CDMA\GPRS网络配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_GPRSCDMA"); - break; - case NetSDKLib.NET_ERROR_SETCFG_GPRSCDMA: // (0x80000000|316) 设置CDMA\GPRS网络配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_GPRSCDMA"); - break; - case NetSDKLib.NET_ERROR_GETCFG_IPFILTER: // (0x80000000|317) 获取IP过滤配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_IPFILTER"); - break; - case NetSDKLib.NET_ERROR_SETCFG_IPFILTER: // (0x80000000|318) 设置IP过滤配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_IPFILTER"); - break; - case NetSDKLib.NET_ERROR_GETCFG_TALKENCODE: // (0x80000000|319) 获取语音对讲编码配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_TALKENCODE"); - break; - case NetSDKLib.NET_ERROR_SETCFG_TALKENCODE: // (0x80000000|320) 设置语音对讲编码配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_TALKENCODE"); - break; - case NetSDKLib.NET_ERROR_GETCFG_RECORDLEN: // (0x80000000|321) 获取录像打包长度配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_RECORDLEN"); - break; - case NetSDKLib.NET_ERROR_SETCFG_RECORDLEN: // (0x80000000|322) 设置录像打包长度配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_RECORDLEN"); - break; - case NetSDKLib.NET_DONT_SUPPORT_SUBAREA: // (0x80000000|323) 不支持网络硬盘分区 - msg = Res.string().getBundle().getString("NET_DONT_SUPPORT_SUBAREA"); - break; - case NetSDKLib.NET_ERROR_GET_AUTOREGSERVER: // (0x80000000|324) 获取设备上主动注册服务器信息失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_AUTOREGSERVER"); - break; - case NetSDKLib.NET_ERROR_CONTROL_AUTOREGISTER: // (0x80000000|325) 主动注册重定向注册错误 - msg = Res.string().getBundle().getString("NET_ERROR_CONTROL_AUTOREGISTER"); - break; - case NetSDKLib.NET_ERROR_DISCONNECT_AUTOREGISTER: // (0x80000000|326) 断开主动注册服务器错误 - msg = Res.string().getBundle().getString("NET_ERROR_DISCONNECT_AUTOREGISTER"); - break; - case NetSDKLib.NET_ERROR_GETCFG_MMS: // (0x80000000|327) 获取mms配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MMS"); - break; - case NetSDKLib.NET_ERROR_SETCFG_MMS: // (0x80000000|328) 设置mms配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_MMS"); - break; - case NetSDKLib.NET_ERROR_GETCFG_SMSACTIVATION: // (0x80000000|329) 获取短信激活无线连接配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SMSACTIVATION"); - break; - case NetSDKLib.NET_ERROR_SETCFG_SMSACTIVATION: // (0x80000000|330) 设置短信激活无线连接配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SMSACTIVATION"); - break; - case NetSDKLib.NET_ERROR_GETCFG_DIALINACTIVATION: // (0x80000000|331) 获取拨号激活无线连接配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DIALINACTIVATION"); - break; - case NetSDKLib.NET_ERROR_SETCFG_DIALINACTIVATION: // (0x80000000|332) 设置拨号激活无线连接配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_DIALINACTIVATION"); - break; - case NetSDKLib.NET_ERROR_GETCFG_VIDEOOUT: // (0x80000000|333) 查询视频输出参数配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEOOUT"); - break; - case NetSDKLib.NET_ERROR_SETCFG_VIDEOOUT: // (0x80000000|334) 设置视频输出参数配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEOOUT"); - break; - case NetSDKLib.NET_ERROR_GETCFG_OSDENABLE: // (0x80000000|335) 获取osd叠加使能配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_OSDENABLE"); - break; - case NetSDKLib.NET_ERROR_SETCFG_OSDENABLE: // (0x80000000|336) 设置osd叠加使能配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_OSDENABLE"); - break; - case NetSDKLib.NET_ERROR_SETCFG_ENCODERINFO: // (0x80000000|337) 设置数字通道前端编码接入配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ENCODERINFO"); - break; - case NetSDKLib.NET_ERROR_GETCFG_TVADJUST: // (0x80000000|338) 获取TV调节配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_TVADJUST"); - break; - case NetSDKLib.NET_ERROR_SETCFG_TVADJUST: // (0x80000000|339) 设置TV调节配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_TVADJUST"); - break; - case NetSDKLib.NET_ERROR_CONNECT_FAILED: // (0x80000000|340) 请求建立连接失败 - msg = Res.string().getBundle().getString("NET_ERROR_CONNECT_FAILED"); - break; - case NetSDKLib.NET_ERROR_SETCFG_BURNFILE: // (0x80000000|341) 请求刻录文件上传失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_BURNFILE"); - break; - case NetSDKLib.NET_ERROR_SNIFFER_GETCFG: // (0x80000000|342) 获取抓包配置信息失败 - msg = Res.string().getBundle().getString("NET_ERROR_SNIFFER_GETCFG"); - break; - case NetSDKLib.NET_ERROR_SNIFFER_SETCFG: // (0x80000000|343) 设置抓包配置信息失败 - msg = Res.string().getBundle().getString("NET_ERROR_SNIFFER_SETCFG"); - break; - case NetSDKLib.NET_ERROR_DOWNLOADRATE_GETCFG: // (0x80000000|344) 查询下载限制信息失败 - msg = Res.string().getBundle().getString("NET_ERROR_DOWNLOADRATE_GETCFG"); - break; - case NetSDKLib.NET_ERROR_DOWNLOADRATE_SETCFG: // (0x80000000|345) 设置下载限制信息失败 - msg = Res.string().getBundle().getString("NET_ERROR_DOWNLOADRATE_SETCFG"); - break; - case NetSDKLib.NET_ERROR_SEARCH_TRANSCOM: // (0x80000000|346) 查询串口参数失败 - msg = Res.string().getBundle().getString("NET_ERROR_SEARCH_TRANSCOM"); - break; - case NetSDKLib.NET_ERROR_GETCFG_POINT: // (0x80000000|347) 获取预制点信息错误 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_POINT"); - break; - case NetSDKLib.NET_ERROR_SETCFG_POINT: // (0x80000000|348) 设置预制点信息错误 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_POINT"); - break; - case NetSDKLib.NET_SDK_LOGOUT_ERROR: // (0x80000000|349) SDK没有正常登出设备 - msg = Res.string().getBundle().getString("NET_SDK_LOGOUT_ERROR"); - break; - case NetSDKLib.NET_ERROR_GET_VEHICLE_CFG: // (0x80000000|350) 获取车载配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_VEHICLE_CFG"); - break; - case NetSDKLib.NET_ERROR_SET_VEHICLE_CFG: // (0x80000000|351) 设置车载配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SET_VEHICLE_CFG"); - break; - case NetSDKLib.NET_ERROR_GET_ATM_OVERLAY_CFG: // (0x80000000|352) 获取atm叠加配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_ATM_OVERLAY_CFG"); - break; - case NetSDKLib.NET_ERROR_SET_ATM_OVERLAY_CFG: // (0x80000000|353) 设置atm叠加配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SET_ATM_OVERLAY_CFG"); - break; - case NetSDKLib.NET_ERROR_GET_ATM_OVERLAY_ABILITY: // (0x80000000|354) 获取atm叠加能力失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_ATM_OVERLAY_ABILITY"); - break; - case NetSDKLib.NET_ERROR_GET_DECODER_TOUR_CFG: // (0x80000000|355) 获取解码器解码轮巡配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_DECODER_TOUR_CFG"); - break; - case NetSDKLib.NET_ERROR_SET_DECODER_TOUR_CFG: // (0x80000000|356) 设置解码器解码轮巡配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SET_DECODER_TOUR_CFG"); - break; - case NetSDKLib.NET_ERROR_CTRL_DECODER_TOUR: // (0x80000000|357) 控制解码器解码轮巡失败 - msg = Res.string().getBundle().getString("NET_ERROR_CTRL_DECODER_TOUR"); - break; - case NetSDKLib.NET_GROUP_OVERSUPPORTNUM: // (0x80000000|358) 超出设备支持最大用户组数目 - msg = Res.string().getBundle().getString("NET_GROUP_OVERSUPPORTNUM"); - break; - case NetSDKLib.NET_USER_OVERSUPPORTNUM: // (0x80000000|359) 超出设备支持最大用户数目 - msg = Res.string().getBundle().getString("NET_USER_OVERSUPPORTNUM"); - break; - case NetSDKLib.NET_ERROR_GET_SIP_CFG: // (0x80000000|368) 获取SIP配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_SIP_CFG"); - break; - case NetSDKLib.NET_ERROR_SET_SIP_CFG: // (0x80000000|369) 设置SIP配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SET_SIP_CFG"); - break; - case NetSDKLib.NET_ERROR_GET_SIP_ABILITY: // (0x80000000|370) 获取SIP能力失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_SIP_ABILITY"); - break; - case NetSDKLib.NET_ERROR_GET_WIFI_AP_CFG: // (0x80000000|371) 获取WIFI ap配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_WIFI_AP_CFG"); - break; - case NetSDKLib.NET_ERROR_SET_WIFI_AP_CFG: // (0x80000000|372) 设置WIFI ap配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SET_WIFI_AP_CFG"); - break; - case NetSDKLib.NET_ERROR_GET_DECODE_POLICY: // (0x80000000|373) 获取解码策略配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_DECODE_POLICY"); - break; - case NetSDKLib.NET_ERROR_SET_DECODE_POLICY: // (0x80000000|374) 设置解码策略配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SET_DECODE_POLICY"); - break; - case NetSDKLib.NET_ERROR_TALK_REJECT: // (0x80000000|375) 拒绝对讲 - msg = Res.string().getBundle().getString("NET_ERROR_TALK_REJECT"); - break; - case NetSDKLib.NET_ERROR_TALK_OPENED: // (0x80000000|376) 对讲被其他客户端打开 - msg = Res.string().getBundle().getString("NET_ERROR_TALK_OPENED"); - break; - case NetSDKLib.NET_ERROR_TALK_RESOURCE_CONFLICIT: // (0x80000000|377) 资源冲突 - msg = Res.string().getBundle().getString("NET_ERROR_TALK_RESOURCE_CONFLICIT"); - break; - case NetSDKLib.NET_ERROR_TALK_UNSUPPORTED_ENCODE: // (0x80000000|378) 不支持的语音编码格式 - msg = Res.string().getBundle().getString("NET_ERROR_TALK_UNSUPPORTED_ENCODE"); - break; - case NetSDKLib.NET_ERROR_TALK_RIGHTLESS: // (0x80000000|379) 无权限 - msg = Res.string().getBundle().getString("NET_ERROR_TALK_RIGHTLESS"); - break; - case NetSDKLib.NET_ERROR_TALK_FAILED: // (0x80000000|380) 请求对讲失败 - msg = Res.string().getBundle().getString("NET_ERROR_TALK_FAILED"); - break; - case NetSDKLib.NET_ERROR_GET_MACHINE_CFG: // (0x80000000|381) 获取机器相关配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_MACHINE_CFG"); - break; - case NetSDKLib.NET_ERROR_SET_MACHINE_CFG: // (0x80000000|382) 设置机器相关配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SET_MACHINE_CFG"); - break; - case NetSDKLib.NET_ERROR_GET_DATA_FAILED: // (0x80000000|383) 设备无法获取当前请求数据 - msg = Res.string().getBundle().getString("NET_ERROR_GET_DATA_FAILED"); - break; - case NetSDKLib.NET_ERROR_MAC_VALIDATE_FAILED: // (0x80000000|384) MAC地址验证失败 - msg = Res.string().getBundle().getString("NET_ERROR_MAC_VALIDATE_FAILED"); - break; - case NetSDKLib.NET_ERROR_GET_INSTANCE: // (0x80000000|385) 获取服务器实例失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_INSTANCE"); - break; - case NetSDKLib.NET_ERROR_JSON_REQUEST: // (0x80000000|386) 生成的json字符串错误 - msg = Res.string().getBundle().getString("NET_ERROR_JSON_REQUEST"); - break; - case NetSDKLib.NET_ERROR_JSON_RESPONSE: // (0x80000000|387) 响应的json字符串错误 - msg = Res.string().getBundle().getString("NET_ERROR_JSON_RESPONSE"); - break; - case NetSDKLib.NET_ERROR_VERSION_HIGHER: // (0x80000000|388) 协议版本低于当前使用的版本 - msg = Res.string().getBundle().getString("NET_ERROR_VERSION_HIGHER"); - break; - case NetSDKLib.NET_SPARE_NO_CAPACITY: // (0x80000000|389) 热备操作失败, 容量不足 - msg = Res.string().getBundle().getString("NET_SPARE_NO_CAPACITY"); - break; - case NetSDKLib.NET_ERROR_SOURCE_IN_USE: // (0x80000000|390) 显示源被其他输出占用 - msg = Res.string().getBundle().getString("NET_ERROR_SOURCE_IN_USE"); - break; - case NetSDKLib.NET_ERROR_REAVE: // (0x80000000|391) 高级用户抢占低级用户资源 - msg = Res.string().getBundle().getString("NET_ERROR_REAVE"); - break; - case NetSDKLib.NET_ERROR_NETFORBID: // (0x80000000|392) 禁止入网 - msg = Res.string().getBundle().getString("NET_ERROR_NETFORBID"); - break; - case NetSDKLib.NET_ERROR_GETCFG_MACFILTER: // (0x80000000|393) 获取MAC过滤配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MACFILTER"); - break; - case NetSDKLib.NET_ERROR_SETCFG_MACFILTER: // (0x80000000|394) 设置MAC过滤配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_MACFILTER"); - break; - case NetSDKLib.NET_ERROR_GETCFG_IPMACFILTER: // (0x80000000|395) 获取IP/MAC过滤配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_IPMACFILTER"); - break; - case NetSDKLib.NET_ERROR_SETCFG_IPMACFILTER: // (0x80000000|396) 设置IP/MAC过滤配置失败 - msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_IPMACFILTER"); - break; - case NetSDKLib.NET_ERROR_OPERATION_OVERTIME: // (0x80000000|397) 当前操作超时 - msg = Res.string().getBundle().getString("NET_ERROR_OPERATION_OVERTIME"); - break; - case NetSDKLib.NET_ERROR_SENIOR_VALIDATE_FAILED: // (0x80000000|398) 高级校验失败 - msg = Res.string().getBundle().getString("NET_ERROR_SENIOR_VALIDATE_FAILED"); - break; - case NetSDKLib.NET_ERROR_DEVICE_ID_NOT_EXIST: // (0x80000000|399) 设备ID不存在 - msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_ID_NOT_EXIST"); - break; - case NetSDKLib.NET_ERROR_UNSUPPORTED: // (0x80000000|400) 不支持当前操作 - msg = Res.string().getBundle().getString("NET_ERROR_UNSUPPORTED"); - break; - case NetSDKLib.NET_ERROR_PROXY_DLLLOAD: // (0x80000000|401) 代理库加载失败 - msg = Res.string().getBundle().getString("NET_ERROR_PROXY_DLLLOAD"); - break; - case NetSDKLib.NET_ERROR_PROXY_ILLEGAL_PARAM: // (0x80000000|402) 代理用户参数不合法 - msg = Res.string().getBundle().getString("NET_ERROR_PROXY_ILLEGAL_PARAM"); - break; - case NetSDKLib.NET_ERROR_PROXY_INVALID_HANDLE: // (0x80000000|403) 代理句柄无效 - msg = Res.string().getBundle().getString("NET_ERROR_PROXY_INVALID_HANDLE"); - break; - case NetSDKLib.NET_ERROR_PROXY_LOGIN_DEVICE_ERROR: // (0x80000000|404) 代理登入前端设备失败 - msg = Res.string().getBundle().getString("NET_ERROR_PROXY_LOGIN_DEVICE_ERROR"); - break; - case NetSDKLib.NET_ERROR_PROXY_START_SERVER_ERROR: // (0x80000000|405) 启动代理服务失败 - msg = Res.string().getBundle().getString("NET_ERROR_PROXY_START_SERVER_ERROR"); - break; - case NetSDKLib.NET_ERROR_SPEAK_FAILED: // (0x80000000|406) 请求喊话失败 - msg = Res.string().getBundle().getString("NET_ERROR_SPEAK_FAILED"); - break; - case NetSDKLib.NET_ERROR_NOT_SUPPORT_F6: // (0x80000000|407) 设备不支持此F6接口调用 - msg = Res.string().getBundle().getString("NET_ERROR_NOT_SUPPORT_F6"); - break; - case NetSDKLib.NET_ERROR_CD_UNREADY: // (0x80000000|408) 光盘未就绪 - msg = Res.string().getBundle().getString("NET_ERROR_CD_UNREADY"); - break; - case NetSDKLib.NET_ERROR_DIR_NOT_EXIST: // (0x80000000|409) 目录不存在 - msg = Res.string().getBundle().getString("NET_ERROR_DIR_NOT_EXIST"); - break; - case NetSDKLib.NET_ERROR_UNSUPPORTED_SPLIT_MODE: // (0x80000000|410) 设备不支持的分割模式 - msg = Res.string().getBundle().getString("NET_ERROR_UNSUPPORTED_SPLIT_MODE"); - break; - case NetSDKLib.NET_ERROR_OPEN_WND_PARAM: // (0x80000000|411) 开窗参数不合法 - msg = Res.string().getBundle().getString("NET_ERROR_OPEN_WND_PARAM"); - break; - case NetSDKLib.NET_ERROR_LIMITED_WND_COUNT: // (0x80000000|412) 开窗数量超过限制 - msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_WND_COUNT"); - break; - case NetSDKLib.NET_ERROR_UNMATCHED_REQUEST: // (0x80000000|413) 请求命令与当前模式不匹配 - msg = Res.string().getBundle().getString("NET_ERROR_UNMATCHED_REQUEST"); - break; - case NetSDKLib.NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR: // (0x80000000|414) Render库启用高清图像内部调整策略出错 - msg = Res.string().getBundle().getString("NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR"); - break; - case NetSDKLib.NET_ERROR_UPGRADE_FAILED: // (0x80000000|415) 设备升级失败 - msg = Res.string().getBundle().getString("NET_ERROR_UPGRADE_FAILED"); - break; - case NetSDKLib.NET_ERROR_NO_TARGET_DEVICE: // (0x80000000|416) 找不到目标设备 - msg = Res.string().getBundle().getString("NET_ERROR_NO_TARGET_DEVICE"); - break; - case NetSDKLib.NET_ERROR_NO_VERIFY_DEVICE: // (0x80000000|417) 找不到验证设备 - msg = Res.string().getBundle().getString("NET_ERROR_NO_VERIFY_DEVICE"); - break; - case NetSDKLib.NET_ERROR_CASCADE_RIGHTLESS: // (0x80000000|418) 无级联权限 - msg = Res.string().getBundle().getString("NET_ERROR_CASCADE_RIGHTLESS"); - break; - case NetSDKLib.NET_ERROR_LOW_PRIORITY: // (0x80000000|419) 低优先级 - msg = Res.string().getBundle().getString("NET_ERROR_LOW_PRIORITY"); - break; - case NetSDKLib.NET_ERROR_REMOTE_REQUEST_TIMEOUT: // (0x80000000|420) 远程设备请求超时 - msg = Res.string().getBundle().getString("NET_ERROR_REMOTE_REQUEST_TIMEOUT"); - break; - case NetSDKLib.NET_ERROR_LIMITED_INPUT_SOURCE: // (0x80000000|421) 输入源超出最大路数限制 - msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_INPUT_SOURCE"); - break; - case NetSDKLib.NET_ERROR_SET_LOG_PRINT_INFO: // (0x80000000|422) 设置日志打印失败 - msg = Res.string().getBundle().getString("NET_ERROR_SET_LOG_PRINT_INFO"); - break; - case NetSDKLib.NET_ERROR_PARAM_DWSIZE_ERROR: // (0x80000000|423) 入参的dwsize字段出错 - msg = Res.string().getBundle().getString("NET_ERROR_PARAM_DWSIZE_ERROR"); - break; - case NetSDKLib.NET_ERROR_LIMITED_MONITORWALL_COUNT: // (0x80000000|424) 电视墙数量超过上限 - msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_MONITORWALL_COUNT"); - break; - case NetSDKLib.NET_ERROR_PART_PROCESS_FAILED: // (0x80000000|425) 部分过程执行失败 - msg = Res.string().getBundle().getString("NET_ERROR_PART_PROCESS_FAILED"); - break; - case NetSDKLib.NET_ERROR_TARGET_NOT_SUPPORT: // (0x80000000|426) 该功能不支持转发 - msg = Res.string().getBundle().getString("NET_ERROR_TARGET_NOT_SUPPORT"); - break; - case NetSDKLib.NET_ERROR_VISITE_FILE: // (0x80000000|510) 访问文件失败 - msg = Res.string().getBundle().getString("NET_ERROR_VISITE_FILE"); - break; - case NetSDKLib.NET_ERROR_DEVICE_STATUS_BUSY: // (0x80000000|511) 设备忙 - msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_STATUS_BUSY"); - break; - case NetSDKLib.NET_USER_PWD_NOT_AUTHORIZED: // (0x80000000|512)修改密码无权限 - msg = Res.string().getBundle().getString("NET_USER_PWD_NOT_AUTHORIZED"); - break; - case NetSDKLib.NET_USER_PWD_NOT_STRONG: // (0x80000000|513) 密码强度不够 - msg = Res.string().getBundle().getString("NET_USER_PWD_NOT_STRONG"); - break; - case NetSDKLib.NET_ERROR_NO_SUCH_CONFIG: // (0x80000000|514) 没有对应的配置 - msg = Res.string().getBundle().getString("NET_ERROR_NO_SUCH_CONFIG"); - break; - case NetSDKLib.NET_ERROR_AUDIO_RECORD_FAILED: // (0x80000000|515) 录音失败 - msg = Res.string().getBundle().getString("NET_ERROR_AUDIO_RECORD_FAILED"); - break; - case NetSDKLib.NET_ERROR_SEND_DATA_FAILED: // (0x80000000|516) 数据发送失败 - msg = Res.string().getBundle().getString("NET_ERROR_SEND_DATA_FAILED"); - break; - case NetSDKLib.NET_ERROR_OBSOLESCENT_INTERFACE: // (0x80000000|517) 废弃接口 - msg = Res.string().getBundle().getString("NET_ERROR_OBSOLESCENT_INTERFACE"); - break; - case NetSDKLib.NET_ERROR_INSUFFICIENT_INTERAL_BUF: // (0x80000000|518) 内部缓冲不足 - msg = Res.string().getBundle().getString("NET_ERROR_INSUFFICIENT_INTERAL_BUF"); - break; - case NetSDKLib.NET_ERROR_NEED_ENCRYPTION_PASSWORD: // (0x80000000|519) 修改设备ip时,需要校验密码 - msg = Res.string().getBundle().getString("NET_ERROR_NEED_ENCRYPTION_PASSWORD"); - break; - case NetSDKLib.NET_ERROR_NOSUPPORT_RECORD: // (0x80000000|520) 设备不支持此记录集 - msg = Res.string().getBundle().getString("NET_ERROR_NOSUPPORT_RECORD"); - break; - case NetSDKLib.NET_ERROR_SERIALIZE_ERROR: // (0x80000000|1010) 数据序列化错误 - msg = Res.string().getBundle().getString("NET_ERROR_SERIALIZE_ERROR"); - break; - case NetSDKLib.NET_ERROR_DESERIALIZE_ERROR: // (0x80000000|1011) 数据反序列化错误 - msg = Res.string().getBundle().getString("NET_ERROR_DESERIALIZE_ERROR"); - break; - case NetSDKLib.NET_ERROR_LOWRATEWPAN_ID_EXISTED: // (0x80000000|1012) 该无线ID已存在 - msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_EXISTED"); - break; - case NetSDKLib.NET_ERROR_LOWRATEWPAN_ID_LIMIT: // (0x80000000|1013) 无线ID数量已超限 - msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_LIMIT"); - break; - case NetSDKLib.NET_ERROR_LOWRATEWPAN_ID_ABNORMAL: // (0x80000000|1014) 无线异常添加 - msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_ABNORMAL"); - break; - case NetSDKLib.NET_ERROR_ENCRYPT: // (0x80000000|1015) 加密数据失败 - msg = Res.string().getBundle().getString("NET_ERROR_ENCRYPT"); - break; - case NetSDKLib.NET_ERROR_PWD_ILLEGAL: // (0x80000000|1016) 新密码不合规范 - msg = Res.string().getBundle().getString("NET_ERROR_PWD_ILLEGAL"); - break; - case NetSDKLib.NET_ERROR_DEVICE_ALREADY_INIT: // (0x80000000|1017) 设备已经初始化 - msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_ALREADY_INIT"); - break; - case NetSDKLib.NET_ERROR_SECURITY_CODE: // (0x80000000|1018) 安全码错误 - msg = Res.string().getBundle().getString("NET_ERROR_SECURITY_CODE"); - break; - case NetSDKLib.NET_ERROR_SECURITY_CODE_TIMEOUT: // (0x80000000|1019) 安全码超出有效期 - msg = Res.string().getBundle().getString("NET_ERROR_SECURITY_CODE_TIMEOUT"); - break; - case NetSDKLib.NET_ERROR_GET_PWD_SPECI: // (0x80000000|1020) 获取密码规范失败 - msg = Res.string().getBundle().getString("NET_ERROR_GET_PWD_SPECI"); - break; - case NetSDKLib.NET_ERROR_NO_AUTHORITY_OF_OPERATION: // (0x80000000|1021) 无权限进行该操作 - msg = Res.string().getBundle().getString("NET_ERROR_NO_AUTHORITY_OF_OPERATION"); - break; - case NetSDKLib.NET_ERROR_DECRYPT: // (0x80000000|1022) 解密数据失败 - msg = Res.string().getBundle().getString("NET_ERROR_DECRYPT"); - break; - case NetSDKLib.NET_ERROR_2D_CODE: // (0x80000000|1023) 2D code校验失败 - msg = Res.string().getBundle().getString("NET_ERROR_2D_CODE"); - break; - case NetSDKLib.NET_ERROR_INVALID_REQUEST: // (0x80000000|1024) 非法的RPC请求 - msg = Res.string().getBundle().getString("NET_ERROR_INVALID_REQUEST"); - break; - case NetSDKLib.NET_ERROR_PWD_RESET_DISABLE: // (0x80000000|1025) 密码重置功能已关闭 - msg = Res.string().getBundle().getString("NET_ERROR_PWD_RESET_DISABLE"); - break; - case NetSDKLib.NET_ERROR_PLAY_PRIVATE_DATA: // (0x80000000|1026) 显示私有数据,比如规则框等失败 - msg = Res.string().getBundle().getString("NET_ERROR_PLAY_PRIVATE_DATA"); - break; - case NetSDKLib.NET_ERROR_ROBOT_OPERATE_FAILED: // (0x80000000|1027) 机器人操作失败 - msg = Res.string().getBundle().getString("NET_ERROR_ROBOT_OPERATE_FAILED"); - break; - case NetSDKLib.NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT: // (0x80000000|1028) 图片大小超限 - msg = Res.string().getBundle().getString("NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT"); - break; - case NetSDKLib.NET_ERROR_USERID_INVALID: // (0x80000000|1029) 用户ID不存在 - msg = Res.string().getBundle().getString("NET_ERROR_USERID_INVALID"); - break; - case NetSDKLib.NET_ERROR_EXTRACTFEATURE_FAILED: // (0x80000000|1030) 照片特征值提取失败 - msg = Res.string().getBundle().getString("NET_ERROR_EXTRACTFEATURE_FAILED"); - break; - case NetSDKLib.NET_ERROR_PHOTO_EXIST: // (0x80000000|1031) 照片已存在 - msg = Res.string().getBundle().getString("NET_ERROR_PHOTO_EXIST"); - break; - case NetSDKLib.NET_ERROR_PHOTO_OVERFLOW: // (0x80000000|1032) 照片数量超过上限 - msg = Res.string().getBundle().getString("NET_ERROR_PHOTO_OVERFLOW"); - break; - case NetSDKLib.NET_ERROR_CHANNEL_ALREADY_OPENED: // (0x80000000|1033) 通道已经打开 - msg = Res.string().getBundle().getString("NET_ERROR_CHANNEL_ALREADY_OPENED"); - break; - case NetSDKLib.NET_ERROR_CREATE_SOCKET: // (0x80000000|1034) 创建套接字失败 - msg = Res.string().getBundle().getString("NET_ERROR_CREATE_SOCKET"); - break; - case NetSDKLib.NET_ERROR_CHANNEL_NUM: // (0x80000000|1035) 通道号错误 - msg = Res.string().getBundle().getString("NET_ERROR_CHANNEL_NUM"); - break; - case NetSDKLib.NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED: // (0x80000000|1051) 组ID超过最大值 - msg = Res.string().getBundle().getString("NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED"); - break; - default: - msg = Res.string().getBundle().getString("NET_ERROR"); - break; - } - return msg; - } - + /** + * 登录设备设备错误状态中英文 + * + * @param err 接口CLIENT_GetLastError返回, error code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) +") + * @return + */ + public static String getErrorCode(int err) { + String msg = ""; + switch (err) { + case NetSDKLib.NET_NOERROR: // 0 没有错误 + msg = Res.string().getBundle().getString("NET_ERROR"); + break; + case NetSDKLib.NET_ERROR: // -1 未知错误 + msg = Res.string().getBundle().getString("NET_ERROR"); + break; + case NetSDKLib.NET_SYSTEM_ERROR: // (0x80000000|1) Windows系统出错 + msg = Res.string().getBundle().getString("NET_SYSTEM_ERROR"); + break; + case NetSDKLib.NET_NETWORK_ERROR: // (0x80000000|2) 网络错误,可能是因为网络超时 + msg = Res.string().getBundle().getString("NET_NETWORK_ERROR"); + break; + case NetSDKLib.NET_DEV_VER_NOMATCH: // (0x80000000|3) 设备协议不匹配 + msg = Res.string().getBundle().getString("NET_DEV_VER_NOMATCH"); + break; + case NetSDKLib.NET_INVALID_HANDLE: // (0x80000000|4) 句柄无效 + msg = Res.string().getBundle().getString("NET_INVALID_HANDLE"); + break; + case NetSDKLib.NET_OPEN_CHANNEL_ERROR: // (0x80000000|5) 打开通道失败 + msg = Res.string().getBundle().getString("NET_OPEN_CHANNEL_ERROR"); + break; + case NetSDKLib.NET_CLOSE_CHANNEL_ERROR: // (0x80000000|6) 关闭通道失败 + msg = Res.string().getBundle().getString("NET_CLOSE_CHANNEL_ERROR"); + break; + case NetSDKLib.NET_ILLEGAL_PARAM: // (0x80000000|7) 用户参数不合法 + msg = Res.string().getBundle().getString("NET_ILLEGAL_PARAM"); + break; + case NetSDKLib.NET_SDK_INIT_ERROR: // (0x80000000|8) SDK初始化出错 + msg = Res.string().getBundle().getString("NET_SDK_INIT_ERROR"); + break; + case NetSDKLib.NET_SDK_UNINIT_ERROR: // (0x80000000|9) SDK清理出错 + msg = Res.string().getBundle().getString("NET_SDK_UNINIT_ERROR"); + break; + case NetSDKLib.NET_RENDER_OPEN_ERROR: // (0x80000000|10) 申请render资源出错 + msg = Res.string().getBundle().getString("NET_RENDER_OPEN_ERROR"); + break; + case NetSDKLib.NET_DEC_OPEN_ERROR: // (0x80000000|11) 打开解码库出错 + msg = Res.string().getBundle().getString("NET_DEC_OPEN_ERROR"); + break; + case NetSDKLib.NET_DEC_CLOSE_ERROR: // (0x80000000|12) 关闭解码库出错 + msg = Res.string().getBundle().getString("NET_DEC_CLOSE_ERROR"); + break; + case NetSDKLib.NET_MULTIPLAY_NOCHANNEL: // (0x80000000|13) 多画面预览中检测到通道数为0 + msg = Res.string().getBundle().getString("NET_MULTIPLAY_NOCHANNEL"); + break; + case NetSDKLib.NET_TALK_INIT_ERROR: // (0x80000000|14) 录音库初始化失败 + msg = Res.string().getBundle().getString("NET_TALK_INIT_ERROR"); + break; + case NetSDKLib.NET_TALK_NOT_INIT: // (0x80000000|15) 录音库未经初始化 + msg = Res.string().getBundle().getString("NET_TALK_NOT_INIT"); + break; + case NetSDKLib.NET_TALK_SENDDATA_ERROR: // (0x80000000|16) 发送音频数据出错 + msg = Res.string().getBundle().getString("NET_TALK_SENDDATA_ERROR"); + break; + case NetSDKLib.NET_REAL_ALREADY_SAVING: // (0x80000000|17) 实时数据已经处于保存状态 + msg = Res.string().getBundle().getString("NET_REAL_ALREADY_SAVING"); + break; + case NetSDKLib.NET_NOT_SAVING: // (0x80000000|18) 未保存实时数据 + msg = Res.string().getBundle().getString("NET_NOT_SAVING"); + break; + case NetSDKLib.NET_OPEN_FILE_ERROR: // (0x80000000|19) 打开文件出错 + msg = Res.string().getBundle().getString("NET_OPEN_FILE_ERROR"); + break; + case NetSDKLib.NET_PTZ_SET_TIMER_ERROR: // (0x80000000|20) 启动云台控制定时器失败 + msg = Res.string().getBundle().getString("NET_PTZ_SET_TIMER_ERROR"); + break; + case NetSDKLib.NET_RETURN_DATA_ERROR: // (0x80000000|21) 对返回数据的校验出错 + msg = Res.string().getBundle().getString("NET_RETURN_DATA_ERROR"); + break; + case NetSDKLib.NET_INSUFFICIENT_BUFFER: // (0x80000000|22) 没有足够的缓存 + msg = Res.string().getBundle().getString("NET_INSUFFICIENT_BUFFER"); + break; + case NetSDKLib.NET_NOT_SUPPORTED: // (0x80000000|23) 当前SDK未支持该功能 + msg = Res.string().getBundle().getString("NET_NOT_SUPPORTED"); + break; + case NetSDKLib.NET_NO_RECORD_FOUND: // (0x80000000|24) 查询不到录像 + msg = Res.string().getBundle().getString("NET_NO_RECORD_FOUND"); + break; + case NetSDKLib.NET_NOT_AUTHORIZED: // (0x80000000|25) 无操作权限 + msg = Res.string().getBundle().getString("NET_NOT_AUTHORIZED"); + break; + case NetSDKLib.NET_NOT_NOW: // (0x80000000|26) 暂时无法执行 + msg = Res.string().getBundle().getString("NET_NOT_NOW"); + break; + case NetSDKLib.NET_NO_TALK_CHANNEL: // (0x80000000|27) 未发现对讲通道 + msg = Res.string().getBundle().getString("NET_NO_TALK_CHANNEL"); + break; + case NetSDKLib.NET_NO_AUDIO: // (0x80000000|28) 未发现音频 + msg = Res.string().getBundle().getString("NET_NO_AUDIO"); + break; + case NetSDKLib.NET_NO_INIT: // (0x80000000|29) 网络SDK未经初始化 + msg = Res.string().getBundle().getString("NET_NO_INIT"); + break; + case NetSDKLib.NET_DOWNLOAD_END: // (0x80000000|30) 下载已结束 + msg = Res.string().getBundle().getString("NET_DOWNLOAD_END"); + break; + case NetSDKLib.NET_EMPTY_LIST: // (0x80000000|31) 查询结果为空 + msg = Res.string().getBundle().getString("NET_EMPTY_LIST"); + break; + case NetSDKLib.NET_ERROR_GETCFG_SYSATTR: // (0x80000000|32) 获取系统属性配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SYSATTR"); + break; + case NetSDKLib.NET_ERROR_GETCFG_SERIAL: // (0x80000000|33) 获取序列号失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SERIAL"); + break; + case NetSDKLib.NET_ERROR_GETCFG_GENERAL: // (0x80000000|34) 获取常规属性失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_GENERAL"); + break; + case NetSDKLib.NET_ERROR_GETCFG_DSPCAP: // (0x80000000|35) 获取DSP能力描述失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DSPCAP"); + break; + case NetSDKLib.NET_ERROR_GETCFG_NETCFG: // (0x80000000|36) 获取网络配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_NETCFG"); + break; + case NetSDKLib.NET_ERROR_GETCFG_CHANNAME: // (0x80000000|37) 获取通道名称失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_CHANNAME"); + break; + case NetSDKLib.NET_ERROR_GETCFG_VIDEO: // (0x80000000|38) 获取视频属性失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEO"); + break; + case NetSDKLib.NET_ERROR_GETCFG_RECORD: // (0x80000000|39) 获取录象配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_RECORD"); + break; + case NetSDKLib.NET_ERROR_GETCFG_PRONAME: // (0x80000000|40) 获取解码器协议名称失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_PRONAME"); + break; + case NetSDKLib.NET_ERROR_GETCFG_FUNCNAME: // (0x80000000|41) 获取232串口功能名称失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_FUNCNAME"); + break; + case NetSDKLib.NET_ERROR_GETCFG_485DECODER: // (0x80000000|42) 获取解码器属性失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_485DECODER"); + break; + case NetSDKLib.NET_ERROR_GETCFG_232COM: // (0x80000000|43) 获取232串口配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_232COM"); + break; + case NetSDKLib.NET_ERROR_GETCFG_ALARMIN: // (0x80000000|44) 获取外部报警输入配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ALARMIN"); + break; + case NetSDKLib.NET_ERROR_GETCFG_ALARMDET: // (0x80000000|45) 获取动态检测报警失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ALARMDET"); + break; + case NetSDKLib.NET_ERROR_GETCFG_SYSTIME: // (0x80000000|46) 获取设备时间失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SYSTIME"); + break; + case NetSDKLib.NET_ERROR_GETCFG_PREVIEW: // (0x80000000|47) 获取预览参数失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_PREVIEW"); + break; + case NetSDKLib.NET_ERROR_GETCFG_AUTOMT: // (0x80000000|48) 获取自动维护配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_AUTOMT"); + break; + case NetSDKLib.NET_ERROR_GETCFG_VIDEOMTRX: // (0x80000000|49) 获取视频矩阵配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEOMTRX"); + break; + case NetSDKLib.NET_ERROR_GETCFG_COVER: // (0x80000000|50) 获取区域遮挡配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_COVER"); + break; + case NetSDKLib.NET_ERROR_GETCFG_WATERMAKE: // (0x80000000|51) 获取图象水印配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WATERMAKE"); + break; + case NetSDKLib.NET_ERROR_GETCFG_MULTICAST: // (0x80000000|52) 获取配置失败位置:组播端口按通道配置 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MULTICAST"); + break; + case NetSDKLib.NET_ERROR_SETCFG_GENERAL: // (0x80000000|55) 修改常规属性失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_GENERAL"); + break; + case NetSDKLib.NET_ERROR_SETCFG_NETCFG: // (0x80000000|56) 改网络配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_NETCFG"); + break; + case NetSDKLib.NET_ERROR_SETCFG_CHANNAME: // (0x80000000|57) 修改通道名称失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_CHANNAME"); + break; + case NetSDKLib.NET_ERROR_SETCFG_VIDEO: // (0x80000000|58) 修改视频属性失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEO"); + break; + case NetSDKLib.NET_ERROR_SETCFG_RECORD: // (0x80000000|59) 修改录象配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_RECORD"); + break; + case NetSDKLib.NET_ERROR_SETCFG_485DECODER: // (0x80000000|60) 修改解码器属性失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_485DECODER"); + break; + case NetSDKLib.NET_ERROR_SETCFG_232COM: // (0x80000000|61) 修改232串口配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_232COM"); + break; + case NetSDKLib.NET_ERROR_SETCFG_ALARMIN: // (0x80000000|62) 修改外部输入报警配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ALARMIN"); + break; + case NetSDKLib.NET_ERROR_SETCFG_ALARMDET: // (0x80000000|63) 修改动态检测报警配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ALARMDET"); + break; + case NetSDKLib.NET_ERROR_SETCFG_SYSTIME: // (0x80000000|64) 修改设备时间失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SYSTIME"); + break; + case NetSDKLib.NET_ERROR_SETCFG_PREVIEW: // (0x80000000|65) 修改预览参数失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_PREVIEW"); + break; + case NetSDKLib.NET_ERROR_SETCFG_AUTOMT: // (0x80000000|66) 修改自动维护配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_AUTOMT"); + break; + case NetSDKLib.NET_ERROR_SETCFG_VIDEOMTRX: // (0x80000000|67) 修改视频矩阵配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEOMTRX"); + break; + case NetSDKLib.NET_ERROR_SETCFG_COVER: // (0x80000000|68) 修改区域遮挡配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_COVER"); + break; + case NetSDKLib.NET_ERROR_SETCFG_WATERMAKE: // (0x80000000|69) 修改图象水印配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WATERMAKE"); + break; + case NetSDKLib.NET_ERROR_SETCFG_WLAN: // (0x80000000|70) 修改无线网络信息失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WLAN"); + break; + case NetSDKLib.NET_ERROR_SETCFG_WLANDEV: // (0x80000000|71) 选择无线网络设备失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WLANDEV"); + break; + case NetSDKLib.NET_ERROR_SETCFG_REGISTER: // (0x80000000|72) 修改主动注册参数配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_REGISTER"); + break; + case NetSDKLib.NET_ERROR_SETCFG_CAMERA: // (0x80000000|73) 修改摄像头属性配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_CAMERA"); + break; + case NetSDKLib.NET_ERROR_SETCFG_INFRARED: // (0x80000000|74) 修改红外报警配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_INFRARED"); + break; + case NetSDKLib.NET_ERROR_SETCFG_SOUNDALARM: // (0x80000000|75) 修改音频报警配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SOUNDALARM"); + break; + case NetSDKLib.NET_ERROR_SETCFG_STORAGE: // (0x80000000|76) 修改存储位置配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_STORAGE"); + break; + case NetSDKLib.NET_AUDIOENCODE_NOTINIT: // (0x80000000|77) 音频编码接口没有成功初始化 + msg = Res.string().getBundle().getString("NET_AUDIOENCODE_NOTINIT"); + break; + case NetSDKLib.NET_DATA_TOOLONGH: // (0x80000000|78) 数据过长 + msg = Res.string().getBundle().getString("NET_DATA_TOOLONGH"); + break; + case NetSDKLib.NET_UNSUPPORTED: // (0x80000000|79) 备不支持该操作 + msg = Res.string().getBundle().getString("NET_UNSUPPORTED"); + break; + case NetSDKLib.NET_DEVICE_BUSY: // (0x80000000|80) 设备资源不足 + msg = Res.string().getBundle().getString("NET_DEVICE_BUSY"); + break; + case NetSDKLib.NET_SERVER_STARTED: // (0x80000000|81) 服务器已经启动 + msg = Res.string().getBundle().getString("NET_SERVER_STARTED"); + break; + case NetSDKLib.NET_SERVER_STOPPED: // (0x80000000|82) 服务器尚未成功启动 + msg = Res.string().getBundle().getString("NET_SERVER_STOPPED"); + break; + case NetSDKLib.NET_LISTER_INCORRECT_SERIAL: // (0x80000000|83) 输入序列号有误 + msg = Res.string().getBundle().getString("NET_LISTER_INCORRECT_SERIAL"); + break; + case NetSDKLib.NET_QUERY_DISKINFO_FAILED: // (0x80000000|84) 获取硬盘信息失败 + msg = Res.string().getBundle().getString("NET_QUERY_DISKINFO_FAILED"); + break; + case NetSDKLib.NET_ERROR_GETCFG_SESSION: // (0x80000000|85) 获取连接Session信息 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SESSION"); + break; + case NetSDKLib.NET_USER_FLASEPWD_TRYTIME: // (0x80000000|86) 输入密码错误超过限制次数 + msg = Res.string().getBundle().getString("NET_USER_FLASEPWD_TRYTIME"); + break; + case NetSDKLib.NET_LOGIN_ERROR_PASSWORD: // (0x80000000|100) 密码不正确 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_PASSWORD"); + break; + case NetSDKLib.NET_LOGIN_ERROR_USER: // (0x80000000|101) 帐户不存在 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_USER"); + break; + case NetSDKLib.NET_LOGIN_ERROR_TIMEOUT: // (0x80000000|102) 等待登录返回超时 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_TIMEOUT"); + break; + case NetSDKLib.NET_LOGIN_ERROR_RELOGGIN: // (0x80000000|103) 帐号已登录 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_RELOGGIN"); + break; + case NetSDKLib.NET_LOGIN_ERROR_LOCKED: // (0x80000000|104) 帐号已被锁定 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_LOCKED"); + break; + case NetSDKLib.NET_LOGIN_ERROR_BLACKLIST: // (0x80000000|105) 帐号已被列为黑名单 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_BLACKLIST"); + break; + case NetSDKLib.NET_LOGIN_ERROR_BUSY: // (0x80000000|106) 资源不足,系统忙 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_BUSY"); + break; + case NetSDKLib.NET_LOGIN_ERROR_CONNECT: // (0x80000000|107) 登录设备超时,请检查网络并重试 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_CONNECT"); + break; + case NetSDKLib.NET_LOGIN_ERROR_NETWORK: // (0x80000000|108) 网络连接失败 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_NETWORK"); + break; + case NetSDKLib.NET_LOGIN_ERROR_SUBCONNECT: // (0x80000000|109) 登录设备成功,但无法创建视频通道,请检查网 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_SUBCONNECT"); + break; + case NetSDKLib.NET_LOGIN_ERROR_MAXCONNECT: // (0x80000000|110) 超过最大连接数 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_MAXCONNECT"); + break; + case NetSDKLib.NET_LOGIN_ERROR_PROTOCOL3_ONLY: // (0x80000000|111) 只支持3代协议 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_PROTOCOL3_ONLY"); + break; + case NetSDKLib.NET_LOGIN_ERROR_UKEY_LOST: // (0x80000000|112) 插入U盾或U盾信息错误 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_UKEY_LOST"); + break; + case NetSDKLib.NET_LOGIN_ERROR_NO_AUTHORIZED: // (0x80000000|113) 客户端IP地址没有登录权限 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_NO_AUTHORIZED"); + break; + case NetSDKLib.NET_LOGIN_ERROR_USER_OR_PASSOWRD: // (0x80000000|117) 账号或密码错误 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_USER_OR_PASSOWRD"); + break; + case NetSDKLib.NET_LOGIN_ERROR_DEVICE_NOT_INIT: // (0x80000000|118) 设备尚未初始化,不能登录,请先初始化设备 + msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_DEVICE_NOT_INIT"); + break; + case NetSDKLib.NET_RENDER_SOUND_ON_ERROR: // (0x80000000|120) Render库打开音频出错 + msg = Res.string().getBundle().getString("NET_RENDER_SOUND_ON_ERROR"); + break; + case NetSDKLib.NET_RENDER_SOUND_OFF_ERROR: // (0x80000000|121) Render库关闭音频出错 + msg = Res.string().getBundle().getString("NET_RENDER_SOUND_OFF_ERROR"); + break; + case NetSDKLib.NET_RENDER_SET_VOLUME_ERROR: // (0x80000000|122) Render库控制音量出错 + msg = Res.string().getBundle().getString("NET_RENDER_SET_VOLUME_ERROR"); + break; + case NetSDKLib.NET_RENDER_ADJUST_ERROR: // (0x80000000|123) Render库设置画面参数出错 + msg = Res.string().getBundle().getString("NET_RENDER_ADJUST_ERROR"); + break; + case NetSDKLib.NET_RENDER_PAUSE_ERROR: // (0x80000000|124) Render库暂停播放出错 + msg = Res.string().getBundle().getString("NET_RENDER_PAUSE_ERROR"); + break; + case NetSDKLib.NET_RENDER_SNAP_ERROR: // (0x80000000|125) Render库抓图出错 + msg = Res.string().getBundle().getString("NET_RENDER_SNAP_ERROR"); + break; + case NetSDKLib.NET_RENDER_STEP_ERROR: // (0x80000000|126) Render库步进出错 + msg = Res.string().getBundle().getString("NET_RENDER_STEP_ERROR"); + break; + case NetSDKLib.NET_RENDER_FRAMERATE_ERROR: // (0x80000000|127) Render库设置帧率出错 + msg = Res.string().getBundle().getString("NET_RENDER_FRAMERATE_ERROR"); + break; + case NetSDKLib.NET_RENDER_DISPLAYREGION_ERROR: // (0x80000000|128) Render库设置显示区域出错 + msg = Res.string().getBundle().getString("NET_RENDER_DISPLAYREGION_ERROR"); + break; + case NetSDKLib.NET_RENDER_GETOSDTIME_ERROR: // (0x80000000|129) Render库获取当前播放时间出错 + msg = Res.string().getBundle().getString("NET_RENDER_GETOSDTIME_ERROR"); + break; + case NetSDKLib.NET_GROUP_EXIST: // (0x80000000|140) 组名已存在 + msg = Res.string().getBundle().getString("NET_GROUP_EXIST"); + break; + case NetSDKLib.NET_GROUP_NOEXIST: // (0x80000000|141) 组名不存在 + msg = Res.string().getBundle().getString("NET_GROUP_NOEXIST"); + break; + case NetSDKLib.NET_GROUP_RIGHTOVER: // (0x80000000|142) 组的权限超出权限列表范围 + msg = Res.string().getBundle().getString("NET_GROUP_RIGHTOVER"); + break; + case NetSDKLib.NET_GROUP_HAVEUSER: // (0x80000000|143) 组下有用户,不能删除 + msg = Res.string().getBundle().getString("NET_GROUP_HAVEUSER"); + break; + case NetSDKLib.NET_GROUP_RIGHTUSE: // (0x80000000|144) 组的某个权限被用户使用,不能出除 + msg = Res.string().getBundle().getString("NET_GROUP_RIGHTUSE"); + break; + case NetSDKLib.NET_GROUP_SAMENAME: // (0x80000000|145) 新组名同已有组名重复 + msg = Res.string().getBundle().getString("NET_GROUP_SAMENAME"); + break; + case NetSDKLib.NET_USER_EXIST: // (0x80000000|146) 用户已存在 + msg = Res.string().getBundle().getString("NET_USER_EXIST"); + break; + case NetSDKLib.NET_USER_NOEXIST: // (0x80000000|147) 用户不存在 + msg = Res.string().getBundle().getString("NET_USER_NOEXIST"); + break; + case NetSDKLib.NET_USER_RIGHTOVER: // (0x80000000|148) 用户权限超出组权限 + msg = Res.string().getBundle().getString("NET_USER_RIGHTOVER"); + break; + case NetSDKLib.NET_USER_PWD: // (0x80000000|149) 保留帐号,不容许修改密码 + msg = Res.string().getBundle().getString("NET_USER_PWD"); + break; + case NetSDKLib.NET_USER_FLASEPWD: // (0x80000000|150) 密码不正确 + msg = Res.string().getBundle().getString("NET_USER_FLASEPWD"); + break; + case NetSDKLib.NET_USER_NOMATCHING: // (0x80000000|151) 密码不匹配 + msg = Res.string().getBundle().getString("NET_USER_NOMATCHING"); + break; + case NetSDKLib.NET_USER_INUSE: // (0x80000000|152) 账号正在使用中 + msg = Res.string().getBundle().getString("NET_USER_INUSE"); + break; + case NetSDKLib.NET_ERROR_GETCFG_ETHERNET: // (0x80000000|300) 获取网卡配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ETHERNET"); + break; + case NetSDKLib.NET_ERROR_GETCFG_WLAN: // (0x80000000|301) 获取无线网络信息失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WLAN"); + break; + case NetSDKLib.NET_ERROR_GETCFG_WLANDEV: // (0x80000000|302) 获取无线网络设备失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WLANDEV"); + break; + case NetSDKLib.NET_ERROR_GETCFG_REGISTER: // (0x80000000|303) 获取主动注册参数失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_REGISTER"); + break; + case NetSDKLib.NET_ERROR_GETCFG_CAMERA: // (0x80000000|304) 获取摄像头属性失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_CAMERA"); + break; + case NetSDKLib.NET_ERROR_GETCFG_INFRARED: // (0x80000000|305) 获取红外报警配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_INFRARED"); + break; + case NetSDKLib.NET_ERROR_GETCFG_SOUNDALARM: // (0x80000000|306) 获取音频报警配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SOUNDALARM"); + break; + case NetSDKLib.NET_ERROR_GETCFG_STORAGE: // (0x80000000|307) 获取存储位置配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_STORAGE"); + break; + case NetSDKLib.NET_ERROR_GETCFG_MAIL: // (0x80000000|308) 获取邮件配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MAIL"); + break; + case NetSDKLib.NET_CONFIG_DEVBUSY: // (0x80000000|309) 暂时无法设置 + msg = Res.string().getBundle().getString("NET_CONFIG_DEVBUSY"); + break; + case NetSDKLib.NET_CONFIG_DATAILLEGAL: // (0x80000000|310) 配置数据不合法 + msg = Res.string().getBundle().getString("NET_CONFIG_DATAILLEGAL"); + break; + case NetSDKLib.NET_ERROR_GETCFG_DST: // (0x80000000|311) 获取夏令时配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DST"); + break; + case NetSDKLib.NET_ERROR_SETCFG_DST: // (0x80000000|312) 设置夏令时配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_DST"); + break; + case NetSDKLib.NET_ERROR_GETCFG_VIDEO_OSD: // (0x80000000|313) 获取视频OSD叠加配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEO_OSD"); + break; + case NetSDKLib.NET_ERROR_SETCFG_VIDEO_OSD: // (0x80000000|314) 设置视频OSD叠加配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEO_OSD"); + break; + case NetSDKLib.NET_ERROR_GETCFG_GPRSCDMA: // (0x80000000|315) 获取CDMA\GPRS网络配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_GPRSCDMA"); + break; + case NetSDKLib.NET_ERROR_SETCFG_GPRSCDMA: // (0x80000000|316) 设置CDMA\GPRS网络配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_GPRSCDMA"); + break; + case NetSDKLib.NET_ERROR_GETCFG_IPFILTER: // (0x80000000|317) 获取IP过滤配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_IPFILTER"); + break; + case NetSDKLib.NET_ERROR_SETCFG_IPFILTER: // (0x80000000|318) 设置IP过滤配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_IPFILTER"); + break; + case NetSDKLib.NET_ERROR_GETCFG_TALKENCODE: // (0x80000000|319) 获取语音对讲编码配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_TALKENCODE"); + break; + case NetSDKLib.NET_ERROR_SETCFG_TALKENCODE: // (0x80000000|320) 设置语音对讲编码配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_TALKENCODE"); + break; + case NetSDKLib.NET_ERROR_GETCFG_RECORDLEN: // (0x80000000|321) 获取录像打包长度配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_RECORDLEN"); + break; + case NetSDKLib.NET_ERROR_SETCFG_RECORDLEN: // (0x80000000|322) 设置录像打包长度配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_RECORDLEN"); + break; + case NetSDKLib.NET_DONT_SUPPORT_SUBAREA: // (0x80000000|323) 不支持网络硬盘分区 + msg = Res.string().getBundle().getString("NET_DONT_SUPPORT_SUBAREA"); + break; + case NetSDKLib.NET_ERROR_GET_AUTOREGSERVER: // (0x80000000|324) 获取设备上主动注册服务器信息失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_AUTOREGSERVER"); + break; + case NetSDKLib.NET_ERROR_CONTROL_AUTOREGISTER: // (0x80000000|325) 主动注册重定向注册错误 + msg = Res.string().getBundle().getString("NET_ERROR_CONTROL_AUTOREGISTER"); + break; + case NetSDKLib.NET_ERROR_DISCONNECT_AUTOREGISTER: // (0x80000000|326) 断开主动注册服务器错误 + msg = Res.string().getBundle().getString("NET_ERROR_DISCONNECT_AUTOREGISTER"); + break; + case NetSDKLib.NET_ERROR_GETCFG_MMS: // (0x80000000|327) 获取mms配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MMS"); + break; + case NetSDKLib.NET_ERROR_SETCFG_MMS: // (0x80000000|328) 设置mms配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_MMS"); + break; + case NetSDKLib.NET_ERROR_GETCFG_SMSACTIVATION: // (0x80000000|329) 获取短信激活无线连接配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SMSACTIVATION"); + break; + case NetSDKLib.NET_ERROR_SETCFG_SMSACTIVATION: // (0x80000000|330) 设置短信激活无线连接配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SMSACTIVATION"); + break; + case NetSDKLib.NET_ERROR_GETCFG_DIALINACTIVATION: // (0x80000000|331) 获取拨号激活无线连接配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DIALINACTIVATION"); + break; + case NetSDKLib.NET_ERROR_SETCFG_DIALINACTIVATION: // (0x80000000|332) 设置拨号激活无线连接配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_DIALINACTIVATION"); + break; + case NetSDKLib.NET_ERROR_GETCFG_VIDEOOUT: // (0x80000000|333) 查询视频输出参数配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEOOUT"); + break; + case NetSDKLib.NET_ERROR_SETCFG_VIDEOOUT: // (0x80000000|334) 设置视频输出参数配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEOOUT"); + break; + case NetSDKLib.NET_ERROR_GETCFG_OSDENABLE: // (0x80000000|335) 获取osd叠加使能配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_OSDENABLE"); + break; + case NetSDKLib.NET_ERROR_SETCFG_OSDENABLE: // (0x80000000|336) 设置osd叠加使能配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_OSDENABLE"); + break; + case NetSDKLib.NET_ERROR_SETCFG_ENCODERINFO: // (0x80000000|337) 设置数字通道前端编码接入配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ENCODERINFO"); + break; + case NetSDKLib.NET_ERROR_GETCFG_TVADJUST: // (0x80000000|338) 获取TV调节配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_TVADJUST"); + break; + case NetSDKLib.NET_ERROR_SETCFG_TVADJUST: // (0x80000000|339) 设置TV调节配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_TVADJUST"); + break; + case NetSDKLib.NET_ERROR_CONNECT_FAILED: // (0x80000000|340) 请求建立连接失败 + msg = Res.string().getBundle().getString("NET_ERROR_CONNECT_FAILED"); + break; + case NetSDKLib.NET_ERROR_SETCFG_BURNFILE: // (0x80000000|341) 请求刻录文件上传失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_BURNFILE"); + break; + case NetSDKLib.NET_ERROR_SNIFFER_GETCFG: // (0x80000000|342) 获取抓包配置信息失败 + msg = Res.string().getBundle().getString("NET_ERROR_SNIFFER_GETCFG"); + break; + case NetSDKLib.NET_ERROR_SNIFFER_SETCFG: // (0x80000000|343) 设置抓包配置信息失败 + msg = Res.string().getBundle().getString("NET_ERROR_SNIFFER_SETCFG"); + break; + case NetSDKLib.NET_ERROR_DOWNLOADRATE_GETCFG: // (0x80000000|344) 查询下载限制信息失败 + msg = Res.string().getBundle().getString("NET_ERROR_DOWNLOADRATE_GETCFG"); + break; + case NetSDKLib.NET_ERROR_DOWNLOADRATE_SETCFG: // (0x80000000|345) 设置下载限制信息失败 + msg = Res.string().getBundle().getString("NET_ERROR_DOWNLOADRATE_SETCFG"); + break; + case NetSDKLib.NET_ERROR_SEARCH_TRANSCOM: // (0x80000000|346) 查询串口参数失败 + msg = Res.string().getBundle().getString("NET_ERROR_SEARCH_TRANSCOM"); + break; + case NetSDKLib.NET_ERROR_GETCFG_POINT: // (0x80000000|347) 获取预制点信息错误 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_POINT"); + break; + case NetSDKLib.NET_ERROR_SETCFG_POINT: // (0x80000000|348) 设置预制点信息错误 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_POINT"); + break; + case NetSDKLib.NET_SDK_LOGOUT_ERROR: // (0x80000000|349) SDK没有正常登出设备 + msg = Res.string().getBundle().getString("NET_SDK_LOGOUT_ERROR"); + break; + case NetSDKLib.NET_ERROR_GET_VEHICLE_CFG: // (0x80000000|350) 获取车载配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_VEHICLE_CFG"); + break; + case NetSDKLib.NET_ERROR_SET_VEHICLE_CFG: // (0x80000000|351) 设置车载配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SET_VEHICLE_CFG"); + break; + case NetSDKLib.NET_ERROR_GET_ATM_OVERLAY_CFG: // (0x80000000|352) 获取atm叠加配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_ATM_OVERLAY_CFG"); + break; + case NetSDKLib.NET_ERROR_SET_ATM_OVERLAY_CFG: // (0x80000000|353) 设置atm叠加配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SET_ATM_OVERLAY_CFG"); + break; + case NetSDKLib.NET_ERROR_GET_ATM_OVERLAY_ABILITY: // (0x80000000|354) 获取atm叠加能力失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_ATM_OVERLAY_ABILITY"); + break; + case NetSDKLib.NET_ERROR_GET_DECODER_TOUR_CFG: // (0x80000000|355) 获取解码器解码轮巡配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_DECODER_TOUR_CFG"); + break; + case NetSDKLib.NET_ERROR_SET_DECODER_TOUR_CFG: // (0x80000000|356) 设置解码器解码轮巡配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SET_DECODER_TOUR_CFG"); + break; + case NetSDKLib.NET_ERROR_CTRL_DECODER_TOUR: // (0x80000000|357) 控制解码器解码轮巡失败 + msg = Res.string().getBundle().getString("NET_ERROR_CTRL_DECODER_TOUR"); + break; + case NetSDKLib.NET_GROUP_OVERSUPPORTNUM: // (0x80000000|358) 超出设备支持最大用户组数目 + msg = Res.string().getBundle().getString("NET_GROUP_OVERSUPPORTNUM"); + break; + case NetSDKLib.NET_USER_OVERSUPPORTNUM: // (0x80000000|359) 超出设备支持最大用户数目 + msg = Res.string().getBundle().getString("NET_USER_OVERSUPPORTNUM"); + break; + case NetSDKLib.NET_ERROR_GET_SIP_CFG: // (0x80000000|368) 获取SIP配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_SIP_CFG"); + break; + case NetSDKLib.NET_ERROR_SET_SIP_CFG: // (0x80000000|369) 设置SIP配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SET_SIP_CFG"); + break; + case NetSDKLib.NET_ERROR_GET_SIP_ABILITY: // (0x80000000|370) 获取SIP能力失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_SIP_ABILITY"); + break; + case NetSDKLib.NET_ERROR_GET_WIFI_AP_CFG: // (0x80000000|371) 获取WIFI ap配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_WIFI_AP_CFG"); + break; + case NetSDKLib.NET_ERROR_SET_WIFI_AP_CFG: // (0x80000000|372) 设置WIFI ap配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SET_WIFI_AP_CFG"); + break; + case NetSDKLib.NET_ERROR_GET_DECODE_POLICY: // (0x80000000|373) 获取解码策略配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_DECODE_POLICY"); + break; + case NetSDKLib.NET_ERROR_SET_DECODE_POLICY: // (0x80000000|374) 设置解码策略配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SET_DECODE_POLICY"); + break; + case NetSDKLib.NET_ERROR_TALK_REJECT: // (0x80000000|375) 拒绝对讲 + msg = Res.string().getBundle().getString("NET_ERROR_TALK_REJECT"); + break; + case NetSDKLib.NET_ERROR_TALK_OPENED: // (0x80000000|376) 对讲被其他客户端打开 + msg = Res.string().getBundle().getString("NET_ERROR_TALK_OPENED"); + break; + case NetSDKLib.NET_ERROR_TALK_RESOURCE_CONFLICIT: // (0x80000000|377) 资源冲突 + msg = Res.string().getBundle().getString("NET_ERROR_TALK_RESOURCE_CONFLICIT"); + break; + case NetSDKLib.NET_ERROR_TALK_UNSUPPORTED_ENCODE: // (0x80000000|378) 不支持的语音编码格式 + msg = Res.string().getBundle().getString("NET_ERROR_TALK_UNSUPPORTED_ENCODE"); + break; + case NetSDKLib.NET_ERROR_TALK_RIGHTLESS: // (0x80000000|379) 无权限 + msg = Res.string().getBundle().getString("NET_ERROR_TALK_RIGHTLESS"); + break; + case NetSDKLib.NET_ERROR_TALK_FAILED: // (0x80000000|380) 请求对讲失败 + msg = Res.string().getBundle().getString("NET_ERROR_TALK_FAILED"); + break; + case NetSDKLib.NET_ERROR_GET_MACHINE_CFG: // (0x80000000|381) 获取机器相关配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_MACHINE_CFG"); + break; + case NetSDKLib.NET_ERROR_SET_MACHINE_CFG: // (0x80000000|382) 设置机器相关配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SET_MACHINE_CFG"); + break; + case NetSDKLib.NET_ERROR_GET_DATA_FAILED: // (0x80000000|383) 设备无法获取当前请求数据 + msg = Res.string().getBundle().getString("NET_ERROR_GET_DATA_FAILED"); + break; + case NetSDKLib.NET_ERROR_MAC_VALIDATE_FAILED: // (0x80000000|384) MAC地址验证失败 + msg = Res.string().getBundle().getString("NET_ERROR_MAC_VALIDATE_FAILED"); + break; + case NetSDKLib.NET_ERROR_GET_INSTANCE: // (0x80000000|385) 获取服务器实例失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_INSTANCE"); + break; + case NetSDKLib.NET_ERROR_JSON_REQUEST: // (0x80000000|386) 生成的json字符串错误 + msg = Res.string().getBundle().getString("NET_ERROR_JSON_REQUEST"); + break; + case NetSDKLib.NET_ERROR_JSON_RESPONSE: // (0x80000000|387) 响应的json字符串错误 + msg = Res.string().getBundle().getString("NET_ERROR_JSON_RESPONSE"); + break; + case NetSDKLib.NET_ERROR_VERSION_HIGHER: // (0x80000000|388) 协议版本低于当前使用的版本 + msg = Res.string().getBundle().getString("NET_ERROR_VERSION_HIGHER"); + break; + case NetSDKLib.NET_SPARE_NO_CAPACITY: // (0x80000000|389) 热备操作失败, 容量不足 + msg = Res.string().getBundle().getString("NET_SPARE_NO_CAPACITY"); + break; + case NetSDKLib.NET_ERROR_SOURCE_IN_USE: // (0x80000000|390) 显示源被其他输出占用 + msg = Res.string().getBundle().getString("NET_ERROR_SOURCE_IN_USE"); + break; + case NetSDKLib.NET_ERROR_REAVE: // (0x80000000|391) 高级用户抢占低级用户资源 + msg = Res.string().getBundle().getString("NET_ERROR_REAVE"); + break; + case NetSDKLib.NET_ERROR_NETFORBID: // (0x80000000|392) 禁止入网 + msg = Res.string().getBundle().getString("NET_ERROR_NETFORBID"); + break; + case NetSDKLib.NET_ERROR_GETCFG_MACFILTER: // (0x80000000|393) 获取MAC过滤配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MACFILTER"); + break; + case NetSDKLib.NET_ERROR_SETCFG_MACFILTER: // (0x80000000|394) 设置MAC过滤配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_MACFILTER"); + break; + case NetSDKLib.NET_ERROR_GETCFG_IPMACFILTER: // (0x80000000|395) 获取IP/MAC过滤配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_IPMACFILTER"); + break; + case NetSDKLib.NET_ERROR_SETCFG_IPMACFILTER: // (0x80000000|396) 设置IP/MAC过滤配置失败 + msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_IPMACFILTER"); + break; + case NetSDKLib.NET_ERROR_OPERATION_OVERTIME: // (0x80000000|397) 当前操作超时 + msg = Res.string().getBundle().getString("NET_ERROR_OPERATION_OVERTIME"); + break; + case NetSDKLib.NET_ERROR_SENIOR_VALIDATE_FAILED: // (0x80000000|398) 高级校验失败 + msg = Res.string().getBundle().getString("NET_ERROR_SENIOR_VALIDATE_FAILED"); + break; + case NetSDKLib.NET_ERROR_DEVICE_ID_NOT_EXIST: // (0x80000000|399) 设备ID不存在 + msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_ID_NOT_EXIST"); + break; + case NetSDKLib.NET_ERROR_UNSUPPORTED: // (0x80000000|400) 不支持当前操作 + msg = Res.string().getBundle().getString("NET_ERROR_UNSUPPORTED"); + break; + case NetSDKLib.NET_ERROR_PROXY_DLLLOAD: // (0x80000000|401) 代理库加载失败 + msg = Res.string().getBundle().getString("NET_ERROR_PROXY_DLLLOAD"); + break; + case NetSDKLib.NET_ERROR_PROXY_ILLEGAL_PARAM: // (0x80000000|402) 代理用户参数不合法 + msg = Res.string().getBundle().getString("NET_ERROR_PROXY_ILLEGAL_PARAM"); + break; + case NetSDKLib.NET_ERROR_PROXY_INVALID_HANDLE: // (0x80000000|403) 代理句柄无效 + msg = Res.string().getBundle().getString("NET_ERROR_PROXY_INVALID_HANDLE"); + break; + case NetSDKLib.NET_ERROR_PROXY_LOGIN_DEVICE_ERROR: // (0x80000000|404) 代理登入前端设备失败 + msg = Res.string().getBundle().getString("NET_ERROR_PROXY_LOGIN_DEVICE_ERROR"); + break; + case NetSDKLib.NET_ERROR_PROXY_START_SERVER_ERROR: // (0x80000000|405) 启动代理服务失败 + msg = Res.string().getBundle().getString("NET_ERROR_PROXY_START_SERVER_ERROR"); + break; + case NetSDKLib.NET_ERROR_SPEAK_FAILED: // (0x80000000|406) 请求喊话失败 + msg = Res.string().getBundle().getString("NET_ERROR_SPEAK_FAILED"); + break; + case NetSDKLib.NET_ERROR_NOT_SUPPORT_F6: // (0x80000000|407) 设备不支持此F6接口调用 + msg = Res.string().getBundle().getString("NET_ERROR_NOT_SUPPORT_F6"); + break; + case NetSDKLib.NET_ERROR_CD_UNREADY: // (0x80000000|408) 光盘未就绪 + msg = Res.string().getBundle().getString("NET_ERROR_CD_UNREADY"); + break; + case NetSDKLib.NET_ERROR_DIR_NOT_EXIST: // (0x80000000|409) 目录不存在 + msg = Res.string().getBundle().getString("NET_ERROR_DIR_NOT_EXIST"); + break; + case NetSDKLib.NET_ERROR_UNSUPPORTED_SPLIT_MODE: // (0x80000000|410) 设备不支持的分割模式 + msg = Res.string().getBundle().getString("NET_ERROR_UNSUPPORTED_SPLIT_MODE"); + break; + case NetSDKLib.NET_ERROR_OPEN_WND_PARAM: // (0x80000000|411) 开窗参数不合法 + msg = Res.string().getBundle().getString("NET_ERROR_OPEN_WND_PARAM"); + break; + case NetSDKLib.NET_ERROR_LIMITED_WND_COUNT: // (0x80000000|412) 开窗数量超过限制 + msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_WND_COUNT"); + break; + case NetSDKLib.NET_ERROR_UNMATCHED_REQUEST: // (0x80000000|413) 请求命令与当前模式不匹配 + msg = Res.string().getBundle().getString("NET_ERROR_UNMATCHED_REQUEST"); + break; + case NetSDKLib.NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR: // (0x80000000|414) Render库启用高清图像内部调整策略出错 + msg = Res.string().getBundle().getString("NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR"); + break; + case NetSDKLib.NET_ERROR_UPGRADE_FAILED: // (0x80000000|415) 设备升级失败 + msg = Res.string().getBundle().getString("NET_ERROR_UPGRADE_FAILED"); + break; + case NetSDKLib.NET_ERROR_NO_TARGET_DEVICE: // (0x80000000|416) 找不到目标设备 + msg = Res.string().getBundle().getString("NET_ERROR_NO_TARGET_DEVICE"); + break; + case NetSDKLib.NET_ERROR_NO_VERIFY_DEVICE: // (0x80000000|417) 找不到验证设备 + msg = Res.string().getBundle().getString("NET_ERROR_NO_VERIFY_DEVICE"); + break; + case NetSDKLib.NET_ERROR_CASCADE_RIGHTLESS: // (0x80000000|418) 无级联权限 + msg = Res.string().getBundle().getString("NET_ERROR_CASCADE_RIGHTLESS"); + break; + case NetSDKLib.NET_ERROR_LOW_PRIORITY: // (0x80000000|419) 低优先级 + msg = Res.string().getBundle().getString("NET_ERROR_LOW_PRIORITY"); + break; + case NetSDKLib.NET_ERROR_REMOTE_REQUEST_TIMEOUT: // (0x80000000|420) 远程设备请求超时 + msg = Res.string().getBundle().getString("NET_ERROR_REMOTE_REQUEST_TIMEOUT"); + break; + case NetSDKLib.NET_ERROR_LIMITED_INPUT_SOURCE: // (0x80000000|421) 输入源超出最大路数限制 + msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_INPUT_SOURCE"); + break; + case NetSDKLib.NET_ERROR_SET_LOG_PRINT_INFO: // (0x80000000|422) 设置日志打印失败 + msg = Res.string().getBundle().getString("NET_ERROR_SET_LOG_PRINT_INFO"); + break; + case NetSDKLib.NET_ERROR_PARAM_DWSIZE_ERROR: // (0x80000000|423) 入参的dwsize字段出错 + msg = Res.string().getBundle().getString("NET_ERROR_PARAM_DWSIZE_ERROR"); + break; + case NetSDKLib.NET_ERROR_LIMITED_MONITORWALL_COUNT: // (0x80000000|424) 电视墙数量超过上限 + msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_MONITORWALL_COUNT"); + break; + case NetSDKLib.NET_ERROR_PART_PROCESS_FAILED: // (0x80000000|425) 部分过程执行失败 + msg = Res.string().getBundle().getString("NET_ERROR_PART_PROCESS_FAILED"); + break; + case NetSDKLib.NET_ERROR_TARGET_NOT_SUPPORT: // (0x80000000|426) 该功能不支持转发 + msg = Res.string().getBundle().getString("NET_ERROR_TARGET_NOT_SUPPORT"); + break; + case NetSDKLib.NET_ERROR_VISITE_FILE: // (0x80000000|510) 访问文件失败 + msg = Res.string().getBundle().getString("NET_ERROR_VISITE_FILE"); + break; + case NetSDKLib.NET_ERROR_DEVICE_STATUS_BUSY: // (0x80000000|511) 设备忙 + msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_STATUS_BUSY"); + break; + case NetSDKLib.NET_USER_PWD_NOT_AUTHORIZED: // (0x80000000|512)修改密码无权限 + msg = Res.string().getBundle().getString("NET_USER_PWD_NOT_AUTHORIZED"); + break; + case NetSDKLib.NET_USER_PWD_NOT_STRONG: // (0x80000000|513) 密码强度不够 + msg = Res.string().getBundle().getString("NET_USER_PWD_NOT_STRONG"); + break; + case NetSDKLib.NET_ERROR_NO_SUCH_CONFIG: // (0x80000000|514) 没有对应的配置 + msg = Res.string().getBundle().getString("NET_ERROR_NO_SUCH_CONFIG"); + break; + case NetSDKLib.NET_ERROR_AUDIO_RECORD_FAILED: // (0x80000000|515) 录音失败 + msg = Res.string().getBundle().getString("NET_ERROR_AUDIO_RECORD_FAILED"); + break; + case NetSDKLib.NET_ERROR_SEND_DATA_FAILED: // (0x80000000|516) 数据发送失败 + msg = Res.string().getBundle().getString("NET_ERROR_SEND_DATA_FAILED"); + break; + case NetSDKLib.NET_ERROR_OBSOLESCENT_INTERFACE: // (0x80000000|517) 废弃接口 + msg = Res.string().getBundle().getString("NET_ERROR_OBSOLESCENT_INTERFACE"); + break; + case NetSDKLib.NET_ERROR_INSUFFICIENT_INTERAL_BUF: // (0x80000000|518) 内部缓冲不足 + msg = Res.string().getBundle().getString("NET_ERROR_INSUFFICIENT_INTERAL_BUF"); + break; + case NetSDKLib.NET_ERROR_NEED_ENCRYPTION_PASSWORD: // (0x80000000|519) 修改设备ip时,需要校验密码 + msg = Res.string().getBundle().getString("NET_ERROR_NEED_ENCRYPTION_PASSWORD"); + break; + case NetSDKLib.NET_ERROR_NOSUPPORT_RECORD: // (0x80000000|520) 设备不支持此记录集 + msg = Res.string().getBundle().getString("NET_ERROR_NOSUPPORT_RECORD"); + break; + case NetSDKLib.NET_ERROR_SERIALIZE_ERROR: // (0x80000000|1010) 数据序列化错误 + msg = Res.string().getBundle().getString("NET_ERROR_SERIALIZE_ERROR"); + break; + case NetSDKLib.NET_ERROR_DESERIALIZE_ERROR: // (0x80000000|1011) 数据反序列化错误 + msg = Res.string().getBundle().getString("NET_ERROR_DESERIALIZE_ERROR"); + break; + case NetSDKLib.NET_ERROR_LOWRATEWPAN_ID_EXISTED: // (0x80000000|1012) 该无线ID已存在 + msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_EXISTED"); + break; + case NetSDKLib.NET_ERROR_LOWRATEWPAN_ID_LIMIT: // (0x80000000|1013) 无线ID数量已超限 + msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_LIMIT"); + break; + case NetSDKLib.NET_ERROR_LOWRATEWPAN_ID_ABNORMAL: // (0x80000000|1014) 无线异常添加 + msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_ABNORMAL"); + break; + case NetSDKLib.NET_ERROR_ENCRYPT: // (0x80000000|1015) 加密数据失败 + msg = Res.string().getBundle().getString("NET_ERROR_ENCRYPT"); + break; + case NetSDKLib.NET_ERROR_PWD_ILLEGAL: // (0x80000000|1016) 新密码不合规范 + msg = Res.string().getBundle().getString("NET_ERROR_PWD_ILLEGAL"); + break; + case NetSDKLib.NET_ERROR_DEVICE_ALREADY_INIT: // (0x80000000|1017) 设备已经初始化 + msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_ALREADY_INIT"); + break; + case NetSDKLib.NET_ERROR_SECURITY_CODE: // (0x80000000|1018) 安全码错误 + msg = Res.string().getBundle().getString("NET_ERROR_SECURITY_CODE"); + break; + case NetSDKLib.NET_ERROR_SECURITY_CODE_TIMEOUT: // (0x80000000|1019) 安全码超出有效期 + msg = Res.string().getBundle().getString("NET_ERROR_SECURITY_CODE_TIMEOUT"); + break; + case NetSDKLib.NET_ERROR_GET_PWD_SPECI: // (0x80000000|1020) 获取密码规范失败 + msg = Res.string().getBundle().getString("NET_ERROR_GET_PWD_SPECI"); + break; + case NetSDKLib.NET_ERROR_NO_AUTHORITY_OF_OPERATION: // (0x80000000|1021) 无权限进行该操作 + msg = Res.string().getBundle().getString("NET_ERROR_NO_AUTHORITY_OF_OPERATION"); + break; + case NetSDKLib.NET_ERROR_DECRYPT: // (0x80000000|1022) 解密数据失败 + msg = Res.string().getBundle().getString("NET_ERROR_DECRYPT"); + break; + case NetSDKLib.NET_ERROR_2D_CODE: // (0x80000000|1023) 2D code校验失败 + msg = Res.string().getBundle().getString("NET_ERROR_2D_CODE"); + break; + case NetSDKLib.NET_ERROR_INVALID_REQUEST: // (0x80000000|1024) 非法的RPC请求 + msg = Res.string().getBundle().getString("NET_ERROR_INVALID_REQUEST"); + break; + case NetSDKLib.NET_ERROR_PWD_RESET_DISABLE: // (0x80000000|1025) 密码重置功能已关闭 + msg = Res.string().getBundle().getString("NET_ERROR_PWD_RESET_DISABLE"); + break; + case NetSDKLib.NET_ERROR_PLAY_PRIVATE_DATA: // (0x80000000|1026) 显示私有数据,比如规则框等失败 + msg = Res.string().getBundle().getString("NET_ERROR_PLAY_PRIVATE_DATA"); + break; + case NetSDKLib.NET_ERROR_ROBOT_OPERATE_FAILED: // (0x80000000|1027) 机器人操作失败 + msg = Res.string().getBundle().getString("NET_ERROR_ROBOT_OPERATE_FAILED"); + break; + case NetSDKLib.NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT: // (0x80000000|1028) 图片大小超限 + msg = Res.string().getBundle().getString("NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT"); + break; + case NetSDKLib.NET_ERROR_USERID_INVALID: // (0x80000000|1029) 用户ID不存在 + msg = Res.string().getBundle().getString("NET_ERROR_USERID_INVALID"); + break; + case NetSDKLib.NET_ERROR_EXTRACTFEATURE_FAILED: // (0x80000000|1030) 照片特征值提取失败 + msg = Res.string().getBundle().getString("NET_ERROR_EXTRACTFEATURE_FAILED"); + break; + case NetSDKLib.NET_ERROR_PHOTO_EXIST: // (0x80000000|1031) 照片已存在 + msg = Res.string().getBundle().getString("NET_ERROR_PHOTO_EXIST"); + break; + case NetSDKLib.NET_ERROR_PHOTO_OVERFLOW: // (0x80000000|1032) 照片数量超过上限 + msg = Res.string().getBundle().getString("NET_ERROR_PHOTO_OVERFLOW"); + break; + case NetSDKLib.NET_ERROR_CHANNEL_ALREADY_OPENED: // (0x80000000|1033) 通道已经打开 + msg = Res.string().getBundle().getString("NET_ERROR_CHANNEL_ALREADY_OPENED"); + break; + case NetSDKLib.NET_ERROR_CREATE_SOCKET: // (0x80000000|1034) 创建套接字失败 + msg = Res.string().getBundle().getString("NET_ERROR_CREATE_SOCKET"); + break; + case NetSDKLib.NET_ERROR_CHANNEL_NUM: // (0x80000000|1035) 通道号错误 + msg = Res.string().getBundle().getString("NET_ERROR_CHANNEL_NUM"); + break; + case NetSDKLib.NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED: // (0x80000000|1051) 组ID超过最大值 + msg = Res.string().getBundle().getString("NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED"); + break; + default: + msg = Res.string().getBundle().getString("NET_ERROR"); + break; + } + return msg; + } + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/FunctionList.java b/cloud/dahua/src/main/java/com/example/dahua/common/FunctionList.java index d349d4b..99a136c 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/FunctionList.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/FunctionList.java @@ -24,253 +24,253 @@ import javax.swing.border.EmptyBorder; * 功能列表界面 */ public class FunctionList extends JFrame { - private static final long serialVersionUID = 1L; - - public FunctionList() { - setTitle(Res.string().getFunctionList()); - setLayout(new BorderLayout()); - pack(); - setSize(450, 300); - setResizable(false); - setLocationRelativeTo(null); - - add(new FunctionPanel(), BorderLayout.CENTER); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - dispose(); - System.exit(0); - } - }); - } - - public class FunctionPanel extends JPanel { - private static final long serialVersionUID = 1L; - - public FunctionPanel() { - setLayout(new GridLayout(9, 2)); - - setBorder(new EmptyBorder(30, 50, 0, 50)); - - faceRecognitionBtn = new JButton(Res.string().getFaceRecognition()); - capturePictureBtn = new JButton(Res.string().getCapturePicture()); - realPlayBtn = new JButton(Res.string().getRealplay()); - itsEventBtn = new JButton(Res.string().getITSEvent()); - downloadBtn = new JButton(Res.string().getDownloadRecord()); - talkBtn = new JButton(Res.string().getTalk()); - deviceSearchAndInitBtn = new JButton(Res.string().getDeviceSearchAndInit()); - ptzBtn = new JButton(Res.string().getPTZ()); - deviceCtlBtn = new JButton(Res.string().getDeviceControl()); - alarmListenBtn = new JButton(Res.string().getAlarmListen()); - autoRegisterBtn = new JButton(Res.string().getAutoRegister()); - attendanceBtn = new JButton(Res.string().getAttendance()); - gateBtn = new JButton(Res.string().getGate()); - thermalCameraBtn = new JButton(Res.string().getThermalCamera()); - - add(faceRecognitionBtn); - add(deviceSearchAndInitBtn); - add(ptzBtn); - add(realPlayBtn); - add(capturePictureBtn); - add(talkBtn); - add(itsEventBtn); - add(downloadBtn); - add(deviceCtlBtn); - add(alarmListenBtn); - add(autoRegisterBtn); - add(attendanceBtn); - add(gateBtn); - add(thermalCameraBtn); - - faceRecognitionBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); - FaceRecognition.main(null); - } - }); - } - }); - - capturePictureBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + private static final long serialVersionUID = 1L; + + public FunctionList() { + setTitle(Res.string().getFunctionList()); + setLayout(new BorderLayout()); + pack(); + setSize(450, 300); + setResizable(false); + setLocationRelativeTo(null); + + add(new FunctionPanel(), BorderLayout.CENTER); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + System.exit(0); + } + }); + } + + public class FunctionPanel extends JPanel { + private static final long serialVersionUID = 1L; + + public FunctionPanel() { + setLayout(new GridLayout(9, 2)); + + setBorder(new EmptyBorder(30, 50, 0, 50)); + + faceRecognitionBtn = new JButton(Res.string().getFaceRecognition()); + capturePictureBtn = new JButton(Res.string().getCapturePicture()); + realPlayBtn = new JButton(Res.string().getRealplay()); + itsEventBtn = new JButton(Res.string().getITSEvent()); + downloadBtn = new JButton(Res.string().getDownloadRecord()); + talkBtn = new JButton(Res.string().getTalk()); + deviceSearchAndInitBtn = new JButton(Res.string().getDeviceSearchAndInit()); + ptzBtn = new JButton(Res.string().getPTZ()); + deviceCtlBtn = new JButton(Res.string().getDeviceControl()); + alarmListenBtn = new JButton(Res.string().getAlarmListen()); + autoRegisterBtn = new JButton(Res.string().getAutoRegister()); + attendanceBtn = new JButton(Res.string().getAttendance()); + gateBtn = new JButton(Res.string().getGate()); + thermalCameraBtn = new JButton(Res.string().getThermalCamera()); + + add(faceRecognitionBtn); + add(deviceSearchAndInitBtn); + add(ptzBtn); + add(realPlayBtn); + add(capturePictureBtn); + add(talkBtn); + add(itsEventBtn); + add(downloadBtn); + add(deviceCtlBtn); + add(alarmListenBtn); + add(autoRegisterBtn); + add(attendanceBtn); + add(gateBtn); + add(thermalCameraBtn); + + faceRecognitionBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); + FaceRecognition.main(null); + } + }); + } + }); + + capturePictureBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // CapturePicture.main(null); - } - }); - } - }); - - realPlayBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + } + }); + } + }); + + realPlayBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // RealPlay.main(null); - } - }); - } - }); - - downloadBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + } + }); + } + }); + + downloadBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // DownLoadRecord.main(null); - } - }); - } - }); - - talkBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + } + }); + } + }); + + talkBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // Talk.main(null); - } - }); - } - }); - - - itsEventBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + } + }); + } + }); + + + itsEventBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // TrafficEvent.main(null); - } - }); - } - }); - - deviceSearchAndInitBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); - DeviceSearchAndInit.main(null); - } - }); - } - }); - - ptzBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + } + }); + } + }); + + deviceSearchAndInitBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); + DeviceSearchAndInit.main(null); + } + }); + } + }); + + ptzBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // PTZControl.main(null); - } - }); - } - }); + } + }); + } + }); - //设备控制 - deviceCtlBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); - DeviceControl.main(null); - } - }); - } - }); + //设备控制 + deviceCtlBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); + DeviceControl.main(null); + } + }); + } + }); - //报警监听 - alarmListenBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + //报警监听 + alarmListenBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // AlarmListen.main(null); - } - }); - } - }); - - autoRegisterBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); - AutoRegister.main(null); - } - }); - } - }); - - attendanceBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + } + }); + } + }); + + autoRegisterBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); + AutoRegister.main(null); + } + }); + } + }); + + attendanceBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // Attendance.main(null); - } - }); - } - }); - - gateBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); - Gate.main(null); - } - }); - } - }); - - thermalCameraBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); + } + }); + } + }); + + gateBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); + Gate.main(null); + } + }); + } + }); + + thermalCameraBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + dispose(); // ThermalCamera.main(null); - } - }); - } - }); - } - - /* - * 功能列表组件 - */ - private JButton faceRecognitionBtn; - private JButton capturePictureBtn; - private JButton realPlayBtn; - private JButton downloadBtn; - private JButton itsEventBtn; - private JButton talkBtn; - private JButton deviceSearchAndInitBtn; - private JButton ptzBtn; - private JButton deviceCtlBtn; - private JButton alarmListenBtn; - private JButton autoRegisterBtn; - private JButton attendanceBtn; - private JButton gateBtn; - private JButton thermalCameraBtn; + } + }); + } + }); + } + + /* + * 功能列表组件 + */ + private JButton faceRecognitionBtn; + private JButton capturePictureBtn; + private JButton realPlayBtn; + private JButton downloadBtn; + private JButton itsEventBtn; + private JButton talkBtn; + private JButton deviceSearchAndInitBtn; + private JButton ptzBtn; + private JButton deviceCtlBtn; + private JButton alarmListenBtn; + private JButton autoRegisterBtn; + private JButton attendanceBtn; + private JButton gateBtn; + private JButton thermalCameraBtn; - } + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/ListPictureShowDialog.java b/cloud/dahua/src/main/java/com/example/dahua/common/ListPictureShowDialog.java index 7857511..f2c7534 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/ListPictureShowDialog.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/ListPictureShowDialog.java @@ -10,26 +10,27 @@ import javax.swing.JDialog; * 智能交通列表双击展示图片框架 */ public class ListPictureShowDialog extends JDialog { - private static final long serialVersionUID = 1L; - public ListPictureShowDialog() { - setLayout(new BorderLayout()); - setModal(true); - pack(); - setSize(800, 600); - setResizable(false); - setLocationRelativeTo(null); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 - - - listPanel = new PaintPanel(); - add(listPanel, BorderLayout.CENTER); - - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - dispose(); - } - }); - } - - public PaintPanel listPanel; + private static final long serialVersionUID = 1L; + + public ListPictureShowDialog() { + setLayout(new BorderLayout()); + setModal(true); + pack(); + setSize(800, 600); + setResizable(false); + setLocationRelativeTo(null); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体 + + + listPanel = new PaintPanel(); + add(listPanel, BorderLayout.CENTER); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + public PaintPanel listPanel; } \ No newline at end of file diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/LoginPanel.java b/cloud/dahua/src/main/java/com/example/dahua/common/LoginPanel.java index 6797d21..f76a566 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/LoginPanel.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/LoginPanel.java @@ -16,100 +16,100 @@ import com.example.dahua.lib.ToolKits; * 登陆面板 */ public class LoginPanel extends JPanel { - private static final long serialVersionUID = 1L; - - //登陆参数 - private String s_strIp = "172.16.3.8"; //"192.168.7.61"; - private Integer s_nPort = new Integer("37777"); - private String s_strUser = "admin"; - private String s_strPassword = "q12345678"; - - public LoginPanel() { - BorderEx.set(this, Res.string().getLogin(), 2); - setLayout(new FlowLayout()); - - //////////////////////////////// - loginBtn = new JButton(Res.string().getLogin()); - logoutBtn = new JButton(Res.string().getLogout()); - ipLabel = new JLabel(Res.string().getDeviceIp()); - portLabel = new JLabel(" " + Res.string().getPort()); - nameLabel = new JLabel(" " + Res.string().getUserName()); - passwordLabel = new JLabel(" " + Res.string().getPassword()); - ipTextArea = new JTextField(s_strIp); - nameTextArea = new JTextField(s_strUser); - passwordTextArea = new JPasswordField(s_strPassword); - portTextArea = new JTextField(s_nPort.toString()); - - add(ipLabel); - add(ipTextArea); - add(portLabel); - add(portTextArea); - add(nameLabel); - add(nameTextArea); - add(passwordLabel); - add(passwordTextArea); - add(loginBtn); - add(logoutBtn); - - ipTextArea.setPreferredSize(new Dimension(90, 20)); - nameTextArea.setPreferredSize(new Dimension(90, 20)); - passwordTextArea.setPreferredSize(new Dimension(90, 20)); - portTextArea.setPreferredSize(new Dimension(90, 20)); - - loginBtn.setPreferredSize(new Dimension(80, 20)); - logoutBtn.setPreferredSize(new Dimension(80, 20)); - ToolKits.limitTextFieldLength(portTextArea, 6); - - logoutBtn.setEnabled(false); - } - - public void addLoginBtnActionListener(ActionListener e) { - loginBtn.addActionListener(e); - } - - public void addLogoutBtnActionListener(ActionListener e) { - logoutBtn.addActionListener(e); - } - - public void setButtonEnable(boolean bln) { - loginBtn.setEnabled(!bln); - logoutBtn.setEnabled(bln); - } - - public boolean checkLoginText() { - if(ipTextArea.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInputDeviceIP(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if(portTextArea.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInputDevicePort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if(nameTextArea.getText().equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInputUsername(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - if(new String(passwordTextArea.getPassword()).equals("")) { - JOptionPane.showMessageDialog(null, Res.string().getInputPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); - return false; - } - - return true; - } - - public JLabel nameLabel; - public JLabel passwordLabel; - public JLabel ipLabel; - public JLabel portLabel; - - public JTextField ipTextArea; - public JTextField portTextArea; - public JTextField nameTextArea; - public JPasswordField passwordTextArea; - - public JButton loginBtn; - public JButton logoutBtn; + private static final long serialVersionUID = 1L; + + //登陆参数 + private String s_strIp = "172.16.3.8"; //"192.168.7.61"; + private Integer s_nPort = new Integer("37777"); + private String s_strUser = "admin"; + private String s_strPassword = "q12345678"; + + public LoginPanel() { + BorderEx.set(this, Res.string().getLogin(), 2); + setLayout(new FlowLayout()); + + //////////////////////////////// + loginBtn = new JButton(Res.string().getLogin()); + logoutBtn = new JButton(Res.string().getLogout()); + ipLabel = new JLabel(Res.string().getDeviceIp()); + portLabel = new JLabel(" " + Res.string().getPort()); + nameLabel = new JLabel(" " + Res.string().getUserName()); + passwordLabel = new JLabel(" " + Res.string().getPassword()); + ipTextArea = new JTextField(s_strIp); + nameTextArea = new JTextField(s_strUser); + passwordTextArea = new JPasswordField(s_strPassword); + portTextArea = new JTextField(s_nPort.toString()); + + add(ipLabel); + add(ipTextArea); + add(portLabel); + add(portTextArea); + add(nameLabel); + add(nameTextArea); + add(passwordLabel); + add(passwordTextArea); + add(loginBtn); + add(logoutBtn); + + ipTextArea.setPreferredSize(new Dimension(90, 20)); + nameTextArea.setPreferredSize(new Dimension(90, 20)); + passwordTextArea.setPreferredSize(new Dimension(90, 20)); + portTextArea.setPreferredSize(new Dimension(90, 20)); + + loginBtn.setPreferredSize(new Dimension(80, 20)); + logoutBtn.setPreferredSize(new Dimension(80, 20)); + ToolKits.limitTextFieldLength(portTextArea, 6); + + logoutBtn.setEnabled(false); + } + + public void addLoginBtnActionListener(ActionListener e) { + loginBtn.addActionListener(e); + } + + public void addLogoutBtnActionListener(ActionListener e) { + logoutBtn.addActionListener(e); + } + + public void setButtonEnable(boolean bln) { + loginBtn.setEnabled(!bln); + logoutBtn.setEnabled(bln); + } + + public boolean checkLoginText() { + if (ipTextArea.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInputDeviceIP(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (portTextArea.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInputDevicePort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (nameTextArea.getText().equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInputUsername(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + if (new String(passwordTextArea.getPassword()).equals("")) { + JOptionPane.showMessageDialog(null, Res.string().getInputPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE); + return false; + } + + return true; + } + + public JLabel nameLabel; + public JLabel passwordLabel; + public JLabel ipLabel; + public JLabel portLabel; + + public JTextField ipTextArea; + public JTextField portTextArea; + public JTextField nameTextArea; + public JPasswordField passwordTextArea; + + public JButton loginBtn; + public JButton logoutBtn; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/PaintPanel.java b/cloud/dahua/src/main/java/com/example/dahua/common/PaintPanel.java index aeb1a7f..cc75692 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/PaintPanel.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/PaintPanel.java @@ -10,26 +10,26 @@ import javax.swing.JPanel; * 带背景的绘图面板 */ public class PaintPanel extends JPanel { - private static final long serialVersionUID = 1L; - private Image image; //背景图片 - - public PaintPanel() { - super(); - setOpaque(true); //非透明 - setLayout(null); - setBackground(Color.GRAY); - setForeground(new Color(0, 0, 0)); - } - - //设置图片的方法 - public void setImage(Image image) { - this.image = image; - } - - protected void paintComponent(Graphics g) { //重写绘制组件外观 - if(image != null) { - g.drawImage(image, 0, 0, getWidth(), getHeight(), this);//绘制图片与组件大小相同 - } - super.paintComponent(g); // 执行超类方法 - } + private static final long serialVersionUID = 1L; + private Image image; //背景图片 + + public PaintPanel() { + super(); + setOpaque(true); //非透明 + setLayout(null); + setBackground(Color.GRAY); + setForeground(new Color(0, 0, 0)); + } + + //设置图片的方法 + public void setImage(Image image) { + this.image = image; + } + + protected void paintComponent(Graphics g) { //重写绘制组件外观 + if (image != null) { + g.drawImage(image, 0, 0, getWidth(), getHeight(), this);//绘制图片与组件大小相同 + } + super.paintComponent(g); // 执行超类方法 + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/Res.java b/cloud/dahua/src/main/java/com/example/dahua/common/Res.java index be112e4..c8211da 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/Res.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/Res.java @@ -2,2385 +2,2386 @@ package com.example.dahua.common; import com.example.dahua.lib.NetSDKLib; import com.example.dahua.lib.NetSDKLib.*; + import java.util.Locale; import java.util.ResourceBundle; public final class Res { - - private ResourceBundle bundle; - - private Res() { - switchLanguage(LanguageType.Chinese); - } - - private static class StringBundleHolder { - private static Res instance = new Res(); - } - - public static Res string() { - return StringBundleHolder.instance; - } - - public static enum LanguageType { - English, - Chinese - } - - public ResourceBundle getBundle() { - return bundle; - } - - /** - * \if ENGLISH_LANG - * Switch between Chinese and English - * \else - * 中英文切换 - * \endif - */ - public void switchLanguage(LanguageType type) { - switch(type) { - case Chinese: - bundle = ResourceBundle.getBundle("res", new Locale("zh", "CN")); - break; - case English: - bundle = ResourceBundle.getBundle("res", new Locale("en", "US")); - break; - default: - break; - } - } - - public String getSwitchLanguage() { - return bundle.getString("SWITCH_LANGUAGE"); - } - - public String getRealplay() { - return bundle.getString("REALPLAY"); - } - - public String getMultiRealplay() { - return bundle.getString("MULTIREALPLAY"); - } - - public String getDownloadRecord() { - return bundle.getString("DOWNLOAD_RECORD"); - } - - public String getITSEvent() { - return bundle.getString("ITS_EVENT"); - } - - public String getOnline() { - return bundle.getString("ONLINE"); - } - - public String getDisConnectReconnecting() { - return bundle.getString("DISCONNECT_RECONNECTING"); - } - - public String getDisConnect() { - return bundle.getString("DISCONNECT"); - } - - public String getPromptMessage() { - return bundle.getString("PROMPT_MESSAGE"); - } - - public String getErrorMessage() { - return bundle.getString("ERROR_MESSAGE"); - } - - public String getReconnectSucceed() { - return bundle.getString("RECONNECT_SUCCEED"); - } - - public String getSucceed() { - return bundle.getString("SUCCEED"); - } - - public String getFailed() { - return bundle.getString("FAILED"); - } - - public String getYear() { - return bundle.getString("YEAR"); - } - - public String getMonth() { - return bundle.getString("MONTH"); - } - - public String getDay() { - return bundle.getString("DAY"); - } - - public String getHour() { - return bundle.getString("HOUR"); - } - - public String getMinute() { - return bundle.getString("MINUTE"); - } - - public String getSecond() { - return bundle.getString("SECOND"); - } - - public String getSunday() { - return bundle.getString("SUNDAY"); - } - - public String getMonday() { - return bundle.getString("MONDAY"); - } - - public String getTuesday() { - return bundle.getString("TUESDAY"); - } - - public String getWednesday() { - return bundle.getString("WEDNESDAY"); - } - - public String getThursday() { - return bundle.getString("THURSDAY"); - } - - public String getFriday() { - return bundle.getString("FRIDAY"); - } - - public String getSaturday() { - return bundle.getString("SATURDAY"); - } - - public String[] getWeek() { - String[] weekdays = {getSunday(), - getMonday(), - getTuesday(), - getWednesday(), - getThursday(), - getFriday(), - getSaturday() - }; - - return weekdays; - } - - public String getConfirm() { - return bundle.getString("CONFIRM"); - } - - public String getCancel() { - return bundle.getString("CANCEL"); - } - - public String getDateChooser() { - return bundle.getString("DATE_CHOOSER"); - } - - public String getFunctionList() { - return bundle.getString("FUNCTIONLIST"); - } - - public String getLogin() { - return bundle.getString("LOGIN"); - } - - public String getLogout() { - return bundle.getString("LOGOUT"); - } - - public String getDeviceIp() { - return bundle.getString("DEVICE_IP"); - } - - public String getIp() { - return bundle.getString("IP"); - } - - public String getPort() { - return bundle.getString("DEVICE_PORT"); - } - - public String getUserId() { - return bundle.getString("USER_ID"); - } - - public String getUserName(boolean space) { - return bundle.getString("USER_NAME"); - } - - public String getCardNo() { - return bundle.getString("CARD_NO"); - } - - public String getUserName() { - return bundle.getString("USERNAME"); - } - - public String getPassword() { - return bundle.getString("PASSWORD"); - } - - - public String getLoginFailed() { - return bundle.getString("LOGIN_FAILED"); - } - - public String getInputDeviceIP() { - return bundle.getString("PLEASE_INPUT_DEVICE_IP"); - } - - public String getInputDevicePort() { - return bundle.getString("PLEASE_INPUT_DEVICE_PORT"); - } - - public String getInputUsername() { - return bundle.getString("PLEASE_INPUT_DEVICE_USERNAME"); - } - - public String getInputPassword() { - return bundle.getString("PLEASE_INPUT_DEVICE_PASSWORD"); - } - - public String getInputConfirmPassword() { - return bundle.getString("PLEASE_INPUT_CONFIRM_PASSWORD"); - } - - public String getStartRealPlay() { - return bundle.getString("START_REALPLAY"); - } - - public String getStopRealPlay() { - return bundle.getString("STOP_REALPLAY"); - } - - public String getChn() { - return bundle.getString("CHN"); - } - - public String getChannel() { - return bundle.getString("CHANNEL"); - } - - public String getStreamType() { - return bundle.getString("STREAM_TYPE"); - } - - public String getMasterAndSub() { - return bundle.getString("MASTER_AND_SUB_STREAM"); - } - - public String getMasterStream() { - return bundle.getString("MASTER_STREAM"); - } - - public String getSubStream() { - return bundle.getString("SUB_STREAM"); - } - - public String getPTZ() { - return bundle.getString("PTZ"); - } - - public String getPtzControlAndCapture() { - return bundle.getString("PTZCONTROL_CAPTURE"); - } - - public String getCapturePicture() { - return bundle.getString("CAPTURE_PICTURE"); - } - - public String getLocalCapture() { - return bundle.getString("LOCAL_CAPTURE"); - } - - public String getRemoteCapture() { - return bundle.getString("REMOTE_CAPTURE"); - } - - public String getTimerCapture() { - return bundle.getString("TIMER_CAPTURE"); - } - - public String getStopCapture() { - return bundle.getString("STOP_CAPTURE"); - } - - public String getInterval() { - return bundle.getString("INTERVAL"); - } - - public String getTimeIntervalIllegal() { - return bundle.getString("TIME_INTERVAL_ILLEGAL"); - } - - public String getNeedStartRealPlay() { - return bundle.getString("PLEASE_START_REALPLAY"); - } - - public String getPTZControl() { - return bundle.getString("PTZ_CONTROL"); - } - - public String getLeftUp() { - return bundle.getString("LEFT_UP"); - } - - public String getUp() { - return bundle.getString("UP"); - } - - public String getRightUp() { - return bundle.getString("RIGHT_UP"); - } - - public String getLeft() { - return bundle.getString("LEFT"); - } - - public String getRight() { - return bundle.getString("RIGHT"); - } - - public String getLeftDown() { - return bundle.getString("LEFT_DOWN"); - } - - public String getDown() { - return bundle.getString("DOWN"); - } - - public String getRightDown() { - return bundle.getString("RIGHT_DOWN"); - } - - public String getSpeed() { - return bundle.getString("SPEED"); - } - - public String getZoomAdd() { - return bundle.getString("ZOOM_ADD"); - } - - public String getZoomDec() { - return bundle.getString("ZOOM_DEC"); - } - - public String getFocusAdd() { - return bundle.getString("FOCUS_ADD"); - } - - public String getFocusDec() { - return bundle.getString("FOCUS_DEC"); - } - - public String getIrisAdd() { - return bundle.getString("IRIS_ADD"); - } - - public String getIrisDec() { - return bundle.getString("IRIS_DEC"); - } - - public String getIndex() { - return bundle.getString("INDEX"); - } - - public String getEventPicture() { - return bundle.getString("EVENT_PICTURE"); - } - - public String getPlatePicture() { - return bundle.getString("PLATE_PICTURE"); - } - - public String getEventName() { - return bundle.getString("EVENT_NAME"); - } - - public String getLicensePlate() { - return bundle.getString("LICENSE_PLATE"); - } - - public String getEventTime() { - return bundle.getString("EVENT_TIME"); - } - - public String getPlateType() { - return bundle.getString("PLATE_TYPE"); - } - - public String getPlateColor() { - return bundle.getString("PLATE_COLOR"); - } - - public String getVehicleColor() { - return bundle.getString("VEHICLE_COLOR"); - } - - public String getVehicleType() { - return bundle.getString("VEHICLE_TYPE"); - } - - public String getVehicleSize() { - return bundle.getString("VEHICLE_SIZE"); - } - - public String getFileCount() { - return bundle.getString("FILE_COUNT"); - } - - public String getFileIndex() { - return bundle.getString("FILE_INDEX"); - } - - public String getGroupId() { - return bundle.getString("GROUP_ID"); - } - - public String getIllegalPlace() { - return bundle.getString("ILLEGAL_PLACE"); - } - - public String getLaneNumber() { - return bundle.getString("LANE_NUMBER"); - } - - public String getEventInfo() { - return bundle.getString("EVENT_INFO"); - } - - public String getNoPlate() { - return bundle.getString("NO_PLATENUMBER"); - } - - public String[] getTrafficTableName() { - String[] name = {getIndex(), - getEventName(), - getLicensePlate(), - getEventTime(), - getPlateType(), - getPlateColor(), - getVehicleColor(), - getVehicleType(), - getVehicleSize(), - getFileCount(), - getFileIndex(), - getGroupId(), - getIllegalPlace(), - getLaneNumber()}; - return name; - } - - public String getOperate() { - return bundle.getString("OPERATE"); - } - - public String getAttach() { - return bundle.getString("ATTACH"); - } - - public String getDetach() { - return bundle.getString("DETACH"); - } - - public String getOpenStrobe() { - return bundle.getString("OPEN_STROBE"); - } - - public String getCloseStrobe() { - return bundle.getString("CLOSE_STROBE"); - } - - public String getOpenStrobeFailed() { - return bundle.getString("OPEN_STROBE_FAILED"); - } - - public String getManualCapture() { - return bundle.getString("MANUAL_CAPTURE"); - } - - public String getManualCaptureSucceed() { - return bundle.getString("MANUALSNAP_SUCCEED"); - } - - public String getManualCaptureFailed() { - return bundle.getString("MANUALSNAP_FAILED"); - } - - /* - * 车辆大小对照表 - */ - public String getTrafficSize(int nVehicleSize) { - String vehicleClass = ""; - for(int i = 0; i < 5; i++) { - if( ((byte)nVehicleSize & (1 << i)) > 0 ) { - switch (i) { - case 0: - vehicleClass = bundle.getString("LIGHT_DUTY"); - break; - case 1: - vehicleClass = bundle.getString("MEDIUM"); - break; - case 2: - vehicleClass = bundle.getString("OVER_SIZE"); - break; - case 3: - vehicleClass = bundle.getString("MINI_SIZE"); - break; - case 4: - vehicleClass = bundle.getString("LARGE_SIZE"); - break; - } - } - } - - return vehicleClass; - } - - /* - * 获取事件名称 + + private ResourceBundle bundle; + + private Res() { + switchLanguage(LanguageType.Chinese); + } + + private static class StringBundleHolder { + private static Res instance = new Res(); + } + + public static Res string() { + return StringBundleHolder.instance; + } + + public static enum LanguageType { + English, + Chinese + } + + public ResourceBundle getBundle() { + return bundle; + } + + /** + * \if ENGLISH_LANG + * Switch between Chinese and English + * \else + * 中英文切换 + * \endif */ - public String getEventName(int type) { - String name = ""; - switch (type) { - case NetSDKLib.EVENT_IVS_TRAFFICJUNCTION: ///< 交通路口事件 - name = bundle.getString("EVENT_IVS_TRAFFICJUNCTION"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_RUNREDLIGHT: ///< 闯红灯事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_RUNREDLIGHT"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_OVERLINE: ///< 压车道线事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_OVERLINE"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_RETROGRADE: ///< 逆行事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_RETROGRADE"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_TURNLEFT: ///< 违章左转 - name = bundle.getString("EVENT_IVS_TRAFFIC_TURNLEFT"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_TURNRIGHT: ///< 违章右转 - name = bundle.getString("EVENT_IVS_TRAFFIC_TURNRIGHT"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_UTURN: ///< 违章掉头 - name = bundle.getString("EVENT_IVS_TRAFFIC_UTURN"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_OVERSPEED: ///< 超速 - name = bundle.getString("EVENT_IVS_TRAFFIC_OVERSPEED"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_UNDERSPEED: ///< 低速 - name = bundle.getString("EVENT_IVS_TRAFFIC_UNDERSPEED"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_PARKING: ///< 违章停车 - name = bundle.getString("EVENT_IVS_TRAFFIC_PARKING"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_WRONGROUTE: ///< 不按车道行驶 - name = bundle.getString("EVENT_IVS_TRAFFIC_WRONGROUTE"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_CROSSLANE: ///< 违章变道 - name = bundle.getString("EVENT_IVS_TRAFFIC_CROSSLANE"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_OVERYELLOWLINE: ///< 压黄线 - name = bundle.getString("EVENT_IVS_TRAFFIC_OVERYELLOWLINE"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE: ///< 黄牌车占道事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY: ///< 斑马线行人优先事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP: ///< 交通手动抓拍事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_MANUALSNAP"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINROUTE: ///< 有车占道事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_VEHICLEINROUTE"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE: ///< 占用公交车道事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_BACKING: ///< 违章倒车事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_BACKING"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING: ///< 车位有车事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING: ///< 车位无车事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING"); - break; - case NetSDKLib.EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT: ///< 交通未系安全带事件 - name = bundle.getString("EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT"); - break; - default: - break; - } - - return name; - } - - public String getRecordType() { - return bundle.getString("RECORD_TYPE"); + public void switchLanguage(LanguageType type) { + switch (type) { + case Chinese: + bundle = ResourceBundle.getBundle("res", new Locale("zh", "CN")); + break; + case English: + bundle = ResourceBundle.getBundle("res", new Locale("en", "US")); + break; + default: + break; + } } - - public String getStartTime() { - return bundle.getString("START_TIME"); + + public String getSwitchLanguage() { + return bundle.getString("SWITCH_LANGUAGE"); } - - public String getEndTime() { - return bundle.getString("END_TIME"); + + public String getRealplay() { + return bundle.getString("REALPLAY"); } - - public String[] getDownloadTableName() { - String[] name = {getIndex(), - getChannel(), - getRecordType(), - getStartTime(), - getEndTime()}; - return name; - } - - public String getDownloadByFile() { - return bundle.getString("DOWNLOAD_RECORD_BYFILE"); + + public String getMultiRealplay() { + return bundle.getString("MULTIREALPLAY"); } - - public String getQuery() { - return bundle.getString("QUERY"); + + public String getDownloadRecord() { + return bundle.getString("DOWNLOAD_RECORD"); } - - public String getDownload() { - return bundle.getString("DOWNLOAD"); + + public String getITSEvent() { + return bundle.getString("ITS_EVENT"); } - - public String getStopDownload() { - return bundle.getString("STOP_DOWNLOAD"); + + public String getOnline() { + return bundle.getString("ONLINE"); } - - public String getDownloadByTime() { - return bundle.getString("DOWNLOAD_RECORD_BYTIME"); + + public String getDisConnectReconnecting() { + return bundle.getString("DISCONNECT_RECONNECTING"); } - - public String getSelectTimeAgain() { - return bundle.getString("PLEASE_SELECT_TIME_AGAIN"); + + public String getDisConnect() { + return bundle.getString("DISCONNECT"); } - - public String getSelectRowWithData() { - return bundle.getString("PLEASE_FIRST_SELECT_ROW_WITH_DATA"); + + public String getPromptMessage() { + return bundle.getString("PROMPT_MESSAGE"); } - - public String getQueryRecord() { - return bundle.getString("PLEASE_FIRST_QUERY_RECORD"); + + public String getErrorMessage() { + return bundle.getString("ERROR_MESSAGE"); } - - public String getDownloadCompleted() { - return bundle.getString("DOWNLOAD_COMPLETED"); - } - - /** - * 获取录像类型 - */ - public String getRecordTypeStr(int nRecordFileType) { - String recordTypeStr = ""; - switch(nRecordFileType) { - case 0: - recordTypeStr = bundle.getString("GENERAL_RECORD"); - break; - case 1: - recordTypeStr = bundle.getString("ALARM_RECORD"); - break; - case 2: - recordTypeStr = bundle.getString("MOTION_DETECTION"); - break; - case 3: - recordTypeStr = bundle.getString("CARD_NUMBER_RECORD"); - break; - default: - break; - } - - return recordTypeStr; - } - - public int getRecordTypeInt(String recordFileStr) { - int recordType = -1; - if(recordFileStr.equals(bundle.getString("GENERAL_RECORD"))) { - recordType = 0; - } else if(recordFileStr.equals(bundle.getString("ALARM_RECORD"))) { - recordType = 1; - } else if(recordFileStr.equals(bundle.getString("MOTION_DETECTION"))) { - recordType = 2; - } else if(recordFileStr.equals(bundle.getString("CARD_NUMBER_RECORD"))) { - recordType = 3; - } - - return recordType; - } - - /** - * 语音对讲 - */ - public String getTalk() { - return bundle.getString("TALK"); - } - - public String getTransmitType() { - return bundle.getString("TRANSMIT_TYPE"); - } - - public String getLocalTransmitType() { - return bundle.getString("LOCAL_TRANSMIT_TYPE"); - } - - public String getRemoteTransmitType() { - return bundle.getString("REMOTE_TRANSMIT_TYPE"); - } - - public String getTransmitChannel() { - return bundle.getString("TRANSMIT_CHANNEL"); - } - - public String getStartTalk() { - return bundle.getString("START_TALK"); - } - - public String getStopTalk() { - return bundle.getString("STOP_TALK"); - } - - public String getTalkFailed() { - return bundle.getString("TALK_FAILED"); - } - - public String getDeviceSearchAndInit() { - return bundle.getString("DEVICESEARCH_DEVICEINIT"); - } - - public String getDeviceSearchOperate() { - return bundle.getString("DEVICESEARCH_OPERATE"); + + public String getReconnectSucceed() { + return bundle.getString("RECONNECT_SUCCEED"); } - - public String getDeviceSearchResult() { - return bundle.getString("DEVICESEARCH_RESULT"); + + public String getSucceed() { + return bundle.getString("SUCCEED"); } - - public String getDeviceInit() { - return bundle.getString("DEVICEINIT"); + + public String getFailed() { + return bundle.getString("FAILED"); } - - public String getStartSearch() { - return bundle.getString("START_SEARCH"); + + public String getYear() { + return bundle.getString("YEAR"); } - - public String getStopSearch() { - return bundle.getString("STOP_SEARCH"); + + public String getMonth() { + return bundle.getString("MONTH"); } - - public String getPleaseSelectInitializedDevice() { - return bundle.getString("PLEASE_FIRST_SELECT_INITIALIZED_DEVICE"); + + public String getDay() { + return bundle.getString("DAY"); } - - public String getDeviceSearch() { - return bundle.getString("DEVICESEARCH"); + + public String getHour() { + return bundle.getString("HOUR"); } - - public String getDevicePointToPointSearch() { - return bundle.getString("DEVICE_POINT_TO_POINT_SEARCH"); + + public String getMinute() { + return bundle.getString("MINUTE"); } - - public String getStartIp() { - return bundle.getString("START_IP"); + + public String getSecond() { + return bundle.getString("SECOND"); } - - public String getEndIp() { - return bundle.getString("END_IP"); + + public String getSunday() { + return bundle.getString("SUNDAY"); } - - public String getControlScope() { - return bundle.getString("THE_IP_CONTROL_SCOPE"); + + public String getMonday() { + return bundle.getString("MONDAY"); } - - public String getDeviceType() { - return bundle.getString("DEVICE_TYPE"); + + public String getTuesday() { + return bundle.getString("TUESDAY"); } - - public String getDeviceMac() { - return bundle.getString("MAC"); + + public String getWednesday() { + return bundle.getString("WEDNESDAY"); } - - public String getDeviceSn() { - return bundle.getString("SN"); + + public String getThursday() { + return bundle.getString("THURSDAY"); } - - public String getDeviceInitState() { - return bundle.getString("DEVICE_INIT_STATE"); + + public String getFriday() { + return bundle.getString("FRIDAY"); } - - public String getInitPasswd() { - return bundle.getString("INIT_PASSWD"); + + public String getSaturday() { + return bundle.getString("SATURDAY"); } - - public String[] getDeviceTableName() { - String[] name = {getIndex(), - getDeviceInitState(), - getIpVersion(), - getDeviceIp(), - getPort(), - getSubMask(), - getGetway(), - getDeviceMac(), - getDeviceType(), - getDetailType(), - getHttpPort()}; - - return name; - } - - public String getIpVersion() { - return bundle.getString("IP_VERSION"); + + public String[] getWeek() { + String[] weekdays = {getSunday(), + getMonday(), + getTuesday(), + getWednesday(), + getThursday(), + getFriday(), + getSaturday() + }; + + return weekdays; } - - public String getSubMask() { - return bundle.getString("SUB_MASK"); + + public String getConfirm() { + return bundle.getString("CONFIRM"); } - - public String getGetway() { - return bundle.getString("GETWAY"); + + public String getCancel() { + return bundle.getString("CANCEL"); } - - public String getDetailType() { - return bundle.getString("DETAIL_TYPE"); + + public String getDateChooser() { + return bundle.getString("DATE_CHOOSER"); } - - public String getHttpPort() { - return bundle.getString("HTTP_PORT"); + + public String getFunctionList() { + return bundle.getString("FUNCTIONLIST"); } - - public String getInitialized() { - return bundle.getString("INITIALIZED"); + + public String getLogin() { + return bundle.getString("LOGIN"); } - - public String getNotInitialized() { - return bundle.getString("NOT_INITIALIZED"); + + public String getLogout() { + return bundle.getString("LOGOUT"); } - - public String getOldDevice() { - return bundle.getString("OLD_DEVICE"); + + public String getDeviceIp() { + return bundle.getString("DEVICE_IP"); } - - public String getNotSupportInitialization() { - return bundle.getString("DONOT_SUPPORT_INITIALIZATION"); + + public String getIp() { + return bundle.getString("IP"); } - - public String getPhone() { - return bundle.getString("PHONE"); + + public String getPort() { + return bundle.getString("DEVICE_PORT"); } - - public String getMail() { - return bundle.getString("MAIL"); + + public String getUserId() { + return bundle.getString("USER_ID"); } - - public String getInputPhone() { - return bundle.getString("PLEASE_INPUT_PHONE"); + + public String getUserName(boolean space) { + return bundle.getString("USER_NAME"); } - - public String getInputMail() { - return bundle.getString("PLEASE_INPUT_MAIL"); + + public String getCardNo() { + return bundle.getString("CARD_NO"); } - - public String getConfirmPassword() { - return bundle.getString("CONFIRM_PASSWORD"); + + public String getUserName() { + return bundle.getString("USERNAME"); } - - public String getInconsistent() { - return bundle.getString("INCONSISTENT"); + + public String getPassword() { + return bundle.getString("PASSWORD"); } - - public String getCheckIp() { - return bundle.getString("PLEASE_CHECK_IP"); + + + public String getLoginFailed() { + return bundle.getString("LOGIN_FAILED"); } - - // 0-老设备,没有初始化功能 1-未初始化账号 2-已初始化账户 - public String getInitStateInfo(int initStatus) { - String initStateInfo = ""; - switch(initStatus) { - case 0: - initStateInfo = getInitialized(); - break; - case 1: - initStateInfo = getNotInitialized(); - break; - case 2: - initStateInfo = getInitialized(); - break; - } - return initStateInfo; - } - - public String getAlarmListen() { - return bundle.getString("ALARM_LISTEN"); - } - - public String getStartListen() { - return bundle.getString("START_LISTEN"); - } - - public String getStopListen() { - return bundle.getString("STOP_LISTEN"); - } - - public String getShowAlarmEvent() { - return bundle.getString("SHOW_ALARM_EVENT"); - } - - public String getAlarmMessage() { - return bundle.getString("ALARM_MESSAGE"); - } - - public String getExternalAlarm() { - return bundle.getString("EXTERNAL_ALARM"); + + public String getInputDeviceIP() { + return bundle.getString("PLEASE_INPUT_DEVICE_IP"); } - - public String getMotionAlarm() { - return bundle.getString("MOTION_ALARM"); + + public String getInputDevicePort() { + return bundle.getString("PLEASE_INPUT_DEVICE_PORT"); } - - public String getVideoLostAlarm() { - return bundle.getString("VIDEOLOST_ALARM"); + + public String getInputUsername() { + return bundle.getString("PLEASE_INPUT_DEVICE_USERNAME"); } - - public String getShelterAlarm() { - return bundle.getString("SHELTER_ALARM"); + + public String getInputPassword() { + return bundle.getString("PLEASE_INPUT_DEVICE_PASSWORD"); } - - public String getDiskFullAlarm() { - return bundle.getString("DISKFULL_ALARM"); + + public String getInputConfirmPassword() { + return bundle.getString("PLEASE_INPUT_CONFIRM_PASSWORD"); } - - public String getDiskErrorAlarm() { - return bundle.getString("DISKERROR_ALARM"); + + public String getStartRealPlay() { + return bundle.getString("START_REALPLAY"); } - - public String getAlarmListenFailed() { - return bundle.getString("ALARM_LISTEN_FAILED"); + + public String getStopRealPlay() { + return bundle.getString("STOP_REALPLAY"); } - - public String getStart() { - return bundle.getString("START"); + + public String getChn() { + return bundle.getString("CHN"); } - - public String getStop() { - return bundle.getString("STOP"); + + public String getChannel() { + return bundle.getString("CHANNEL"); } - - public String getDeviceControl() { - return bundle.getString("DEVICE_CONTROL"); + + public String getStreamType() { + return bundle.getString("STREAM_TYPE"); } - - public String getDeviceReboot() { - return bundle.getString("DEVICE_REBOOT"); + + public String getMasterAndSub() { + return bundle.getString("MASTER_AND_SUB_STREAM"); } - - public String getSyncTime() { - return bundle.getString("SYNCHRONIZE_TIME"); + + public String getMasterStream() { + return bundle.getString("MASTER_STREAM"); } - - public String getCurrentTime() { - return bundle.getString("CURRENT_TIME"); + + public String getSubStream() { + return bundle.getString("SUB_STREAM"); } - - public String getReboot() { - return bundle.getString("REBOOT"); + + public String getPTZ() { + return bundle.getString("PTZ"); } - - public String getRebootTips() { - return bundle.getString("REBOOT_TIPS"); + + public String getPtzControlAndCapture() { + return bundle.getString("PTZCONTROL_CAPTURE"); } - - public String getGetTime() { - return bundle.getString("GET_TIME"); + + public String getCapturePicture() { + return bundle.getString("CAPTURE_PICTURE"); } - - public String getSetTime() { - return bundle.getString("SET_TIME"); + + public String getLocalCapture() { + return bundle.getString("LOCAL_CAPTURE"); } - - public String getOperateSuccess() { - return bundle.getString("OPERATE_SUCCESS"); + + public String getRemoteCapture() { + return bundle.getString("REMOTE_CAPTURE"); } - public String getFaceRecognition() { - return bundle.getString("FACERECOGNITION"); + public String getTimerCapture() { + return bundle.getString("TIMER_CAPTURE"); } - - public String[] getGroupTable() { - String[] faceTable = {getFaceGroupId(), - getFaceGroupName(), - bundle.getString("PERSON_COUNT")}; - return faceTable; + + public String getStopCapture() { + return bundle.getString("STOP_CAPTURE"); } - - public String getFaceGroupId() { - return bundle.getString("FACE_GROUP_ID"); + + public String getInterval() { + return bundle.getString("INTERVAL"); } - - public String getFaceGroupName() { - return bundle.getString("FACE_GROUP_NAME"); + + public String getTimeIntervalIllegal() { + return bundle.getString("TIME_INTERVAL_ILLEGAL"); } - - public String getGroupOperate() { - return bundle.getString("GROUP_OPERATE"); + + public String getNeedStartRealPlay() { + return bundle.getString("PLEASE_START_REALPLAY"); } - - public String getPersonOperate() { - return bundle.getString("PERSON_OPERATE"); + + public String getPTZControl() { + return bundle.getString("PTZ_CONTROL"); } - - public String getGlobalPicture() { - return bundle.getString("GLOBAL_PICTURE"); + + public String getLeftUp() { + return bundle.getString("LEFT_UP"); } - - public String getPersonPicture() { - return bundle.getString("PERSON_PICTURE"); + + public String getUp() { + return bundle.getString("UP"); } - - public String getCandidatePicture() { - return bundle.getString("CANDIDATE_PICTURE"); + + public String getRightUp() { + return bundle.getString("RIGHT_UP"); } - - public String getTime() { - return bundle.getString("TIME"); + + public String getLeft() { + return bundle.getString("LEFT"); } - - public String getSex() { - return bundle.getString("SEX"); + + public String getRight() { + return bundle.getString("RIGHT"); } - - public String getAge() { - return bundle.getString("AGE"); + + public String getLeftDown() { + return bundle.getString("LEFT_DOWN"); } - - - public String getRace() { - return bundle.getString("RACE"); + + public String getDown() { + return bundle.getString("DOWN"); } - - public String getEye() { - return bundle.getString("EYE"); + + public String getRightDown() { + return bundle.getString("RIGHT_DOWN"); } - - public String getMouth() { - return bundle.getString("MOUTH"); + + public String getSpeed() { + return bundle.getString("SPEED"); } - - public String getMask() { - return bundle.getString("MASK"); + + public String getZoomAdd() { + return bundle.getString("ZOOM_ADD"); } - - public String getBeard() { - return bundle.getString("BEARD"); + + public String getZoomDec() { + return bundle.getString("ZOOM_DEC"); } - - public String getName() { - return bundle.getString("NAME"); + + public String getFocusAdd() { + return bundle.getString("FOCUS_ADD"); } - - public String getBirthday() { - return bundle.getString("BIRTHDAY"); + + public String getFocusDec() { + return bundle.getString("FOCUS_DEC"); } - - public String getIdNo() { - return bundle.getString("ID_NO"); + + public String getIrisAdd() { + return bundle.getString("IRIS_ADD"); } - - public String getIdType() { - return bundle.getString("ID_TYPE"); + + public String getIrisDec() { + return bundle.getString("IRIS_DEC"); } - - public String getSimilarity() { - return bundle.getString("SIMILARITY"); + + public String getIndex() { + return bundle.getString("INDEX"); } - - public String getFaceDetectEvent() { - return bundle.getString("FACE_DETECT_EVENT"); + + public String getEventPicture() { + return bundle.getString("EVENT_PICTURE"); } - - public String getFaceRecognitionEvent() { - return bundle.getString("FACE_RECOGNITION_EVENT"); + + public String getPlatePicture() { + return bundle.getString("PLATE_PICTURE"); } - - public String getUid() { - return bundle.getString("UID"); + + public String getEventName() { + return bundle.getString("EVENT_NAME"); } - - public String[] getPersonTable() { - String[] personTable = {getUid(), getName(), getSex(), getBirthday(), getIdType(), getIdNo()}; - return personTable; + + public String getLicensePlate() { + return bundle.getString("LICENSE_PLATE"); } - - public String[] getDispositionTable() { - String[] dispositionTable = {getChannel(), getSimilarity()}; - return dispositionTable; + + public String getEventTime() { + return bundle.getString("EVENT_TIME"); } - - public String getUnKnow() { - return bundle.getString("UNKNOW"); + + public String getPlateType() { + return bundle.getString("PLATE_TYPE"); } - - public String getMale() { - return bundle.getString("MALE"); + + public String getPlateColor() { + return bundle.getString("PLATE_COLOR"); } - - public String getFemale() { - return bundle.getString("FEMALE"); + + public String getVehicleColor() { + return bundle.getString("VEHICLE_COLOR"); } - - public String[] getSexStringsFind() { - String[] faceSexStr = {getUnLimited(), getMale(), getFemale()}; - return faceSexStr; + + public String getVehicleType() { + return bundle.getString("VEHICLE_TYPE"); } - - public String[] getIdStringsFind() { - String[] idStr = {getUnLimited(), getIdCard(), getPassport(),}; - return idStr; + + public String getVehicleSize() { + return bundle.getString("VEHICLE_SIZE"); } - - public String[] getSexStrings() { - String[] faceSexStr = {getUnKnow(), getMale(), getFemale()}; - return faceSexStr; + + public String getFileCount() { + return bundle.getString("FILE_COUNT"); } - - public String[] getIdStrings() { - String[] idStr = {getUnKnow(), getIdCard(), getPassport(),}; - return idStr; + + public String getFileIndex() { + return bundle.getString("FILE_INDEX"); } - - public String getIdCard() { - return bundle.getString("ID_CARD"); + + public String getGroupId() { + return bundle.getString("GROUP_ID"); } - - public String getPassport() { - return bundle.getString("PASSPORT"); + + public String getIllegalPlace() { + return bundle.getString("ILLEGAL_PLACE"); } - - public String getIdType(int idType) { - String str = ""; - switch(idType) { - case 0: - str = getUnKnow(); - break; - case 1: - str = getIdCard(); - break; - case 2: - str = getPassport(); - break; - default : - str = getUnKnow(); - break; - } - return str; - } - - public String getSex(int sex) { - String str = ""; - switch(sex) { - case 0: - str = getUnKnow(); - break; - case 1: - str = getMale(); - break; - case 2: - str = getFemale(); - break; - default : - str = getUnKnow(); - break; - } - return str; - } - - public String getUnLimited() { - return bundle.getString("UNLIMITED"); + + public String getLaneNumber() { + return bundle.getString("LANE_NUMBER"); } - - public String getUnidentified() { - return bundle.getString("UNIDENTIFIED"); + + public String getEventInfo() { + return bundle.getString("EVENT_INFO"); } - - public String getHaveBeard() { - return bundle.getString("HAVE_BEARD"); + + public String getNoPlate() { + return bundle.getString("NO_PLATENUMBER"); + } + + public String[] getTrafficTableName() { + String[] name = {getIndex(), + getEventName(), + getLicensePlate(), + getEventTime(), + getPlateType(), + getPlateColor(), + getVehicleColor(), + getVehicleType(), + getVehicleSize(), + getFileCount(), + getFileIndex(), + getGroupId(), + getIllegalPlace(), + getLaneNumber()}; + return name; + } + + public String getOperate() { + return bundle.getString("OPERATE"); + } + + public String getAttach() { + return bundle.getString("ATTACH"); + } + + public String getDetach() { + return bundle.getString("DETACH"); + } + + public String getOpenStrobe() { + return bundle.getString("OPEN_STROBE"); + } + + public String getCloseStrobe() { + return bundle.getString("CLOSE_STROBE"); + } + + public String getOpenStrobeFailed() { + return bundle.getString("OPEN_STROBE_FAILED"); + } + + public String getManualCapture() { + return bundle.getString("MANUAL_CAPTURE"); + } + + public String getManualCaptureSucceed() { + return bundle.getString("MANUALSNAP_SUCCEED"); + } + + public String getManualCaptureFailed() { + return bundle.getString("MANUALSNAP_FAILED"); + } + + /* + * 车辆大小对照表 + */ + public String getTrafficSize(int nVehicleSize) { + String vehicleClass = ""; + for (int i = 0; i < 5; i++) { + if (((byte) nVehicleSize & (1 << i)) > 0) { + switch (i) { + case 0: + vehicleClass = bundle.getString("LIGHT_DUTY"); + break; + case 1: + vehicleClass = bundle.getString("MEDIUM"); + break; + case 2: + vehicleClass = bundle.getString("OVER_SIZE"); + break; + case 3: + vehicleClass = bundle.getString("MINI_SIZE"); + break; + case 4: + vehicleClass = bundle.getString("LARGE_SIZE"); + break; + } + } + } + + return vehicleClass; + } + + /* + * 获取事件名称 + */ + public String getEventName(int type) { + String name = ""; + switch (type) { + case NetSDKLib.EVENT_IVS_TRAFFICJUNCTION: ///< 交通路口事件 + name = bundle.getString("EVENT_IVS_TRAFFICJUNCTION"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_RUNREDLIGHT: ///< 闯红灯事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_RUNREDLIGHT"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_OVERLINE: ///< 压车道线事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_OVERLINE"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_RETROGRADE: ///< 逆行事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_RETROGRADE"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_TURNLEFT: ///< 违章左转 + name = bundle.getString("EVENT_IVS_TRAFFIC_TURNLEFT"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_TURNRIGHT: ///< 违章右转 + name = bundle.getString("EVENT_IVS_TRAFFIC_TURNRIGHT"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_UTURN: ///< 违章掉头 + name = bundle.getString("EVENT_IVS_TRAFFIC_UTURN"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_OVERSPEED: ///< 超速 + name = bundle.getString("EVENT_IVS_TRAFFIC_OVERSPEED"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_UNDERSPEED: ///< 低速 + name = bundle.getString("EVENT_IVS_TRAFFIC_UNDERSPEED"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_PARKING: ///< 违章停车 + name = bundle.getString("EVENT_IVS_TRAFFIC_PARKING"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_WRONGROUTE: ///< 不按车道行驶 + name = bundle.getString("EVENT_IVS_TRAFFIC_WRONGROUTE"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_CROSSLANE: ///< 违章变道 + name = bundle.getString("EVENT_IVS_TRAFFIC_CROSSLANE"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_OVERYELLOWLINE: ///< 压黄线 + name = bundle.getString("EVENT_IVS_TRAFFIC_OVERYELLOWLINE"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE: ///< 黄牌车占道事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY: ///< 斑马线行人优先事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP: ///< 交通手动抓拍事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_MANUALSNAP"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINROUTE: ///< 有车占道事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_VEHICLEINROUTE"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE: ///< 占用公交车道事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_BACKING: ///< 违章倒车事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_BACKING"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING: ///< 车位有车事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING: ///< 车位无车事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING"); + break; + case NetSDKLib.EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT: ///< 交通未系安全带事件 + name = bundle.getString("EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT"); + break; + default: + break; + } + + return name; + } + + public String getRecordType() { + return bundle.getString("RECORD_TYPE"); + } + + public String getStartTime() { + return bundle.getString("START_TIME"); + } + + public String getEndTime() { + return bundle.getString("END_TIME"); + } + + public String[] getDownloadTableName() { + String[] name = {getIndex(), + getChannel(), + getRecordType(), + getStartTime(), + getEndTime()}; + return name; + } + + public String getDownloadByFile() { + return bundle.getString("DOWNLOAD_RECORD_BYFILE"); + } + + public String getQuery() { + return bundle.getString("QUERY"); + } + + public String getDownload() { + return bundle.getString("DOWNLOAD"); + } + + public String getStopDownload() { + return bundle.getString("STOP_DOWNLOAD"); + } + + public String getDownloadByTime() { + return bundle.getString("DOWNLOAD_RECORD_BYTIME"); + } + + public String getSelectTimeAgain() { + return bundle.getString("PLEASE_SELECT_TIME_AGAIN"); + } + + public String getSelectRowWithData() { + return bundle.getString("PLEASE_FIRST_SELECT_ROW_WITH_DATA"); + } + + public String getQueryRecord() { + return bundle.getString("PLEASE_FIRST_QUERY_RECORD"); + } + + public String getDownloadCompleted() { + return bundle.getString("DOWNLOAD_COMPLETED"); + } + + /** + * 获取录像类型 + */ + public String getRecordTypeStr(int nRecordFileType) { + String recordTypeStr = ""; + switch (nRecordFileType) { + case 0: + recordTypeStr = bundle.getString("GENERAL_RECORD"); + break; + case 1: + recordTypeStr = bundle.getString("ALARM_RECORD"); + break; + case 2: + recordTypeStr = bundle.getString("MOTION_DETECTION"); + break; + case 3: + recordTypeStr = bundle.getString("CARD_NUMBER_RECORD"); + break; + default: + break; + } + + return recordTypeStr; + } + + public int getRecordTypeInt(String recordFileStr) { + int recordType = -1; + if (recordFileStr.equals(bundle.getString("GENERAL_RECORD"))) { + recordType = 0; + } else if (recordFileStr.equals(bundle.getString("ALARM_RECORD"))) { + recordType = 1; + } else if (recordFileStr.equals(bundle.getString("MOTION_DETECTION"))) { + recordType = 2; + } else if (recordFileStr.equals(bundle.getString("CARD_NUMBER_RECORD"))) { + recordType = 3; + } + + return recordType; + } + + /** + * 语音对讲 + */ + public String getTalk() { + return bundle.getString("TALK"); + } + + public String getTransmitType() { + return bundle.getString("TRANSMIT_TYPE"); + } + + public String getLocalTransmitType() { + return bundle.getString("LOCAL_TRANSMIT_TYPE"); + } + + public String getRemoteTransmitType() { + return bundle.getString("REMOTE_TRANSMIT_TYPE"); + } + + public String getTransmitChannel() { + return bundle.getString("TRANSMIT_CHANNEL"); + } + + public String getStartTalk() { + return bundle.getString("START_TALK"); + } + + public String getStopTalk() { + return bundle.getString("STOP_TALK"); + } + + public String getTalkFailed() { + return bundle.getString("TALK_FAILED"); + } + + public String getDeviceSearchAndInit() { + return bundle.getString("DEVICESEARCH_DEVICEINIT"); + } + + public String getDeviceSearchOperate() { + return bundle.getString("DEVICESEARCH_OPERATE"); + } + + public String getDeviceSearchResult() { + return bundle.getString("DEVICESEARCH_RESULT"); + } + + public String getDeviceInit() { + return bundle.getString("DEVICEINIT"); + } + + public String getStartSearch() { + return bundle.getString("START_SEARCH"); + } + + public String getStopSearch() { + return bundle.getString("STOP_SEARCH"); + } + + public String getPleaseSelectInitializedDevice() { + return bundle.getString("PLEASE_FIRST_SELECT_INITIALIZED_DEVICE"); + } + + public String getDeviceSearch() { + return bundle.getString("DEVICESEARCH"); + } + + public String getDevicePointToPointSearch() { + return bundle.getString("DEVICE_POINT_TO_POINT_SEARCH"); + } + + public String getStartIp() { + return bundle.getString("START_IP"); + } + + public String getEndIp() { + return bundle.getString("END_IP"); + } + + public String getControlScope() { + return bundle.getString("THE_IP_CONTROL_SCOPE"); + } + + public String getDeviceType() { + return bundle.getString("DEVICE_TYPE"); + } + + public String getDeviceMac() { + return bundle.getString("MAC"); + } + + public String getDeviceSn() { + return bundle.getString("SN"); + } + + public String getDeviceInitState() { + return bundle.getString("DEVICE_INIT_STATE"); + } + + public String getInitPasswd() { + return bundle.getString("INIT_PASSWD"); + } + + public String[] getDeviceTableName() { + String[] name = {getIndex(), + getDeviceInitState(), + getIpVersion(), + getDeviceIp(), + getPort(), + getSubMask(), + getGetway(), + getDeviceMac(), + getDeviceType(), + getDetailType(), + getHttpPort()}; + + return name; + } + + public String getIpVersion() { + return bundle.getString("IP_VERSION"); + } + + public String getSubMask() { + return bundle.getString("SUB_MASK"); + } + + public String getGetway() { + return bundle.getString("GETWAY"); + } + + public String getDetailType() { + return bundle.getString("DETAIL_TYPE"); + } + + public String getHttpPort() { + return bundle.getString("HTTP_PORT"); + } + + public String getInitialized() { + return bundle.getString("INITIALIZED"); + } + + public String getNotInitialized() { + return bundle.getString("NOT_INITIALIZED"); + } + + public String getOldDevice() { + return bundle.getString("OLD_DEVICE"); + } + + public String getNotSupportInitialization() { + return bundle.getString("DONOT_SUPPORT_INITIALIZATION"); + } + + public String getPhone() { + return bundle.getString("PHONE"); + } + + public String getMail() { + return bundle.getString("MAIL"); + } + + public String getInputPhone() { + return bundle.getString("PLEASE_INPUT_PHONE"); + } + + public String getInputMail() { + return bundle.getString("PLEASE_INPUT_MAIL"); + } + + public String getConfirmPassword() { + return bundle.getString("CONFIRM_PASSWORD"); + } + + public String getInconsistent() { + return bundle.getString("INCONSISTENT"); + } + + public String getCheckIp() { + return bundle.getString("PLEASE_CHECK_IP"); + } + + // 0-老设备,没有初始化功能 1-未初始化账号 2-已初始化账户 + public String getInitStateInfo(int initStatus) { + String initStateInfo = ""; + switch (initStatus) { + case 0: + initStateInfo = getInitialized(); + break; + case 1: + initStateInfo = getNotInitialized(); + break; + case 2: + initStateInfo = getInitialized(); + break; + } + return initStateInfo; + } + + public String getAlarmListen() { + return bundle.getString("ALARM_LISTEN"); + } + + public String getStartListen() { + return bundle.getString("START_LISTEN"); + } + + public String getStopListen() { + return bundle.getString("STOP_LISTEN"); + } + + public String getShowAlarmEvent() { + return bundle.getString("SHOW_ALARM_EVENT"); + } + + public String getAlarmMessage() { + return bundle.getString("ALARM_MESSAGE"); + } + + public String getExternalAlarm() { + return bundle.getString("EXTERNAL_ALARM"); + } + + public String getMotionAlarm() { + return bundle.getString("MOTION_ALARM"); + } + + public String getVideoLostAlarm() { + return bundle.getString("VIDEOLOST_ALARM"); + } + + public String getShelterAlarm() { + return bundle.getString("SHELTER_ALARM"); + } + + public String getDiskFullAlarm() { + return bundle.getString("DISKFULL_ALARM"); + } + + public String getDiskErrorAlarm() { + return bundle.getString("DISKERROR_ALARM"); + } + + public String getAlarmListenFailed() { + return bundle.getString("ALARM_LISTEN_FAILED"); + } + + public String getStart() { + return bundle.getString("START"); + } + + public String getStop() { + return bundle.getString("STOP"); + } + + public String getDeviceControl() { + return bundle.getString("DEVICE_CONTROL"); + } + + public String getDeviceReboot() { + return bundle.getString("DEVICE_REBOOT"); + } + + public String getSyncTime() { + return bundle.getString("SYNCHRONIZE_TIME"); + } + + public String getCurrentTime() { + return bundle.getString("CURRENT_TIME"); + } + + public String getReboot() { + return bundle.getString("REBOOT"); + } + + public String getRebootTips() { + return bundle.getString("REBOOT_TIPS"); + } + + public String getGetTime() { + return bundle.getString("GET_TIME"); + } + + public String getSetTime() { + return bundle.getString("SET_TIME"); + } + + public String getOperateSuccess() { + return bundle.getString("OPERATE_SUCCESS"); + } + + public String getFaceRecognition() { + return bundle.getString("FACERECOGNITION"); + } + + public String[] getGroupTable() { + String[] faceTable = {getFaceGroupId(), + getFaceGroupName(), + bundle.getString("PERSON_COUNT")}; + return faceTable; + } + + public String getFaceGroupId() { + return bundle.getString("FACE_GROUP_ID"); + } + + public String getFaceGroupName() { + return bundle.getString("FACE_GROUP_NAME"); + } + + public String getGroupOperate() { + return bundle.getString("GROUP_OPERATE"); + } + + public String getPersonOperate() { + return bundle.getString("PERSON_OPERATE"); + } + + public String getGlobalPicture() { + return bundle.getString("GLOBAL_PICTURE"); + } + + public String getPersonPicture() { + return bundle.getString("PERSON_PICTURE"); + } + + public String getCandidatePicture() { + return bundle.getString("CANDIDATE_PICTURE"); + } + + public String getTime() { + return bundle.getString("TIME"); + } + + public String getSex() { + return bundle.getString("SEX"); + } + + public String getAge() { + return bundle.getString("AGE"); + } + + + public String getRace() { + return bundle.getString("RACE"); + } + + public String getEye() { + return bundle.getString("EYE"); + } + + public String getMouth() { + return bundle.getString("MOUTH"); + } + + public String getMask() { + return bundle.getString("MASK"); + } + + public String getBeard() { + return bundle.getString("BEARD"); + } + + public String getName() { + return bundle.getString("NAME"); + } + + public String getBirthday() { + return bundle.getString("BIRTHDAY"); + } + + public String getIdNo() { + return bundle.getString("ID_NO"); + } + + public String getIdType() { + return bundle.getString("ID_TYPE"); + } + + public String getSimilarity() { + return bundle.getString("SIMILARITY"); + } + + public String getFaceDetectEvent() { + return bundle.getString("FACE_DETECT_EVENT"); + } + + public String getFaceRecognitionEvent() { + return bundle.getString("FACE_RECOGNITION_EVENT"); + } + + public String getUid() { + return bundle.getString("UID"); + } + + public String[] getPersonTable() { + String[] personTable = {getUid(), getName(), getSex(), getBirthday(), getIdType(), getIdNo()}; + return personTable; + } + + public String[] getDispositionTable() { + String[] dispositionTable = {getChannel(), getSimilarity()}; + return dispositionTable; + } + + public String getUnKnow() { + return bundle.getString("UNKNOW"); + } + + public String getMale() { + return bundle.getString("MALE"); + } + + public String getFemale() { + return bundle.getString("FEMALE"); + } + + public String[] getSexStringsFind() { + String[] faceSexStr = {getUnLimited(), getMale(), getFemale()}; + return faceSexStr; + } + + public String[] getIdStringsFind() { + String[] idStr = {getUnLimited(), getIdCard(), getPassport(),}; + return idStr; + } + + public String[] getSexStrings() { + String[] faceSexStr = {getUnKnow(), getMale(), getFemale()}; + return faceSexStr; + } + + public String[] getIdStrings() { + String[] idStr = {getUnKnow(), getIdCard(), getPassport(),}; + return idStr; + } + + public String getIdCard() { + return bundle.getString("ID_CARD"); + } + + public String getPassport() { + return bundle.getString("PASSPORT"); + } + + public String getIdType(int idType) { + String str = ""; + switch (idType) { + case 0: + str = getUnKnow(); + break; + case 1: + str = getIdCard(); + break; + case 2: + str = getPassport(); + break; + default: + str = getUnKnow(); + break; + } + return str; + } + + public String getSex(int sex) { + String str = ""; + switch (sex) { + case 0: + str = getUnKnow(); + break; + case 1: + str = getMale(); + break; + case 2: + str = getFemale(); + break; + default: + str = getUnKnow(); + break; + } + return str; + } + + public String getUnLimited() { + return bundle.getString("UNLIMITED"); + } + + public String getUnidentified() { + return bundle.getString("UNIDENTIFIED"); + } + + public String getHaveBeard() { + return bundle.getString("HAVE_BEARD"); + } + + public String getNoBeard() { + return bundle.getString("NO_BEARD"); + } + + public String getBeardState(int beard) { + String str = ""; + switch (beard) { + case 0: + str = getUnKnow(); + break; + case 1: + str = getUnidentified(); + break; + case 2: + str = getNoBeard(); + break; + case 3: + str = getHaveBeard(); + break; + default: + str = getUnKnow(); + break; + } + return str; + } + + public String getOpenMouth() { + return bundle.getString("OPEN_MOUTH"); + } + + public String getCloseMouth() { + return bundle.getString("CLOSE_MOUTH"); + } + + public String getMouthState(int mouth) { + String str = ""; + switch (mouth) { + case 0: + str = getUnKnow(); + break; + case 1: + str = getUnidentified(); + break; + case 2: + str = getCloseMouth(); + break; + case 3: + str = getOpenMouth(); + break; + default: + str = getUnKnow(); + break; + } + return str; + } + + public String getYellowRace() { + return bundle.getString("YELLOW_RACE"); + } + + public String getBlackRace() { + return bundle.getString("BLACK_RACE"); + } + + public String getWhiteRace() { + return bundle.getString("WHITE_RACE"); + } + + public String getRace(int race) { + String str = ""; + switch (race) { + case 0: + str = getUnKnow(); + break; + case 1: + str = getUnidentified(); + break; + case 2: + str = getYellowRace(); + break; + case 3: + str = getBlackRace(); + break; + case 4: + str = getWhiteRace(); + break; + default: + str = getUnKnow(); + break; + } + return str; + } + + public String getOpenEye() { + return bundle.getString("OPEN_EYE"); + } + + public String getCloseEye() { + return bundle.getString("CLOSE_EYE"); + } + + public String getEyeState(int eye) { + String str = getUnidentified(); + switch (eye) { + case 0: + str = getUnKnow(); + break; + case 1: + str = getUnidentified(); + break; + case 2: + str = getCloseEye(); + break; + case 3: + str = getOpenEye(); + break; + default: + str = getUnKnow(); + break; + } + return str; + } + + public String getSmile() { + return bundle.getString("SMILE"); + } + + public String getAnger() { + return bundle.getString("ANGER"); + } + + public String getSadness() { + return bundle.getString("SADNESS"); + } + + public String getDisgust() { + return bundle.getString("DISGUST"); + } + + public String getFear() { + return bundle.getString("FEAR"); + } + + public String getSurprise() { + return bundle.getString("SURPRISE"); + } + + public String getNeutral() { + return bundle.getString("NEUTRAL"); + } + + public String getLaugh() { + return bundle.getString("LAUGH"); + } + + public String getFaceFeature(int type) { + String str = ""; + switch (type) { + case 0: + str = getUnKnow(); + break; + case 1: + str = getWearGlasses(); + break; + case 2: + str = getSmile(); + break; + case 3: + str = getAnger(); + break; + case 4: + str = getSadness(); + break; + case 5: + str = getDisgust(); + break; + case 6: + str = getFear(); + break; + case 7: + str = getSurprise(); + break; + case 8: + str = getNeutral(); + break; + case 9: + str = getLaugh(); + break; + default: + str = getUnKnow(); + break; + } + return str; + } + + public String getWearMask() { + return bundle.getString("WEAR_MASK"); + } + + public String geNoMask() { + return bundle.getString("NO_MASK"); + } + + public String getMaskState(int type) { + String maskStateStr = ""; + switch (type) { + case 0: + maskStateStr = getUnKnow(); + break; + case 1: + maskStateStr = getUnidentified(); + break; + case 2: + maskStateStr = geNoMask(); + break; + case 3: + maskStateStr = getWearMask(); + break; + default: + maskStateStr = getUnKnow(); + break; + } + return maskStateStr; + } + + public String getWearGlasses() { + return bundle.getString("WEAR_GLASSES"); + } + + public String getNoGlasses() { + return bundle.getString("NO_GLASSES"); + } + + public String getGlasses(int byGlasses) { + String glassesStr = ""; + switch (byGlasses) { + case 0: + glassesStr = getUnKnow(); + break; + case 1: + glassesStr = getNoGlasses(); + break; + case 2: + glassesStr = getWearGlasses(); + break; + default: + break; + } + return glassesStr; + } + + public String getAdd() { + return bundle.getString("ADD"); + } + + public String getModify() { + return bundle.getString("MODIFY"); + } + + public String getDelete() { + return bundle.getString("DELETE"); + } + + public String getFresh() { + return bundle.getString("FRESH"); + } + + public String getAddGroup() { + return bundle.getString("ADD_GROUP"); + } + + public String getModifyGroup() { + return bundle.getString("MODIFY_GROUP"); + } + + public String getDelGroup() { + return bundle.getString("DEL_GROUP"); + } + + public String getDisposition() { + return bundle.getString("DISPOSITION"); + } + + public String getDelDisposition() { + return bundle.getString("DEL_DISPOSITION"); + } + + public String getSimilarityRange() { + return bundle.getString("SIMILARITY_RANGE"); + } + + public String getFindCondition() { + return bundle.getString("FIND_CONDITION"); + } + + public String getFindPerson() { + return bundle.getString("FIND_PERSON"); + } + + public String getAddPerson() { + return bundle.getString("ADD_PERSON"); + } + + public String getModifyPerson() { + return bundle.getString("MODIFY_PERSON"); + } + + public String getDelPerson() { + return bundle.getString("DEL_PERSON"); + } + + public String getPreviousPage() { + return bundle.getString("PREVIOUSPAGE"); + } + + public String getLastPage() { + return bundle.getString("LASTPAGE"); + } + + public String getSelectPicture() { + return bundle.getString("SELECT_PICTURE"); + } + + public String getEventType() { + return bundle.getString("EVENT_TYPE"); + } + + public String getStranger() { + return bundle.getString("STRANGER"); + } + + public String getInputGroupName() { + return bundle.getString("PLEASE_INPUT_GROUPNAME"); + } + + public String getSelectGroup() { + return bundle.getString("PLEASE_SELECT_GROUP"); + } + + public String getSelectPerson() { + return bundle.getString("PLEASE_SELECT_PERSON"); + } + + public String getAddDispositionInfo() { + return bundle.getString("PLEASE_ADD_DISPOSITION_INFO"); + } + + public String getSelectDelDispositionInfo() { + return bundle.getString("PLEASE_SELECT_DEL_DISPOSITION_INFO"); + } + + public String getPagesNumber() { + return bundle.getString("PAGES_NUMBER"); + } + + public String getAutoRegister() { + return bundle.getString("AUTOREGISTER"); + } + + public String getAutoRegisterListen() { + return bundle.getString("AUTOREGISTER_LISTEN"); + } + + public String getDeviceConfig() { + return bundle.getString("DEVICE_CONFIG"); + } + + public String getDeviceList() { + return bundle.getString("DEVICE_LIST"); + } + + public String getDeviceManager() { + return bundle.getString("DEVICE_MANAGER"); + } + + public String getAddDevice() { + return bundle.getString("ADD_DEVICE"); + } + + public String getModifyDevice() { + return bundle.getString("MODIFY_DEVICE"); + } + + public String getDeleteDevice() { + return bundle.getString("DELETE_DEVICE"); + } + + public String getClearDevice() { + return bundle.getString("CLEAR_DEVICE"); + } + + public String getImportDevice() { + return bundle.getString("IMPORT_DEVICE"); + } + + public String getExportDevice() { + return bundle.getString("EXPORT_DEVICE"); + } + + public String getFunctionOperate() { + return bundle.getString("FUNCTION") + bundle.getString("OPERATE"); + } + + public String getDeviceID() { + return bundle.getString("DEVICE_ID"); + } + + public String getEnable() { + return bundle.getString("ENABLE"); + } + + public String getRegisterAddress() { + return bundle.getString("REGISTER_ADDRESS"); + } + + public String getRegisterPort() { + return bundle.getString("REGISTER_PORT"); + } + + public String getGet() { + return bundle.getString("GET"); + } + + public String getSet() { + return bundle.getString("SET"); + } + + public String getAlreadyExisted() { + return bundle.getString("ALREADY_EXISTED"); + } + + public String getWhetherNoToCover() { + return bundle.getString("ALREADY_EXISTED_WHETHER_OR_NOT_TO_COVER"); + } + + public String getFileOpened() { + return bundle.getString("FILE_OPEN_PLEASE_CLOSE_FILE"); + } + + public String getImportCompletion() { + return bundle.getString("IMPORT_COMPLETION"); + } + + public String getExportCompletion() { + return bundle.getString("EXPORT_COMPLETION"); + } + + public String getFileNotExist() { + return bundle.getString("FILE_NOT_EXIST"); + } + + public String getRecord() { + return bundle.getString("RECORD"); + } + + public String getInput() { + return bundle.getString("PLEASE_INPUT"); + } + + public String getMaximumSupport() { + return bundle.getString("MAX_SUPPORT_100"); + } + + public String getDeviceLogined() { + return bundle.getString("DEVICE_LOGIN"); + } + + public String getAttendance() { + return bundle.getString("ATTENDANCE"); + } + + public String getFingerPrintOperate() { + return bundle.getString("FINGERPRINT_OPERATE"); + } + + public String getUserOperate() { + return bundle.getString("USER_OPERATE"); + } + + public String getOperateByUserId() { + return bundle.getString("OPERATE_BY_USER_ID"); + } + + public String getOperateByFingerPrintId() { + return bundle.getString("OPERATE_BY_FINGERPRINT_ID"); + } + + public String getSearch() { + return bundle.getString("SEARCH"); + } + + public String getQueryCondition() { + return bundle.getString("QUERY_CONDITION"); + } + + public String getFingerPrintId() { + return bundle.getString("FINGERPRINT_ID"); + } + + public String getSearchFingerPrint() { + return bundle.getString("SEARCH_FINGERPRINT"); + } + + public String getAddFingerPrint() { + return bundle.getString("ADD_FINGERPRINT"); + } + + public String getDeleteFingerPrint() { + return bundle.getString("DELETE_FINGERPRINT"); + } + + public String getSubscribe() { + return bundle.getString("SUBSCRIBE"); + } + + public String getUnSubscribe() { + return bundle.getString("UNSUBSCRIBE"); + } + + public String getUserList() { + return bundle.getString("USER_LIST"); + } + + public String getNextPage() { + return bundle.getString("NEXT_PAGE"); + } + + public String getUserInfo() { + return bundle.getString("USER_INFO"); + } + + public String getDoorOpenMethod() { + return bundle.getString("DOOROPEN_METHOD"); + } + + public String getFingerPrint() { + return bundle.getString("FINGERPRINT"); + } + + public String getFingerPrintInfo() { + return bundle.getString("FINGERPRINT_INFO"); + } + + public String getFingerPrintData() { + return bundle.getString("FINGERPRINT_DATA"); + } + + public String getCard() { + return bundle.getString("CARD"); + } + + public String getDeleteFingerPrintPrompt() { + return bundle.getString("DELETE_FINGERPRINT_PROMPT"); + } + + public String getSubscribeFailed() { + return bundle.getString("SUBSCRIBE_FAILED"); + } + + public String getFingerPrintIdIllegal() { + return bundle.getString("FINGERPRINT_ID_ILLEGAL"); + } + + public String getcFingerPrintCollection() { + return bundle.getString("FINGERPRINT_COLLECTION"); + } + + public String getStartCollection() { + return bundle.getString("START_COLLECTION"); + } + + public String getStopCollection() { + return bundle.getString("STOP_COLLECTION"); + } + + public String getInCollection() { + return bundle.getString("IN_THE_COLLECTION"); + } + + public String getcCompleteCollection() { + return bundle.getString("COLLECTION_COMPLETED"); + } + + public String getCollectionFailed() { + return bundle.getString("COLLECTION_FAILED"); + } + + public String getFingerPrintIdNotExist() { + return bundle.getString("FINGERPRINT_ID_NOT_EXIST"); + } + + public String getUserIdExceedLength() { + return bundle.getString("USER_ID_EXCEED_LENGTH"); + } + + public String getUserNameExceedLength() { + return bundle.getString("USER_NAME_EXCEED_LENGTH"); + } + + public String getCardNoExceedLength() { + return bundle.getString("CARD_NO_EXCEED_LENGTH"); + } + + public String getCardNameExceedLength() { + return bundle.getString("CARD_NAME_EXCEED_LENGTH"); + } + + public String getCardPasswdExceedLength() { + return bundle.getString("CARD_PASSWD_EXCEED_LENGTH"); + } + + public String getGate() { + return bundle.getString("GATE"); + } + + public String getCardOperate() { + return bundle.getString("CARD_OPERATE"); + } + + public String getCardInfo() { + return bundle.getString("CARD_INFO"); + } + + public String getCardManager() { + return bundle.getString("CARD_MANAGER"); + } + + public String getClear() { + return bundle.getString("CLEAR"); + } + + public String getOpenStatus() { + return bundle.getString("OPEN_STATUS"); + } + + public String getOpenMethod() { + return bundle.getString("OPEN_METHOD"); + } + + public String getCardName() { + return bundle.getString("CARD_NAME"); + } + + public String getCardStatus() { + return bundle.getString("CARD_STATUS"); + } + + public String getCardPassword() { + return bundle.getString("CARD_PASSWORD"); + } + + public String getCardType() { + return bundle.getString("CARD_TYPE"); + } + + public String getUseTimes() { + return bundle.getString("USE_TIMES"); + } + + public String getIsFirstEnter() { + return bundle.getString("IS_FIRST_ENTER"); + } + + public String getIsValid() { + return bundle.getString("IS_VALID"); + } + + public String getValidPeriod() { + return bundle.getString("VALID_PERIOD"); + } + + public String getValidStartTime() { + return bundle.getString("VALID_START_TIME"); + } + + public String getValidEndTime() { + return bundle.getString("VALID_END_TIME"); + } + + public String getRecordNo() { + return bundle.getString("RECORD_NO"); + } + + public String getFirstEnter() { + return bundle.getString("FIRST_ENTER"); + } + + public String getNoFirstEnter() { + return bundle.getString("NO_FIRST_ENTER"); + } + + public String getValid() { + return bundle.getString("VALID"); + } + + public String getInValid() { + return bundle.getString("INVALID"); + } + + public String getSelectCard() { + return bundle.getString("PLEASE_SELECT_CARD"); + } + + public String getInputCardNo() { + return bundle.getString("PLEASE_INPUT_CARDNO"); + } + + public String getInputUserId() { + return bundle.getString("PLEASE_INPUT_USERID"); + } + + public String getWantClearAllInfo() { + return bundle.getString("WANT_CLEAR_ALL_INFO"); + } + + public String getFailedAddCard() { + return bundle.getString("ADD_CARD_INDO_FAILED"); + } + + public String getSucceedAddCardAndPerson() { + return bundle.getString("ADD_CARD_INFO_AND_PERSON_PICTURE_SUCCEED"); + } + + public String getSucceedAddCardButFailedAddPerson() { + return bundle.getString("ADD_CARD_INFO_SUCCEED_BUT_ADD_PERSON_PICTURE_FAILED"); + } + + public String getCardExistedSucceedAddPerson() { + return bundle.getString("CARD_EXISTED_ADD_PERSON_PICTURE_SUCCEED"); + } + + public String getSucceedModifyCard() { + return bundle.getString("MODIFY_CARD_INFO_SUCCEED"); + } + + public String getFailedModifyCard() { + return bundle.getString("MODIFY_CARD_INFO_FAILED"); + } + + public String getSucceedModifyCardAndPerson() { + return bundle.getString("MODIFY_CARD_INFO_AND_PERSON_PICTURE_SUCCEED"); + } + + public String getSucceedModifyCardButFailedModifyPerson() { + return bundle.getString("MODIFY_CARD_INFO_SUCCEED_BUT_MODIFY_PERSON_PICTURE_FAILED"); + } + + public String[] getCardTable() { + return new String[]{getIndex(), + getCardNo(), + getCardName(), + getRecordNo(), + getUserId(), + getCardPassword(), + getCardStatus(), + getCardType(), + getUseTimes(), + getIsFirstEnter(), + getIsValid(), + getValidStartTime(), + getValidEndTime()}; + } + + /* + * 用于列表显示 + */ + public String getCardStatus(int status) { + String statusString = ""; + switch (status) { + case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN: // 未知 + statusString = bundle.getString("STATE_UNKNOWN"); + break; + case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_NORMAL: // 正常 + statusString = bundle.getString("STATE_NORMAL"); + break; + case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOSE: // 挂失 + statusString = bundle.getString("STATE_LOSE"); + break; + case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOGOFF: // 注销 + statusString = bundle.getString("STATE_LOGOFF"); + break; + case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_FREEZE: // 冻结 + statusString = bundle.getString("STATE_FREEZE"); + break; + case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_ARREARAGE: // 欠费 + statusString = bundle.getString("STATE_ARREARS"); + break; + case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_OVERDUE: // 逾期 + statusString = bundle.getString("STATE_OVERDUE"); + break; + case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_PREARREARAGE: // 预欠费 + statusString = bundle.getString("STATE_PREARREARS"); + break; + default: + statusString = bundle.getString("STATE_UNKNOWN"); + break; + } + + return statusString; + } + + /* + * 根据控件的索引,获取对应的卡状态的Int值, 用于添加 和 修改卡信息 + */ + public int getCardStatusInt(int index) { + int status = 0; + switch (index) { + case 0: // 未知 + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN; + break; + case 1: // 正常 + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_NORMAL; + break; + case 2: // 挂失 + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOSE; + break; + case 3: // 注销 + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOGOFF; + break; + case 4: // 冻结 + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_FREEZE; + break; + case 5: // 欠费 + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_ARREARAGE; + break; + case 6: // 逾期 + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_OVERDUE; + break; + case 7: // 预欠费 + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_PREARREARAGE; + break; + default: + status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN; + break; + } + + return status; + } + + /* + * 根据字符串,获取控件对应的索引 + */ + public int getCardStatusChomBoxIndex(String status) { + int index = 0; + + if (status.equals(bundle.getString("STATE_UNKNOWN"))) { + index = 0; + } else if (status.equals(bundle.getString("STATE_NORMAL"))) { + index = 1; + } else if (status.equals(bundle.getString("STATE_LOSE"))) { + index = 2; + } else if (status.equals(bundle.getString("STATE_LOGOFF"))) { + index = 3; + } else if (status.equals(bundle.getString("STATE_FREEZE"))) { + index = 4; + } else if (status.equals(bundle.getString("STATE_ARREARS"))) { + index = 5; + } else if (status.equals(bundle.getString("STATE_OVERDUE"))) { + index = 6; + } else if (status.equals(bundle.getString("STATE_PREARREARS"))) { + index = 7; + } + + return index; + } + + public String[] getCardStatusList() { + return new String[]{bundle.getString("STATE_UNKNOWN"), + bundle.getString("STATE_NORMAL"), + bundle.getString("STATE_LOSE"), + bundle.getString("STATE_LOGOFF"), + bundle.getString("STATE_FREEZE"), + bundle.getString("STATE_ARREARS"), + bundle.getString("STATE_OVERDUE"), + bundle.getString("STATE_PREARREARS")}; + } + + /* + * 用于列表显示 + */ + public String getCardType(int type) { + String cardTypeString = ""; + + switch (type) { + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN: // 未知 + cardTypeString = bundle.getString("CARD_UNKNOW"); + break; + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GENERAL: // 一般卡 + cardTypeString = bundle.getString("CARD_GENERAL"); + break; + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_VIP: // VIP卡 + cardTypeString = bundle.getString("CARD_VIP"); + break; + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GUEST: // 来宾卡 + cardTypeString = bundle.getString("CARD_GUEST"); + break; + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_PATROL: // 巡逻卡 + cardTypeString = bundle.getString("CARD_PATROL"); + break; + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_BLACKLIST: // 黑名单卡 + cardTypeString = bundle.getString("CARD_BACKLIST"); + break; + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_CORCE: // 胁迫卡 + cardTypeString = bundle.getString("CARD_COERCE"); + break; + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_POLLING: // 巡检卡 + cardTypeString = bundle.getString("CARD_POLLING"); + break; + case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_MOTHERCARD: // 母卡 + cardTypeString = bundle.getString("CARD_MOTHERCARD"); + break; + default: + cardTypeString = bundle.getString("CARD_UNKNOW"); + break; + } + + return cardTypeString; + } + + /* + * 根据控件索引,获取对应的卡类型Int值 + */ + public int getCardTypeInt(int index) { + int type = 0; + + switch (index) { + case 0: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN; + break; + case 1: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GENERAL; + break; + case 2: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_VIP; + break; + case 3: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GUEST; + break; + case 4: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_PATROL; + break; + case 5: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_BLACKLIST; + break; + case 6: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_CORCE; + break; + case 7: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_POLLING; + break; + case 8: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_MOTHERCARD; + break; + default: + type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN; + break; + } + + return type; + } + + /* + * 根据字符串,获取控件的索引 + */ + public int getCardTypeChomBoxIndex(String type) { + int index = 0; + + if (type.equals(bundle.getString("CARD_UNKNOW"))) { + index = 0; + } else if (type.equals(bundle.getString("CARD_GENERAL"))) { + index = 1; + } else if (type.equals(bundle.getString("CARD_VIP"))) { + index = 2; + } else if (type.equals(bundle.getString("CARD_GUEST"))) { + index = 3; + } else if (type.equals(bundle.getString("CARD_PATROL"))) { + index = 4; + } else if (type.equals(bundle.getString("CARD_BACKLIST"))) { + index = 5; + } else if (type.equals(bundle.getString("CARD_COERCE"))) { + index = 6; + } else if (type.equals(bundle.getString("CARD_POLLING"))) { + index = 7; + } else if (type.equals(bundle.getString("CARD_MOTHERCARD"))) { + index = 8; + } + + return index; + } + + public String[] getCardTypeList() { + return new String[]{bundle.getString("CARD_UNKNOW"), + bundle.getString("CARD_GENERAL"), + bundle.getString("CARD_VIP"), + bundle.getString("CARD_GUEST"), + bundle.getString("CARD_PATROL"), + bundle.getString("CARD_BACKLIST"), + bundle.getString("CARD_COERCE"), + bundle.getString("CARD_POLLING"), + bundle.getString("CARD_MOTHERCARD")}; + } + + public String getOpenMethods(int emOpenMethod) { + String openMethods = ""; + switch (emOpenMethod) { + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_UNKNOWN: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_UNKNOWN"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_REMOTE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BUTTON: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_BUTTON"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PERSONS: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PERSONS"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_KEY: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_KEY"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_QRCODE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_QRCODE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE"); + break; + case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE"); + break; + default: + openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_UNKNOWN"); + break; + } + + return openMethods; + } + + public String getShowInfo(String tag) { + try { + return bundle.getString(tag); + } catch (Exception e) { + return tag; + } + } + + public String getThermalCamera() { + return getShowInfo("THERMAL_CAMERA"); + } + + public String[] getMeterTypeList() { + String[] meterTypes = {getShowInfo("SPOT"), getShowInfo("LINE"), getShowInfo("AREA")}; + + return meterTypes; + } + + public String[] getTemperUnitList() { + return new String[]{getShowInfo("CENTIGRADE"), getShowInfo("FAHRENHEIT")}; + } + + public String[] getPeriodList() { + return new String[]{getShowInfo("FIVE_MINUTES"), getShowInfo("TEN_MINUTES"), + getShowInfo("FIFTEEN_MINUTES"), getShowInfo("THIRTY_MINUTES")}; + } + + public String[] getTemperStatusList() { + return new String[]{getShowInfo("IDLE"), getShowInfo("ACQUIRING")}; + } + + public String getSearchingWait() { + return bundle.getString("SEARCHING_WAITING"); } - - public String getNoBeard() { - return bundle.getString("NO_BEARD"); - } - - public String getBeardState(int beard) { - String str = ""; - switch (beard) { - case 0: - str = getUnKnow(); - break; - case 1: - str = getUnidentified(); - break; - case 2: - str = getNoBeard(); - break; - case 3: - str = getHaveBeard(); - break; - default: - str = getUnKnow(); - break; - } - return str; - } - - public String getOpenMouth() { - return bundle.getString("OPEN_MOUTH"); - } - - public String getCloseMouth() { - return bundle.getString("CLOSE_MOUTH"); - } - - public String getMouthState(int mouth) { - String str = ""; - switch (mouth) { - case 0: - str = getUnKnow(); - break; - case 1: - str = getUnidentified(); - break; - case 2: - str = getCloseMouth(); - break; - case 3: - str = getOpenMouth(); - break; - default: - str = getUnKnow(); - break; - } - return str; - } - - public String getYellowRace() { - return bundle.getString("YELLOW_RACE"); - } - - public String getBlackRace() { - return bundle.getString("BLACK_RACE"); - } - - public String getWhiteRace() { - return bundle.getString("WHITE_RACE"); - } - - public String getRace(int race) { - String str = ""; - switch (race) { - case 0: - str = getUnKnow(); - break; - case 1: - str = getUnidentified(); - break; - case 2: - str = getYellowRace(); - break; - case 3: - str = getBlackRace(); - break; - case 4: - str = getWhiteRace(); - break; - default: - str = getUnKnow(); - break; - } - return str; - } - - public String getOpenEye() { - return bundle.getString("OPEN_EYE"); - } - - public String getCloseEye() { - return bundle.getString("CLOSE_EYE"); - } - - public String getEyeState(int eye) { - String str = getUnidentified(); - switch (eye) { - case 0: - str = getUnKnow(); - break; - case 1: - str = getUnidentified(); - break; - case 2: - str = getCloseEye(); - break; - case 3: - str = getOpenEye(); - break; - default: - str = getUnKnow(); - break; - } - return str; - } - - public String getSmile() { - return bundle.getString("SMILE"); - } - - public String getAnger() { - return bundle.getString("ANGER"); - } - - public String getSadness() { - return bundle.getString("SADNESS"); - } - - public String getDisgust() { - return bundle.getString("DISGUST"); - } - - public String getFear() { - return bundle.getString("FEAR"); - } - - public String getSurprise() { - return bundle.getString("SURPRISE"); - } - - public String getNeutral() { - return bundle.getString("NEUTRAL"); - } - - public String getLaugh() { - return bundle.getString("LAUGH"); - } - - public String getFaceFeature(int type) { - String str = ""; - switch (type) { - case 0: - str = getUnKnow(); - break; - case 1: - str = getWearGlasses(); - break; - case 2: - str = getSmile(); - break; - case 3: - str = getAnger(); - break; - case 4: - str = getSadness(); - break; - case 5: - str = getDisgust(); - break; - case 6: - str = getFear(); - break; - case 7: - str = getSurprise(); - break; - case 8: - str = getNeutral(); - break; - case 9: - str = getLaugh(); - break; - default: - str = getUnKnow(); - break; - } - return str; - } - - public String getWearMask() { - return bundle.getString("WEAR_MASK"); - } - - public String geNoMask() { - return bundle.getString("NO_MASK"); - } - - public String getMaskState(int type) { - String maskStateStr = ""; - switch (type) { - case 0: - maskStateStr = getUnKnow(); - break; - case 1: - maskStateStr = getUnidentified(); - break; - case 2: - maskStateStr = geNoMask(); - break; - case 3: - maskStateStr = getWearMask(); - break; - default: - maskStateStr = getUnKnow(); - break; - } - return maskStateStr; - } - - public String getWearGlasses() { - return bundle.getString("WEAR_GLASSES"); - } - - public String getNoGlasses() { - return bundle.getString("NO_GLASSES"); - } - - public String getGlasses(int byGlasses) { - String glassesStr = ""; - switch (byGlasses) { - case 0: - glassesStr = getUnKnow(); - break; - case 1: - glassesStr = getNoGlasses(); - break; - case 2: - glassesStr = getWearGlasses(); - break; - default: - break; - } - return glassesStr; - } - - public String getAdd() { - return bundle.getString("ADD"); - } - - public String getModify() { - return bundle.getString("MODIFY"); - } - - public String getDelete() { - return bundle.getString("DELETE"); - } - - public String getFresh() { - return bundle.getString("FRESH"); - } - - public String getAddGroup() { - return bundle.getString("ADD_GROUP"); - } - - public String getModifyGroup() { - return bundle.getString("MODIFY_GROUP"); - } - - public String getDelGroup() { - return bundle.getString("DEL_GROUP"); - } - - public String getDisposition() { - return bundle.getString("DISPOSITION"); - } - - public String getDelDisposition() { - return bundle.getString("DEL_DISPOSITION"); - } - - public String getSimilarityRange() { - return bundle.getString("SIMILARITY_RANGE"); - } - - public String getFindCondition() { - return bundle.getString("FIND_CONDITION"); - } - - public String getFindPerson() { - return bundle.getString("FIND_PERSON"); - } - - public String getAddPerson() { - return bundle.getString("ADD_PERSON"); - } - - public String getModifyPerson() { - return bundle.getString("MODIFY_PERSON"); - } - - public String getDelPerson() { - return bundle.getString("DEL_PERSON"); - } - - public String getPreviousPage() { - return bundle.getString("PREVIOUSPAGE"); - } - - public String getLastPage() { - return bundle.getString("LASTPAGE"); - } - - public String getSelectPicture() { - return bundle.getString("SELECT_PICTURE"); - } - - public String getEventType() { - return bundle.getString("EVENT_TYPE"); - } - - public String getStranger() { - return bundle.getString("STRANGER"); - } - - public String getInputGroupName() { - return bundle.getString("PLEASE_INPUT_GROUPNAME"); - } - - public String getSelectGroup() { - return bundle.getString("PLEASE_SELECT_GROUP"); - } - - public String getSelectPerson() { - return bundle.getString("PLEASE_SELECT_PERSON"); - } - - public String getAddDispositionInfo() { - return bundle.getString("PLEASE_ADD_DISPOSITION_INFO"); - } - - public String getSelectDelDispositionInfo() { - return bundle.getString("PLEASE_SELECT_DEL_DISPOSITION_INFO"); - } - - public String getPagesNumber() { - return bundle.getString("PAGES_NUMBER"); - } - - public String getAutoRegister() { - return bundle.getString("AUTOREGISTER"); - } - - public String getAutoRegisterListen() { - return bundle.getString("AUTOREGISTER_LISTEN"); - } - - public String getDeviceConfig() { - return bundle.getString("DEVICE_CONFIG"); - } - - public String getDeviceList() { - return bundle.getString("DEVICE_LIST"); - } - - public String getDeviceManager() { - return bundle.getString("DEVICE_MANAGER"); - } - - public String getAddDevice() { - return bundle.getString("ADD_DEVICE"); - } - - public String getModifyDevice() { - return bundle.getString("MODIFY_DEVICE"); - } - - public String getDeleteDevice() { - return bundle.getString("DELETE_DEVICE"); - } - - public String getClearDevice() { - return bundle.getString("CLEAR_DEVICE"); - } - - public String getImportDevice() { - return bundle.getString("IMPORT_DEVICE"); - } - - public String getExportDevice() { - return bundle.getString("EXPORT_DEVICE"); - } - - public String getFunctionOperate() { - return bundle.getString("FUNCTION") + bundle.getString("OPERATE"); - } - - public String getDeviceID() { - return bundle.getString("DEVICE_ID"); - } - - public String getEnable() { - return bundle.getString("ENABLE"); - } - - public String getRegisterAddress() { - return bundle.getString("REGISTER_ADDRESS"); - } - - public String getRegisterPort() { - return bundle.getString("REGISTER_PORT"); - } - - public String getGet() { - return bundle.getString("GET"); - } - - public String getSet() { - return bundle.getString("SET"); - } - - public String getAlreadyExisted() { - return bundle.getString("ALREADY_EXISTED"); - } - - public String getWhetherNoToCover() { - return bundle.getString("ALREADY_EXISTED_WHETHER_OR_NOT_TO_COVER"); - } - - public String getFileOpened(){ - return bundle.getString("FILE_OPEN_PLEASE_CLOSE_FILE"); - } - - public String getImportCompletion() { - return bundle.getString("IMPORT_COMPLETION"); - } - - public String getExportCompletion() { - return bundle.getString("EXPORT_COMPLETION"); - } - - public String getFileNotExist() { - return bundle.getString("FILE_NOT_EXIST"); - } - - public String getRecord() { - return bundle.getString("RECORD"); - } - - public String getInput() { - return bundle.getString("PLEASE_INPUT"); - } - - public String getMaximumSupport() { - return bundle.getString("MAX_SUPPORT_100"); - } - - public String getDeviceLogined() { - return bundle.getString("DEVICE_LOGIN"); - } - - public String getAttendance() { - return bundle.getString("ATTENDANCE"); - } - - public String getFingerPrintOperate() { - return bundle.getString("FINGERPRINT_OPERATE"); - } - - public String getUserOperate() { - return bundle.getString("USER_OPERATE"); - } - - public String getOperateByUserId() { - return bundle.getString("OPERATE_BY_USER_ID"); - } - - public String getOperateByFingerPrintId() { - return bundle.getString("OPERATE_BY_FINGERPRINT_ID"); - } - - public String getSearch() { - return bundle.getString("SEARCH"); - } - - public String getQueryCondition() { - return bundle.getString("QUERY_CONDITION"); - } - - public String getFingerPrintId() { - return bundle.getString("FINGERPRINT_ID"); - } - - public String getSearchFingerPrint() { - return bundle.getString("SEARCH_FINGERPRINT"); - } - - public String getAddFingerPrint() { - return bundle.getString("ADD_FINGERPRINT"); - } - - public String getDeleteFingerPrint() { - return bundle.getString("DELETE_FINGERPRINT"); - } - - public String getSubscribe() { - return bundle.getString("SUBSCRIBE"); - } - - public String getUnSubscribe() { - return bundle.getString("UNSUBSCRIBE"); - } - - public String getUserList() { - return bundle.getString("USER_LIST"); - } - - public String getNextPage() { - return bundle.getString("NEXT_PAGE"); - } - - public String getUserInfo() { - return bundle.getString("USER_INFO"); - } - - public String getDoorOpenMethod() { - return bundle.getString("DOOROPEN_METHOD"); - } - - public String getFingerPrint() { - return bundle.getString("FINGERPRINT"); - } - - public String getFingerPrintInfo() { - return bundle.getString("FINGERPRINT_INFO"); - } - - public String getFingerPrintData() { - return bundle.getString("FINGERPRINT_DATA"); - } - - public String getCard() { - return bundle.getString("CARD"); - } - - public String getDeleteFingerPrintPrompt() { - return bundle.getString("DELETE_FINGERPRINT_PROMPT"); - } - - public String getSubscribeFailed() { - return bundle.getString("SUBSCRIBE_FAILED"); - } - - public String getFingerPrintIdIllegal() { - return bundle.getString("FINGERPRINT_ID_ILLEGAL"); - } - - public String getcFingerPrintCollection() { - return bundle.getString("FINGERPRINT_COLLECTION"); - } - - public String getStartCollection() { - return bundle.getString("START_COLLECTION"); - } - - public String getStopCollection() { - return bundle.getString("STOP_COLLECTION"); - } - - public String getInCollection() { - return bundle.getString("IN_THE_COLLECTION"); - } - - public String getcCompleteCollection() { - return bundle.getString("COLLECTION_COMPLETED"); - } - - public String getCollectionFailed() { - return bundle.getString("COLLECTION_FAILED"); - } - - public String getFingerPrintIdNotExist() { - return bundle.getString("FINGERPRINT_ID_NOT_EXIST"); - } - - public String getUserIdExceedLength() { - return bundle.getString("USER_ID_EXCEED_LENGTH"); - } - - public String getUserNameExceedLength() { - return bundle.getString("USER_NAME_EXCEED_LENGTH"); - } - - public String getCardNoExceedLength() { - return bundle.getString("CARD_NO_EXCEED_LENGTH"); - } - - public String getCardNameExceedLength() { - return bundle.getString("CARD_NAME_EXCEED_LENGTH"); - } - - public String getCardPasswdExceedLength() { - return bundle.getString("CARD_PASSWD_EXCEED_LENGTH"); - } - - public String getGate() { - return bundle.getString("GATE"); - } - - public String getCardOperate() { - return bundle.getString("CARD_OPERATE"); - } - - public String getCardInfo() { - return bundle.getString("CARD_INFO"); - } - - public String getCardManager() { - return bundle.getString("CARD_MANAGER"); - } - - public String getClear() { - return bundle.getString("CLEAR"); - } - - public String getOpenStatus() { - return bundle.getString("OPEN_STATUS"); - } - - public String getOpenMethod() { - return bundle.getString("OPEN_METHOD"); - } - - public String getCardName() { - return bundle.getString("CARD_NAME"); - } - - public String getCardStatus() { - return bundle.getString("CARD_STATUS"); - } - - public String getCardPassword() { - return bundle.getString("CARD_PASSWORD"); - } - - public String getCardType() { - return bundle.getString("CARD_TYPE"); - } - - public String getUseTimes() { - return bundle.getString("USE_TIMES"); - } - - public String getIsFirstEnter() { - return bundle.getString("IS_FIRST_ENTER"); - } - - public String getIsValid() { - return bundle.getString("IS_VALID"); - } - - public String getValidPeriod() { - return bundle.getString("VALID_PERIOD"); - } - - public String getValidStartTime() { - return bundle.getString("VALID_START_TIME"); - } - - public String getValidEndTime() { - return bundle.getString("VALID_END_TIME"); - } - - public String getRecordNo() { - return bundle.getString("RECORD_NO"); - } - - public String getFirstEnter() { - return bundle.getString("FIRST_ENTER"); - } - - public String getNoFirstEnter() { - return bundle.getString("NO_FIRST_ENTER"); - } - - public String getValid() { - return bundle.getString("VALID"); - } - - public String getInValid() { - return bundle.getString("INVALID"); - } - - public String getSelectCard() { - return bundle.getString("PLEASE_SELECT_CARD"); - } - - public String getInputCardNo() { - return bundle.getString("PLEASE_INPUT_CARDNO"); - } - - public String getInputUserId() { - return bundle.getString("PLEASE_INPUT_USERID"); - } - - public String getWantClearAllInfo() { - return bundle.getString("WANT_CLEAR_ALL_INFO"); - } - - public String getFailedAddCard() { - return bundle.getString("ADD_CARD_INDO_FAILED"); - } - - public String getSucceedAddCardAndPerson() { - return bundle.getString("ADD_CARD_INFO_AND_PERSON_PICTURE_SUCCEED"); - } - - public String getSucceedAddCardButFailedAddPerson() { - return bundle.getString("ADD_CARD_INFO_SUCCEED_BUT_ADD_PERSON_PICTURE_FAILED"); - } - - public String getCardExistedSucceedAddPerson() { - return bundle.getString("CARD_EXISTED_ADD_PERSON_PICTURE_SUCCEED"); - } - - public String getSucceedModifyCard() { - return bundle.getString("MODIFY_CARD_INFO_SUCCEED"); - } - - public String getFailedModifyCard() { - return bundle.getString("MODIFY_CARD_INFO_FAILED"); - } - - public String getSucceedModifyCardAndPerson() { - return bundle.getString("MODIFY_CARD_INFO_AND_PERSON_PICTURE_SUCCEED"); - } - - public String getSucceedModifyCardButFailedModifyPerson() { - return bundle.getString("MODIFY_CARD_INFO_SUCCEED_BUT_MODIFY_PERSON_PICTURE_FAILED"); - } - - public String[] getCardTable() { - return new String[] {getIndex(), - getCardNo(), - getCardName(), - getRecordNo(), - getUserId(), - getCardPassword(), - getCardStatus(), - getCardType(), - getUseTimes(), - getIsFirstEnter(), - getIsValid(), - getValidStartTime(), - getValidEndTime()}; - } - - /* - * 用于列表显示 - */ - public String getCardStatus(int status) { - String statusString = ""; - switch(status) { - case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN: // 未知 - statusString = bundle.getString("STATE_UNKNOWN"); - break; - case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_NORMAL: // 正常 - statusString = bundle.getString("STATE_NORMAL"); - break; - case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOSE: // 挂失 - statusString = bundle.getString("STATE_LOSE"); - break; - case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOGOFF: // 注销 - statusString = bundle.getString("STATE_LOGOFF"); - break; - case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_FREEZE: // 冻结 - statusString = bundle.getString("STATE_FREEZE"); - break; - case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_ARREARAGE: // 欠费 - statusString = bundle.getString("STATE_ARREARS"); - break; - case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_OVERDUE: // 逾期 - statusString = bundle.getString("STATE_OVERDUE"); - break; - case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_PREARREARAGE: // 预欠费 - statusString = bundle.getString("STATE_PREARREARS"); - break; - default: - statusString = bundle.getString("STATE_UNKNOWN"); - break; - } - - return statusString; - } - - /* - * 根据控件的索引,获取对应的卡状态的Int值, 用于添加 和 修改卡信息 - */ - public int getCardStatusInt(int index) { - int status = 0; - switch(index) { - case 0: // 未知 - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN; - break; - case 1: // 正常 - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_NORMAL; - break; - case 2: // 挂失 - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOSE; - break; - case 3: // 注销 - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOGOFF; - break; - case 4: // 冻结 - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_FREEZE; - break; - case 5: // 欠费 - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_ARREARAGE; - break; - case 6: // 逾期 - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_OVERDUE; - break; - case 7: // 预欠费 - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_PREARREARAGE; - break; - default: - status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN; - break; - } - - return status; - } - - /* - * 根据字符串,获取控件对应的索引 - */ - public int getCardStatusChomBoxIndex(String status) { - int index = 0; - - if(status.equals(bundle.getString("STATE_UNKNOWN"))) { - index = 0; - } else if(status.equals(bundle.getString("STATE_NORMAL"))){ - index = 1; - } else if(status.equals(bundle.getString("STATE_LOSE"))) { - index = 2; - } else if(status.equals(bundle.getString("STATE_LOGOFF"))) { - index = 3; - } else if(status.equals(bundle.getString("STATE_FREEZE"))) { - index = 4; - } else if(status.equals(bundle.getString("STATE_ARREARS"))) { - index = 5; - } else if(status.equals(bundle.getString("STATE_OVERDUE"))) { - index = 6; - } else if(status.equals(bundle.getString("STATE_PREARREARS"))) { - index = 7; - } - - return index; - } - - public String[] getCardStatusList() { - return new String[]{bundle.getString("STATE_UNKNOWN"), - bundle.getString("STATE_NORMAL"), - bundle.getString("STATE_LOSE"), - bundle.getString("STATE_LOGOFF"), - bundle.getString("STATE_FREEZE"), - bundle.getString("STATE_ARREARS"), - bundle.getString("STATE_OVERDUE"), - bundle.getString("STATE_PREARREARS")}; - } - - /* - * 用于列表显示 - */ - public String getCardType(int type) { - String cardTypeString = ""; - - switch(type) { - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN: // 未知 - cardTypeString = bundle.getString("CARD_UNKNOW"); - break; - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GENERAL: // 一般卡 - cardTypeString = bundle.getString("CARD_GENERAL"); - break; - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_VIP: // VIP卡 - cardTypeString = bundle.getString("CARD_VIP"); - break; - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GUEST: // 来宾卡 - cardTypeString = bundle.getString("CARD_GUEST"); - break; - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_PATROL: // 巡逻卡 - cardTypeString = bundle.getString("CARD_PATROL"); - break; - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_BLACKLIST: // 黑名单卡 - cardTypeString = bundle.getString("CARD_BACKLIST"); - break; - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_CORCE: // 胁迫卡 - cardTypeString = bundle.getString("CARD_COERCE"); - break; - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_POLLING: // 巡检卡 - cardTypeString = bundle.getString("CARD_POLLING"); - break; - case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_MOTHERCARD: // 母卡 - cardTypeString = bundle.getString("CARD_MOTHERCARD"); - break; - default: - cardTypeString = bundle.getString("CARD_UNKNOW"); - break; - } - - return cardTypeString; - } - - /* - * 根据控件索引,获取对应的卡类型Int值 - */ - public int getCardTypeInt(int index) { - int type = 0; - - switch(index) { - case 0: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN; - break; - case 1: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GENERAL; - break; - case 2: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_VIP; - break; - case 3: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GUEST; - break; - case 4: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_PATROL; - break; - case 5: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_BLACKLIST; - break; - case 6: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_CORCE; - break; - case 7: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_POLLING; - break; - case 8: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_MOTHERCARD; - break; - default: - type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN; - break; - } - - return type; - } - - /* - * 根据字符串,获取控件的索引 - */ - public int getCardTypeChomBoxIndex(String type) { - int index = 0; - - if(type.equals(bundle.getString("CARD_UNKNOW"))) { - index = 0; - } else if(type.equals(bundle.getString("CARD_GENERAL"))){ - index = 1; - } else if(type.equals(bundle.getString("CARD_VIP"))) { - index = 2; - } else if(type.equals(bundle.getString("CARD_GUEST"))) { - index = 3; - } else if(type.equals(bundle.getString("CARD_PATROL"))) { - index = 4; - } else if(type.equals(bundle.getString("CARD_BACKLIST"))) { - index = 5; - } else if(type.equals(bundle.getString("CARD_COERCE"))) { - index = 6; - } else if(type.equals(bundle.getString("CARD_POLLING"))) { - index = 7; - } else if(type.equals(bundle.getString("CARD_MOTHERCARD"))) { - index = 8; - } - - return index; - } - - public String[] getCardTypeList() { - return new String[]{bundle.getString("CARD_UNKNOW"), - bundle.getString("CARD_GENERAL"), - bundle.getString("CARD_VIP"), - bundle.getString("CARD_GUEST"), - bundle.getString("CARD_PATROL"), - bundle.getString("CARD_BACKLIST"), - bundle.getString("CARD_COERCE"), - bundle.getString("CARD_POLLING"), - bundle.getString("CARD_MOTHERCARD")}; - } - - public String getOpenMethods(int emOpenMethod) { - String openMethods = ""; - switch(emOpenMethod) { - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_UNKNOWN: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_UNKNOWN"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_REMOTE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BUTTON: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_BUTTON"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PERSONS: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PERSONS"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_KEY: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_KEY"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_QRCODE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_QRCODE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE"); - break; - case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE"); - break; - default: - openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_UNKNOWN"); - break; - } - - return openMethods; - } - - public String getShowInfo(String tag) { - try { - return bundle.getString(tag); - }catch(Exception e) { - return tag; - } - } - - public String getThermalCamera() { - return getShowInfo("THERMAL_CAMERA"); - } - - public String[] getMeterTypeList() { - String[] meterTypes = {getShowInfo("SPOT"), getShowInfo("LINE"), getShowInfo("AREA")}; - - return meterTypes; - } - - public String[] getTemperUnitList() { - return new String[]{getShowInfo("CENTIGRADE"), getShowInfo("FAHRENHEIT")}; - } - - public String[] getPeriodList() { - return new String[] {getShowInfo("FIVE_MINUTES"), getShowInfo("TEN_MINUTES"), - getShowInfo("FIFTEEN_MINUTES"), getShowInfo("THIRTY_MINUTES")}; - } - - public String[] getTemperStatusList() { - return new String[]{getShowInfo("IDLE"), getShowInfo("ACQUIRING")}; - } - - public String getSearchingWait() { - return bundle.getString("SEARCHING_WAITING"); - } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/SavePath.java b/cloud/dahua/src/main/java/com/example/dahua/common/SavePath.java index 31ea73a..a67bf3e 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/SavePath.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/SavePath.java @@ -6,72 +6,73 @@ import java.io.File; public class SavePath { - private SavePath() {} - - private static class SavePathHolder { - private static SavePath instance = new SavePath(); - } - - public static SavePath getSavePath() { - return SavePathHolder.instance; - } - - String s_captureSavePath = "./Capture/" + ToolKits.getDay() + "/"; // 抓拍图片保存路径 - String s_imageSavePath = "./Image/" + ToolKits.getDay() + "/"; // 图片保存路径 - String s_recordFileSavePath = "./RecordFile/" + ToolKits.getDay() + "/"; // 录像保存路径 - - /* - * 设置抓图保存路径 - */ - public String getSaveCapturePath() { - File path1 = new File("./Capture/"); + private SavePath() { + } + + private static class SavePathHolder { + private static SavePath instance = new SavePath(); + } + + public static SavePath getSavePath() { + return SavePathHolder.instance; + } + + String s_captureSavePath = "./Capture/" + ToolKits.getDay() + "/"; // 抓拍图片保存路径 + String s_imageSavePath = "./Image/" + ToolKits.getDay() + "/"; // 图片保存路径 + String s_recordFileSavePath = "./RecordFile/" + ToolKits.getDay() + "/"; // 录像保存路径 + + /* + * 设置抓图保存路径 + */ + public String getSaveCapturePath() { + File path1 = new File("./Capture/"); if (!path1.exists()) { - path1.mkdir(); + path1.mkdir(); } - - File path2 = new File(s_captureSavePath); - if (!path2.exists()) { - path2.mkdir(); - } - - String strFileName = path2.getAbsolutePath() + "/" + ToolKits.getDate() + ".jpg"; - - return strFileName; - } - - /* - * 设置智能交通图片保存路径 - */ - public String getSaveTrafficImagePath() { + + File path2 = new File(s_captureSavePath); + if (!path2.exists()) { + path2.mkdir(); + } + + String strFileName = path2.getAbsolutePath() + "/" + ToolKits.getDate() + ".jpg"; + + return strFileName; + } + + /* + * 设置智能交通图片保存路径 + */ + public String getSaveTrafficImagePath() { File path1 = new File("./Image/"); if (!path1.exists()) { path1.mkdir(); } - + File path = new File(s_imageSavePath); if (!path.exists()) { path.mkdir(); } - + return s_imageSavePath; - } - - - /* - * 设置录像保存路径 - */ - public String getSaveRecordFilePath() { + } + + + /* + * 设置录像保存路径 + */ + public String getSaveRecordFilePath() { File path1 = new File("./RecordFile/"); if (!path1.exists()) { path1.mkdir(); } - - File path2 = new File(s_recordFileSavePath); - if (!path2.exists()) { - path2.mkdir(); - } - String SavedFileName = s_recordFileSavePath + ToolKits.getDate() + ".dav"; // 默认保存路径 - return SavedFileName; - } - + + File path2 = new File(s_recordFileSavePath); + if (!path2.exists()) { + path2.mkdir(); + } + String SavedFileName = s_recordFileSavePath + ToolKits.getDate() + ".dav"; // 默认保存路径 + return SavedFileName; + } + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/SwitchLanguage.java b/cloud/dahua/src/main/java/com/example/dahua/common/SwitchLanguage.java index 6c775ba..c51ce53 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/SwitchLanguage.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/SwitchLanguage.java @@ -21,84 +21,84 @@ import javax.swing.border.EmptyBorder; /** * 选择语言界面Demo */ -public class SwitchLanguage extends JFrame{ - private static final long serialVersionUID = 1L; - - public SwitchLanguage() { - System.out.println("请选择语言/Please Select Language"); - setTitle("请选择语言/Please Select Language"); - setLayout(new BorderLayout()); - pack(); - setSize(350, 200); - setResizable(false); - setLocationRelativeTo(null); - - try { +public class SwitchLanguage extends JFrame { + private static final long serialVersionUID = 1L; + + public SwitchLanguage() { + System.out.println("请选择语言/Please Select Language"); + setTitle("请选择语言/Please Select Language"); + setLayout(new BorderLayout()); + pack(); + setSize(350, 200); + setResizable(false); + setLocationRelativeTo(null); + + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { - e.printStackTrace(); - } - - add(new SwitchLanguagePanel(this), BorderLayout.CENTER); - - this.addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - dispose(); - System.exit(0); - } - }); - } - - /* - * 切换语言面板 - */ - public class SwitchLanguagePanel extends JPanel { - private static final long serialVersionUID = 1L; - - public SwitchLanguagePanel(final Frame frame) { - setLayout(new FlowLayout()); - setBorder(new EmptyBorder(50, 0, 0, 0)); - - String[] CnEn = {"简体中文", "English"}; - jComboBox = new JComboBox(CnEn); - - nextButton = new JButton("下一步"); - - add(jComboBox); - add(nextButton); - - jComboBox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent arg0) { - Res.LanguageType type = jComboBox.getSelectedIndex() == 0 ? Res.LanguageType.Chinese : Res.LanguageType.English; - Res.string().switchLanguage(type); - - if(jComboBox.getSelectedIndex() == 0) { - nextButton.setText("下一步"); - } else { - nextButton.setText("next"); - } - } - }); - - nextButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - frame.dispose(); - FunctionList functiondemo = new FunctionList(); - functiondemo.setVisible(true); - } - }); - } - }); - } - - private JComboBox jComboBox; - private JButton nextButton; - } + e.printStackTrace(); + } + + add(new SwitchLanguagePanel(this), BorderLayout.CENTER); + + this.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + dispose(); + System.exit(0); + } + }); + } + + /* + * 切换语言面板 + */ + public class SwitchLanguagePanel extends JPanel { + private static final long serialVersionUID = 1L; + + public SwitchLanguagePanel(final Frame frame) { + setLayout(new FlowLayout()); + setBorder(new EmptyBorder(50, 0, 0, 0)); + + String[] CnEn = {"简体中文", "English"}; + jComboBox = new JComboBox(CnEn); + + nextButton = new JButton("下一步"); + + add(jComboBox); + add(nextButton); + + jComboBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent arg0) { + Res.LanguageType type = jComboBox.getSelectedIndex() == 0 ? Res.LanguageType.Chinese : Res.LanguageType.English; + Res.string().switchLanguage(type); + + if (jComboBox.getSelectedIndex() == 0) { + nextButton.setText("下一步"); + } else { + nextButton.setText("next"); + } + } + }); + + nextButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + frame.dispose(); + FunctionList functiondemo = new FunctionList(); + functiondemo.setVisible(true); + } + }); + } + }); + } + + private JComboBox jComboBox; + private JButton nextButton; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/common/WindowCloseListener.java b/cloud/dahua/src/main/java/com/example/dahua/common/WindowCloseListener.java index 312ca07..8aaba7a 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/common/WindowCloseListener.java +++ b/cloud/dahua/src/main/java/com/example/dahua/common/WindowCloseListener.java @@ -1,5 +1,5 @@ package com.example.dahua.common; public interface WindowCloseListener { - void windowClosing(); + void windowClosing(); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/control/DeviceControl.java b/cloud/dahua/src/main/java/com/example/dahua/control/DeviceControl.java index c8c7c22..5eb940f 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/control/DeviceControl.java +++ b/cloud/dahua/src/main/java/com/example/dahua/control/DeviceControl.java @@ -20,15 +20,15 @@ public class DeviceControl { @RequestMapping(value = "restartDevice", method = RequestMethod.GET) public boolean restart(@RequestParam("deviceId") String deviceId) { - return deviceService.restart(deviceId); + return deviceService.restart(deviceId); } @RequestMapping(value = "setDVRIPConfig", method = RequestMethod.GET) @ApiOperation("改变设备的IP信息") - public boolean setDVRIPConfig(@RequestParam("deviceId") String deviceId,@RequestParam("ip") String ip, + public boolean setDVRIPConfig(@RequestParam("deviceId") String deviceId, @RequestParam("ip") String ip, @RequestParam("port") int port) { - return deviceService.setDVRIPConfig(deviceId,ip,port); + return deviceService.setDVRIPConfig(deviceId, ip, port); } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java b/cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java index da8d294..42ac10e 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java +++ b/cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java @@ -36,7 +36,7 @@ import java.util.*; */ @RestController("/user/") @Api(tags = "下发用户信息") -@RequestMapping(value = "/user/*",produces = MediaType.APPLICATION_JSON_UTF8_VALUE) +@RequestMapping(value = "/user/*", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public class UserControl { @Autowired @@ -53,7 +53,7 @@ public class UserControl { @ApiOperation(value = "上传用户信息") public boolean uploadImgAndUserInfo(@RequestParam("file") String file, @RequestParam("schoolId") String schoolId, @RequestParam("studentCode") String studentCode, @RequestParam("clint_type") String clint_type) { // return userService.uploadImgAndUserInfo(file, schoolId, studentCode, clint_type); - return HttpUtils.uploadImgs(new File(file),schoolId,studentCode,clint_type,file.contains("Teacher")?1:2); + return HttpUtils.uploadImgs(new File(file), schoolId, studentCode, clint_type, file.contains("Teacher") ? 1 : 2); } @@ -371,7 +371,7 @@ public class UserControl { @RequestMapping(value = "FaceSearch", method = RequestMethod.POST) @ApiOperation("人脸搜索") - public String FaceSearch(@RequestPart("file")MultipartFile file) { + public String FaceSearch(@RequestPart("file") MultipartFile file) { // 请求url String url = "https://aip.baidubce.com/rest/2.0/face/v3/search"; @@ -453,7 +453,7 @@ public class UserControl { File fileImg = new File(fileOut, System.currentTimeMillis() + ".png"); - if (!fileImg.exists())fileImg.createNewFile(); + if (!fileImg.exists()) fileImg.createNewFile(); FileOutputStream fileOutputStream = new FileOutputStream(fileImg); @@ -474,8 +474,7 @@ public class UserControl { } - - private String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+AuthService.getAuth(); + private String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + AuthService.getAuth(); // + AuthService.getAuth(); private String getAnswer(String imgUrl, int type) { diff --git a/cloud/dahua/src/main/java/com/example/dahua/dao/TestDao.java b/cloud/dahua/src/main/java/com/example/dahua/dao/TestDao.java index 7cadc1e..af3fd8b 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/dao/TestDao.java +++ b/cloud/dahua/src/main/java/com/example/dahua/dao/TestDao.java @@ -12,18 +12,18 @@ public interface TestDao { @Insert("insert into TK_QuestionStem values(#{QuestionStem},#{State},#{Intime})") - int addQuestionStem(@Param("QuestionStem")String QuestionStem,@Param("State")String State,@Param("Intime")String Intime); + int addQuestionStem(@Param("QuestionStem") String QuestionStem, @Param("State") String State, @Param("Intime") String Intime); @Insert("insert into TK_Question(Question,Qtype,Answer,CorrectAnswer,Analysis,State,Intime,ExamineFlag,ExamineUserId,CreateUserId,SubjectId,SchoolId,DifficulteId,KnowledgeId,ChapterId,GradeId,SourceId,OrderId,SId," + "StemId,AutomaticCorrection,PkgId,PkgType) " + "values(#{Question},#{Qtype},#{Answer},#{CorrectAnswer},#{Analysis},#{State},#{Intime},#{ExamineFlag},#{ExamineUserId}" + ",#{CreateUserId},#{SubjectId},#{SchoolId},#{DifficulteId},#{KnowledgeId},#{ChapterId},#{GradeId},#{SourceId},#{OrderId},#{SId}" + ",#{StemId},#{AutomaticCorrection},#{PkgId},#{PkgType})") - int addQuestion(@Param("Question")String Question,@Param("Qtype")String Qtype,@Param("Answer")String Answer,@Param("CorrectAnswer")String CorrectAnswer - ,@Param("Analysis")String Analysis,@Param("State")String State,@Param("Intime")String Intime,@Param("ExamineFlag")String ExamineFlag,@Param("ExamineUserId")String ExamineUserId - ,@Param("CreateUserId")String CreateUserId,@Param("SubjectId")String SubjectId,@Param("SchoolId")String SchoolId,@Param("DifficulteId")String DifficulteId,@Param("KnowledgeId")String KnowledgeId - ,@Param("ChapterId")String ChapterId,@Param("GradeId")String GradeId,@Param("SourceId")String SourceId,@Param("OrderId")String OrderId,@Param("SId")String SId - ,@Param("StemId")String StemId,@Param("AutomaticCorrection")String AutomaticCorrection,@Param("PkgId")String PkgId,@Param("PkgType")String PkgType); + int addQuestion(@Param("Question") String Question, @Param("Qtype") String Qtype, @Param("Answer") String Answer, @Param("CorrectAnswer") String CorrectAnswer + , @Param("Analysis") String Analysis, @Param("State") String State, @Param("Intime") String Intime, @Param("ExamineFlag") String ExamineFlag, @Param("ExamineUserId") String ExamineUserId + , @Param("CreateUserId") String CreateUserId, @Param("SubjectId") String SubjectId, @Param("SchoolId") String SchoolId, @Param("DifficulteId") String DifficulteId, @Param("KnowledgeId") String KnowledgeId + , @Param("ChapterId") String ChapterId, @Param("GradeId") String GradeId, @Param("SourceId") String SourceId, @Param("OrderId") String OrderId, @Param("SId") String SId + , @Param("StemId") String StemId, @Param("AutomaticCorrection") String AutomaticCorrection, @Param("PkgId") String PkgId, @Param("PkgType") String PkgType); @Select("select Top(1) ID from TK_QuestionStem order by Intime desc ") int getStemId(); @@ -32,11 +32,10 @@ public interface TestDao { List getQuestions(); @Select("select * from TK_Question where Question like #{Question}") - List getQuestionsWithQuestion(@Param("Question")String Question); + List getQuestionsWithQuestion(@Param("Question") String Question); @Update("update TK_Question set Question = #{Question} where ID = #{id}") - void updateQuestion(@Param("Question") String Question,@Param("id")String id); - + void updateQuestion(@Param("Question") String Question, @Param("id") String id); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java index 6d2ec49..965bb80 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java +++ b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java @@ -11,50 +11,51 @@ import java.util.List; public interface UserDao { @Select(" select student_num from SZ_V_School_Student where school_id = #{school_id} and studentcode = #{studentcode}") - public String getStudentNum(@Param("school_id")String school_id,@Param("studentcode")String studentcode); + public String getStudentNum(@Param("school_id") String school_id, @Param("studentcode") String studentcode); @Select("select * from SZ_Attendance where school_id = #{school_id} and clint_type = #{clint_type}") - List getAttendanceBeans(@Param("school_id")String school_id,@Param("clint_type")String clint_type); + List getAttendanceBeans(@Param("school_id") String school_id, @Param("clint_type") String clint_type); @Select("select * from SZ_Attendance where school_id = #{school_id} and clint_type = #{clint_type} and clint_id = #{clint_id}") - List getAttendanceBeanWithId(@Param("school_id")String school_id,@Param("clint_type")String clint_type,@Param("clint_id")String clint_id); + List getAttendanceBeanWithId(@Param("school_id") String school_id, @Param("clint_type") String clint_type, @Param("clint_id") String clint_id); @Select(" select Top(1)* from SZ_V_School_Student where school_id = #{school_id} and studentcode = #{studentcode}") - UserInfoBean getUserInfo(@Param("school_id")String school_id,@Param("studentcode")String studentcode); + UserInfoBean getUserInfo(@Param("school_id") String school_id, @Param("studentcode") String studentcode); @Select(" select Top(1)* from SZ_V_School_Teacher where school_id = #{school_id} and num = #{num}") - TeacherBean getTeacher(@Param("school_id")String school_id, @Param("num")String num); + TeacherBean getTeacher(@Param("school_id") String school_id, @Param("num") String num); @Select(" select Top(1)* from SZ_V_School_Teacher where teacher_id = #{teacher_id}") - TeacherBean getTeacherWithId( @Param("teacher_id")String teacher_id); + TeacherBean getTeacherWithId(@Param("teacher_id") String teacher_id); @Select(" select * from SZ_V_School_Teacher where school_id = 562 and name = #{name}") - List getTeachersWithName( @Param("name")String name); + List getTeachersWithName(@Param("name") String name); /** * 记录用户和设备集编号对应关系 + * * @param user_id * @return */ @Select("select recordNo from SZ_Student_RecoderNo where user_id = #{user_id} and deviceId = #{deviceId}") - String getRecordNo(@Param("user_id")String user_id,@Param("deviceId")String deviceId); + String getRecordNo(@Param("user_id") String user_id, @Param("deviceId") String deviceId); @Insert("insert into SZ_Student_RecoderNo values(#{user_id},#{recordNo},#{student_name},#{deviceId})") - int saveRecordNo(@Param("user_id")String user_id, @Param("recordNo") int recordNo, @Param("student_name")String student_name,@Param("deviceId")String deviceId); + int saveRecordNo(@Param("user_id") String user_id, @Param("recordNo") int recordNo, @Param("student_name") String student_name, @Param("deviceId") String deviceId); @Select("select CardNum from HS_StudentCards where StudentId = #{StudentId} and CardType = #{CardType}") - String getCardNum (@Param("StudentId")String StudentId , @Param("CardType") String CardType); + String getCardNum(@Param("StudentId") String StudentId, @Param("CardType") String CardType); @Delete("delete from SZ_Student_RecoderNo where user_id = #{user_id} and recordNo = #{recordNo}") void deleteRecordNo(@Param("user_id") String user_id, @Param("recordNo") int recordNo); @Update("update SZ_Student_RecoderNo set user_id = #{user_id} where deviceId = #{deviceId} and recordNo = #{recordNo}") - void updateRecordNo(@Param("user_id") String user_id, @Param("recordNo") int recordNo,@Param("deviceId")String deviceId); + void updateRecordNo(@Param("user_id") String user_id, @Param("recordNo") int recordNo, @Param("deviceId") String deviceId); @Select("select clint_id from SZ_Attendance where clint_type = #{clint_type} and school_id = #{school_id}") - List getDeviceIds(@Param("clint_type")String clint_type ,@Param("school_id") int school_id); + List getDeviceIds(@Param("clint_type") String clint_type, @Param("school_id") int school_id); @Select("select Top(1) * from HS_StudentUpdateCard where CustomerId = #{CustomerId} order by AddTime desc") StudentBean getStudentUpdate(@Param("CustomerId") String customerid); @@ -69,10 +70,10 @@ public interface UserDao { UserInfoBean getStudentWithid(@Param("student_id") String student_id); @Select(" select * from SZ_V_School_Student where student_num = #{student_num} and name = #{name}") - UserInfoBean getStudent(@Param("student_num") String student_num,@Param("name") String name); + UserInfoBean getStudent(@Param("student_num") String student_num, @Param("name") String name); - @Select(" select * from SZ_V_School_Student where school_id = 1037 and name = #{name}") - List getStudentWithName(@Param("name") String name); + @Select(" select * from SZ_V_School_Student where school_id = #{school_id} and sex = #{sex} and student_type = #{student_type}") + List getStudentWithSchoolId(@Param("school_id") String school_id, @Param("sex") String sex, @Param("student_type") String student_type); @Select("select * from SZ_V_School_Student where school_id = 479 and student_type = 2") List getUsers(); @@ -81,7 +82,7 @@ public interface UserDao { "where SchoolId = 479 and Pid in(select id from SS_Room where SchoolId = 479 and pid =10287))") List getUserInfos(); - @Select("select clint_id from SZ_Attendance where school_id = #{school_id} ") + @Select("select clint_id from SZ_Attendance where school_id = #{school_id} and clint_type = 4 ") List getAllDecWithSch(@Param("school_id") int school_id); @Select("select * from SZ_Attendance where clint_type = #{clint_type} and school_id = #{school_id}") @@ -98,9 +99,23 @@ public interface UserDao { List getStudentIds(); @Select("select * from SZ_V_Card where num=#{num}") - CardBean getCards(@Param("num")String num); + CardBean getCards(@Param("num") String num); - @Select("select clint_id from SZ_Attendance where school_id = 4 and clint_type = 8") - List getClintIds(); + @Select("select clint_id from SZ_Attendance where school_id = #{schoolId} and (clint_type = 8 or clint_type = 9 or clint_type = 10)") + List getClintIds(@Param("schoolId") String schoolId); + @Select("select Top(1) school_id from SZ_V_School_Student where student_num = #{cardNum}") + String getSchoolIdWidthCardNum(@Param("cardNum") String cardNum); + + @Select("select Top(1) PlaceId from XA_PlaceAttendance where KaoQinAttendance = #{qiandaoDevId}") + String getPlaceIdWithKaoqinDevid(@Param("qiandaoDevId") String qiandaoDevId); + + @Select("select KanBanAttendance from XA_PlaceAttendance where PlaceId = #{PlaceId} and (len(KanBanAttendance)>0 and KanBanAttendance is not null )") + List getKanBanIdWithPlaceId(@Param("PlaceId") String placeId); + + @Select("select user_id,studentcode from SZ_V_School_Student where school_id = 27") + List getStudentUserIdsWith(); + + @Select(" select * from SZ_V_School_Teacher where school_id = #{school_id}") + List getTeachers(@Param("school_id") String school_id); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/dbconfig/CampusDataSourceConfig.java b/cloud/dahua/src/main/java/com/example/dahua/dbconfig/CampusDataSourceConfig.java index c9d190c..3dbae16 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/dbconfig/CampusDataSourceConfig.java +++ b/cloud/dahua/src/main/java/com/example/dahua/dbconfig/CampusDataSourceConfig.java @@ -15,17 +15,17 @@ import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @Configuration -@MapperScan(basePackages = "com.example.dahua.dao",sqlSessionFactoryRef = "campusSqlSessionFactory") +@MapperScan(basePackages = "com.example.dahua.dao", sqlSessionFactoryRef = "campusSqlSessionFactory") public class CampusDataSourceConfig { @Primary @Bean(name = "campusDataSource") @ConfigurationProperties("spring.datasource.campus") - public DataSource masterDataSource(){ + public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "campusSqlSessionFactory") - public SqlSessionFactory sqlSessionFactory(@Qualifier("campusDataSource") DataSource dataSource) throws Exception{ + public SqlSessionFactory sqlSessionFactory(@Qualifier("campusDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); @@ -36,7 +36,7 @@ public class CampusDataSourceConfig { } @Bean - public JdbcTemplate campusJdbcTemplate(@Qualifier("campusDataSource") DataSource dataSource){ + public JdbcTemplate campusJdbcTemplate(@Qualifier("campusDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/dbconfig/XiaoanDataSourceConfig.java b/cloud/dahua/src/main/java/com/example/dahua/dbconfig/XiaoanDataSourceConfig.java index 2d6ee07..2414baf 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/dbconfig/XiaoanDataSourceConfig.java +++ b/cloud/dahua/src/main/java/com/example/dahua/dbconfig/XiaoanDataSourceConfig.java @@ -15,18 +15,18 @@ import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @Configuration -@MapperScan(basePackages = "com.example.dahua.xiananDao",sqlSessionFactoryRef = "xiaoanSqlSessionFactory") +@MapperScan(basePackages = "com.example.dahua.xiananDao", sqlSessionFactoryRef = "xiaoanSqlSessionFactory") public class XiaoanDataSourceConfig { @Primary @Bean(name = "xiaoanDataSource") @ConfigurationProperties("spring.datasource.xiaoan") - public DataSource masterDataSource(){ + public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "xiaoanSqlSessionFactory") - public SqlSessionFactory sqlSessionFactory(@Qualifier("xiaoanDataSource") DataSource dataSource) throws Exception{ + public SqlSessionFactory sqlSessionFactory(@Qualifier("xiaoanDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); diff --git a/cloud/dahua/src/main/java/com/example/dahua/lib/FilePath.java b/cloud/dahua/src/main/java/com/example/dahua/lib/FilePath.java index babdba5..c60f768 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/lib/FilePath.java +++ b/cloud/dahua/src/main/java/com/example/dahua/lib/FilePath.java @@ -7,12 +7,12 @@ public class FilePath { public static String picPath = "./picPath/"; public static String picPathComp = "./picPath/comp/"; - public void createFile(){ + public void createFile() { File picPath = new File(this.picPath); - if (!picPath.exists())picPath.mkdirs(); + if (!picPath.exists()) picPath.mkdirs(); File picPathComp = new File(this.picPathComp); - if (!picPathComp.exists())picPathComp.mkdirs(); + if (!picPathComp.exists()) picPathComp.mkdirs(); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/lib/ImageAlgLib.java b/cloud/dahua/src/main/java/com/example/dahua/lib/ImageAlgLib.java index 8ba29a0..2edfd2a 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/lib/ImageAlgLib.java +++ b/cloud/dahua/src/main/java/com/example/dahua/lib/ImageAlgLib.java @@ -7,21 +7,21 @@ import com.sun.jna.Native; * SDK JNA接口封装 */ public interface ImageAlgLib extends Library { - ImageAlgLib IMAGEALG_INSTANCE = (ImageAlgLib)Native.loadLibrary(Utils.getLoadLibrary("ImageAlg"), ImageAlgLib.class); - - - /******************************************************************************* - * 函数名 : drcTable - * 描 述 : raw数据转换成Y数据 - * 输 入 : - pRaw: 14bit裸数据 - * 输 入 : - height: 输入裸数据的高 - * 输 入 : - width: 输入裸数据的宽 - * 输 入 : - sel: 默认填0 - * 输 入 : - lut: 当sel为1时,该参数为本地drc表,默认填0 - * 输 出 : pYData:转换后的Y数据 - * 返回值 : 0 : 成功 - * -1: 失败 - *******************************************************************************/ - int drcTable(short[] pRaw, short width, short height, int sel, byte[] pYData, short[] lut); + ImageAlgLib IMAGEALG_INSTANCE = (ImageAlgLib) Native.loadLibrary(Utils.getLoadLibrary("ImageAlg"), ImageAlgLib.class); + + + /******************************************************************************* + * 函数名 : drcTable + * 描 述 : raw数据转换成Y数据 + * 输 入 : - pRaw: 14bit裸数据 + * 输 入 : - height: 输入裸数据的高 + * 输 入 : - width: 输入裸数据的宽 + * 输 入 : - sel: 默认填0 + * 输 入 : - lut: 当sel为1时,该参数为本地drc表,默认填0 + * 输 出 : pYData:转换后的Y数据 + * 返回值 : 0 : 成功 + * -1: 失败 + *******************************************************************************/ + int drcTable(short[] pRaw, short width, short height, int sel, byte[] pYData, short[] lut); } \ No newline at end of file diff --git a/cloud/dahua/src/main/java/com/example/dahua/lib/JdbcTemplateExt.java b/cloud/dahua/src/main/java/com/example/dahua/lib/JdbcTemplateExt.java index ec9185f..dff6ca7 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/lib/JdbcTemplateExt.java +++ b/cloud/dahua/src/main/java/com/example/dahua/lib/JdbcTemplateExt.java @@ -15,7 +15,7 @@ public class JdbcTemplateExt extends JdbcTemplate { return requiredSingleResult(results); } - public T requiredSingleResult(Collection results) throws IncorrectResultSizeDataAccessException { + public T requiredSingleResult(Collection results) throws IncorrectResultSizeDataAccessException { int size = (results != null ? results.size() : 0); if (size == 0) { return null; diff --git a/cloud/dahua/src/main/java/com/example/dahua/lib/NativeString.java b/cloud/dahua/src/main/java/com/example/dahua/lib/NativeString.java index f9839db..4b45227 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/lib/NativeString.java +++ b/cloud/dahua/src/main/java/com/example/dahua/lib/NativeString.java @@ -8,11 +8,12 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; -/** Provides a temporary allocation of an immutable C string - * (const char* or const wchar_t*) for use when - * converting a Java String into a native memory function argument. +/** + * Provides a temporary allocation of an immutable C string + * (const char* or const wchar_t*) for use when + * converting a Java String into a native memory function argument. * - * @author Todd Fast, todd.fast@sun.com + * @author Todd Fast, todd.fast@sun.com * @author twall@users.sf.net */ public class NativeString implements CharSequence, Comparable { @@ -20,24 +21,26 @@ public class NativeString implements CharSequence, Comparable { private Pointer pointer; private boolean wide; - /** Create a native string (NUL-terminated array of char).

+ /** + * Create a native string (NUL-terminated array of char).

* If the system property jna.encoding is set, its value will * be used to encode the native string. If not set or if the encoding - * is unavailable, the default platform encoding will be used. + * is unavailable, the default platform encoding will be used. */ public NativeString(String string) { this(string, false); } - /** Create a native string as a NUL-terminated array of wchar_t + /** + * Create a native string as a NUL-terminated array of wchar_t * (if wide is true) or char.

* If the system property jna.encoding is set, its value will - * be used to encode the native charstring. - * If not set or if the encoding is unavailable, the default platform - * encoding will be used. - * + * be used to encode the native charstring. + * If not set or if the encoding is unavailable, the default platform + * encoding will be used. + * * @param string value to write to native memory - * @param wide whether to store the String as wchar_t + * @param wide whether to store the String as wchar_t */ public NativeString(String string, boolean wide) { if (string == null) { @@ -48,30 +51,29 @@ public class NativeString implements CharSequence, Comparable { // NUL (which is generated in Pointer.setString()). this.wide = wide; if (wide) { - int len = (string.length() + 1 ) * Native.WCHAR_SIZE; + int len = (string.length() + 1) * Native.WCHAR_SIZE; pointer = new Memory(len); pointer.setString(0, string, true); - } - else { + } else { byte[] data = getBytes(string); pointer = new Memory(data.length + 1); pointer.write(0, data, 0, data.length); - pointer.setByte(data.length, (byte)0); + pointer.setByte(data.length, (byte) 0); } } - + static byte[] getBytes(String s) { try { return getBytes(s, System.getProperty("jna.encoding")); - } - catch (UnsupportedEncodingException e) { + } catch (UnsupportedEncodingException e) { return s.getBytes(); } } - /** Return a byte array corresponding to the given String, using the given - encoding. - */ + /** + * Return a byte array corresponding to the given String, using the given + * encoding. + */ static byte[] getBytes(String s, String encoding) throws UnsupportedEncodingException { if (encoding != null) { return s.getBytes(encoding); diff --git a/cloud/dahua/src/main/java/com/example/dahua/lib/NetSDKLib.java b/cloud/dahua/src/main/java/com/example/dahua/lib/NetSDKLib.java index fc24aee..aa7a69b 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/lib/NetSDKLib.java +++ b/cloud/dahua/src/main/java/com/example/dahua/lib/NetSDKLib.java @@ -19,1299 +19,1307 @@ import com.sun.jna.win32.StdCallLibrary.StdCallCallback; */ public interface NetSDKLib extends Library { - NetSDKLib NETSDK_INSTANCE = (NetSDKLib)Native.loadLibrary(Utils.getLoadLibrary("dhnetsdk"), NetSDKLib.class); - NetSDKLib CONFIG_INSTANCE = (NetSDKLib)Native.loadLibrary(Utils.getLoadLibrary("dhconfigsdk"), NetSDKLib.class); + NetSDKLib NETSDK_INSTANCE = (NetSDKLib) Native.loadLibrary(Utils.getLoadLibrary("dhnetsdk"), NetSDKLib.class); + NetSDKLib CONFIG_INSTANCE = (NetSDKLib) Native.loadLibrary(Utils.getLoadLibrary("dhconfigsdk"), NetSDKLib.class); //NetSDKLib NETSDK_INSTANCE = (NetSDKLib)Native.loadLibrary("C:\\Users\\taohandong\\Desktop\\win64\\dhnetsdk.dll", NetSDKLib.class); // NetSDKLib CONFIG_INSTANCE = (NetSDKLib)Native.loadLibrary("C:\\Users\\taohandong\\Desktop\\win64\\dhconfigsdk.dll", NetSDKLib.class); public static class LLong extends IntegerType { - private static final long serialVersionUID = 1L; - - /** Size of a native long, in bytes. */ - public static int size; - static { - size = Native.LONG_SIZE; - if (Utils.getOsPrefix().toLowerCase().equals("linux-amd64") - || Utils.getOsPrefix().toLowerCase().equals("win32-amd64")) { - size = 8; - } else if (Utils.getOsPrefix().toLowerCase().equals("linux-i386") - || Utils.getOsPrefix().toLowerCase().equals("win32-x86")) { - size = 4; - } - } - - /** Create a zero-valued LLong. */ - public LLong() { - this(0); - } - - /** Create a LLong with the given value. */ - public LLong(long value) { - super(size, value); - } - - - } - + private static final long serialVersionUID = 1L; + + /** + * Size of a native long, in bytes. + */ + public static int size; + + static { + size = Native.LONG_SIZE; + if (Utils.getOsPrefix().toLowerCase().equals("linux-amd64") + || Utils.getOsPrefix().toLowerCase().equals("win32-amd64")) { + size = 8; + } else if (Utils.getOsPrefix().toLowerCase().equals("linux-i386") + || Utils.getOsPrefix().toLowerCase().equals("win32-x86")) { + size = 4; + } + } + + /** + * Create a zero-valued LLong. + */ + public LLong() { + this(0); + } + + /** + * Create a LLong with the given value. + */ + public LLong(long value) { + super(size, value); + } + + + } + /************************************************************************ ** 常量定义 ***********************************************************************/ - public static final int NET_SERIALNO_LEN = 48; // 设备序列号字符长度 - public static final int NET_CFG_Max_VideoColor = 24; // 每个通道最大视频输入颜色配置数量 - public static final int NET_CFG_Custom_Title_Len = 1024; // 自定义标题名称长度(扩充到1024) - public static final int NET_CFG_Custom_TitleType_Len = 32; // 自定义标题类型长度 - public static final int NET_CFG_Max_Video_Widget_Cover = 16; // 编码区域覆盖最大数量 + public static final int NET_SERIALNO_LEN = 48; // 设备序列号字符长度 + public static final int NET_CFG_Max_VideoColor = 24; // 每个通道最大视频输入颜色配置数量 + public static final int NET_CFG_Custom_Title_Len = 1024; // 自定义标题名称长度(扩充到1024) + public static final int NET_CFG_Custom_TitleType_Len = 32; // 自定义标题类型长度 + public static final int NET_CFG_Max_Video_Widget_Cover = 16; // 编码区域覆盖最大数量 public static final int NET_CFG_Max_Video_Widget_Custom_Title = 8; // 编码物件自定义标题最大数量 - public static final int NET_CFG_Max_Video_Widget_Sensor_Info = 2; // 编码物件叠加传感器信息的最大数目 - public static final int NET_CFG_Max_Description_Num = 4; // 叠加区域描述信息的最大个数 + public static final int NET_CFG_Max_Video_Widget_Sensor_Info = 2; // 编码物件叠加传感器信息的最大数目 + public static final int NET_CFG_Max_Description_Num = 4; // 叠加区域描述信息的最大个数 // 错误类型代号,对应CLIENT_GetLastError接口的返回值, 十进制 - public static final int NET_NOERROR = 0; // 没有错误 - public static final int NET_ERROR = -1; // 未知错误 - public static final int NET_SYSTEM_ERROR = (0x80000000|1); // Windows系统出错 - public static final int NET_NETWORK_ERROR = (0x80000000|2); // 网络错误,可能是因为网络超时 - public static final int NET_DEV_VER_NOMATCH = (0x80000000|3); // 设备协议不匹配 - public static final int NET_INVALID_HANDLE = (0x80000000|4); // 句柄无效 - public static final int NET_OPEN_CHANNEL_ERROR = (0x80000000|5); // 打开通道失败 - public static final int NET_CLOSE_CHANNEL_ERROR = (0x80000000|6); // 关闭通道失败 - public static final int NET_ILLEGAL_PARAM = (0x80000000|7); // 用户参数不合法 - public static final int NET_SDK_INIT_ERROR = (0x80000000|8); // SDK初始化出错 - public static final int NET_SDK_UNINIT_ERROR = (0x80000000|9); // SDK清理出错 - public static final int NET_RENDER_OPEN_ERROR = (0x80000000|10); // 申请render资源出错 - public static final int NET_DEC_OPEN_ERROR = (0x80000000|11); // 打开解码库出错 - public static final int NET_DEC_CLOSE_ERROR = (0x80000000|12); // 关闭解码库出错 - public static final int NET_MULTIPLAY_NOCHANNEL = (0x80000000|13); // 多画面预览中检测到通道数为0 - public static final int NET_TALK_INIT_ERROR = (0x80000000|14); // 录音库初始化失败 - public static final int NET_TALK_NOT_INIT = (0x80000000|15); // 录音库未经初始化 - public static final int NET_TALK_SENDDATA_ERROR = (0x80000000|16); // 发送音频数据出错 - public static final int NET_REAL_ALREADY_SAVING = (0x80000000|17); // 实时数据已经处于保存状态 - public static final int NET_NOT_SAVING = (0x80000000|18); // 未保存实时数据 - public static final int NET_OPEN_FILE_ERROR = (0x80000000|19); // 打开文件出错 - public static final int NET_PTZ_SET_TIMER_ERROR = (0x80000000|20); // 启动云台控制定时器失败 - public static final int NET_RETURN_DATA_ERROR = (0x80000000|21); // 对返回数据的校验出错 - public static final int NET_INSUFFICIENT_BUFFER = (0x80000000|22); // 没有足够的缓存 - public static final int NET_NOT_SUPPORTED = (0x80000000|23); // 当前SDK未支持该功能 - public static final int NET_NO_RECORD_FOUND = (0x80000000|24); // 查询不到录像 - public static final int NET_NOT_AUTHORIZED = (0x80000000|25); // 无操作权限 - public static final int NET_NOT_NOW = (0x80000000|26); // 暂时无法执行 - public static final int NET_NO_TALK_CHANNEL = (0x80000000|27); // 未发现对讲通道 - public static final int NET_NO_AUDIO = (0x80000000|28); // 未发现音频 - public static final int NET_NO_INIT = (0x80000000|29); // 网络SDK未经初始化 - public static final int NET_DOWNLOAD_END = (0x80000000|30); // 下载已结束 - public static final int NET_EMPTY_LIST = (0x80000000|31); // 查询结果为空 - public static final int NET_ERROR_GETCFG_SYSATTR = (0x80000000|32); // 获取系统属性配置失败 - public static final int NET_ERROR_GETCFG_SERIAL = (0x80000000|33); // 获取序列号失败 - public static final int NET_ERROR_GETCFG_GENERAL = (0x80000000|34); // 获取常规属性失败 - public static final int NET_ERROR_GETCFG_DSPCAP = (0x80000000|35); // 获取DSP能力描述失败 - public static final int NET_ERROR_GETCFG_NETCFG = (0x80000000|36); // 获取网络配置失败 - public static final int NET_ERROR_GETCFG_CHANNAME = (0x80000000|37); // 获取通道名称失败 - public static final int NET_ERROR_GETCFG_VIDEO = (0x80000000|38); // 获取视频属性失败 - public static final int NET_ERROR_GETCFG_RECORD = (0x80000000|39); // 获取录象配置失败 - public static final int NET_ERROR_GETCFG_PRONAME = (0x80000000|40); // 获取解码器协议名称失败 - public static final int NET_ERROR_GETCFG_FUNCNAME = (0x80000000|41); // 获取232串口功能名称失败 - public static final int NET_ERROR_GETCFG_485DECODER = (0x80000000|42); // 获取解码器属性失败 - public static final int NET_ERROR_GETCFG_232COM = (0x80000000|43); // 获取232串口配置失败 - public static final int NET_ERROR_GETCFG_ALARMIN = (0x80000000|44); // 获取外部报警输入配置失败 - public static final int NET_ERROR_GETCFG_ALARMDET = (0x80000000|45); // 获取动态检测报警失败 - public static final int NET_ERROR_GETCFG_SYSTIME = (0x80000000|46); // 获取设备时间失败 - public static final int NET_ERROR_GETCFG_PREVIEW = (0x80000000|47); // 获取预览参数失败 - public static final int NET_ERROR_GETCFG_AUTOMT = (0x80000000|48); // 获取自动维护配置失败 - public static final int NET_ERROR_GETCFG_VIDEOMTRX = (0x80000000|49); // 获取视频矩阵配置失败 - public static final int NET_ERROR_GETCFG_COVER = (0x80000000|50); // 获取区域遮挡配置失败 - public static final int NET_ERROR_GETCFG_WATERMAKE = (0x80000000|51); // 获取图象水印配置失败 - public static final int NET_ERROR_GETCFG_MULTICAST = (0x80000000|52); // 获取配置失败位置:组播端口按通道配置 - public static final int NET_ERROR_SETCFG_GENERAL = (0x80000000|55); // 修改常规属性失败 - public static final int NET_ERROR_SETCFG_NETCFG = (0x80000000|56); // 修改网络配置失败 - public static final int NET_ERROR_SETCFG_CHANNAME = (0x80000000|57); // 修改通道名称失败 - public static final int NET_ERROR_SETCFG_VIDEO = (0x80000000|58); // 修改视频属性失败 - public static final int NET_ERROR_SETCFG_RECORD = (0x80000000|59); // 修改录象配置失败 - public static final int NET_ERROR_SETCFG_485DECODER = (0x80000000|60); // 修改解码器属性失败 - public static final int NET_ERROR_SETCFG_232COM = (0x80000000|61); // 修改232串口配置失败 - public static final int NET_ERROR_SETCFG_ALARMIN = (0x80000000|62); // 修改外部输入报警配置失败 - public static final int NET_ERROR_SETCFG_ALARMDET = (0x80000000|63); // 修改动态检测报警配置失败 - public static final int NET_ERROR_SETCFG_SYSTIME = (0x80000000|64); // 修改设备时间失败 - public static final int NET_ERROR_SETCFG_PREVIEW = (0x80000000|65); // 修改预览参数失败 - public static final int NET_ERROR_SETCFG_AUTOMT = (0x80000000|66); // 修改自动维护配置失败 - public static final int NET_ERROR_SETCFG_VIDEOMTRX = (0x80000000|67); // 修改视频矩阵配置失败 - public static final int NET_ERROR_SETCFG_COVER = (0x80000000|68); // 修改区域遮挡配置失败 - public static final int NET_ERROR_SETCFG_WATERMAKE = (0x80000000|69); // 修改图象水印配置失败 - public static final int NET_ERROR_SETCFG_WLAN = (0x80000000|70); // 修改无线网络信息失败 - public static final int NET_ERROR_SETCFG_WLANDEV = (0x80000000|71); // 选择无线网络设备失败 - public static final int NET_ERROR_SETCFG_REGISTER = (0x80000000|72); // 修改主动注册参数配置失败 - public static final int NET_ERROR_SETCFG_CAMERA = (0x80000000|73); // 修改摄像头属性配置失败 - public static final int NET_ERROR_SETCFG_INFRARED = (0x80000000|74); // 修改红外报警配置失败 - public static final int NET_ERROR_SETCFG_SOUNDALARM = (0x80000000|75); // 修改音频报警配置失败 - public static final int NET_ERROR_SETCFG_STORAGE = (0x80000000|76); // 修改存储位置配置失败 - public static final int NET_AUDIOENCODE_NOTINIT = (0x80000000|77); // 音频编码接口没有成功初始化 - public static final int NET_DATA_TOOLONGH = (0x80000000|78); // 数据过长 - public static final int NET_UNSUPPORTED = (0x80000000|79); // 设备不支持该操作 - public static final int NET_DEVICE_BUSY = (0x80000000|80); // 设备资源不足 - public static final int NET_SERVER_STARTED = (0x80000000|81); // 服务器已经启动 - public static final int NET_SERVER_STOPPED = (0x80000000|82); // 服务器尚未成功启动 - public static final int NET_LISTER_INCORRECT_SERIAL = (0x80000000|83); // 输入序列号有误 - public static final int NET_QUERY_DISKINFO_FAILED = (0x80000000|84); // 获取硬盘信息失败 - public static final int NET_ERROR_GETCFG_SESSION = (0x80000000|85); // 获取连接Session信息 - public static final int NET_USER_FLASEPWD_TRYTIME = (0x80000000|86); // 输入密码错误超过限制次数 - public static final int NET_LOGIN_ERROR_PASSWORD = (0x80000000|100); // 密码不正确 - public static final int NET_LOGIN_ERROR_USER = (0x80000000|101); // 帐户不存在 - public static final int NET_LOGIN_ERROR_TIMEOUT = (0x80000000|102); // 等待登录返回超时 - public static final int NET_LOGIN_ERROR_RELOGGIN = (0x80000000|103); // 帐号已登录 - public static final int NET_LOGIN_ERROR_LOCKED = (0x80000000|104); // 帐号已被锁定 - public static final int NET_LOGIN_ERROR_BLACKLIST = (0x80000000|105); // 帐号已被列为黑名单 - public static final int NET_LOGIN_ERROR_BUSY = (0x80000000|106); // 资源不足,系统忙 - public static final int NET_LOGIN_ERROR_CONNECT = (0x80000000|107); // 登录设备超时,请检查网络并重试 - public static final int NET_LOGIN_ERROR_NETWORK = (0x80000000|108); // 网络连接失败 - public static final int NET_LOGIN_ERROR_SUBCONNECT = (0x80000000|109); // 登录设备成功,但无法创建视频通道,请检查网络状况 - public static final int NET_LOGIN_ERROR_MAXCONNECT = (0x80000000|110); // 超过最大连接数 - public static final int NET_LOGIN_ERROR_PROTOCOL3_ONLY = (0x80000000|111); // 只支持3代协议 - public static final int NET_LOGIN_ERROR_UKEY_LOST = (0x80000000|112); // 未插入U盾或U盾信息错误 - public static final int NET_LOGIN_ERROR_NO_AUTHORIZED = (0x80000000|113); // 客户端IP地址没有登录权限 - public static final int NET_LOGIN_ERROR_USER_OR_PASSOWRD = (0x80000000|117); // 账号或密码错误 - public static final int NET_LOGIN_ERROR_DEVICE_NOT_INIT = (0x80000000|118); // 设备尚未初始化,不能登录,请先初始化设备 - public static final int NET_RENDER_SOUND_ON_ERROR = (0x80000000|120); // Render库打开音频出错 - public static final int NET_RENDER_SOUND_OFF_ERROR = (0x80000000|121); // Render库关闭音频出错 - public static final int NET_RENDER_SET_VOLUME_ERROR = (0x80000000|122); // Render库控制音量出错 - public static final int NET_RENDER_ADJUST_ERROR = (0x80000000|123); // Render库设置画面参数出错 - public static final int NET_RENDER_PAUSE_ERROR = (0x80000000|124); // Render库暂停播放出错 - public static final int NET_RENDER_SNAP_ERROR = (0x80000000|125); // Render库抓图出错 - public static final int NET_RENDER_STEP_ERROR = (0x80000000|126); // Render库步进出错 - public static final int NET_RENDER_FRAMERATE_ERROR = (0x80000000|127); // Render库设置帧率出错 - public static final int NET_RENDER_DISPLAYREGION_ERROR = (0x80000000|128); // Render库设置显示区域出错 - public static final int NET_RENDER_GETOSDTIME_ERROR = (0x80000000|129); // Render库获取当前播放时间出错 - public static final int NET_GROUP_EXIST = (0x80000000|140); // 组名已存在 - public static final int NET_GROUP_NOEXIST = (0x80000000|141); // 组名不存在 - public static final int NET_GROUP_RIGHTOVER = (0x80000000|142); // 组的权限超出权限列表范围 - public static final int NET_GROUP_HAVEUSER = (0x80000000|143); // 组下有用户,不能删除 - public static final int NET_GROUP_RIGHTUSE = (0x80000000|144); // 组的某个权限被用户使用,不能删除 - public static final int NET_GROUP_SAMENAME = (0x80000000|145); // 新组名同已有组名重复 - public static final int NET_USER_EXIST = (0x80000000|146); // 用户已存在 - public static final int NET_USER_NOEXIST = (0x80000000|147); // 用户不存在 - public static final int NET_USER_RIGHTOVER = (0x80000000|148); // 用户权限超出组权限 - public static final int NET_USER_PWD = (0x80000000|149); // 保留帐号,不容许修改密码 - public static final int NET_USER_FLASEPWD = (0x80000000|150); // 密码不正确 - public static final int NET_USER_NOMATCHING = (0x80000000|151); // 密码不匹配 - public static final int NET_USER_INUSE = (0x80000000|152); // 账号正在使用中 - public static final int NET_ERROR_GETCFG_ETHERNET = (0x80000000|300); // 获取网卡配置失败 - public static final int NET_ERROR_GETCFG_WLAN = (0x80000000|301); // 获取无线网络信息失败 - public static final int NET_ERROR_GETCFG_WLANDEV = (0x80000000|302); // 获取无线网络设备失败 - public static final int NET_ERROR_GETCFG_REGISTER = (0x80000000|303); // 获取主动注册参数失败 - public static final int NET_ERROR_GETCFG_CAMERA = (0x80000000|304); // 获取摄像头属性失败 - public static final int NET_ERROR_GETCFG_INFRARED = (0x80000000|305); // 获取红外报警配置失败 - public static final int NET_ERROR_GETCFG_SOUNDALARM = (0x80000000|306); // 获取音频报警配置失败 - public static final int NET_ERROR_GETCFG_STORAGE = (0x80000000|307); // 获取存储位置配置失败 - public static final int NET_ERROR_GETCFG_MAIL = (0x80000000|308); // 获取邮件配置失败 - public static final int NET_CONFIG_DEVBUSY = (0x80000000|309); // 暂时无法设置 - public static final int NET_CONFIG_DATAILLEGAL = (0x80000000|310); // 配置数据不合法 - public static final int NET_ERROR_GETCFG_DST = (0x80000000|311); // 获取夏令时配置失败 - public static final int NET_ERROR_SETCFG_DST = (0x80000000|312); // 设置夏令时配置失败 - public static final int NET_ERROR_GETCFG_VIDEO_OSD = (0x80000000|313); // 获取视频OSD叠加配置失败 - public static final int NET_ERROR_SETCFG_VIDEO_OSD = (0x80000000|314); // 设置视频OSD叠加配置失败 - public static final int NET_ERROR_GETCFG_GPRSCDMA = (0x80000000|315); // 获取CDMA\GPRS网络配置失败 - public static final int NET_ERROR_SETCFG_GPRSCDMA = (0x80000000|316); // 设置CDMA\GPRS网络配置失败 - public static final int NET_ERROR_GETCFG_IPFILTER = (0x80000000|317); // 获取IP过滤配置失败 - public static final int NET_ERROR_SETCFG_IPFILTER = (0x80000000|318); // 设置IP过滤配置失败 - public static final int NET_ERROR_GETCFG_TALKENCODE = (0x80000000|319); // 获取语音对讲编码配置失败 - public static final int NET_ERROR_SETCFG_TALKENCODE = (0x80000000|320); // 设置语音对讲编码配置失败 - public static final int NET_ERROR_GETCFG_RECORDLEN = (0x80000000|321); // 获取录像打包长度配置失败 - public static final int NET_ERROR_SETCFG_RECORDLEN = (0x80000000|322); // 设置录像打包长度配置失败 - public static final int NET_DONT_SUPPORT_SUBAREA = (0x80000000|323); // 不支持网络硬盘分区 - public static final int NET_ERROR_GET_AUTOREGSERVER = (0x80000000|324); // 获取设备上主动注册服务器信息失败 - public static final int NET_ERROR_CONTROL_AUTOREGISTER = (0x80000000|325); // 主动注册重定向注册错误 - public static final int NET_ERROR_DISCONNECT_AUTOREGISTER = (0x80000000|326); // 断开主动注册服务器错误 - public static final int NET_ERROR_GETCFG_MMS = (0x80000000|327); // 获取mms配置失败 - public static final int NET_ERROR_SETCFG_MMS = (0x80000000|328); // 设置mms配置失败 - public static final int NET_ERROR_GETCFG_SMSACTIVATION = (0x80000000|329); // 获取短信激活无线连接配置失败 - public static final int NET_ERROR_SETCFG_SMSACTIVATION = (0x80000000|330); // 设置短信激活无线连接配置失败 - public static final int NET_ERROR_GETCFG_DIALINACTIVATION = (0x80000000|331); // 获取拨号激活无线连接配置失败 - public static final int NET_ERROR_SETCFG_DIALINACTIVATION = (0x80000000|332); // 设置拨号激活无线连接配置失败 - public static final int NET_ERROR_GETCFG_VIDEOOUT = (0x80000000|333); // 查询视频输出参数配置失败 - public static final int NET_ERROR_SETCFG_VIDEOOUT = (0x80000000|334); // 设置视频输出参数配置失败 - public static final int NET_ERROR_GETCFG_OSDENABLE = (0x80000000|335); // 获取osd叠加使能配置失败 - public static final int NET_ERROR_SETCFG_OSDENABLE = (0x80000000|336); // 设置osd叠加使能配置失败 - public static final int NET_ERROR_SETCFG_ENCODERINFO = (0x80000000|337); // 设置数字通道前端编码接入配置失败 - public static final int NET_ERROR_GETCFG_TVADJUST = (0x80000000|338); // 获取TV调节配置失败 - public static final int NET_ERROR_SETCFG_TVADJUST = (0x80000000|339); // 设置TV调节配置失败 - public static final int NET_ERROR_CONNECT_FAILED = (0x80000000|340); // 请求建立连接失败 - public static final int NET_ERROR_SETCFG_BURNFILE = (0x80000000|341); // 请求刻录文件上传失败 - public static final int NET_ERROR_SNIFFER_GETCFG = (0x80000000|342); // 获取抓包配置信息失败 - public static final int NET_ERROR_SNIFFER_SETCFG = (0x80000000|343); // 设置抓包配置信息失败 - public static final int NET_ERROR_DOWNLOADRATE_GETCFG = (0x80000000|344); // 查询下载限制信息失败 - public static final int NET_ERROR_DOWNLOADRATE_SETCFG = (0x80000000|345); // 设置下载限制信息失败 - public static final int NET_ERROR_SEARCH_TRANSCOM = (0x80000000|346); // 查询串口参数失败 - public static final int NET_ERROR_GETCFG_POINT = (0x80000000|347); // 获取预制点信息错误 - public static final int NET_ERROR_SETCFG_POINT = (0x80000000|348); // 设置预制点信息错误 - public static final int NET_SDK_LOGOUT_ERROR = (0x80000000|349); // SDK没有正常登出设备 - public static final int NET_ERROR_GET_VEHICLE_CFG = (0x80000000|350); // 获取车载配置失败 - public static final int NET_ERROR_SET_VEHICLE_CFG = (0x80000000|351); // 设置车载配置失败 - public static final int NET_ERROR_GET_ATM_OVERLAY_CFG = (0x80000000|352); // 获取atm叠加配置失败 - public static final int NET_ERROR_SET_ATM_OVERLAY_CFG = (0x80000000|353); // 设置atm叠加配置失败 - public static final int NET_ERROR_GET_ATM_OVERLAY_ABILITY = (0x80000000|354); // 获取atm叠加能力失败 - public static final int NET_ERROR_GET_DECODER_TOUR_CFG = (0x80000000|355); // 获取解码器解码轮巡配置失败 - public static final int NET_ERROR_SET_DECODER_TOUR_CFG = (0x80000000|356); // 设置解码器解码轮巡配置失败 - public static final int NET_ERROR_CTRL_DECODER_TOUR = (0x80000000|357); // 控制解码器解码轮巡失败 - public static final int NET_GROUP_OVERSUPPORTNUM = (0x80000000|358); // 超出设备支持最大用户组数目 - public static final int NET_USER_OVERSUPPORTNUM = (0x80000000|359); // 超出设备支持最大用户数目 - public static final int NET_ERROR_GET_SIP_CFG = (0x80000000|368); // 获取SIP配置失败 - public static final int NET_ERROR_SET_SIP_CFG = (0x80000000|369); // 设置SIP配置失败 - public static final int NET_ERROR_GET_SIP_ABILITY = (0x80000000|370); // 获取SIP能力失败 - public static final int NET_ERROR_GET_WIFI_AP_CFG = (0x80000000|371); // 获取WIFI ap配置失败 - public static final int NET_ERROR_SET_WIFI_AP_CFG = (0x80000000|372); // 设置WIFI ap配置失败 - public static final int NET_ERROR_GET_DECODE_POLICY = (0x80000000|373); // 获取解码策略配置失败 - public static final int NET_ERROR_SET_DECODE_POLICY = (0x80000000|374); // 设置解码策略配置失败 - public static final int NET_ERROR_TALK_REJECT = (0x80000000|375); // 拒绝对讲 - public static final int NET_ERROR_TALK_OPENED = (0x80000000|376); // 对讲被其他客户端打开 - public static final int NET_ERROR_TALK_RESOURCE_CONFLICIT = (0x80000000|377); // 资源冲突 - public static final int NET_ERROR_TALK_UNSUPPORTED_ENCODE = (0x80000000|378); // 不支持的语音编码格式 - public static final int NET_ERROR_TALK_RIGHTLESS = (0x80000000|379); // 无权限 - public static final int NET_ERROR_TALK_FAILED = (0x80000000|380); // 请求对讲失败 - public static final int NET_ERROR_GET_MACHINE_CFG = (0x80000000|381); // 获取机器相关配置失败 - public static final int NET_ERROR_SET_MACHINE_CFG = (0x80000000|382); // 设置机器相关配置失败 - public static final int NET_ERROR_GET_DATA_FAILED = (0x80000000|383); // 设备无法获取当前请求数据 - public static final int NET_ERROR_MAC_VALIDATE_FAILED = (0x80000000|384); // MAC地址验证失败 - public static final int NET_ERROR_GET_INSTANCE = (0x80000000|385); // 获取服务器实例失败 - public static final int NET_ERROR_JSON_REQUEST = (0x80000000|386); // 生成的json字符串错误 - public static final int NET_ERROR_JSON_RESPONSE = (0x80000000|387); // 响应的json字符串错误 - public static final int NET_ERROR_VERSION_HIGHER = (0x80000000|388); // 协议版本低于当前使用的版本 - public static final int NET_SPARE_NO_CAPACITY = (0x80000000|389); // 设备操作失败, 容量不足 - public static final int NET_ERROR_SOURCE_IN_USE = (0x80000000|390); // 显示源被其他输出占用 - public static final int NET_ERROR_REAVE = (0x80000000|391); // 高级用户抢占低级用户资源 - public static final int NET_ERROR_NETFORBID = (0x80000000|392); // 禁止入网 - public static final int NET_ERROR_GETCFG_MACFILTER = (0x80000000|393); // 获取MAC过滤配置失败 - public static final int NET_ERROR_SETCFG_MACFILTER = (0x80000000|394); // 设置MAC过滤配置失败 - public static final int NET_ERROR_GETCFG_IPMACFILTER = (0x80000000|395); // 获取IP/MAC过滤配置失败 - public static final int NET_ERROR_SETCFG_IPMACFILTER = (0x80000000|396); // 设置IP/MAC过滤配置失败 - public static final int NET_ERROR_OPERATION_OVERTIME = (0x80000000|397); // 当前操作超时 - public static final int NET_ERROR_SENIOR_VALIDATE_FAILED = (0x80000000|398); // 高级校验失败 - public static final int NET_ERROR_DEVICE_ID_NOT_EXIST = (0x80000000|399); // 设备ID不存在 - public static final int NET_ERROR_UNSUPPORTED = (0x80000000|400); // 不支持当前操作 - public static final int NET_ERROR_PROXY_DLLLOAD = (0x80000000|401); // 代理库加载失败 - public static final int NET_ERROR_PROXY_ILLEGAL_PARAM = (0x80000000|402); // 代理用户参数不合法 - public static final int NET_ERROR_PROXY_INVALID_HANDLE = (0x80000000|403); // 代理句柄无效 - public static final int NET_ERROR_PROXY_LOGIN_DEVICE_ERROR = (0x80000000|404); // 代理登入前端设备失败 - public static final int NET_ERROR_PROXY_START_SERVER_ERROR = (0x80000000|405); // 启动代理服务失败 - public static final int NET_ERROR_SPEAK_FAILED = (0x80000000|406); // 请求喊话失败 - public static final int NET_ERROR_NOT_SUPPORT_F6 = (0x80000000|407); // 设备不支持此F6接口调用 - public static final int NET_ERROR_CD_UNREADY = (0x80000000|408); // 光盘未就绪 - public static final int NET_ERROR_DIR_NOT_EXIST = (0x80000000|409); // 目录不存在 - public static final int NET_ERROR_UNSUPPORTED_SPLIT_MODE = (0x80000000|410); // 设备不支持的分割模式 - public static final int NET_ERROR_OPEN_WND_PARAM = (0x80000000|411); // 开窗参数不合法 - public static final int NET_ERROR_LIMITED_WND_COUNT = (0x80000000|412); // 开窗数量超过限制 - public static final int NET_ERROR_UNMATCHED_REQUEST = (0x80000000|413); // 请求命令与当前模式不匹配 - public static final int NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR = (0x80000000|414); // Render库启用高清图像内部调整策略出错 - public static final int NET_ERROR_UPGRADE_FAILED = (0x80000000|415); // 设备升级失败 - public static final int NET_ERROR_NO_TARGET_DEVICE = (0x80000000|416); // 找不到目标设备 - public static final int NET_ERROR_NO_VERIFY_DEVICE = (0x80000000|417); // 找不到验证设备 - public static final int NET_ERROR_CASCADE_RIGHTLESS = (0x80000000|418); // 无级联权限 - public static final int NET_ERROR_LOW_PRIORITY = (0x80000000|419); // 低优先级 - public static final int NET_ERROR_REMOTE_REQUEST_TIMEOUT = (0x80000000|420); // 远程设备请求超时 - public static final int NET_ERROR_LIMITED_INPUT_SOURCE = (0x80000000|421); // 输入源超出最大路数限制 - public static final int NET_ERROR_SET_LOG_PRINT_INFO = (0x80000000|422); // 设置日志打印失败 - public static final int NET_ERROR_PARAM_DWSIZE_ERROR = (0x80000000|423); // 入参的dwsize字段出错 - public static final int NET_ERROR_LIMITED_MONITORWALL_COUNT = (0x80000000|424); // 电视墙数量超过上限 - public static final int NET_ERROR_PART_PROCESS_FAILED = (0x80000000|425); // 部分过程执行失败 - public static final int NET_ERROR_TARGET_NOT_SUPPORT = (0x80000000|426); // 该功能不支持转发 - public static final int NET_ERROR_VISITE_FILE = (0x80000000|510); // 访问文件失败 - public static final int NET_ERROR_DEVICE_STATUS_BUSY = (0x80000000|511); // 设备忙 - public static final int NET_USER_PWD_NOT_AUTHORIZED = (0x80000000|512); // 修改密码无权限 - public static final int NET_USER_PWD_NOT_STRONG = (0x80000000|513); // 密码强度不够 - public static final int NET_ERROR_NO_SUCH_CONFIG = (0x80000000|514); // 没有对应的配置 - public static final int NET_ERROR_AUDIO_RECORD_FAILED = (0x80000000|515); // 录音失败 - public static final int NET_ERROR_SEND_DATA_FAILED = (0x80000000|516); // 数据发送失败 - public static final int NET_ERROR_OBSOLESCENT_INTERFACE = (0x80000000|517); // 废弃接口 - public static final int NET_ERROR_INSUFFICIENT_INTERAL_BUF = (0x80000000|518); // 内部缓冲不足 - public static final int NET_ERROR_NEED_ENCRYPTION_PASSWORD = (0x80000000|519); // 修改设备ip时,需要校验密码 - public static final int NET_ERROR_NOSUPPORT_RECORD = (0x80000000|520); // 设备不支持此记录集 - public static final int NET_ERROR_SERIALIZE_ERROR = (0x80000000|1010);// 数据序列化错误 - public static final int NET_ERROR_DESERIALIZE_ERROR = (0x80000000|1011);// 数据反序列化错误 - public static final int NET_ERROR_LOWRATEWPAN_ID_EXISTED = (0x80000000|1012);// 该无线ID已存在 - public static final int NET_ERROR_LOWRATEWPAN_ID_LIMIT = (0x80000000|1013);// 无线ID数量已超限 - public static final int NET_ERROR_LOWRATEWPAN_ID_ABNORMAL = (0x80000000|1014);// 无线异常添加 - public static final int NET_ERROR_ENCRYPT = (0x80000000|1015);// 加密数据失败 - public static final int NET_ERROR_PWD_ILLEGAL = (0x80000000|1016);// 新密码不合规范 - public static final int NET_ERROR_DEVICE_ALREADY_INIT = (0x80000000|1017);// 设备已经初始化 - public static final int NET_ERROR_SECURITY_CODE = (0x80000000|1018);// 安全码错误 - public static final int NET_ERROR_SECURITY_CODE_TIMEOUT = (0x80000000|1019);// 安全码超出有效期 - public static final int NET_ERROR_GET_PWD_SPECI = (0x80000000|1020);// 获取密码规范失败 - public static final int NET_ERROR_NO_AUTHORITY_OF_OPERATION = (0x80000000|1021);// 无权限进行该操作 - public static final int NET_ERROR_DECRYPT = (0x80000000|1022);// 解密数据失败 - public static final int NET_ERROR_2D_CODE = (0x80000000|1023);// 2D code校验失败 - public static final int NET_ERROR_INVALID_REQUEST = (0x80000000|1024);// 非法的RPC请求 - public static final int NET_ERROR_PWD_RESET_DISABLE = (0x80000000|1025);// 密码重置功能已关闭 - public static final int NET_ERROR_PLAY_PRIVATE_DATA = (0x80000000|1026);// 显示私有数据,比如规则框等失败 - public static final int NET_ERROR_ROBOT_OPERATE_FAILED = (0x80000000|1027);// 机器人操作失败 - public static final int NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT = (0x80000000|1028);// 图片大小超限 - public static final int NET_ERROR_USERID_INVALID = (0x80000000|1029);// 用户ID不存在 - public static final int NET_ERROR_EXTRACTFEATURE_FAILED = (0x80000000|1030);// 照片特征值提取失败 - public static final int NET_ERROR_PHOTO_EXIST = (0x80000000|1031);// 照片已存在 - public static final int NET_ERROR_PHOTO_OVERFLOW = (0x80000000|1032);// 照片数量超过上限 - public static final int NET_ERROR_CHANNEL_ALREADY_OPENED = (0x80000000|1033);// 通道已经打开 - public static final int NET_ERROR_CREATE_SOCKET = (0x80000000|1034);// 创建套接字失败 - public static final int NET_ERROR_CHANNEL_NUM = (0x80000000|1035);// 通道号错误 - public static final int NET_ERROR_PHOTO_FORMAT = (0x80000000|1036);// 图片格式错误 - public static final int NET_ERROR_DIGITAL_CERTIFICATE_INTERNAL_ERROR = (0x80000000|1037); // 内部错误(比如:相关硬件问题,获取公钥失败,内部接口调用失败,写文件失败等等) - public static final int NET_ERROR_DIGITAL_CERTIFICATE_GET_ID_FAILED = (0x80000000|1038); // 获取设备ID失败 - public static final int NET_ERROR_DIGITAL_CERTIFICATE_IMPORT_ILLEGAL = (0x80000000|1039); // 证书文件非法(格式不支持或者不是证书文件) - public static final int NET_ERROR_DIGITAL_CERTIFICATE_SN_ERROR = (0x80000000|1040); // 证书sn重复或错误或不规范 - public static final int NET_ERROR_DIGITAL_CERTIFICATE_COMMON_NAME_ILLEGAL = (0x80000000|1041);// 证书commonName非法(本地设备证书与系统中的不匹配devid_cryptoID,或者对端的不符合规则(devid_crytoID)) - public static final int NET_ERROR_DIGITAL_CERTIFICATE_NO_ROOT_CERT = (0x80000000|1042); // 根证书未导入或不存在 - public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_REVOKED = (0x80000000|1043); // 证书被吊销 - public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_INVALID = (0x80000000|1044); // 证书不可用或未生效或已过期 - public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_ERROR_SIGN = (0x80000000|1045); // 证书签名不匹配 - public static final int NET_ERROR_DIGITAL_CERTIFICATE_COUNTS_UPPER_LIMIT = (0x80000000|1046); // 超出证书导入上限 - public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_NO_EXIST = (0x80000000|1047); // 证书文件不存在(导出证书或者获取对应证书的公钥) - public static final int NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED = (0x80000000|1051);// 组ID超过最大值 - + public static final int NET_NOERROR = 0; // 没有错误 + public static final int NET_ERROR = -1; // 未知错误 + public static final int NET_SYSTEM_ERROR = (0x80000000 | 1); // Windows系统出错 + public static final int NET_NETWORK_ERROR = (0x80000000 | 2); // 网络错误,可能是因为网络超时 + public static final int NET_DEV_VER_NOMATCH = (0x80000000 | 3); // 设备协议不匹配 + public static final int NET_INVALID_HANDLE = (0x80000000 | 4); // 句柄无效 + public static final int NET_OPEN_CHANNEL_ERROR = (0x80000000 | 5); // 打开通道失败 + public static final int NET_CLOSE_CHANNEL_ERROR = (0x80000000 | 6); // 关闭通道失败 + public static final int NET_ILLEGAL_PARAM = (0x80000000 | 7); // 用户参数不合法 + public static final int NET_SDK_INIT_ERROR = (0x80000000 | 8); // SDK初始化出错 + public static final int NET_SDK_UNINIT_ERROR = (0x80000000 | 9); // SDK清理出错 + public static final int NET_RENDER_OPEN_ERROR = (0x80000000 | 10); // 申请render资源出错 + public static final int NET_DEC_OPEN_ERROR = (0x80000000 | 11); // 打开解码库出错 + public static final int NET_DEC_CLOSE_ERROR = (0x80000000 | 12); // 关闭解码库出错 + public static final int NET_MULTIPLAY_NOCHANNEL = (0x80000000 | 13); // 多画面预览中检测到通道数为0 + public static final int NET_TALK_INIT_ERROR = (0x80000000 | 14); // 录音库初始化失败 + public static final int NET_TALK_NOT_INIT = (0x80000000 | 15); // 录音库未经初始化 + public static final int NET_TALK_SENDDATA_ERROR = (0x80000000 | 16); // 发送音频数据出错 + public static final int NET_REAL_ALREADY_SAVING = (0x80000000 | 17); // 实时数据已经处于保存状态 + public static final int NET_NOT_SAVING = (0x80000000 | 18); // 未保存实时数据 + public static final int NET_OPEN_FILE_ERROR = (0x80000000 | 19); // 打开文件出错 + public static final int NET_PTZ_SET_TIMER_ERROR = (0x80000000 | 20); // 启动云台控制定时器失败 + public static final int NET_RETURN_DATA_ERROR = (0x80000000 | 21); // 对返回数据的校验出错 + public static final int NET_INSUFFICIENT_BUFFER = (0x80000000 | 22); // 没有足够的缓存 + public static final int NET_NOT_SUPPORTED = (0x80000000 | 23); // 当前SDK未支持该功能 + public static final int NET_NO_RECORD_FOUND = (0x80000000 | 24); // 查询不到录像 + public static final int NET_NOT_AUTHORIZED = (0x80000000 | 25); // 无操作权限 + public static final int NET_NOT_NOW = (0x80000000 | 26); // 暂时无法执行 + public static final int NET_NO_TALK_CHANNEL = (0x80000000 | 27); // 未发现对讲通道 + public static final int NET_NO_AUDIO = (0x80000000 | 28); // 未发现音频 + public static final int NET_NO_INIT = (0x80000000 | 29); // 网络SDK未经初始化 + public static final int NET_DOWNLOAD_END = (0x80000000 | 30); // 下载已结束 + public static final int NET_EMPTY_LIST = (0x80000000 | 31); // 查询结果为空 + public static final int NET_ERROR_GETCFG_SYSATTR = (0x80000000 | 32); // 获取系统属性配置失败 + public static final int NET_ERROR_GETCFG_SERIAL = (0x80000000 | 33); // 获取序列号失败 + public static final int NET_ERROR_GETCFG_GENERAL = (0x80000000 | 34); // 获取常规属性失败 + public static final int NET_ERROR_GETCFG_DSPCAP = (0x80000000 | 35); // 获取DSP能力描述失败 + public static final int NET_ERROR_GETCFG_NETCFG = (0x80000000 | 36); // 获取网络配置失败 + public static final int NET_ERROR_GETCFG_CHANNAME = (0x80000000 | 37); // 获取通道名称失败 + public static final int NET_ERROR_GETCFG_VIDEO = (0x80000000 | 38); // 获取视频属性失败 + public static final int NET_ERROR_GETCFG_RECORD = (0x80000000 | 39); // 获取录象配置失败 + public static final int NET_ERROR_GETCFG_PRONAME = (0x80000000 | 40); // 获取解码器协议名称失败 + public static final int NET_ERROR_GETCFG_FUNCNAME = (0x80000000 | 41); // 获取232串口功能名称失败 + public static final int NET_ERROR_GETCFG_485DECODER = (0x80000000 | 42); // 获取解码器属性失败 + public static final int NET_ERROR_GETCFG_232COM = (0x80000000 | 43); // 获取232串口配置失败 + public static final int NET_ERROR_GETCFG_ALARMIN = (0x80000000 | 44); // 获取外部报警输入配置失败 + public static final int NET_ERROR_GETCFG_ALARMDET = (0x80000000 | 45); // 获取动态检测报警失败 + public static final int NET_ERROR_GETCFG_SYSTIME = (0x80000000 | 46); // 获取设备时间失败 + public static final int NET_ERROR_GETCFG_PREVIEW = (0x80000000 | 47); // 获取预览参数失败 + public static final int NET_ERROR_GETCFG_AUTOMT = (0x80000000 | 48); // 获取自动维护配置失败 + public static final int NET_ERROR_GETCFG_VIDEOMTRX = (0x80000000 | 49); // 获取视频矩阵配置失败 + public static final int NET_ERROR_GETCFG_COVER = (0x80000000 | 50); // 获取区域遮挡配置失败 + public static final int NET_ERROR_GETCFG_WATERMAKE = (0x80000000 | 51); // 获取图象水印配置失败 + public static final int NET_ERROR_GETCFG_MULTICAST = (0x80000000 | 52); // 获取配置失败位置:组播端口按通道配置 + public static final int NET_ERROR_SETCFG_GENERAL = (0x80000000 | 55); // 修改常规属性失败 + public static final int NET_ERROR_SETCFG_NETCFG = (0x80000000 | 56); // 修改网络配置失败 + public static final int NET_ERROR_SETCFG_CHANNAME = (0x80000000 | 57); // 修改通道名称失败 + public static final int NET_ERROR_SETCFG_VIDEO = (0x80000000 | 58); // 修改视频属性失败 + public static final int NET_ERROR_SETCFG_RECORD = (0x80000000 | 59); // 修改录象配置失败 + public static final int NET_ERROR_SETCFG_485DECODER = (0x80000000 | 60); // 修改解码器属性失败 + public static final int NET_ERROR_SETCFG_232COM = (0x80000000 | 61); // 修改232串口配置失败 + public static final int NET_ERROR_SETCFG_ALARMIN = (0x80000000 | 62); // 修改外部输入报警配置失败 + public static final int NET_ERROR_SETCFG_ALARMDET = (0x80000000 | 63); // 修改动态检测报警配置失败 + public static final int NET_ERROR_SETCFG_SYSTIME = (0x80000000 | 64); // 修改设备时间失败 + public static final int NET_ERROR_SETCFG_PREVIEW = (0x80000000 | 65); // 修改预览参数失败 + public static final int NET_ERROR_SETCFG_AUTOMT = (0x80000000 | 66); // 修改自动维护配置失败 + public static final int NET_ERROR_SETCFG_VIDEOMTRX = (0x80000000 | 67); // 修改视频矩阵配置失败 + public static final int NET_ERROR_SETCFG_COVER = (0x80000000 | 68); // 修改区域遮挡配置失败 + public static final int NET_ERROR_SETCFG_WATERMAKE = (0x80000000 | 69); // 修改图象水印配置失败 + public static final int NET_ERROR_SETCFG_WLAN = (0x80000000 | 70); // 修改无线网络信息失败 + public static final int NET_ERROR_SETCFG_WLANDEV = (0x80000000 | 71); // 选择无线网络设备失败 + public static final int NET_ERROR_SETCFG_REGISTER = (0x80000000 | 72); // 修改主动注册参数配置失败 + public static final int NET_ERROR_SETCFG_CAMERA = (0x80000000 | 73); // 修改摄像头属性配置失败 + public static final int NET_ERROR_SETCFG_INFRARED = (0x80000000 | 74); // 修改红外报警配置失败 + public static final int NET_ERROR_SETCFG_SOUNDALARM = (0x80000000 | 75); // 修改音频报警配置失败 + public static final int NET_ERROR_SETCFG_STORAGE = (0x80000000 | 76); // 修改存储位置配置失败 + public static final int NET_AUDIOENCODE_NOTINIT = (0x80000000 | 77); // 音频编码接口没有成功初始化 + public static final int NET_DATA_TOOLONGH = (0x80000000 | 78); // 数据过长 + public static final int NET_UNSUPPORTED = (0x80000000 | 79); // 设备不支持该操作 + public static final int NET_DEVICE_BUSY = (0x80000000 | 80); // 设备资源不足 + public static final int NET_SERVER_STARTED = (0x80000000 | 81); // 服务器已经启动 + public static final int NET_SERVER_STOPPED = (0x80000000 | 82); // 服务器尚未成功启动 + public static final int NET_LISTER_INCORRECT_SERIAL = (0x80000000 | 83); // 输入序列号有误 + public static final int NET_QUERY_DISKINFO_FAILED = (0x80000000 | 84); // 获取硬盘信息失败 + public static final int NET_ERROR_GETCFG_SESSION = (0x80000000 | 85); // 获取连接Session信息 + public static final int NET_USER_FLASEPWD_TRYTIME = (0x80000000 | 86); // 输入密码错误超过限制次数 + public static final int NET_LOGIN_ERROR_PASSWORD = (0x80000000 | 100); // 密码不正确 + public static final int NET_LOGIN_ERROR_USER = (0x80000000 | 101); // 帐户不存在 + public static final int NET_LOGIN_ERROR_TIMEOUT = (0x80000000 | 102); // 等待登录返回超时 + public static final int NET_LOGIN_ERROR_RELOGGIN = (0x80000000 | 103); // 帐号已登录 + public static final int NET_LOGIN_ERROR_LOCKED = (0x80000000 | 104); // 帐号已被锁定 + public static final int NET_LOGIN_ERROR_BLACKLIST = (0x80000000 | 105); // 帐号已被列为黑名单 + public static final int NET_LOGIN_ERROR_BUSY = (0x80000000 | 106); // 资源不足,系统忙 + public static final int NET_LOGIN_ERROR_CONNECT = (0x80000000 | 107); // 登录设备超时,请检查网络并重试 + public static final int NET_LOGIN_ERROR_NETWORK = (0x80000000 | 108); // 网络连接失败 + public static final int NET_LOGIN_ERROR_SUBCONNECT = (0x80000000 | 109); // 登录设备成功,但无法创建视频通道,请检查网络状况 + public static final int NET_LOGIN_ERROR_MAXCONNECT = (0x80000000 | 110); // 超过最大连接数 + public static final int NET_LOGIN_ERROR_PROTOCOL3_ONLY = (0x80000000 | 111); // 只支持3代协议 + public static final int NET_LOGIN_ERROR_UKEY_LOST = (0x80000000 | 112); // 未插入U盾或U盾信息错误 + public static final int NET_LOGIN_ERROR_NO_AUTHORIZED = (0x80000000 | 113); // 客户端IP地址没有登录权限 + public static final int NET_LOGIN_ERROR_USER_OR_PASSOWRD = (0x80000000 | 117); // 账号或密码错误 + public static final int NET_LOGIN_ERROR_DEVICE_NOT_INIT = (0x80000000 | 118); // 设备尚未初始化,不能登录,请先初始化设备 + public static final int NET_RENDER_SOUND_ON_ERROR = (0x80000000 | 120); // Render库打开音频出错 + public static final int NET_RENDER_SOUND_OFF_ERROR = (0x80000000 | 121); // Render库关闭音频出错 + public static final int NET_RENDER_SET_VOLUME_ERROR = (0x80000000 | 122); // Render库控制音量出错 + public static final int NET_RENDER_ADJUST_ERROR = (0x80000000 | 123); // Render库设置画面参数出错 + public static final int NET_RENDER_PAUSE_ERROR = (0x80000000 | 124); // Render库暂停播放出错 + public static final int NET_RENDER_SNAP_ERROR = (0x80000000 | 125); // Render库抓图出错 + public static final int NET_RENDER_STEP_ERROR = (0x80000000 | 126); // Render库步进出错 + public static final int NET_RENDER_FRAMERATE_ERROR = (0x80000000 | 127); // Render库设置帧率出错 + public static final int NET_RENDER_DISPLAYREGION_ERROR = (0x80000000 | 128); // Render库设置显示区域出错 + public static final int NET_RENDER_GETOSDTIME_ERROR = (0x80000000 | 129); // Render库获取当前播放时间出错 + public static final int NET_GROUP_EXIST = (0x80000000 | 140); // 组名已存在 + public static final int NET_GROUP_NOEXIST = (0x80000000 | 141); // 组名不存在 + public static final int NET_GROUP_RIGHTOVER = (0x80000000 | 142); // 组的权限超出权限列表范围 + public static final int NET_GROUP_HAVEUSER = (0x80000000 | 143); // 组下有用户,不能删除 + public static final int NET_GROUP_RIGHTUSE = (0x80000000 | 144); // 组的某个权限被用户使用,不能删除 + public static final int NET_GROUP_SAMENAME = (0x80000000 | 145); // 新组名同已有组名重复 + public static final int NET_USER_EXIST = (0x80000000 | 146); // 用户已存在 + public static final int NET_USER_NOEXIST = (0x80000000 | 147); // 用户不存在 + public static final int NET_USER_RIGHTOVER = (0x80000000 | 148); // 用户权限超出组权限 + public static final int NET_USER_PWD = (0x80000000 | 149); // 保留帐号,不容许修改密码 + public static final int NET_USER_FLASEPWD = (0x80000000 | 150); // 密码不正确 + public static final int NET_USER_NOMATCHING = (0x80000000 | 151); // 密码不匹配 + public static final int NET_USER_INUSE = (0x80000000 | 152); // 账号正在使用中 + public static final int NET_ERROR_GETCFG_ETHERNET = (0x80000000 | 300); // 获取网卡配置失败 + public static final int NET_ERROR_GETCFG_WLAN = (0x80000000 | 301); // 获取无线网络信息失败 + public static final int NET_ERROR_GETCFG_WLANDEV = (0x80000000 | 302); // 获取无线网络设备失败 + public static final int NET_ERROR_GETCFG_REGISTER = (0x80000000 | 303); // 获取主动注册参数失败 + public static final int NET_ERROR_GETCFG_CAMERA = (0x80000000 | 304); // 获取摄像头属性失败 + public static final int NET_ERROR_GETCFG_INFRARED = (0x80000000 | 305); // 获取红外报警配置失败 + public static final int NET_ERROR_GETCFG_SOUNDALARM = (0x80000000 | 306); // 获取音频报警配置失败 + public static final int NET_ERROR_GETCFG_STORAGE = (0x80000000 | 307); // 获取存储位置配置失败 + public static final int NET_ERROR_GETCFG_MAIL = (0x80000000 | 308); // 获取邮件配置失败 + public static final int NET_CONFIG_DEVBUSY = (0x80000000 | 309); // 暂时无法设置 + public static final int NET_CONFIG_DATAILLEGAL = (0x80000000 | 310); // 配置数据不合法 + public static final int NET_ERROR_GETCFG_DST = (0x80000000 | 311); // 获取夏令时配置失败 + public static final int NET_ERROR_SETCFG_DST = (0x80000000 | 312); // 设置夏令时配置失败 + public static final int NET_ERROR_GETCFG_VIDEO_OSD = (0x80000000 | 313); // 获取视频OSD叠加配置失败 + public static final int NET_ERROR_SETCFG_VIDEO_OSD = (0x80000000 | 314); // 设置视频OSD叠加配置失败 + public static final int NET_ERROR_GETCFG_GPRSCDMA = (0x80000000 | 315); // 获取CDMA\GPRS网络配置失败 + public static final int NET_ERROR_SETCFG_GPRSCDMA = (0x80000000 | 316); // 设置CDMA\GPRS网络配置失败 + public static final int NET_ERROR_GETCFG_IPFILTER = (0x80000000 | 317); // 获取IP过滤配置失败 + public static final int NET_ERROR_SETCFG_IPFILTER = (0x80000000 | 318); // 设置IP过滤配置失败 + public static final int NET_ERROR_GETCFG_TALKENCODE = (0x80000000 | 319); // 获取语音对讲编码配置失败 + public static final int NET_ERROR_SETCFG_TALKENCODE = (0x80000000 | 320); // 设置语音对讲编码配置失败 + public static final int NET_ERROR_GETCFG_RECORDLEN = (0x80000000 | 321); // 获取录像打包长度配置失败 + public static final int NET_ERROR_SETCFG_RECORDLEN = (0x80000000 | 322); // 设置录像打包长度配置失败 + public static final int NET_DONT_SUPPORT_SUBAREA = (0x80000000 | 323); // 不支持网络硬盘分区 + public static final int NET_ERROR_GET_AUTOREGSERVER = (0x80000000 | 324); // 获取设备上主动注册服务器信息失败 + public static final int NET_ERROR_CONTROL_AUTOREGISTER = (0x80000000 | 325); // 主动注册重定向注册错误 + public static final int NET_ERROR_DISCONNECT_AUTOREGISTER = (0x80000000 | 326); // 断开主动注册服务器错误 + public static final int NET_ERROR_GETCFG_MMS = (0x80000000 | 327); // 获取mms配置失败 + public static final int NET_ERROR_SETCFG_MMS = (0x80000000 | 328); // 设置mms配置失败 + public static final int NET_ERROR_GETCFG_SMSACTIVATION = (0x80000000 | 329); // 获取短信激活无线连接配置失败 + public static final int NET_ERROR_SETCFG_SMSACTIVATION = (0x80000000 | 330); // 设置短信激活无线连接配置失败 + public static final int NET_ERROR_GETCFG_DIALINACTIVATION = (0x80000000 | 331); // 获取拨号激活无线连接配置失败 + public static final int NET_ERROR_SETCFG_DIALINACTIVATION = (0x80000000 | 332); // 设置拨号激活无线连接配置失败 + public static final int NET_ERROR_GETCFG_VIDEOOUT = (0x80000000 | 333); // 查询视频输出参数配置失败 + public static final int NET_ERROR_SETCFG_VIDEOOUT = (0x80000000 | 334); // 设置视频输出参数配置失败 + public static final int NET_ERROR_GETCFG_OSDENABLE = (0x80000000 | 335); // 获取osd叠加使能配置失败 + public static final int NET_ERROR_SETCFG_OSDENABLE = (0x80000000 | 336); // 设置osd叠加使能配置失败 + public static final int NET_ERROR_SETCFG_ENCODERINFO = (0x80000000 | 337); // 设置数字通道前端编码接入配置失败 + public static final int NET_ERROR_GETCFG_TVADJUST = (0x80000000 | 338); // 获取TV调节配置失败 + public static final int NET_ERROR_SETCFG_TVADJUST = (0x80000000 | 339); // 设置TV调节配置失败 + public static final int NET_ERROR_CONNECT_FAILED = (0x80000000 | 340); // 请求建立连接失败 + public static final int NET_ERROR_SETCFG_BURNFILE = (0x80000000 | 341); // 请求刻录文件上传失败 + public static final int NET_ERROR_SNIFFER_GETCFG = (0x80000000 | 342); // 获取抓包配置信息失败 + public static final int NET_ERROR_SNIFFER_SETCFG = (0x80000000 | 343); // 设置抓包配置信息失败 + public static final int NET_ERROR_DOWNLOADRATE_GETCFG = (0x80000000 | 344); // 查询下载限制信息失败 + public static final int NET_ERROR_DOWNLOADRATE_SETCFG = (0x80000000 | 345); // 设置下载限制信息失败 + public static final int NET_ERROR_SEARCH_TRANSCOM = (0x80000000 | 346); // 查询串口参数失败 + public static final int NET_ERROR_GETCFG_POINT = (0x80000000 | 347); // 获取预制点信息错误 + public static final int NET_ERROR_SETCFG_POINT = (0x80000000 | 348); // 设置预制点信息错误 + public static final int NET_SDK_LOGOUT_ERROR = (0x80000000 | 349); // SDK没有正常登出设备 + public static final int NET_ERROR_GET_VEHICLE_CFG = (0x80000000 | 350); // 获取车载配置失败 + public static final int NET_ERROR_SET_VEHICLE_CFG = (0x80000000 | 351); // 设置车载配置失败 + public static final int NET_ERROR_GET_ATM_OVERLAY_CFG = (0x80000000 | 352); // 获取atm叠加配置失败 + public static final int NET_ERROR_SET_ATM_OVERLAY_CFG = (0x80000000 | 353); // 设置atm叠加配置失败 + public static final int NET_ERROR_GET_ATM_OVERLAY_ABILITY = (0x80000000 | 354); // 获取atm叠加能力失败 + public static final int NET_ERROR_GET_DECODER_TOUR_CFG = (0x80000000 | 355); // 获取解码器解码轮巡配置失败 + public static final int NET_ERROR_SET_DECODER_TOUR_CFG = (0x80000000 | 356); // 设置解码器解码轮巡配置失败 + public static final int NET_ERROR_CTRL_DECODER_TOUR = (0x80000000 | 357); // 控制解码器解码轮巡失败 + public static final int NET_GROUP_OVERSUPPORTNUM = (0x80000000 | 358); // 超出设备支持最大用户组数目 + public static final int NET_USER_OVERSUPPORTNUM = (0x80000000 | 359); // 超出设备支持最大用户数目 + public static final int NET_ERROR_GET_SIP_CFG = (0x80000000 | 368); // 获取SIP配置失败 + public static final int NET_ERROR_SET_SIP_CFG = (0x80000000 | 369); // 设置SIP配置失败 + public static final int NET_ERROR_GET_SIP_ABILITY = (0x80000000 | 370); // 获取SIP能力失败 + public static final int NET_ERROR_GET_WIFI_AP_CFG = (0x80000000 | 371); // 获取WIFI ap配置失败 + public static final int NET_ERROR_SET_WIFI_AP_CFG = (0x80000000 | 372); // 设置WIFI ap配置失败 + public static final int NET_ERROR_GET_DECODE_POLICY = (0x80000000 | 373); // 获取解码策略配置失败 + public static final int NET_ERROR_SET_DECODE_POLICY = (0x80000000 | 374); // 设置解码策略配置失败 + public static final int NET_ERROR_TALK_REJECT = (0x80000000 | 375); // 拒绝对讲 + public static final int NET_ERROR_TALK_OPENED = (0x80000000 | 376); // 对讲被其他客户端打开 + public static final int NET_ERROR_TALK_RESOURCE_CONFLICIT = (0x80000000 | 377); // 资源冲突 + public static final int NET_ERROR_TALK_UNSUPPORTED_ENCODE = (0x80000000 | 378); // 不支持的语音编码格式 + public static final int NET_ERROR_TALK_RIGHTLESS = (0x80000000 | 379); // 无权限 + public static final int NET_ERROR_TALK_FAILED = (0x80000000 | 380); // 请求对讲失败 + public static final int NET_ERROR_GET_MACHINE_CFG = (0x80000000 | 381); // 获取机器相关配置失败 + public static final int NET_ERROR_SET_MACHINE_CFG = (0x80000000 | 382); // 设置机器相关配置失败 + public static final int NET_ERROR_GET_DATA_FAILED = (0x80000000 | 383); // 设备无法获取当前请求数据 + public static final int NET_ERROR_MAC_VALIDATE_FAILED = (0x80000000 | 384); // MAC地址验证失败 + public static final int NET_ERROR_GET_INSTANCE = (0x80000000 | 385); // 获取服务器实例失败 + public static final int NET_ERROR_JSON_REQUEST = (0x80000000 | 386); // 生成的json字符串错误 + public static final int NET_ERROR_JSON_RESPONSE = (0x80000000 | 387); // 响应的json字符串错误 + public static final int NET_ERROR_VERSION_HIGHER = (0x80000000 | 388); // 协议版本低于当前使用的版本 + public static final int NET_SPARE_NO_CAPACITY = (0x80000000 | 389); // 设备操作失败, 容量不足 + public static final int NET_ERROR_SOURCE_IN_USE = (0x80000000 | 390); // 显示源被其他输出占用 + public static final int NET_ERROR_REAVE = (0x80000000 | 391); // 高级用户抢占低级用户资源 + public static final int NET_ERROR_NETFORBID = (0x80000000 | 392); // 禁止入网 + public static final int NET_ERROR_GETCFG_MACFILTER = (0x80000000 | 393); // 获取MAC过滤配置失败 + public static final int NET_ERROR_SETCFG_MACFILTER = (0x80000000 | 394); // 设置MAC过滤配置失败 + public static final int NET_ERROR_GETCFG_IPMACFILTER = (0x80000000 | 395); // 获取IP/MAC过滤配置失败 + public static final int NET_ERROR_SETCFG_IPMACFILTER = (0x80000000 | 396); // 设置IP/MAC过滤配置失败 + public static final int NET_ERROR_OPERATION_OVERTIME = (0x80000000 | 397); // 当前操作超时 + public static final int NET_ERROR_SENIOR_VALIDATE_FAILED = (0x80000000 | 398); // 高级校验失败 + public static final int NET_ERROR_DEVICE_ID_NOT_EXIST = (0x80000000 | 399); // 设备ID不存在 + public static final int NET_ERROR_UNSUPPORTED = (0x80000000 | 400); // 不支持当前操作 + public static final int NET_ERROR_PROXY_DLLLOAD = (0x80000000 | 401); // 代理库加载失败 + public static final int NET_ERROR_PROXY_ILLEGAL_PARAM = (0x80000000 | 402); // 代理用户参数不合法 + public static final int NET_ERROR_PROXY_INVALID_HANDLE = (0x80000000 | 403); // 代理句柄无效 + public static final int NET_ERROR_PROXY_LOGIN_DEVICE_ERROR = (0x80000000 | 404); // 代理登入前端设备失败 + public static final int NET_ERROR_PROXY_START_SERVER_ERROR = (0x80000000 | 405); // 启动代理服务失败 + public static final int NET_ERROR_SPEAK_FAILED = (0x80000000 | 406); // 请求喊话失败 + public static final int NET_ERROR_NOT_SUPPORT_F6 = (0x80000000 | 407); // 设备不支持此F6接口调用 + public static final int NET_ERROR_CD_UNREADY = (0x80000000 | 408); // 光盘未就绪 + public static final int NET_ERROR_DIR_NOT_EXIST = (0x80000000 | 409); // 目录不存在 + public static final int NET_ERROR_UNSUPPORTED_SPLIT_MODE = (0x80000000 | 410); // 设备不支持的分割模式 + public static final int NET_ERROR_OPEN_WND_PARAM = (0x80000000 | 411); // 开窗参数不合法 + public static final int NET_ERROR_LIMITED_WND_COUNT = (0x80000000 | 412); // 开窗数量超过限制 + public static final int NET_ERROR_UNMATCHED_REQUEST = (0x80000000 | 413); // 请求命令与当前模式不匹配 + public static final int NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR = (0x80000000 | 414); // Render库启用高清图像内部调整策略出错 + public static final int NET_ERROR_UPGRADE_FAILED = (0x80000000 | 415); // 设备升级失败 + public static final int NET_ERROR_NO_TARGET_DEVICE = (0x80000000 | 416); // 找不到目标设备 + public static final int NET_ERROR_NO_VERIFY_DEVICE = (0x80000000 | 417); // 找不到验证设备 + public static final int NET_ERROR_CASCADE_RIGHTLESS = (0x80000000 | 418); // 无级联权限 + public static final int NET_ERROR_LOW_PRIORITY = (0x80000000 | 419); // 低优先级 + public static final int NET_ERROR_REMOTE_REQUEST_TIMEOUT = (0x80000000 | 420); // 远程设备请求超时 + public static final int NET_ERROR_LIMITED_INPUT_SOURCE = (0x80000000 | 421); // 输入源超出最大路数限制 + public static final int NET_ERROR_SET_LOG_PRINT_INFO = (0x80000000 | 422); // 设置日志打印失败 + public static final int NET_ERROR_PARAM_DWSIZE_ERROR = (0x80000000 | 423); // 入参的dwsize字段出错 + public static final int NET_ERROR_LIMITED_MONITORWALL_COUNT = (0x80000000 | 424); // 电视墙数量超过上限 + public static final int NET_ERROR_PART_PROCESS_FAILED = (0x80000000 | 425); // 部分过程执行失败 + public static final int NET_ERROR_TARGET_NOT_SUPPORT = (0x80000000 | 426); // 该功能不支持转发 + public static final int NET_ERROR_VISITE_FILE = (0x80000000 | 510); // 访问文件失败 + public static final int NET_ERROR_DEVICE_STATUS_BUSY = (0x80000000 | 511); // 设备忙 + public static final int NET_USER_PWD_NOT_AUTHORIZED = (0x80000000 | 512); // 修改密码无权限 + public static final int NET_USER_PWD_NOT_STRONG = (0x80000000 | 513); // 密码强度不够 + public static final int NET_ERROR_NO_SUCH_CONFIG = (0x80000000 | 514); // 没有对应的配置 + public static final int NET_ERROR_AUDIO_RECORD_FAILED = (0x80000000 | 515); // 录音失败 + public static final int NET_ERROR_SEND_DATA_FAILED = (0x80000000 | 516); // 数据发送失败 + public static final int NET_ERROR_OBSOLESCENT_INTERFACE = (0x80000000 | 517); // 废弃接口 + public static final int NET_ERROR_INSUFFICIENT_INTERAL_BUF = (0x80000000 | 518); // 内部缓冲不足 + public static final int NET_ERROR_NEED_ENCRYPTION_PASSWORD = (0x80000000 | 519); // 修改设备ip时,需要校验密码 + public static final int NET_ERROR_NOSUPPORT_RECORD = (0x80000000 | 520); // 设备不支持此记录集 + public static final int NET_ERROR_SERIALIZE_ERROR = (0x80000000 | 1010);// 数据序列化错误 + public static final int NET_ERROR_DESERIALIZE_ERROR = (0x80000000 | 1011);// 数据反序列化错误 + public static final int NET_ERROR_LOWRATEWPAN_ID_EXISTED = (0x80000000 | 1012);// 该无线ID已存在 + public static final int NET_ERROR_LOWRATEWPAN_ID_LIMIT = (0x80000000 | 1013);// 无线ID数量已超限 + public static final int NET_ERROR_LOWRATEWPAN_ID_ABNORMAL = (0x80000000 | 1014);// 无线异常添加 + public static final int NET_ERROR_ENCRYPT = (0x80000000 | 1015);// 加密数据失败 + public static final int NET_ERROR_PWD_ILLEGAL = (0x80000000 | 1016);// 新密码不合规范 + public static final int NET_ERROR_DEVICE_ALREADY_INIT = (0x80000000 | 1017);// 设备已经初始化 + public static final int NET_ERROR_SECURITY_CODE = (0x80000000 | 1018);// 安全码错误 + public static final int NET_ERROR_SECURITY_CODE_TIMEOUT = (0x80000000 | 1019);// 安全码超出有效期 + public static final int NET_ERROR_GET_PWD_SPECI = (0x80000000 | 1020);// 获取密码规范失败 + public static final int NET_ERROR_NO_AUTHORITY_OF_OPERATION = (0x80000000 | 1021);// 无权限进行该操作 + public static final int NET_ERROR_DECRYPT = (0x80000000 | 1022);// 解密数据失败 + public static final int NET_ERROR_2D_CODE = (0x80000000 | 1023);// 2D code校验失败 + public static final int NET_ERROR_INVALID_REQUEST = (0x80000000 | 1024);// 非法的RPC请求 + public static final int NET_ERROR_PWD_RESET_DISABLE = (0x80000000 | 1025);// 密码重置功能已关闭 + public static final int NET_ERROR_PLAY_PRIVATE_DATA = (0x80000000 | 1026);// 显示私有数据,比如规则框等失败 + public static final int NET_ERROR_ROBOT_OPERATE_FAILED = (0x80000000 | 1027);// 机器人操作失败 + public static final int NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT = (0x80000000 | 1028);// 图片大小超限 + public static final int NET_ERROR_USERID_INVALID = (0x80000000 | 1029);// 用户ID不存在 + public static final int NET_ERROR_EXTRACTFEATURE_FAILED = (0x80000000 | 1030);// 照片特征值提取失败 + public static final int NET_ERROR_PHOTO_EXIST = (0x80000000 | 1031);// 照片已存在 + public static final int NET_ERROR_PHOTO_OVERFLOW = (0x80000000 | 1032);// 照片数量超过上限 + public static final int NET_ERROR_CHANNEL_ALREADY_OPENED = (0x80000000 | 1033);// 通道已经打开 + public static final int NET_ERROR_CREATE_SOCKET = (0x80000000 | 1034);// 创建套接字失败 + public static final int NET_ERROR_CHANNEL_NUM = (0x80000000 | 1035);// 通道号错误 + public static final int NET_ERROR_PHOTO_FORMAT = (0x80000000 | 1036);// 图片格式错误 + public static final int NET_ERROR_DIGITAL_CERTIFICATE_INTERNAL_ERROR = (0x80000000 | 1037); // 内部错误(比如:相关硬件问题,获取公钥失败,内部接口调用失败,写文件失败等等) + public static final int NET_ERROR_DIGITAL_CERTIFICATE_GET_ID_FAILED = (0x80000000 | 1038); // 获取设备ID失败 + public static final int NET_ERROR_DIGITAL_CERTIFICATE_IMPORT_ILLEGAL = (0x80000000 | 1039); // 证书文件非法(格式不支持或者不是证书文件) + public static final int NET_ERROR_DIGITAL_CERTIFICATE_SN_ERROR = (0x80000000 | 1040); // 证书sn重复或错误或不规范 + public static final int NET_ERROR_DIGITAL_CERTIFICATE_COMMON_NAME_ILLEGAL = (0x80000000 | 1041);// 证书commonName非法(本地设备证书与系统中的不匹配devid_cryptoID,或者对端的不符合规则(devid_crytoID)) + public static final int NET_ERROR_DIGITAL_CERTIFICATE_NO_ROOT_CERT = (0x80000000 | 1042); // 根证书未导入或不存在 + public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_REVOKED = (0x80000000 | 1043); // 证书被吊销 + public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_INVALID = (0x80000000 | 1044); // 证书不可用或未生效或已过期 + public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_ERROR_SIGN = (0x80000000 | 1045); // 证书签名不匹配 + public static final int NET_ERROR_DIGITAL_CERTIFICATE_COUNTS_UPPER_LIMIT = (0x80000000 | 1046); // 超出证书导入上限 + public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_NO_EXIST = (0x80000000 | 1047); // 证书文件不存在(导出证书或者获取对应证书的公钥) + public static final int NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED = (0x80000000 | 1051);// 组ID超过最大值 + // CLIENT_StartListenEx报警事件 - public static final int NET_ALARM_ALARM_EX = 0x2101; // 外部报警,数据字节数与设备报警通道个数相同,每个字节表示一个报警通道的报警状态,1为有报警,0为无报警。 - public static final int NET_MOTION_ALARM_EX = 0x2102; // 动态检测报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的动态检测报警状态,1为有报警,0为无报警。 - public static final int NET_VIDEOLOST_ALARM_EX = 0x2103; // 视频丢失报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的视频丢失报警状态,1为有报警,0为无报警。 - public static final int NET_SHELTER_ALARM_EX = 0x2104; // 视频遮挡报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的遮挡(黑屏)报警状态,1为有报警,0为无报警。 - public static final int NET_DISKFULL_ALARM_EX = 0x2106; // 硬盘满报警,数据为1个字节,1为有硬盘满报警,0为无报警。 - public static final int NET_DISKERROR_ALARM_EX = 0x2107; // 坏硬盘报警,数据为32个字节,每个字节表示一个硬盘的故障报警状态,1为有报警,0为无报警。 - public static final int NET_ALARM_ACC_POWEROFF = 0x211E; // ACC断电报警,数据为 DWORD 0:ACC通电 1:ACC断电 - public static final int NET_ALARM_FRONTDISCONNECT = 0x2132; // 前端IPC断网报警(对应结构体 ALARM_FRONTDISCONNET_INFO) - public static final int NET_ALARM_BATTERYLOWPOWER = 0x2134; // 电池电量低报警(对应结构体 ALARM_BATTERYLOWPOWER_INFO) - public static final int NET_ALARM_TEMPERATURE = 0x2135; // 温度过高报警(对应结构体 ALARM_TEMPERATURE_INFO) - public static final int NET_ALARM_STORAGE_FAILURE_EX = 0x2163; // 存储错误报警(对应结构体 ALARM_STORAGE_FAILURE_EX) - public static final int NET_ALARM_TALKING_INVITE = 0x2171; // 设备请求对方发起对讲事件(对应结构体 ALARM_TALKING_INVITE_INFO) - public static final int NET_ALARM_ALARM_EX2 = 0x2175; // 本地报警事件(对应结构体ALARM_ALARM_INFO_EX2,对NET_ALARM_ALARM_EX升级) - public static final int NET_ALARM_IPC = 0x218c; // IPC报警,IPC通过DVR或NVR上报的本地报警(对应结构体 ALARM_IPC_INFO) - public static final int NET_EVENT_VIDEOABNORMALDETECTION = 0x218e; // 视频异常事件(对应ALARM_VIDEOABNORMAL_DETECTION_INFO) - public static final int NET_ALARM_STORAGE_NOT_EXIST = 0x3167; // 存储组不存在事件(对应结构体 ALARM_STORAGE_NOT_EXIST_INFO) - public static final int NET_ALARM_SCADA_DEV_ALARM = 0x31a2; // 检测采集设备报警事件(对应结构体 ALARM_SCADA_DEV_INFO) - public static final int NET_ALARM_PARKING_CARD = 0x31a4; // 停车刷卡事件(对应结构体 ALARM_PARKING_CARD) - public static final int NET_ALARM_VEHICLE_ACC = 0x31a6; // 车辆ACC报警事件(对应结构体 ALARM_VEHICLE_ACC_INFO) - public static final int NET_ALARM_NEW_FILE = 0x31b3; // 新文件事件(对应 ALARM_NEW_FILE_INFO) - public static final int NET_ALARM_HUMAM_NUMBER_STATISTIC = 0x31cc; // 人数量/客流量统计事件 (对应结构体 ALARM_HUMAN_NUMBER_STATISTIC_INFO) - public static final int NET_ALARM_ARMMODE_CHANGE_EVENT = 0x3175; // 布撤防状态变化事件(对应结构体 ALARM_ARMMODE_CHANGE_INFO) - public static final int NET_ALARM_ACCESS_CTL_NOT_CLOSE = 0x3177; // 门禁未关事件(对应结构体 ALARM_ACCESS_CTL_NOT_CLOSE_INFO) - public static final int NET_ALARM_ACCESS_CTL_BREAK_IN = 0x3178; // 闯入事件(对应结构体 ALARM_ACCESS_CTL_BREAK_IN_INFO) - public static final int NET_ALARM_ACCESS_CTL_EVENT = 0x3181; // 门禁事件(对应结构体 ALARM_ACCESS_CTL_EVENT_INFO) - public static final int NET_URGENCY_ALARM_EX2 = 0x3182; // 紧急报警EX2(对 NET_URGENCY_ALARM_EX 的升级,对应结构体 ALARM_URGENCY_ALARM_EX2, 人为触发的紧急事件, 一般处理是联动外部通讯功能请求帮助 - public static final int NET_ALARM_ACCESS_CTL_STATUS = 0x3185; // 门禁状态事件(对应结构体 ALARM_ACCESS_CTL_STATUS_INFO) - public static final int NET_ALARM_ALARMCLEAR = 0x3187; // 消警事件(对应结构体 ALARM_ALARMCLEAR_INFO ) - public static final int NET_ALARM_RCEMERGENCY_CALL = 0x318b; // 紧急呼叫报警事件(对应结构体 ALARM_RCEMERGENCY_CALL_INFO) - public static final int NET_ALARM_FINGER_PRINT = 0x318d; // 获取指纹事件(对应结构体 ALARM_CAPTURE_FINGER_PRINT_INFO) - public static final int NET_ALARM_BUS_SHARP_ACCELERATE = 0x31ae; // 车辆急加速事件(对应结构体 ALARM_BUS_SHARP_ACCELERATE_INFO) - public static final int NET_ALARM_BUS_SHARP_DECELERATE = 0x31af; // 车辆急减速事件(对应结构体 ALARM_BUS_SHARP_DECELERATE_INFO) - public static final int NET_ALARM_ACCESS_CARD_OPERATE = 0x31b0; // 门禁卡数据操作事件(对应结构体ALARM_ACCESS_CARD_OPERATE_INFO) - public static final int NET_ALARM_WIFI_SEARCH = 0x31c7; // 获取到周围环境中WIFI设备上报事件(对应结构体 ALARM_WIFI_SEARCH_INFO) - public static final int NET_ALARM_HOTSPOT_WARNING = 0X31d8; // 热成像热点异常报警(对应结构体 ALARM_HOTSPOT_WARNING_INFO) - public static final int NET_ALARM_COLDSPOT_WARNING = 0X31d9; // 热成像冷点异常报警(对应结构体 ALARM_COLDSPOT_WARNING_INFO) - public static final int NET_ALARM_FIREWARNING_INFO = 0X31da; // 热成像火情报警信息上报(对应结构体 ALARM_FIREWARNING_INFO_DETAIL) - public static final int NET_ALARM_RADAR_HIGH_SPEED = 0x31df; // 雷达监测超速报警事件 智能楼宇专用 (对应结构体 ALARM_RADAR_HIGH_SPEED_INFO) - public static final int NET_ALARM_POLLING_ALARM = 0x31e0; // 设备巡检报警事件 智能楼宇专用 (对应结构体 ALARM_POLLING_ALARM_INFO) - public static final int NET_ALARM_WIFI_VIRTUALINFO_SEARCH = 0x31ef; // WIFI虚拟身份上报事件(对应结构体 ALARM_WIFI_VIRTUALINFO_SEARCH_INFO) - public static final int NET_ALARM_GPS_NOT_ALIGNED = 0x321d; // GPS未定位报警(对应结构体 ALARM_GPS_NOT_ALIGNED_INFO) - public static final int NET_ALARM_VIDEOBLIND = 0x323e; // 视频遮挡事件(对应结构体 ALARM_VIDEO_BLIND_INFO) - public static final int NET_ALARM_DRIVER_NOTCONFIRM = 0x323f; // 司机未按确认按钮报警事件(对应结构体 ALARM_DRIVER_NOTCONFIRM_INFO) - public static final int NET_ALARM_FACEINFO_COLLECT = 0x3240; // 人脸信息录入事件(对应 ALARM_FACEINFO_COLLECT_INFO) - public static final int NET_ALARM_HIGH_SPEED = 0x3241; // 车辆超速报警事件(对应 ALARM_HIGH_SPEED_INFO ) - public static final int NET_ALARM_VIDEO_LOSS = 0x3242; // 视频丢失事件(对应 ALARM_VIDEO_LOSS_INFO ) - public static final int NET_ALARM_DOWNLOAD_REMOTE_FILE = 0x3301; // 下载远程文件事件(对应 ALARM_DOWNLOAD_REMOTE_FILE_INFO) - public static final int NET_ALARM_TRAFFIC_LINKAGEALARM = 0x3353; // 各种违章事件联动报警输出事件(对应结构体 ALARM_TRAFFIC_LINKAGEALARM_INFO) - - + public static final int NET_ALARM_ALARM_EX = 0x2101; // 外部报警,数据字节数与设备报警通道个数相同,每个字节表示一个报警通道的报警状态,1为有报警,0为无报警。 + public static final int NET_MOTION_ALARM_EX = 0x2102; // 动态检测报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的动态检测报警状态,1为有报警,0为无报警。 + public static final int NET_VIDEOLOST_ALARM_EX = 0x2103; // 视频丢失报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的视频丢失报警状态,1为有报警,0为无报警。 + public static final int NET_SHELTER_ALARM_EX = 0x2104; // 视频遮挡报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的遮挡(黑屏)报警状态,1为有报警,0为无报警。 + public static final int NET_DISKFULL_ALARM_EX = 0x2106; // 硬盘满报警,数据为1个字节,1为有硬盘满报警,0为无报警。 + public static final int NET_DISKERROR_ALARM_EX = 0x2107; // 坏硬盘报警,数据为32个字节,每个字节表示一个硬盘的故障报警状态,1为有报警,0为无报警。 + public static final int NET_ALARM_ACC_POWEROFF = 0x211E; // ACC断电报警,数据为 DWORD 0:ACC通电 1:ACC断电 + public static final int NET_ALARM_FRONTDISCONNECT = 0x2132; // 前端IPC断网报警(对应结构体 ALARM_FRONTDISCONNET_INFO) + public static final int NET_ALARM_BATTERYLOWPOWER = 0x2134; // 电池电量低报警(对应结构体 ALARM_BATTERYLOWPOWER_INFO) + public static final int NET_ALARM_TEMPERATURE = 0x2135; // 温度过高报警(对应结构体 ALARM_TEMPERATURE_INFO) + public static final int NET_ALARM_STORAGE_FAILURE_EX = 0x2163; // 存储错误报警(对应结构体 ALARM_STORAGE_FAILURE_EX) + public static final int NET_ALARM_TALKING_INVITE = 0x2171; // 设备请求对方发起对讲事件(对应结构体 ALARM_TALKING_INVITE_INFO) + public static final int NET_ALARM_ALARM_EX2 = 0x2175; // 本地报警事件(对应结构体ALARM_ALARM_INFO_EX2,对NET_ALARM_ALARM_EX升级) + public static final int NET_ALARM_IPC = 0x218c; // IPC报警,IPC通过DVR或NVR上报的本地报警(对应结构体 ALARM_IPC_INFO) + public static final int NET_EVENT_VIDEOABNORMALDETECTION = 0x218e; // 视频异常事件(对应ALARM_VIDEOABNORMAL_DETECTION_INFO) + public static final int NET_ALARM_STORAGE_NOT_EXIST = 0x3167; // 存储组不存在事件(对应结构体 ALARM_STORAGE_NOT_EXIST_INFO) + public static final int NET_ALARM_SCADA_DEV_ALARM = 0x31a2; // 检测采集设备报警事件(对应结构体 ALARM_SCADA_DEV_INFO) + public static final int NET_ALARM_PARKING_CARD = 0x31a4; // 停车刷卡事件(对应结构体 ALARM_PARKING_CARD) + public static final int NET_ALARM_VEHICLE_ACC = 0x31a6; // 车辆ACC报警事件(对应结构体 ALARM_VEHICLE_ACC_INFO) + public static final int NET_ALARM_NEW_FILE = 0x31b3; // 新文件事件(对应 ALARM_NEW_FILE_INFO) + public static final int NET_ALARM_HUMAM_NUMBER_STATISTIC = 0x31cc; // 人数量/客流量统计事件 (对应结构体 ALARM_HUMAN_NUMBER_STATISTIC_INFO) + public static final int NET_ALARM_ARMMODE_CHANGE_EVENT = 0x3175; // 布撤防状态变化事件(对应结构体 ALARM_ARMMODE_CHANGE_INFO) + public static final int NET_ALARM_ACCESS_CTL_NOT_CLOSE = 0x3177; // 门禁未关事件(对应结构体 ALARM_ACCESS_CTL_NOT_CLOSE_INFO) + public static final int NET_ALARM_ACCESS_CTL_BREAK_IN = 0x3178; // 闯入事件(对应结构体 ALARM_ACCESS_CTL_BREAK_IN_INFO) + public static final int NET_ALARM_ACCESS_CTL_EVENT = 0x3181; // 门禁事件(对应结构体 ALARM_ACCESS_CTL_EVENT_INFO) + public static final int NET_URGENCY_ALARM_EX2 = 0x3182; // 紧急报警EX2(对 NET_URGENCY_ALARM_EX 的升级,对应结构体 ALARM_URGENCY_ALARM_EX2, 人为触发的紧急事件, 一般处理是联动外部通讯功能请求帮助 + public static final int NET_ALARM_ACCESS_CTL_STATUS = 0x3185; // 门禁状态事件(对应结构体 ALARM_ACCESS_CTL_STATUS_INFO) + public static final int NET_ALARM_ALARMCLEAR = 0x3187; // 消警事件(对应结构体 ALARM_ALARMCLEAR_INFO ) + public static final int NET_ALARM_RCEMERGENCY_CALL = 0x318b; // 紧急呼叫报警事件(对应结构体 ALARM_RCEMERGENCY_CALL_INFO) + public static final int NET_ALARM_FINGER_PRINT = 0x318d; // 获取指纹事件(对应结构体 ALARM_CAPTURE_FINGER_PRINT_INFO) + public static final int NET_ALARM_BUS_SHARP_ACCELERATE = 0x31ae; // 车辆急加速事件(对应结构体 ALARM_BUS_SHARP_ACCELERATE_INFO) + public static final int NET_ALARM_BUS_SHARP_DECELERATE = 0x31af; // 车辆急减速事件(对应结构体 ALARM_BUS_SHARP_DECELERATE_INFO) + public static final int NET_ALARM_ACCESS_CARD_OPERATE = 0x31b0; // 门禁卡数据操作事件(对应结构体ALARM_ACCESS_CARD_OPERATE_INFO) + public static final int NET_ALARM_WIFI_SEARCH = 0x31c7; // 获取到周围环境中WIFI设备上报事件(对应结构体 ALARM_WIFI_SEARCH_INFO) + public static final int NET_ALARM_HOTSPOT_WARNING = 0X31d8; // 热成像热点异常报警(对应结构体 ALARM_HOTSPOT_WARNING_INFO) + public static final int NET_ALARM_COLDSPOT_WARNING = 0X31d9; // 热成像冷点异常报警(对应结构体 ALARM_COLDSPOT_WARNING_INFO) + public static final int NET_ALARM_FIREWARNING_INFO = 0X31da; // 热成像火情报警信息上报(对应结构体 ALARM_FIREWARNING_INFO_DETAIL) + public static final int NET_ALARM_RADAR_HIGH_SPEED = 0x31df; // 雷达监测超速报警事件 智能楼宇专用 (对应结构体 ALARM_RADAR_HIGH_SPEED_INFO) + public static final int NET_ALARM_POLLING_ALARM = 0x31e0; // 设备巡检报警事件 智能楼宇专用 (对应结构体 ALARM_POLLING_ALARM_INFO) + public static final int NET_ALARM_WIFI_VIRTUALINFO_SEARCH = 0x31ef; // WIFI虚拟身份上报事件(对应结构体 ALARM_WIFI_VIRTUALINFO_SEARCH_INFO) + public static final int NET_ALARM_GPS_NOT_ALIGNED = 0x321d; // GPS未定位报警(对应结构体 ALARM_GPS_NOT_ALIGNED_INFO) + public static final int NET_ALARM_VIDEOBLIND = 0x323e; // 视频遮挡事件(对应结构体 ALARM_VIDEO_BLIND_INFO) + public static final int NET_ALARM_DRIVER_NOTCONFIRM = 0x323f; // 司机未按确认按钮报警事件(对应结构体 ALARM_DRIVER_NOTCONFIRM_INFO) + public static final int NET_ALARM_FACEINFO_COLLECT = 0x3240; // 人脸信息录入事件(对应 ALARM_FACEINFO_COLLECT_INFO) + public static final int NET_ALARM_HIGH_SPEED = 0x3241; // 车辆超速报警事件(对应 ALARM_HIGH_SPEED_INFO ) + public static final int NET_ALARM_VIDEO_LOSS = 0x3242; // 视频丢失事件(对应 ALARM_VIDEO_LOSS_INFO ) + public static final int NET_ALARM_DOWNLOAD_REMOTE_FILE = 0x3301; // 下载远程文件事件(对应 ALARM_DOWNLOAD_REMOTE_FILE_INFO) + public static final int NET_ALARM_TRAFFIC_LINKAGEALARM = 0x3353; // 各种违章事件联动报警输出事件(对应结构体 ALARM_TRAFFIC_LINKAGEALARM_INFO) + + // 订阅Bus状态对应事件上报(CLIENT_AttachBusState) - public static final int NET_ALARM_BUS_PASSENGER_CARD_CHECK = 0x0009; // 乘客刷卡事件(对应结构体 ALARM_PASSENGER_CARD_CHECK ) - + public static final int NET_ALARM_BUS_PASSENGER_CARD_CHECK = 0x0009; // 乘客刷卡事件(对应结构体 ALARM_PASSENGER_CARD_CHECK ) + // 帧类型掩码定义 - public static final int FRAME_TYPE_MOTION = 0x00000001; // 动检帧 - + public static final int FRAME_TYPE_MOTION = 0x00000001; // 动检帧 + // CLIENT_RealLoadPictureEx 智能抓图事件 - public static final int EVENT_IVS_ALL = 0x00000001; // 订阅所有事件 - public static final int EVENT_IVS_CROSSLINEDETECTION = 0x00000002; // 警戒线事件(对应 DEV_EVENT_CROSSLINE_INFO) - public static final int EVENT_IVS_CROSSREGIONDETECTION = 0x00000003; // 警戒区事件(对应 DEV_EVENT_CROSSREGION_INFO) - public static final int EVENT_IVS_WANDERDETECTION = 0x00000007; // 徘徊事件(对应 DEV_EVENT_WANDER_INFO) - public static final int EVENT_IVS_FIGHTDETECTION = 0x0000000E; // 斗殴事件(对应 DEV_EVENT_FIGHT_INFO) - public static final int EVENT_IVS_TRAFFICJUNCTION = 0x00000017; // 交通路口事件----老规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO) - public static final int EVENT_IVS_TRAFFICGATE = 0x00000018; // 交通卡口事件----老规则(对应 DEV_EVENT_TRAFFICGATE_INFO) - public static final int EVENT_IVS_FACEDETECT = 0x0000001A; // 人脸检测事件 (对应 DEV_EVENT_FACEDETECT_INFO)(智能规则对应 EVENT_IVS_FACEDETECT) - public static final int EVENT_IVS_TRAFFICJAM = 0x0000001B; // 交通拥堵事件(对应 DEV_EVENT_TRAFFICJAM_INFO) - public static final int EVENT_IVS_TRAFFIC_RUNREDLIGHT = 0x00000100; // 交通违章-闯红灯事件(对应 DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO) - public static final int EVENT_IVS_TRAFFIC_OVERLINE = 0x00000101; // 交通违章-压车道线事件(对应 DEV_EVENT_TRAFFIC_OVERLINE_INFO) - public static final int EVENT_IVS_TRAFFIC_RETROGRADE = 0x00000102; // 交通违章-逆行事件(对应 DEV_EVENT_TRAFFIC_RETROGRADE_INFO) - public static final int EVENT_IVS_TRAFFIC_TURNLEFT = 0x00000103; // 交通违章-违章左转(对应 DEV_EVENT_TRAFFIC_TURNLEFT_INFO) - public static final int EVENT_IVS_TRAFFIC_TURNRIGHT = 0x00000104; // 交通违章-违章右转(对应 DEV_EVENT_TRAFFIC_TURNRIGHT_INFO) - public static final int EVENT_IVS_TRAFFIC_UTURN = 0x00000105; // 交通违章-违章掉头(对应 DEV_EVENT_TRAFFIC_UTURN_INFO) - public static final int EVENT_IVS_TRAFFIC_OVERSPEED = 0x00000106; // 交通违章-超速(对应 DEV_EVENT_TRAFFIC_OVERSPEED_INFO) - public static final int EVENT_IVS_TRAFFIC_UNDERSPEED = 0x00000107; // 交通违章-低速(对应 DEV_EVENT_TRAFFIC_UNDERSPEED_INFO) - public static final int EVENT_IVS_TRAFFIC_PARKING = 0x00000108; // 交通违章-违章停车(对应 DEV_EVENT_TRAFFIC_PARKING_INFO) - public static final int EVENT_IVS_TRAFFIC_WRONGROUTE = 0x00000109; // 交通违章-不按车道行驶(对应 DEV_EVENT_TRAFFIC_WRONGROUTE_INFO) - public static final int EVENT_IVS_TRAFFIC_CROSSLANE = 0x0000010A; // 交通违章-违章变道(对应 DEV_EVENT_TRAFFIC_CROSSLANE_INFO) - public static final int EVENT_IVS_TRAFFIC_OVERYELLOWLINE = 0x0000010B; // 交通违章-压黄线 (对应 DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO) + public static final int EVENT_IVS_ALL = 0x00000001; // 订阅所有事件 + public static final int EVENT_IVS_CROSSLINEDETECTION = 0x00000002; // 警戒线事件(对应 DEV_EVENT_CROSSLINE_INFO) + public static final int EVENT_IVS_CROSSREGIONDETECTION = 0x00000003; // 警戒区事件(对应 DEV_EVENT_CROSSREGION_INFO) + public static final int EVENT_IVS_WANDERDETECTION = 0x00000007; // 徘徊事件(对应 DEV_EVENT_WANDER_INFO) + public static final int EVENT_IVS_FIGHTDETECTION = 0x0000000E; // 斗殴事件(对应 DEV_EVENT_FIGHT_INFO) + public static final int EVENT_IVS_TRAFFICJUNCTION = 0x00000017; // 交通路口事件----老规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO) + public static final int EVENT_IVS_TRAFFICGATE = 0x00000018; // 交通卡口事件----老规则(对应 DEV_EVENT_TRAFFICGATE_INFO) + public static final int EVENT_IVS_FACEDETECT = 0x0000001A; // 人脸检测事件 (对应 DEV_EVENT_FACEDETECT_INFO)(智能规则对应 EVENT_IVS_FACEDETECT) + public static final int EVENT_IVS_TRAFFICJAM = 0x0000001B; // 交通拥堵事件(对应 DEV_EVENT_TRAFFICJAM_INFO) + public static final int EVENT_IVS_TRAFFIC_RUNREDLIGHT = 0x00000100; // 交通违章-闯红灯事件(对应 DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO) + public static final int EVENT_IVS_TRAFFIC_OVERLINE = 0x00000101; // 交通违章-压车道线事件(对应 DEV_EVENT_TRAFFIC_OVERLINE_INFO) + public static final int EVENT_IVS_TRAFFIC_RETROGRADE = 0x00000102; // 交通违章-逆行事件(对应 DEV_EVENT_TRAFFIC_RETROGRADE_INFO) + public static final int EVENT_IVS_TRAFFIC_TURNLEFT = 0x00000103; // 交通违章-违章左转(对应 DEV_EVENT_TRAFFIC_TURNLEFT_INFO) + public static final int EVENT_IVS_TRAFFIC_TURNRIGHT = 0x00000104; // 交通违章-违章右转(对应 DEV_EVENT_TRAFFIC_TURNRIGHT_INFO) + public static final int EVENT_IVS_TRAFFIC_UTURN = 0x00000105; // 交通违章-违章掉头(对应 DEV_EVENT_TRAFFIC_UTURN_INFO) + public static final int EVENT_IVS_TRAFFIC_OVERSPEED = 0x00000106; // 交通违章-超速(对应 DEV_EVENT_TRAFFIC_OVERSPEED_INFO) + public static final int EVENT_IVS_TRAFFIC_UNDERSPEED = 0x00000107; // 交通违章-低速(对应 DEV_EVENT_TRAFFIC_UNDERSPEED_INFO) + public static final int EVENT_IVS_TRAFFIC_PARKING = 0x00000108; // 交通违章-违章停车(对应 DEV_EVENT_TRAFFIC_PARKING_INFO) + public static final int EVENT_IVS_TRAFFIC_WRONGROUTE = 0x00000109; // 交通违章-不按车道行驶(对应 DEV_EVENT_TRAFFIC_WRONGROUTE_INFO) + public static final int EVENT_IVS_TRAFFIC_CROSSLANE = 0x0000010A; // 交通违章-违章变道(对应 DEV_EVENT_TRAFFIC_CROSSLANE_INFO) + public static final int EVENT_IVS_TRAFFIC_OVERYELLOWLINE = 0x0000010B; // 交通违章-压黄线 (对应 DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO) public static final int EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE = 0x0000010E; // 交通违章-黄牌车占道事件(对应 DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO) public static final int EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY = 0x0000010F; // 交通违章-斑马线行人优先事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO) - public static final int EVENT_IVS_TRAFFIC_NOPASSING = 0x00000111; // 交通违章-禁止通行事件(对应 DEV_EVENT_TRAFFIC_NOPASSING_INFO) - public static final int EVENT_IVS_FACERECOGNITION = 0x00000117; // 人脸识别事件(对应 DEV_EVENT_FACERECOGNITION_INFO, (对应的智能规则配置 CFG_FACERECOGNITION_INFO) - public static final int EVENT_IVS_TRAFFIC_MANUALSNAP = 0x00000118; // 交通手动抓拍事件(对应 DEV_EENT_TRAFFIC_MANUALSNAP_INFO) - public static final int EVENT_IVS_TRAFFIC_FLOWSTATE = 0x00000119; // 交通流量统计事件(对应 DEV_EVENT_TRAFFIC_FLOW_STATE) - public static final int EVENT_IVS_TRAFFIC_VEHICLEINROUTE = 0x0000011B; // 有车占道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO) - public static final int EVENT_IVS_TRAFFIC_TOLLGATE = 0x00000120; // 交通违章--卡口事件----新规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO) + public static final int EVENT_IVS_TRAFFIC_NOPASSING = 0x00000111; // 交通违章-禁止通行事件(对应 DEV_EVENT_TRAFFIC_NOPASSING_INFO) + public static final int EVENT_IVS_FACERECOGNITION = 0x00000117; // 人脸识别事件(对应 DEV_EVENT_FACERECOGNITION_INFO, (对应的智能规则配置 CFG_FACERECOGNITION_INFO) + public static final int EVENT_IVS_TRAFFIC_MANUALSNAP = 0x00000118; // 交通手动抓拍事件(对应 DEV_EENT_TRAFFIC_MANUALSNAP_INFO) + public static final int EVENT_IVS_TRAFFIC_FLOWSTATE = 0x00000119; // 交通流量统计事件(对应 DEV_EVENT_TRAFFIC_FLOW_STATE) + public static final int EVENT_IVS_TRAFFIC_VEHICLEINROUTE = 0x0000011B; // 有车占道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO) + public static final int EVENT_IVS_TRAFFIC_TOLLGATE = 0x00000120; // 交通违章--卡口事件----新规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO) public static final int EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE = 0x00000124; // 交通违章--占用公交车道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO) - public static final int EVENT_IVS_TRAFFIC_BACKING = 0x00000125; // 交通违章--违章倒车事件(对应 DEV_EVENT_IVS_TRAFFIC_BACKING_INFO) - public static final int EVENT_IVS_AUDIO_ABNORMALDETECTION = 0x00000126; // 声音异常检测(对应 DEV_EVENT_IVS_AUDIO_ABNORMALDETECTION_INFO) - public static final int EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT = 0x00000127; // 交通违章-闯黄灯事件(对应 DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO) - public static final int EVENT_IVS_CLIMBDETECTION = 0x00000128; // 攀高检测事件(对应 DEV_EVENT_IVS_CLIMB_INFO) - public static final int EVENT_IVS_LEAVEDETECTION = 0x00000129; // 离岗检测事件(对应 DEV_EVENT_IVS_LEAVE_INFO) + public static final int EVENT_IVS_TRAFFIC_BACKING = 0x00000125; // 交通违章--违章倒车事件(对应 DEV_EVENT_IVS_TRAFFIC_BACKING_INFO) + public static final int EVENT_IVS_AUDIO_ABNORMALDETECTION = 0x00000126; // 声音异常检测(对应 DEV_EVENT_IVS_AUDIO_ABNORMALDETECTION_INFO) + public static final int EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT = 0x00000127; // 交通违章-闯黄灯事件(对应 DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO) + public static final int EVENT_IVS_CLIMBDETECTION = 0x00000128; // 攀高检测事件(对应 DEV_EVENT_IVS_CLIMB_INFO) + public static final int EVENT_IVS_LEAVEDETECTION = 0x00000129; // 离岗检测事件(对应 DEV_EVENT_IVS_LEAVE_INFO) public static final int EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX = 0x0000012A; // 交通违章--黄网格线抓拍事件(对应 DEV_EVENT_TRAFFIC_PARKINGONYELLOWBOX_INFO) public static final int EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING = 0x0000012B; // 车位有车事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO ) public static final int EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING = 0x0000012C; // 车位无车事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO ) - public static final int EVENT_IVS_TRAFFIC_PEDESTRAIN = 0x0000012D; // 交通行人事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAIN_INFO) - public static final int EVENT_IVS_TRAFFIC_THROW = 0x0000012E; // 交通抛洒物品事件(对应 DEV_EVENT_TRAFFIC_THROW_INFO) - public static final int EVENT_IVS_TRAFFIC_OVERSTOPLINE = 0X00000137; // 交通违章--压停止线事件(对应 DEV_EVENT_TRAFFIC_OVERSTOPLINE) - public static final int EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT = 0x00000138; // 交通违章--交通未系安全带事件(对应 DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT) - public static final int EVENT_IVS_TRAFFIC_PASSNOTINORDER = 0x0000013C; // 交通违章--未按规定依次通行(对应 DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO) - public static final int EVENT_IVS_TRAFFIC_JAM_FORBID_INTO = 0x00000163; // 交通违章--车辆拥堵禁入事件(对应 DEV_EVENT_ALARM_JAMFORBIDINTO_INFO) - public static final int EVENT_IVS_TRAFFIC_FCC = 0x0000016B; // 加油站提枪、挂枪事件(对应 DEV_EVENT_TRAFFIC_FCC_INFO) - public static final int EVENT_IVS_ACCESS_CTL = 0x00000204; // 门禁事件 (对应 DEV_EVENT_ACCESS_CTL_INFO) - public static final int EVENT_IVS_SNAPMANUAL = 0x00000205; // SnapManual事件(对应 DEV_EVENT_SNAPMANUAL) - public static final int EVENT_IVS_CITIZEN_PICTURE_COMPARE = 0x00000209; // 人证比对事件(对应 DEV_EVENT_CITIZEN_PICTURE_COMPARE_INFO ) - public static final int EVENT_IVS_HUMANTRAIT = 0x00000215; // 人体特征事件(对应 DEV_EVENT_HUMANTRAIT_INFO) - public static final int EVENT_IVS_FACEANALYSIS = 0x00000217; // 人脸分析事件 (暂未有具体事件) - public static final int EVENT_IVS_VEHICLE_RECOGNITION = 0x00000231; // 车牌对比事件(中石化智慧加油站项目)(对应 DEV_EVENT_VEHICLE_RECOGNITION_INFO) - public static final int EVENT_IVSS_FACEATTRIBUTE = 0x00000243; // IVSS人脸检测事件 (暂未有具体事件) - public static final int EVENT_IVSS_FACECOMPARE = 0x00000244; // IVSS人脸识别事件 (暂未有具体事件) - + public static final int EVENT_IVS_TRAFFIC_PEDESTRAIN = 0x0000012D; // 交通行人事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAIN_INFO) + public static final int EVENT_IVS_TRAFFIC_THROW = 0x0000012E; // 交通抛洒物品事件(对应 DEV_EVENT_TRAFFIC_THROW_INFO) + public static final int EVENT_IVS_TRAFFIC_OVERSTOPLINE = 0X00000137; // 交通违章--压停止线事件(对应 DEV_EVENT_TRAFFIC_OVERSTOPLINE) + public static final int EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT = 0x00000138; // 交通违章--交通未系安全带事件(对应 DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT) + public static final int EVENT_IVS_TRAFFIC_PASSNOTINORDER = 0x0000013C; // 交通违章--未按规定依次通行(对应 DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO) + public static final int EVENT_IVS_TRAFFIC_JAM_FORBID_INTO = 0x00000163; // 交通违章--车辆拥堵禁入事件(对应 DEV_EVENT_ALARM_JAMFORBIDINTO_INFO) + public static final int EVENT_IVS_TRAFFIC_FCC = 0x0000016B; // 加油站提枪、挂枪事件(对应 DEV_EVENT_TRAFFIC_FCC_INFO) + public static final int EVENT_IVS_ACCESS_CTL = 0x00000204; // 门禁事件 (对应 DEV_EVENT_ACCESS_CTL_INFO) + public static final int EVENT_IVS_SNAPMANUAL = 0x00000205; // SnapManual事件(对应 DEV_EVENT_SNAPMANUAL) + public static final int EVENT_IVS_CITIZEN_PICTURE_COMPARE = 0x00000209; // 人证比对事件(对应 DEV_EVENT_CITIZEN_PICTURE_COMPARE_INFO ) + public static final int EVENT_IVS_HUMANTRAIT = 0x00000215; // 人体特征事件(对应 DEV_EVENT_HUMANTRAIT_INFO) + public static final int EVENT_IVS_FACEANALYSIS = 0x00000217; // 人脸分析事件 (暂未有具体事件) + public static final int EVENT_IVS_VEHICLE_RECOGNITION = 0x00000231; // 车牌对比事件(中石化智慧加油站项目)(对应 DEV_EVENT_VEHICLE_RECOGNITION_INFO) + public static final int EVENT_IVSS_FACEATTRIBUTE = 0x00000243; // IVSS人脸检测事件 (暂未有具体事件) + public static final int EVENT_IVSS_FACECOMPARE = 0x00000244; // IVSS人脸识别事件 (暂未有具体事件) + // CLIENT_GetNewDevConfig / CLIENT_SetNewDevConfig 配置项 - public static final String CFG_CMD_VIDEOWIDGET = "VideoWidget"; // 视频编码物件配置(对应 NET_CFG_VideoWidget ) - public static final String CFG_CMD_ANALYSEGLOBAL = "VideoAnalyseGlobal"; // 视频分析全局配置(对应 CFG_ANALYSEGLOBAL_INFO) - public static final String CFG_CMD_ANALYSEMODULE = "VideoAnalyseModule"; // 物体的检测模块配置(对应 CFG_ANALYSEMODULES_INFO) - public static final String CFG_CMD_ANALYSERULE = "VideoAnalyseRule"; // 视频分析规则配置(对应 CFG_ANALYSERULES_INFO) - public static final String CFG_CMD_VIDEOINOPTIONS = "VideoInOptions"; // 视频输入前端选项(对应CFG_VIDEO_IN_OPTIONS) - public static final String CFG_CMD_RAINBRUSHMODE = "RainBrushMode"; // 雨刷模式相关配置(对应CFG_RAINBRUSHMODE_INFO数组) - public static final String CFG_CMD_RAINBRUSH = "RainBrush"; // 雨刷配置(对应CFG_RAINBRUSH_INFO) - public static final String CFG_CMD_ENCODE = "Encode"; // 图像通道属性配置(对应CFG_ENCODE_INFO) - public static final String CFG_CMD_VIDEO_IN_ZOOM = "VideoInZoom"; // 云台通道变倍配置(对应CFG_VIDEO_IN_ZOOM) - public static final String CFG_CMD_REMOTEDEVICE = "RemoteDevice"; // 远程设备信息(对应 AV_CFG_RemoteDevice 数组, 通道无关) - public static final String CFG_CMD_ANALYSESOURCE = "VideoAnalyseSource"; // 视频分析资源配置(对应 CFG_ANALYSESOURCE_INFO) - public static final String CFG_CMD_TRAFFICGLOBAL = "TrafficGlobal"; // 智能交通全局配置(CFG_TRAFFICGLOBAL_INFO) - public static final String CFG_CMD_RECORDMODE = "RecordMode"; // 录像模式(对应 AV_CFG_RecordMode ) - public static final String CFG_CMD_ALARMLAMP = "AlarmLamp"; // 警灯配置(对应 CFG_ALARMLAMP_INFO) - public static final String CFG_CMD_ALARMOUT = "AlarmOut"; // 报警输出通道配置(对应 CFG_ALARMOUT_INFO ) - public static final String CFG_CMD_INTELLECTIVETRAFFIC = "TrafficSnapshot"; // 智能交通抓拍(对应 CFG_TRAFFICSNAPSHOT_INFO ) - public static final String CFG_CMD_TRAFFICSNAPSHOT_MULTI = "TrafficSnapshotNew" ; // 智能交通抓拍( CFG_TRAFFICSNAPSHOT_NEW_INFO ) - public static final String CFG_CMD_NTP = "NTP"; // 时间同步服务器(对应 CFG_NTP_INFO ) - public static final String CFG_CMD_ALARMINPUT = "Alarm"; // 外部输入报警配置(对应 CFG_ALARMIN_INFO) - public static final String CFG_CMD_DVRIP = "DVRIP"; // 网络协议配置(对应 CFG_DVRIP_INFO) - public static final String CFG_CMD_NETWORK = "Network"; // 网络配置(对应 CFG_NETWORK_INFO) - public static final String CFG_CMD_MONITORWALL = "MonitorWall"; // 电视墙配置(对应 AV_CFG_MonitorWall 数组, 通道无关) - public static final String CFG_CMD_RTMP = "RTMP"; // RTMP配置(对应 CFG_RTMP_INFO) - public static final String CFG_CMD_ACCESS_EVENT = "AccessControl"; // 门禁事件配置(对应 CFG_ACCESS_EVENT_INFO 数组) - public static final String CFG_CMD_ACCESSTIMESCHEDULE = "AccessTimeSchedule"; // 门禁刷卡时间段(对应 CFG_ACCESS_TIMESCHEDULE_INFO) - public static final String CFG_CMD_DEV_GENERRAL = "General"; // 普通配置 (对应 CFG_DEV_DISPOSITION_INFO) - public static final String CFG_CMD_VIDEODIAGNOSIS_PROFILE = "VideoDiagnosisProfile";// 视频诊断参数表(CFG_VIDEODIAGNOSIS_PROFILE) - public static final String CFG_CMD_VIDEODIAGNOSIS_TASK = "VideoDiagnosisTask"; // 视频诊断任务表(CFG_VIDEODIAGNOSIS_TASK) - public static final String CFG_CMD_VIDEODIAGNOSIS_TASK_ONE = "VideoDiagnosisTask.x"; // 视频诊断任务表(CFG_VIDEODIAGNOSIS_TASK) - public static final String CFG_CMD_VIDEODIAGNOSIS_PROJECT = "VideoDiagnosisProject";// 视频诊断计划表(CFG_VIDEODIAGNOSIS_PROJECT) - public static final String CFG_CMD_THERMO_GRAPHY = "ThermographyOptions"; // 热成像摄像头属性配置(CFG_THERMOGRAPHY_INFO) - public static final String CFG_CMD_THERMOMETRY_RULE = "ThermometryRule"; // 热成像测温规则配置(对应 CFG_RADIOMETRY_RULE_INFO) - public static final String CFG_CMD_TEMP_STATISTICS = "TemperatureStatistics"; // 温度统计配置(CFG_TEMP_STATISTICS_INFO) - public static final String CFG_CMD_THERMOMETRY = "HeatImagingThermometry";// 热成像测温全局配置(CFG_THERMOMETRY_INFO) - + public static final String CFG_CMD_VIDEOWIDGET = "VideoWidget"; // 视频编码物件配置(对应 NET_CFG_VideoWidget ) + public static final String CFG_CMD_ANALYSEGLOBAL = "VideoAnalyseGlobal"; // 视频分析全局配置(对应 CFG_ANALYSEGLOBAL_INFO) + public static final String CFG_CMD_ANALYSEMODULE = "VideoAnalyseModule"; // 物体的检测模块配置(对应 CFG_ANALYSEMODULES_INFO) + public static final String CFG_CMD_ANALYSERULE = "VideoAnalyseRule"; // 视频分析规则配置(对应 CFG_ANALYSERULES_INFO) + public static final String CFG_CMD_VIDEOINOPTIONS = "VideoInOptions"; // 视频输入前端选项(对应CFG_VIDEO_IN_OPTIONS) + public static final String CFG_CMD_RAINBRUSHMODE = "RainBrushMode"; // 雨刷模式相关配置(对应CFG_RAINBRUSHMODE_INFO数组) + public static final String CFG_CMD_RAINBRUSH = "RainBrush"; // 雨刷配置(对应CFG_RAINBRUSH_INFO) + public static final String CFG_CMD_ENCODE = "Encode"; // 图像通道属性配置(对应CFG_ENCODE_INFO) + public static final String CFG_CMD_VIDEO_IN_ZOOM = "VideoInZoom"; // 云台通道变倍配置(对应CFG_VIDEO_IN_ZOOM) + public static final String CFG_CMD_REMOTEDEVICE = "RemoteDevice"; // 远程设备信息(对应 AV_CFG_RemoteDevice 数组, 通道无关) + public static final String CFG_CMD_ANALYSESOURCE = "VideoAnalyseSource"; // 视频分析资源配置(对应 CFG_ANALYSESOURCE_INFO) + public static final String CFG_CMD_TRAFFICGLOBAL = "TrafficGlobal"; // 智能交通全局配置(CFG_TRAFFICGLOBAL_INFO) + public static final String CFG_CMD_RECORDMODE = "RecordMode"; // 录像模式(对应 AV_CFG_RecordMode ) + public static final String CFG_CMD_ALARMLAMP = "AlarmLamp"; // 警灯配置(对应 CFG_ALARMLAMP_INFO) + public static final String CFG_CMD_ALARMOUT = "AlarmOut"; // 报警输出通道配置(对应 CFG_ALARMOUT_INFO ) + public static final String CFG_CMD_INTELLECTIVETRAFFIC = "TrafficSnapshot"; // 智能交通抓拍(对应 CFG_TRAFFICSNAPSHOT_INFO ) + public static final String CFG_CMD_TRAFFICSNAPSHOT_MULTI = "TrafficSnapshotNew"; // 智能交通抓拍( CFG_TRAFFICSNAPSHOT_NEW_INFO ) + public static final String CFG_CMD_NTP = "NTP"; // 时间同步服务器(对应 CFG_NTP_INFO ) + public static final String CFG_CMD_ALARMINPUT = "Alarm"; // 外部输入报警配置(对应 CFG_ALARMIN_INFO) + public static final String CFG_CMD_DVRIP = "DVRIP"; // 网络协议配置(对应 CFG_DVRIP_INFO) + public static final String CFG_CMD_NETWORK = "Network"; // 网络配置(对应 CFG_NETWORK_INFO) + public static final String CFG_CMD_MONITORWALL = "MonitorWall"; // 电视墙配置(对应 AV_CFG_MonitorWall 数组, 通道无关) + public static final String CFG_CMD_RTMP = "RTMP"; // RTMP配置(对应 CFG_RTMP_INFO) + public static final String CFG_CMD_ACCESS_EVENT = "AccessControl"; // 门禁事件配置(对应 CFG_ACCESS_EVENT_INFO 数组) + public static final String CFG_CMD_ACCESSTIMESCHEDULE = "AccessTimeSchedule"; // 门禁刷卡时间段(对应 CFG_ACCESS_TIMESCHEDULE_INFO) + public static final String CFG_CMD_DEV_GENERRAL = "General"; // 普通配置 (对应 CFG_DEV_DISPOSITION_INFO) + public static final String CFG_CMD_VIDEODIAGNOSIS_PROFILE = "VideoDiagnosisProfile";// 视频诊断参数表(CFG_VIDEODIAGNOSIS_PROFILE) + public static final String CFG_CMD_VIDEODIAGNOSIS_TASK = "VideoDiagnosisTask"; // 视频诊断任务表(CFG_VIDEODIAGNOSIS_TASK) + public static final String CFG_CMD_VIDEODIAGNOSIS_TASK_ONE = "VideoDiagnosisTask.x"; // 视频诊断任务表(CFG_VIDEODIAGNOSIS_TASK) + public static final String CFG_CMD_VIDEODIAGNOSIS_PROJECT = "VideoDiagnosisProject";// 视频诊断计划表(CFG_VIDEODIAGNOSIS_PROJECT) + public static final String CFG_CMD_THERMO_GRAPHY = "ThermographyOptions"; // 热成像摄像头属性配置(CFG_THERMOGRAPHY_INFO) + public static final String CFG_CMD_THERMOMETRY_RULE = "ThermometryRule"; // 热成像测温规则配置(对应 CFG_RADIOMETRY_RULE_INFO) + public static final String CFG_CMD_TEMP_STATISTICS = "TemperatureStatistics"; // 温度统计配置(CFG_TEMP_STATISTICS_INFO) + public static final String CFG_CMD_THERMOMETRY = "HeatImagingThermometry";// 热成像测温全局配置(CFG_THERMOMETRY_INFO) + // CLIENT_FileTransmit接口传输文件类型 - public static final int NET_DEV_BLACKWHITETRANS_START = 0x0003; // 开始发送黑白名单(对应结构体 NETDEV_BLACKWHITE_LIST_INFO) - public static final int NET_DEV_BLACKWHITETRANS_SEND = 0x0004; // 发送黑白名单 - public static final int NET_DEV_BLACKWHITETRANS_STOP = 0x0005; // 停止发送黑白名单 - + public static final int NET_DEV_BLACKWHITETRANS_START = 0x0003; // 开始发送黑白名单(对应结构体 NETDEV_BLACKWHITE_LIST_INFO) + public static final int NET_DEV_BLACKWHITETRANS_SEND = 0x0004; // 发送黑白名单 + public static final int NET_DEV_BLACKWHITETRANS_STOP = 0x0005; // 停止发送黑白名单 + // 配置类型,对应CLIENT_GetDevConfig和CLIENT_SetDevConfig接口 - public static final int NET_DEV_DEVICECFG = 0x0001; // 设备属性配置 - public static final int NET_DEV_NETCFG_EX = 0x005b; // 网络扩展配置(对应结构体 NETDEV_NET_CFG_EX ) - public static final int NET_DEV_TIMECFG = 0x0008; // DVR时间配置 + public static final int NET_DEV_DEVICECFG = 0x0001; // 设备属性配置 + public static final int NET_DEV_NETCFG_EX = 0x005b; // 网络扩展配置(对应结构体 NETDEV_NET_CFG_EX ) + public static final int NET_DEV_TIMECFG = 0x0008; // DVR时间配置 // 命令类型, 对应 CLIENT_QueryNewSystemInfo 接口 - public static final String CFG_CAP_CMD_DEVICE_STATE = "trafficSnap.getDeviceStatus"; // 获取设备状态信息 (对应 CFG_CAP_TRAFFIC_DEVICE_STATUS) - public static final String CFG_CAP_CMD_RECORDFINDER = "RecordFinder.getCaps"; // 获取查询记录能力集, (对应结构体 CFG_CAP_RECORDFINDER_INFO) - public static final String CFG_CMD_VIDEODIAGNOSIS_GETSTATE = "videoDiagnosisServer.getState"; // 获取视频诊断进行状态(CFG_VIDEODIAGNOSIS_STATE_INFO) - + public static final String CFG_CAP_CMD_DEVICE_STATE = "trafficSnap.getDeviceStatus"; // 获取设备状态信息 (对应 CFG_CAP_TRAFFIC_DEVICE_STATUS) + public static final String CFG_CAP_CMD_RECORDFINDER = "RecordFinder.getCaps"; // 获取查询记录能力集, (对应结构体 CFG_CAP_RECORDFINDER_INFO) + public static final String CFG_CMD_VIDEODIAGNOSIS_GETSTATE = "videoDiagnosisServer.getState"; // 获取视频诊断进行状态(CFG_VIDEODIAGNOSIS_STATE_INFO) + // 远程配置结构体相关常量 - public static final int NET_MAX_MAIL_ADDR_LEN = 128; // 邮件发(收)地址最大长度 - public static final int NET_MAX_MAIL_SUBJECT_LEN = 64; // 邮件主题最大长度 - public static final int NET_MAX_IPADDR_LEN = 16; // IP地址字符串长度 - public static final int NET_MAX_IPADDR_LEN_EX = 40; // 扩展IP地址字符串长度, 支持IPV6 - public static final int NET_USER_NAME_LEN_EX = 32; // 用户名长度,用于新平台扩展 - public static final int NET_USER_PSW_LEN_EX = 32; // 用户密码长度,用于新平台扩展 - - public static final int NET_MAX_DEV_ID_LEN = 48; // 机器编号最大长度 - public static final int NET_MAX_HOST_NAMELEN = 64; // 主机名长度, - public static final int NET_MAX_HOST_PSWLEN = 32; // 密码长度 - public static final int NET_MAX_ETHERNET_NUM = 2; // 以太网口最大个数 - public static final int NET_MAX_ETHERNET_NUM_EX = 10; // 扩展以太网口最大个数 - public static final int NET_DEV_CLASS_LEN = 16; // 设备类型字符串(如"IPC")长度 - public static final int NET_N_WEEKS = 7; // 一周的天数 - public static final int NET_N_TSECT = 6; // 通用时间段个数 - public static final int NET_N_REC_TSECT = 6; // 录像时间段个数 - public static final int NET_N_COL_TSECT = 2; // 颜色时间段个数 - public static final int NET_N_ENCODE_AUX = 3; // 扩展码流个数 - public static final int NET_N_TALK = 1; // 最多对讲通道个数 - public static final int NET_N_COVERS = 1; // 遮挡区域个数 - public static final int NET_N_CHANNEL = 16; // 最大通道个数 - public static final int NET_N_ALARM_TSECT = 2; // 报警提示时间段个数 - public static final int NET_MAX_ALARMOUT_NUM = 16; // 报警输出口个数上限 - public static final int NET_MAX_AUDIO_IN_NUM = 16; // 音频输入口个数上限 - public static final int NET_MAX_VIDEO_IN_NUM = 16; // 视频输入口个数上限 - public static final int NET_MAX_ALARM_IN_NUM = 16; // 报警输入口个数上限 - public static final int NET_MAX_DISK_NUM = 16; // 硬盘个数上限,暂定为16 - public static final int NET_MAX_DECODER_NUM = 16; // 解码器(485)个数上限 - public static final int NET_MAX_232FUNCS = 10; // 232串口功能个数上限 - public static final int NET_MAX_232_NUM = 2; // 232串口个数上限 - public static final int NET_MAX_232_NUM_EX = 16; // 扩展串口配置个数上限 - public static final int NET_MAX_DECPRO_LIST_SIZE = 100; // 解码器协议列表个数上限 - public static final int NET_FTP_MAXDIRLEN = 240; // FTP文件目录最大长度 - public static final int NET_MATRIX_MAXOUT = 16; // 矩阵输出口最大个数 - public static final int NET_TOUR_GROUP_NUM = 6; // 矩阵输出组最大个数 - public static final int NET_MAX_DDNS_NUM = 10; // 设备支持的ddns服务器最大个数 - public static final int NET_MAX_SERVER_TYPE_LEN = 32; // ddns服务器类型,最大字符串长度 - public static final int NET_MAX_DOMAIN_NAME_LEN = 256; // ddns域名,最大字符串长度 - public static final int NET_MAX_DDNS_ALIAS_LEN = 32; // ddns服务器别名,最大字符串长度 - public static final int NET_MAX_DEFAULT_DOMAIN_LEN = 60; // ddns默认域名,最大字符串长度 - public static final int NET_MOTION_ROW = 32; // 动态检测区域的行数 - public static final int NET_MOTION_COL = 32; // 动态检测区域的列数 - public static final int NET_STATIC_ROW = 32; // 静态检测区域的行数 - public static final int NET_STATIC_COL = 32; // 静态检测区域的列数 - public static final int NET_FTP_USERNAME_LEN = 64; // FTP配置,用户名最大长度 - public static final int NET_FTP_PASSWORD_LEN = 64; // FTP配置,密码最大长度 - public static final int NET_TIME_SECTION = 2; // FTP配置,每天时间段个数 - public static final int NET_FTP_MAX_PATH = 240; // FTP配置,文件路径名最大长度 - public static final int NET_FTP_MAX_SUB_PATH = 128; // FTP配置,文件路径名最大长度 - public static final int NET_INTERVIDEO_UCOM_CHANID = 32; // 平台接入配置,U网通通道ID - public static final int NET_INTERVIDEO_UCOM_DEVID = 32; // 平台接入配置,U网通设备ID - public static final int NET_INTERVIDEO_UCOM_REGPSW = 16; // 平台接入配置,U网通注册密码 - public static final int NET_INTERVIDEO_UCOM_USERNAME = 32; // 平台接入配置,U网通用户名 - public static final int NET_INTERVIDEO_UCOM_USERPSW = 32; // 平台接入配置,U网通密码 - public static final int NET_INTERVIDEO_NSS_IP = 32; // 平台接入配置,中兴力维IP - public static final int NET_INTERVIDEO_NSS_SERIAL = 32; // 平台接入配置,中兴力维serial - public static final int NET_INTERVIDEO_NSS_USER = 32; // 平台接入配置,中兴力维user - public static final int NET_INTERVIDEO_NSS_PWD = 50; // 平台接入配置,中兴力维password - public static final int NET_MAX_VIDEO_COVER_NUM = 16; // 遮挡区域最大个数 - public static final int NET_MAX_WATERMAKE_DATA = 4096; // 水印图片数据最大长度 - public static final int NET_MAX_WATERMAKE_LETTER = 128; // 水印文字最大长度 - public static final int NET_MAX_WLANDEVICE_NUM = 10; // 最多搜索出的无线设备个数 - public static final int NET_MAX_WLANDEVICE_NUM_EX = 32; // 最多搜索出的无线设备个数 - public static final int NET_MAX_ALARM_NAME = 64; // 地址长度 - public static final int NET_MAX_REGISTER_SERVER_NUM = 10; // 主动注册服务器个数 - public static final int NET_SNIFFER_FRAMEID_NUM = 6; // 6个FRAME ID 选项 - public static final int NET_SNIFFER_CONTENT_NUM = 4; // 每个FRAME对应的4个抓包内容 - public static final int NET_SNIFFER_CONTENT_NUM_EX = 8; // 每个FRAME对应的8个抓包内容 - public static final int NET_SNIFFER_PROTOCOL_SIZE = 20; // 协议名字长度 - public static final int NET_MAX_PROTOCOL_NAME_LENGTH = 20; - public static final int NET_SNIFFER_GROUP_NUM = 4; // 4组抓包设置 - public static final int NET_ALARM_OCCUR_TIME_LEN = 40; // 新的报警上传时间的长度 - public static final int NET_VIDEO_OSD_NAME_NUM = 64; // 叠加的名称长度,目前支持32个英文,16个中文 - public static final int NET_VIDEO_CUSTOM_OSD_NUM = 8; // 支持的自定义叠加的数目,不包含时间和通道 - public static final int NET_VIDEO_CUSTOM_OSD_NUM_EX = 256; // 支持的自定义叠加的数目,不包含时间和通道 - public static final int NET_CONTROL_AUTO_REGISTER_NUM = 100; // 支持定向主动注册服务器的个数 - public static final int NET_MMS_RECEIVER_NUM = 100; // 支持短信接收者的个数 - public static final int NET_MMS_SMSACTIVATION_NUM = 100; // 支持短信发送者的个数 - public static final int NET_MMS_DIALINACTIVATION_NUM = 100; // 支持拨号发送者的个数 - public static final int NET_MAX_ALARM_IN_NUM_EX = 32; // 报警输入口个数上限 - public static final int NET_MAX_IPADDR_OR_DOMAIN_LEN = 64; // IP地址字符串长度 - public static final int NET_MAX_CALLID = 32; // 呼叫ID - public static final int NET_MAX_FENCE_LINE_NUM = 2; // 围栏最大曲线数 - public static final int MAX_SMART_VALUE_NUM = 30; // 最多的smart信息个数 - public static final int NET_INTERVIDEO_AMP_DEVICESERIAL = 48; // 平台接入配置,天地阳光 设备序列号字符串长度 - public static final int NET_INTERVIDEO_AMP_DEVICENAME = 16; // 平台接入配置,天地阳光 设备名称字符串长度 - public static final int NET_INTERVIDEO_AMP_USER = 32; // 平台接入配置,天地阳光 注册用户名字符串长度 - public static final int NET_INTERVIDEO_AMP_PWD = 32; // 平台接入配置,天地阳光 注册密码字符串长度 - public static final int MAX_SUBMODULE_NUM = 32; // 最多子模块信息个数 - public static final int NET_MAX_CARWAY_NUM = 8; // 交通抓拍,最大车道数 - public static final int NET_MAX_SNAP_SIGNAL_NUM = 3; // 一个车道的最大抓拍张数 - public static final int NET_MAX_CARD_NUM = 128; // 卡号的最大个数 - public static final int NET_MAX_CARDINFO_LEN = 32; // 每条卡号最长字符数 - public static final int NET_MAX_CONTROLER_NUM = 64; // 最大支持控制器数目 - public static final int NET_MAX_LIGHT_NUM = 32; // 最多控制灯组数 - public static final int NET_MAX_SNMP_COMMON_LEN = 64; // snmp 读写数据长度 - public static final int NET_MAX_DDNS_STATE_LEN = 128; // DDNS 状态信息长度 - public static final int NET_MAX_PHONE_NO_LEN = 16; // 电话号码长度 - public static final int NET_MAX_MSGTYPE_LEN = 32; // 导航类型或短信息类型长度 - public static final int NET_MAX_MSG_LEN = 256; // 导航和短信息长度 - public static final int NET_MAX_GRAB_INTERVAL_NUM = 4; // 多张图片抓拍个数 - public static final int NET_MAX_FLASH_NUM = 5; // 最多支持闪光灯个数 - public static final int NET_MAX_ISCSI_PATH_NUM = 64; // ISCSI远程目录最大数量 - public static final int NET_MAX_WIRELESS_CHN_NUM = 256; // 无线路由最大信道数 - public static final int NET_PROTOCOL3_BASE = 100; // 三代协议版本基数 - public static final int NET_PROTOCOL3_SUPPORT = 11; // 只支持3代协议 - public static final int NET_MAX_STAFF_NUM = 20; // 浓缩视频配置信息中标尺数上限 - public static final int NET_MAX_CALIBRATEBOX_NUM = 10; // 浓缩视频配置信息中标定区域数上限 - public static final int NET_MAX_EXCLUDEREGION_NUM = 10; // 浓缩视频配置信息中排除区域数上限 - public static final int NET_MAX_POLYLINE_NUM = 20; // 浓缩视频配置信息中标尺线数 - public static final int NET_MAX_COLOR_NUM = 16; // 最大颜色数目 - public static final int MAX_OBJFILTER_NUM = 16; // 最大过滤种类个数 - public static final int NET_MAX_SYNOPSIS_STATE_NAME = 64; // 视频浓缩状态字符串长度 - public static final int NET_MAX_SYNOPSIS_QUERY_FILE_COUNT = 10; // 视频浓缩相关原始文件按照路径查找时文件个数上限 - public static final int NET_MAX_SSID_LEN = 36; // SSID长度 - public static final int NET_MAX_APPIN_LEN = 16; // PIN码长度 - public static final int NET_NETINTERFACE_NAME_LEN = 260; // 网口名称长度 - public static final int NET_NETINTERFACE_TYPE_LEN = 260; // 网络类型长度 - public static final int NET_MAX_CONNECT_STATUS_LEN = 260; // 连接状态字符串长度 - public static final int NET_MAX_MODE_LEN = 64; // 3G支持的网络模式长度 - public static final int NET_MAX_MODE_NUM = 64; // 3G支持的网络模式个数 - public static final int NET_MAX_COMPRESSION_TYPES_NUM = 16; // 视频编码格式最多种类个数 - public static final int NET_MAX_CAPTURE_SIZE_NUM = 64; // 视频分辨率个数 - public static final int NET_NODE_NAME_LEN = 64; // 组织结构节点名称长度 - public static final int MAX_CALIBPOINTS_NUM = 256; // 支持最大标定点数 - public static final int NET_MAX_ATTR_NUM = 32; // 显示单元属性最大数量 - public static final int NET_MAX_CLOUDCONNECT_STATE_LEN = 128; // 云注册连接状态信息长度 - public static final int NET_MAX_IPADDR_EX_LEN = 128; // 扩展IP地址最大长度 - public static final int MAX_EVENT_NAME = 128; // 最长事件名 - public static final int NET_MAX_ETH_NAME = 64; // 最大网卡名 - public static final int NET_N_SCHEDULE_TSECT = 8; // 时间表元素个数 - public static final int NET_MAX_URL_NUM = 8; // URL最大个数 - public static final int NET_MAX_LOWER_MITRIX_NUM = 16; // 最大下位矩阵数 - public static final int NET_MAX_BURN_CHANNEL_NUM = 32; // 最大刻录通道数 - public static final int NET_MAX_NET_STRORAGE_BLOCK_NUM = 64; // 最大远程存储区块数量 - public static final int NET_MAX_CASE_PERSON_NUM = 32; // 案件人员最大数量 - public static final int NET_MAX_MULTIPLAYBACK_CHANNEL_NUM = 64; // 最大多通道预览回放通道数 - public static final int NET_MAX_MULTIPLAYBACK_SPLIT_NUM = 32; // 最大多通道预览回放分割模式数 - public static final int NET_MAX_AUDIO_ENCODE_TYPE = 64; // 最大语音编码类型个数 - public static final int MAX_CARD_RECORD_FIELD_NUM = 16; // 卡号录像最大域数量 - public static final int NET_BATTERY_NUM_MAX = 16; // 最大电池数量 - public static final int NET_POWER_NUM_MAX = 16; // 最大电源数量 - public static final int NET_MAX_AUDIO_PATH = 260; // 最大音频文件路长度 - public static final int NET_MAX_DOORNAME_LEN = 128; // 最大门禁名称长度 - public static final int NET_MAX_CARDPWD_LEN = 64; // 最大门禁名称长度 - public static final int NET_MAX_FISHEYE_MOUNTMODE_NUM = 4; // 最大鱼眼安装模式个数 - public static final int NET_MAX_FISHEYE_CALIBRATEMODE_NUM = 16; // 最大鱼眼矫正模式个数 - public static final int NET_MAX_FISHEYE_EPTZCMD_NUM = 64; // 最大鱼眼电子云台操作个数 - public static final int POINT_NUM_IN_PAIR = 2; // 标定点对中的点数量 - public static final int MAX_POINT_PAIR_NUM = 128; // 标定点最大数量 - public static final int CHANNEL_NUM_IN_POINT_GROUP = 2; // 标定点中的视频通道数 - public static final int MAX_POINT_GROUP_NUM = 32; // 标定点组最大数量, 每两个通道进行拼接需要一组标定点 - public static final int MAX_LANE_INFO_NUM = 32; // 最大车道信息数 - public static final int MAX_LANE_DIRECTION_NUM = 8; // 车道方向总数 - public static final int NET_MAX_MONITORWALL_NUM = 32; // 电视墙最大数量 - public static final int NET_MAX_OPTIONAL_URL_NUM = 8; // 备用url最大数量 - public static final int NET_MAX_CAMERA_CHANNEL_NUM = 1024; // 最大摄像机通道数 - public static final int MAX_FILE_SUMMARY_NUM = 32; // 最大文件摘要数 - public static final int MAX_AUDIO_ENCODE_NUM = 64; // 最大支持音频编码个数 - - public static final int MAX_FLASH_LIGHT_NUM = 8; // 最大支持的爆闪灯(闪光灯)个数 - public static final int MAX_STROBOSCOPIC_LIGHT_NUM = 8; // 最大支持的频闪灯个数 - public static final int MAX_MOSAIC_NUM = 8; // 最大支持的马赛克数量 - public static final int MAX_MOSAIC_CHANNEL_NUM = 256; // 支持马赛克叠加的最多通道数量 - public static final int MAX_FIREWARNING_INFO_NUM = 4; // 最大热成像着火点报警信息个数 - public static final int MAX_AXLE_NUM = 8; // 最大车轴数量 - public static final int MAX_ACCESSDOOR_NUM = 128; // 最大门数量 - public static final int MAX_SIMILARITY_COUNT = 1024; // 最大人脸对比库阈值个数 - public static final int MAX_FEATURESTATE_NUM = 4; // 最大人脸组建模状态个数 - - public static final int NET_MAX_BULLET_HOLES = 10; // 最大的弹孔数 - - public static final int MAX_NTP_SERVER = 4; // 最大备用NTP服务器地址 - public static final int MAX_PLATE_NUM = 64; // 每张图片中包含的最大车牌个数 - public static final int MAX_PREVIEW_CHANNEL_NUM = 64; // 最大导播预览的通道数量 - public static final int MAX_ADDRESS_LEN = 256; // 最大的地址长度 - public static final int MAX_DNS_SERVER_NUM = 2; // DNS最大数量 - public static final int MAX_NETWORK_INTERFACE_NUM = 32; // 最大网卡数量 - - public static final int MAX_EVENT_RESTORE_UUID = 36; // 事件重传uuid数组大小 - public static final int MAX_EVENT_RESTORE_CODE_NUM = 8; // 最大事件重传类型个数 - public static final int MAX_EVENT_RESOTER_CODE_TYPE = 32; // 事件重传类型数组大小 - public static final int MAX_SNAP_TYPE = 3; // 抓图类型数量 - public static final int MAX_MAINFORMAT_NUM = 4; // 最大支持主码流类型数量 - - public static final int CUSTOM_TITLE_LEN = 1024; // 自定义标题名称长度(扩充到1024) - public static final int MAX_CUSTOM_TITLE_NUM = 8; // 编码物件自定义标题最大数量 - public static final int FORMAT_TYPE_LEN = 16; // 编码类型名最大长度 - - public static final int MAX_CHANNEL_NAME_LEN = 256; // 通道名称最大长度 - - public static final int MAX_VIRTUALINFO_DOMAIN_LEN = 64; // 虚拟身份上网域名长度 - public static final int MAX_VIRTUALINFO_TITLE_LEN = 64; // 虚拟身份上网标题长度 - public static final int MAX_VIRTUALINFO_USERNAME_LEN = 32; // 虚拟身份用户名长度 - public static final int MAX_VIRTUALINFO_PASSWORD_LEN = 32; // 虚拟身份密码长度 - public static final int MAX_VIRTUALINFO_PHONENUM_LEN = 12; // 虚拟身份手机号长度 - public static final int MAX_VIRTUALINFO_IMEI_LEN = 16; // 虚拟身份国际移动设备标识长度 - public static final int MAX_VIRTUALINFO_IMSI_LEN = 16; // 虚拟身份国际移动用户识别码长度 - public static final int MAX_VIRTUALINFO_LATITUDE_LEN = 16; // 虚拟身份经度长度 - public static final int MAX_VIRTUALINFO_LONGITUDE_LEN = 16; // 虚拟身份纬度长度 - public static final int MAX_VIRTUALINFO_NUM = 1024; // 最大虚拟身份信息个数 - public static final int MAX_SCREENTIME_COUNT = 8; // 诱导屏最大开关屏时间个数 - public static final int MAX_PLAYDATES_COUNT = 32; // 最大日期个数 - public static final int MAX_ELEMENTS_COUNT = 8; // 诱导屏窗口支持的最大元素个数 - public static final int MAX_ELEMENTTEXT_LENGTH = 512; // 文本元素最大文本长度 - public static final int MAX_NOTE_COUNT = 4; // 诱导屏窗口元素注释信息最大个数 - public static final int MAX_PROGRAMMES_COUNT = 32; // 最多支持的节目个数 - public static final int MAX_CALL_ID_LEN = 64; // 呼叫ID长度 - public static final int MAX_GD_COUNT = 170; - public static final int MAX_SUNTIME_COUNT = 12; // 日出日落时间个数 - public static final int MAX_DOOR_TIME_SECTION = 4; // 门禁每天分时时间段最大个数 - - public static final int MAX_REMOTEDEVICEINFO_IPADDR_LEN = 128; // 远程设备IP地址最大长度 - public static final int MAX_REMOTEDEVICEINFO_USERNAME_LEN = 128; // 远程设备用户名最大长度 + public static final int NET_MAX_MAIL_ADDR_LEN = 128; // 邮件发(收)地址最大长度 + public static final int NET_MAX_MAIL_SUBJECT_LEN = 64; // 邮件主题最大长度 + public static final int NET_MAX_IPADDR_LEN = 16; // IP地址字符串长度 + public static final int NET_MAX_IPADDR_LEN_EX = 40; // 扩展IP地址字符串长度, 支持IPV6 + public static final int NET_USER_NAME_LEN_EX = 32; // 用户名长度,用于新平台扩展 + public static final int NET_USER_PSW_LEN_EX = 32; // 用户密码长度,用于新平台扩展 + + public static final int NET_MAX_DEV_ID_LEN = 48; // 机器编号最大长度 + public static final int NET_MAX_HOST_NAMELEN = 64; // 主机名长度, + public static final int NET_MAX_HOST_PSWLEN = 32; // 密码长度 + public static final int NET_MAX_ETHERNET_NUM = 2; // 以太网口最大个数 + public static final int NET_MAX_ETHERNET_NUM_EX = 10; // 扩展以太网口最大个数 + public static final int NET_DEV_CLASS_LEN = 16; // 设备类型字符串(如"IPC")长度 + public static final int NET_N_WEEKS = 7; // 一周的天数 + public static final int NET_N_TSECT = 6; // 通用时间段个数 + public static final int NET_N_REC_TSECT = 6; // 录像时间段个数 + public static final int NET_N_COL_TSECT = 2; // 颜色时间段个数 + public static final int NET_N_ENCODE_AUX = 3; // 扩展码流个数 + public static final int NET_N_TALK = 1; // 最多对讲通道个数 + public static final int NET_N_COVERS = 1; // 遮挡区域个数 + public static final int NET_N_CHANNEL = 16; // 最大通道个数 + public static final int NET_N_ALARM_TSECT = 2; // 报警提示时间段个数 + public static final int NET_MAX_ALARMOUT_NUM = 16; // 报警输出口个数上限 + public static final int NET_MAX_AUDIO_IN_NUM = 16; // 音频输入口个数上限 + public static final int NET_MAX_VIDEO_IN_NUM = 16; // 视频输入口个数上限 + public static final int NET_MAX_ALARM_IN_NUM = 16; // 报警输入口个数上限 + public static final int NET_MAX_DISK_NUM = 16; // 硬盘个数上限,暂定为16 + public static final int NET_MAX_DECODER_NUM = 16; // 解码器(485)个数上限 + public static final int NET_MAX_232FUNCS = 10; // 232串口功能个数上限 + public static final int NET_MAX_232_NUM = 2; // 232串口个数上限 + public static final int NET_MAX_232_NUM_EX = 16; // 扩展串口配置个数上限 + public static final int NET_MAX_DECPRO_LIST_SIZE = 100; // 解码器协议列表个数上限 + public static final int NET_FTP_MAXDIRLEN = 240; // FTP文件目录最大长度 + public static final int NET_MATRIX_MAXOUT = 16; // 矩阵输出口最大个数 + public static final int NET_TOUR_GROUP_NUM = 6; // 矩阵输出组最大个数 + public static final int NET_MAX_DDNS_NUM = 10; // 设备支持的ddns服务器最大个数 + public static final int NET_MAX_SERVER_TYPE_LEN = 32; // ddns服务器类型,最大字符串长度 + public static final int NET_MAX_DOMAIN_NAME_LEN = 256; // ddns域名,最大字符串长度 + public static final int NET_MAX_DDNS_ALIAS_LEN = 32; // ddns服务器别名,最大字符串长度 + public static final int NET_MAX_DEFAULT_DOMAIN_LEN = 60; // ddns默认域名,最大字符串长度 + public static final int NET_MOTION_ROW = 32; // 动态检测区域的行数 + public static final int NET_MOTION_COL = 32; // 动态检测区域的列数 + public static final int NET_STATIC_ROW = 32; // 静态检测区域的行数 + public static final int NET_STATIC_COL = 32; // 静态检测区域的列数 + public static final int NET_FTP_USERNAME_LEN = 64; // FTP配置,用户名最大长度 + public static final int NET_FTP_PASSWORD_LEN = 64; // FTP配置,密码最大长度 + public static final int NET_TIME_SECTION = 2; // FTP配置,每天时间段个数 + public static final int NET_FTP_MAX_PATH = 240; // FTP配置,文件路径名最大长度 + public static final int NET_FTP_MAX_SUB_PATH = 128; // FTP配置,文件路径名最大长度 + public static final int NET_INTERVIDEO_UCOM_CHANID = 32; // 平台接入配置,U网通通道ID + public static final int NET_INTERVIDEO_UCOM_DEVID = 32; // 平台接入配置,U网通设备ID + public static final int NET_INTERVIDEO_UCOM_REGPSW = 16; // 平台接入配置,U网通注册密码 + public static final int NET_INTERVIDEO_UCOM_USERNAME = 32; // 平台接入配置,U网通用户名 + public static final int NET_INTERVIDEO_UCOM_USERPSW = 32; // 平台接入配置,U网通密码 + public static final int NET_INTERVIDEO_NSS_IP = 32; // 平台接入配置,中兴力维IP + public static final int NET_INTERVIDEO_NSS_SERIAL = 32; // 平台接入配置,中兴力维serial + public static final int NET_INTERVIDEO_NSS_USER = 32; // 平台接入配置,中兴力维user + public static final int NET_INTERVIDEO_NSS_PWD = 50; // 平台接入配置,中兴力维password + public static final int NET_MAX_VIDEO_COVER_NUM = 16; // 遮挡区域最大个数 + public static final int NET_MAX_WATERMAKE_DATA = 4096; // 水印图片数据最大长度 + public static final int NET_MAX_WATERMAKE_LETTER = 128; // 水印文字最大长度 + public static final int NET_MAX_WLANDEVICE_NUM = 10; // 最多搜索出的无线设备个数 + public static final int NET_MAX_WLANDEVICE_NUM_EX = 32; // 最多搜索出的无线设备个数 + public static final int NET_MAX_ALARM_NAME = 64; // 地址长度 + public static final int NET_MAX_REGISTER_SERVER_NUM = 10; // 主动注册服务器个数 + public static final int NET_SNIFFER_FRAMEID_NUM = 6; // 6个FRAME ID 选项 + public static final int NET_SNIFFER_CONTENT_NUM = 4; // 每个FRAME对应的4个抓包内容 + public static final int NET_SNIFFER_CONTENT_NUM_EX = 8; // 每个FRAME对应的8个抓包内容 + public static final int NET_SNIFFER_PROTOCOL_SIZE = 20; // 协议名字长度 + public static final int NET_MAX_PROTOCOL_NAME_LENGTH = 20; + public static final int NET_SNIFFER_GROUP_NUM = 4; // 4组抓包设置 + public static final int NET_ALARM_OCCUR_TIME_LEN = 40; // 新的报警上传时间的长度 + public static final int NET_VIDEO_OSD_NAME_NUM = 64; // 叠加的名称长度,目前支持32个英文,16个中文 + public static final int NET_VIDEO_CUSTOM_OSD_NUM = 8; // 支持的自定义叠加的数目,不包含时间和通道 + public static final int NET_VIDEO_CUSTOM_OSD_NUM_EX = 256; // 支持的自定义叠加的数目,不包含时间和通道 + public static final int NET_CONTROL_AUTO_REGISTER_NUM = 100; // 支持定向主动注册服务器的个数 + public static final int NET_MMS_RECEIVER_NUM = 100; // 支持短信接收者的个数 + public static final int NET_MMS_SMSACTIVATION_NUM = 100; // 支持短信发送者的个数 + public static final int NET_MMS_DIALINACTIVATION_NUM = 100; // 支持拨号发送者的个数 + public static final int NET_MAX_ALARM_IN_NUM_EX = 32; // 报警输入口个数上限 + public static final int NET_MAX_IPADDR_OR_DOMAIN_LEN = 64; // IP地址字符串长度 + public static final int NET_MAX_CALLID = 32; // 呼叫ID + public static final int NET_MAX_FENCE_LINE_NUM = 2; // 围栏最大曲线数 + public static final int MAX_SMART_VALUE_NUM = 30; // 最多的smart信息个数 + public static final int NET_INTERVIDEO_AMP_DEVICESERIAL = 48; // 平台接入配置,天地阳光 设备序列号字符串长度 + public static final int NET_INTERVIDEO_AMP_DEVICENAME = 16; // 平台接入配置,天地阳光 设备名称字符串长度 + public static final int NET_INTERVIDEO_AMP_USER = 32; // 平台接入配置,天地阳光 注册用户名字符串长度 + public static final int NET_INTERVIDEO_AMP_PWD = 32; // 平台接入配置,天地阳光 注册密码字符串长度 + public static final int MAX_SUBMODULE_NUM = 32; // 最多子模块信息个数 + public static final int NET_MAX_CARWAY_NUM = 8; // 交通抓拍,最大车道数 + public static final int NET_MAX_SNAP_SIGNAL_NUM = 3; // 一个车道的最大抓拍张数 + public static final int NET_MAX_CARD_NUM = 128; // 卡号的最大个数 + public static final int NET_MAX_CARDINFO_LEN = 32; // 每条卡号最长字符数 + public static final int NET_MAX_CONTROLER_NUM = 64; // 最大支持控制器数目 + public static final int NET_MAX_LIGHT_NUM = 32; // 最多控制灯组数 + public static final int NET_MAX_SNMP_COMMON_LEN = 64; // snmp 读写数据长度 + public static final int NET_MAX_DDNS_STATE_LEN = 128; // DDNS 状态信息长度 + public static final int NET_MAX_PHONE_NO_LEN = 16; // 电话号码长度 + public static final int NET_MAX_MSGTYPE_LEN = 32; // 导航类型或短信息类型长度 + public static final int NET_MAX_MSG_LEN = 256; // 导航和短信息长度 + public static final int NET_MAX_GRAB_INTERVAL_NUM = 4; // 多张图片抓拍个数 + public static final int NET_MAX_FLASH_NUM = 5; // 最多支持闪光灯个数 + public static final int NET_MAX_ISCSI_PATH_NUM = 64; // ISCSI远程目录最大数量 + public static final int NET_MAX_WIRELESS_CHN_NUM = 256; // 无线路由最大信道数 + public static final int NET_PROTOCOL3_BASE = 100; // 三代协议版本基数 + public static final int NET_PROTOCOL3_SUPPORT = 11; // 只支持3代协议 + public static final int NET_MAX_STAFF_NUM = 20; // 浓缩视频配置信息中标尺数上限 + public static final int NET_MAX_CALIBRATEBOX_NUM = 10; // 浓缩视频配置信息中标定区域数上限 + public static final int NET_MAX_EXCLUDEREGION_NUM = 10; // 浓缩视频配置信息中排除区域数上限 + public static final int NET_MAX_POLYLINE_NUM = 20; // 浓缩视频配置信息中标尺线数 + public static final int NET_MAX_COLOR_NUM = 16; // 最大颜色数目 + public static final int MAX_OBJFILTER_NUM = 16; // 最大过滤种类个数 + public static final int NET_MAX_SYNOPSIS_STATE_NAME = 64; // 视频浓缩状态字符串长度 + public static final int NET_MAX_SYNOPSIS_QUERY_FILE_COUNT = 10; // 视频浓缩相关原始文件按照路径查找时文件个数上限 + public static final int NET_MAX_SSID_LEN = 36; // SSID长度 + public static final int NET_MAX_APPIN_LEN = 16; // PIN码长度 + public static final int NET_NETINTERFACE_NAME_LEN = 260; // 网口名称长度 + public static final int NET_NETINTERFACE_TYPE_LEN = 260; // 网络类型长度 + public static final int NET_MAX_CONNECT_STATUS_LEN = 260; // 连接状态字符串长度 + public static final int NET_MAX_MODE_LEN = 64; // 3G支持的网络模式长度 + public static final int NET_MAX_MODE_NUM = 64; // 3G支持的网络模式个数 + public static final int NET_MAX_COMPRESSION_TYPES_NUM = 16; // 视频编码格式最多种类个数 + public static final int NET_MAX_CAPTURE_SIZE_NUM = 64; // 视频分辨率个数 + public static final int NET_NODE_NAME_LEN = 64; // 组织结构节点名称长度 + public static final int MAX_CALIBPOINTS_NUM = 256; // 支持最大标定点数 + public static final int NET_MAX_ATTR_NUM = 32; // 显示单元属性最大数量 + public static final int NET_MAX_CLOUDCONNECT_STATE_LEN = 128; // 云注册连接状态信息长度 + public static final int NET_MAX_IPADDR_EX_LEN = 128; // 扩展IP地址最大长度 + public static final int MAX_EVENT_NAME = 128; // 最长事件名 + public static final int NET_MAX_ETH_NAME = 64; // 最大网卡名 + public static final int NET_N_SCHEDULE_TSECT = 8; // 时间表元素个数 + public static final int NET_MAX_URL_NUM = 8; // URL最大个数 + public static final int NET_MAX_LOWER_MITRIX_NUM = 16; // 最大下位矩阵数 + public static final int NET_MAX_BURN_CHANNEL_NUM = 32; // 最大刻录通道数 + public static final int NET_MAX_NET_STRORAGE_BLOCK_NUM = 64; // 最大远程存储区块数量 + public static final int NET_MAX_CASE_PERSON_NUM = 32; // 案件人员最大数量 + public static final int NET_MAX_MULTIPLAYBACK_CHANNEL_NUM = 64; // 最大多通道预览回放通道数 + public static final int NET_MAX_MULTIPLAYBACK_SPLIT_NUM = 32; // 最大多通道预览回放分割模式数 + public static final int NET_MAX_AUDIO_ENCODE_TYPE = 64; // 最大语音编码类型个数 + public static final int MAX_CARD_RECORD_FIELD_NUM = 16; // 卡号录像最大域数量 + public static final int NET_BATTERY_NUM_MAX = 16; // 最大电池数量 + public static final int NET_POWER_NUM_MAX = 16; // 最大电源数量 + public static final int NET_MAX_AUDIO_PATH = 260; // 最大音频文件路长度 + public static final int NET_MAX_DOORNAME_LEN = 128; // 最大门禁名称长度 + public static final int NET_MAX_CARDPWD_LEN = 64; // 最大门禁名称长度 + public static final int NET_MAX_FISHEYE_MOUNTMODE_NUM = 4; // 最大鱼眼安装模式个数 + public static final int NET_MAX_FISHEYE_CALIBRATEMODE_NUM = 16; // 最大鱼眼矫正模式个数 + public static final int NET_MAX_FISHEYE_EPTZCMD_NUM = 64; // 最大鱼眼电子云台操作个数 + public static final int POINT_NUM_IN_PAIR = 2; // 标定点对中的点数量 + public static final int MAX_POINT_PAIR_NUM = 128; // 标定点最大数量 + public static final int CHANNEL_NUM_IN_POINT_GROUP = 2; // 标定点中的视频通道数 + public static final int MAX_POINT_GROUP_NUM = 32; // 标定点组最大数量, 每两个通道进行拼接需要一组标定点 + public static final int MAX_LANE_INFO_NUM = 32; // 最大车道信息数 + public static final int MAX_LANE_DIRECTION_NUM = 8; // 车道方向总数 + public static final int NET_MAX_MONITORWALL_NUM = 32; // 电视墙最大数量 + public static final int NET_MAX_OPTIONAL_URL_NUM = 8; // 备用url最大数量 + public static final int NET_MAX_CAMERA_CHANNEL_NUM = 1024; // 最大摄像机通道数 + public static final int MAX_FILE_SUMMARY_NUM = 32; // 最大文件摘要数 + public static final int MAX_AUDIO_ENCODE_NUM = 64; // 最大支持音频编码个数 + + public static final int MAX_FLASH_LIGHT_NUM = 8; // 最大支持的爆闪灯(闪光灯)个数 + public static final int MAX_STROBOSCOPIC_LIGHT_NUM = 8; // 最大支持的频闪灯个数 + public static final int MAX_MOSAIC_NUM = 8; // 最大支持的马赛克数量 + public static final int MAX_MOSAIC_CHANNEL_NUM = 256; // 支持马赛克叠加的最多通道数量 + public static final int MAX_FIREWARNING_INFO_NUM = 4; // 最大热成像着火点报警信息个数 + public static final int MAX_AXLE_NUM = 8; // 最大车轴数量 + public static final int MAX_ACCESSDOOR_NUM = 128; // 最大门数量 + public static final int MAX_SIMILARITY_COUNT = 1024; // 最大人脸对比库阈值个数 + public static final int MAX_FEATURESTATE_NUM = 4; // 最大人脸组建模状态个数 + + public static final int NET_MAX_BULLET_HOLES = 10; // 最大的弹孔数 + + public static final int MAX_NTP_SERVER = 4; // 最大备用NTP服务器地址 + public static final int MAX_PLATE_NUM = 64; // 每张图片中包含的最大车牌个数 + public static final int MAX_PREVIEW_CHANNEL_NUM = 64; // 最大导播预览的通道数量 + public static final int MAX_ADDRESS_LEN = 256; // 最大的地址长度 + public static final int MAX_DNS_SERVER_NUM = 2; // DNS最大数量 + public static final int MAX_NETWORK_INTERFACE_NUM = 32; // 最大网卡数量 + + public static final int MAX_EVENT_RESTORE_UUID = 36; // 事件重传uuid数组大小 + public static final int MAX_EVENT_RESTORE_CODE_NUM = 8; // 最大事件重传类型个数 + public static final int MAX_EVENT_RESOTER_CODE_TYPE = 32; // 事件重传类型数组大小 + public static final int MAX_SNAP_TYPE = 3; // 抓图类型数量 + public static final int MAX_MAINFORMAT_NUM = 4; // 最大支持主码流类型数量 + + public static final int CUSTOM_TITLE_LEN = 1024; // 自定义标题名称长度(扩充到1024) + public static final int MAX_CUSTOM_TITLE_NUM = 8; // 编码物件自定义标题最大数量 + public static final int FORMAT_TYPE_LEN = 16; // 编码类型名最大长度 + + public static final int MAX_CHANNEL_NAME_LEN = 256; // 通道名称最大长度 + + public static final int MAX_VIRTUALINFO_DOMAIN_LEN = 64; // 虚拟身份上网域名长度 + public static final int MAX_VIRTUALINFO_TITLE_LEN = 64; // 虚拟身份上网标题长度 + public static final int MAX_VIRTUALINFO_USERNAME_LEN = 32; // 虚拟身份用户名长度 + public static final int MAX_VIRTUALINFO_PASSWORD_LEN = 32; // 虚拟身份密码长度 + public static final int MAX_VIRTUALINFO_PHONENUM_LEN = 12; // 虚拟身份手机号长度 + public static final int MAX_VIRTUALINFO_IMEI_LEN = 16; // 虚拟身份国际移动设备标识长度 + public static final int MAX_VIRTUALINFO_IMSI_LEN = 16; // 虚拟身份国际移动用户识别码长度 + public static final int MAX_VIRTUALINFO_LATITUDE_LEN = 16; // 虚拟身份经度长度 + public static final int MAX_VIRTUALINFO_LONGITUDE_LEN = 16; // 虚拟身份纬度长度 + public static final int MAX_VIRTUALINFO_NUM = 1024; // 最大虚拟身份信息个数 + public static final int MAX_SCREENTIME_COUNT = 8; // 诱导屏最大开关屏时间个数 + public static final int MAX_PLAYDATES_COUNT = 32; // 最大日期个数 + public static final int MAX_ELEMENTS_COUNT = 8; // 诱导屏窗口支持的最大元素个数 + public static final int MAX_ELEMENTTEXT_LENGTH = 512; // 文本元素最大文本长度 + public static final int MAX_NOTE_COUNT = 4; // 诱导屏窗口元素注释信息最大个数 + public static final int MAX_PROGRAMMES_COUNT = 32; // 最多支持的节目个数 + public static final int MAX_CALL_ID_LEN = 64; // 呼叫ID长度 + public static final int MAX_GD_COUNT = 170; + public static final int MAX_SUNTIME_COUNT = 12; // 日出日落时间个数 + public static final int MAX_DOOR_TIME_SECTION = 4; // 门禁每天分时时间段最大个数 + + public static final int MAX_REMOTEDEVICEINFO_IPADDR_LEN = 128; // 远程设备IP地址最大长度 + public static final int MAX_REMOTEDEVICEINFO_USERNAME_LEN = 128; // 远程设备用户名最大长度 public static final int MAX_REMOTEDEVICEINFO_USERPSW_LENGTH = 128; // 远程设备密码最大长度 - - public static final int MAX_MANUFACTURER_LEN = 32; // 最大的 MAC地址所属制造商长度 - public static final int MAX_MACHISTORY_SSID_LEN = 24; // 最大的历史SSID长度 - public static final int MAX_MACHISTORY_SSID_NUM = 5; // 历史SSID的最大个数 - - public static final int CFG_MAX_SN_LEN = 32; // 最大设备序列号长度 - public static final int CFG_MAX_ACCESS_CONTROL_ADDRESS_LEN = 64; // 最大的地址长度 - - public static final int MAX_MACADDR_NUM = 8; // 最大物理地址个数 - public static final int MAX_ADD_DEVICE_NUM = 16; // 最大添加设备个数 - public static final int MAX_LINK_DEVICE_NUM = 1024; // 最大连接设备个数 - public static final int MAX_DEVICE_CHANNEL_NUM = 1024; // 设备最大通道个数 - public static final int NET_CFG_MAX_CTRLTYPE_NUM = 16; // 最大道闸控制方式 - public static final int NET_MAX_ALL_SNAP_CAR_COUNT = 32; // 所有车开闸种类个数 - public static final int NET_MAX_BURNING_DEV_NUM = 32; // 最大刻录设备个数 - public static final int NET_BURNING_DEV_NAMELEN = 32; // 刻录设备名字最大长度 - public static final int PTZ_PRESET_NAME_LEN = 64; // 云台预置点名称长度 - public static final int NET_RADIOMETRY_DOFIND_MAX = 32; // 热成像温度统计最大个数 - + + public static final int MAX_MANUFACTURER_LEN = 32; // 最大的 MAC地址所属制造商长度 + public static final int MAX_MACHISTORY_SSID_LEN = 24; // 最大的历史SSID长度 + public static final int MAX_MACHISTORY_SSID_NUM = 5; // 历史SSID的最大个数 + + public static final int CFG_MAX_SN_LEN = 32; // 最大设备序列号长度 + public static final int CFG_MAX_ACCESS_CONTROL_ADDRESS_LEN = 64; // 最大的地址长度 + + public static final int MAX_MACADDR_NUM = 8; // 最大物理地址个数 + public static final int MAX_ADD_DEVICE_NUM = 16; // 最大添加设备个数 + public static final int MAX_LINK_DEVICE_NUM = 1024; // 最大连接设备个数 + public static final int MAX_DEVICE_CHANNEL_NUM = 1024; // 设备最大通道个数 + public static final int NET_CFG_MAX_CTRLTYPE_NUM = 16; // 最大道闸控制方式 + public static final int NET_MAX_ALL_SNAP_CAR_COUNT = 32; // 所有车开闸种类个数 + public static final int NET_MAX_BURNING_DEV_NUM = 32; // 最大刻录设备个数 + public static final int NET_BURNING_DEV_NAMELEN = 32; // 刻录设备名字最大长度 + public static final int PTZ_PRESET_NAME_LEN = 64; // 云台预置点名称长度 + public static final int NET_RADIOMETRY_DOFIND_MAX = 32; // 热成像温度统计最大个数 + // 查询类型,对应CLIENT_QueryDevState接口 - public static final int NET_DEVSTATE_COMM_ALARM = 0x0001; // 查询普通报警状态(包括外部报警,视频丢失,动态检测) - public static final int NET_DEVSTATE_SHELTER_ALARM = 0x0002; // 查询遮挡报警状态 - public static final int NET_DEVSTATE_RECORDING = 0x0003; // 查询录象状态 - public static final int NET_DEVSTATE_DISK = 0x0004; // 查询硬盘信息 - public static final int NET_DEVSTATE_RESOURCE = 0x0005; // 查询系统资源状态 - public static final int NET_DEVSTATE_BITRATE = 0x0006; // 查询通道码流 - public static final int NET_DEVSTATE_CONN = 0x0007; // 查询设备连接状态 - public static final int NET_DEVSTATE_PROTOCAL_VER = 0x0008; // 查询网络协议版本号,pBuf = int* - public static final int NET_DEVSTATE_TALK_ECTYPE = 0x0009; // 查询设备支持的语音对讲格式列表,见结构体NETDEV_TALKFORMAT_LIST - public static final int NET_DEVSTATE_SD_CARD = 0x000A; // 查询SD卡信息(IPC类产品) - public static final int NET_DEVSTATE_BURNING_DEV = 0x000B; // 查询刻录机信息,见结构体NET_BURNING_DEVINFO - public static final int NET_DEVSTATE_BURNING_PROGRESS = 0x000C; // 查询刻录进度 - public static final int NET_DEVSTATE_PLATFORM = 0x000D; // 查询设备支持的接入平台 - public static final int NET_DEVSTATE_CAMERA = 0x000E; // 查询摄像头属性信息(IPC类产品),pBuf = NETDEV_CAMERA_INFO *,可以有多个结构体 - public static final int NET_DEVSTATE_SOFTWARE = 0x000F; // 查询设备软件版本信息 NETDEV_VERSION_INFO - public static final int NET_DEVSTATE_LANGUAGE = 0x0010; // 查询设备支持的语音种类 - public static final int NET_DEVSTATE_DSP = 0x0011; // 查询DSP能力描述(对应结构体NET_DEV_DSP_ENCODECAP) - public static final int NET_DEVSTATE_OEM = 0x0012; // 查询OEM信息 - public static final int NET_DEVSTATE_NET = 0x0013; // 查询网络运行状态信息 - public static final int NET_DEVSTATE_TYPE = 0x0014; // 查询设备类型 - public static final int NET_DEVSTATE_SNAP = 0x0015; // 查询功能属性(IPC类产品) - public static final int NET_DEVSTATE_RECORD_TIME = 0x0016; // 查询最早录像时间和最近录像时间 - public static final int NET_DEVSTATE_NET_RSSI = 0x0017; // 查询无线网络信号强度,见结构体NETDEV_WIRELESS_RSS_INFO - public static final int NET_DEVSTATE_BURNING_ATTACH = 0x0018; // 查询附件刻录选项 - public static final int NET_DEVSTATE_BACKUP_DEV = 0x0019; // 查询备份设备列表 - public static final int NET_DEVSTATE_BACKUP_DEV_INFO = 0x001a; // 查询备份设备详细信息 NETDEV_BACKUP_INFO - public static final int NET_DEVSTATE_BACKUP_FEEDBACK = 0x001b; // 备份进度反馈 - public static final int NET_DEVSTATE_ATM_QUERY_TRADE = 0x001c; // 查询ATM交易类型 - public static final int NET_DEVSTATE_SIP = 0x001d; // 查询sip状态 - public static final int NET_DEVSTATE_VICHILE_STATE = 0x001e; // 查询车载wifi状态 - public static final int NET_DEVSTATE_TEST_EMAIL = 0x001f; // 查询邮件配置是否成功 - public static final int NET_DEVSTATE_SMART_HARD_DISK = 0x0020; // 查询硬盘smart信息 - public static final int NET_DEVSTATE_TEST_SNAPPICTURE = 0x0021; // 查询抓图设置是否成功 - public static final int NET_DEVSTATE_STATIC_ALARM = 0x0022; // 查询静态报警状态 - public static final int NET_DEVSTATE_SUBMODULE_INFO = 0x0023; // 查询设备子模块信息 - public static final int NET_DEVSTATE_DISKDAMAGE = 0x0024; // 查询硬盘坏道能力 - public static final int NET_DEVSTATE_IPC = 0x0025; // 查询设备支持的IPC能力, 见结构体NET_DEV_IPC_INFO - public static final int NET_DEVSTATE_ALARM_ARM_DISARM = 0x0026; // 查询报警布撤防状态 - public static final int NET_DEVSTATE_ACC_POWEROFF_ALARM = 0x0027; // 查询ACC断电报警状态(返回一个DWORD, 1表示断电,0表示通电) - public static final int NET_DEVSTATE_TEST_FTP_SERVER = 0x0028; // 测试FTP服务器连接 - public static final int NET_DEVSTATE_3GFLOW_EXCEED = 0x0029; // 查询3G流量超出阈值状态,(见结构体 NETDEV_3GFLOW_EXCEED_STATE_INFO) - public static final int NET_DEVSTATE_3GFLOW_INFO = 0x002a; // 查询3G网络流量信息,见结构体 NET_DEV_3GFLOW_INFO - public static final int NET_DEVSTATE_VIHICLE_INFO_UPLOAD = 0x002b; // 车载自定义信息上传(见结构体 ALARM_VEHICLE_INFO_UPLOAD) - public static final int NET_DEVSTATE_SPEED_LIMIT = 0x002c; // 查询限速报警状态(见结构体ALARM_SPEED_LIMIT) - public static final int NET_DEVSTATE_DSP_EX = 0x002d; // 查询DSP扩展能力描述(对应结构体 NET_DEV_DSP_ENCODECAP_EX) - public static final int NET_DEVSTATE_3GMODULE_INFO = 0x002e; // 查询3G模块信息(对应结构体NET_DEV_3GMODULE_INFO) - public static final int NET_DEVSTATE_MULTI_DDNS = 0x002f; // 查询多DDNS状态信息(对应结构体NET_DEV_MULTI_DDNS_INFO) - public static final int NET_DEVSTATE_CONFIG_URL = 0x0030; // 查询设备配置URL信息(对应结构体NET_DEV_URL_INFO) - public static final int NET_DEVSTATE_HARDKEY = 0x0031; // 查询HardKey状态(对应结构体NETDEV_HARDKEY_STATE) - public static final int NET_DEVSTATE_ISCSI_PATH = 0x0032; // 查询ISCSI路径列表(对应结构体NETDEV_ISCSI_PATHLIST) - public static final int NET_DEVSTATE_DLPREVIEW_SLIPT_CAP = 0x0033; // 查询设备本地预览支持的分割模式(对应结构体DEVICE_LOCALPREVIEW_SLIPT_CAP) - public static final int NET_DEVSTATE_WIFI_ROUTE_CAP = 0x0034; // 查询无线路由能力信息(对应结构体NETDEV_WIFI_ROUTE_CAP) - public static final int NET_DEVSTATE_ONLINE = 0x0035; // 查询设备的在线状态(返回一个DWORD, 1表示在线, 0表示断线) - public static final int NET_DEVSTATE_PTZ_LOCATION = 0x0036; // 查询云台状态信息(对应结构体 NET_PTZ_LOCATION_INFO) - public static final int NET_DEVSTATE_MONITOR_INFO = 0x0037; // 画面监控辅助信息(对应结构体NETDEV_MONITOR_INFO) - public static final int NET_DEVSTATE_SUBDEVICE = 0x0300; // 查询子设备(电源, 风扇等)状态(对应结构体CFG_DEVICESTATUS_INFO) - public static final int NET_DEVSTATE_RAID_INFO = 0x0038; // 查询RAID状态(对应结构体ALARM_RAID_INFO) - public static final int NET_DEVSTATE_TEST_DDNSDOMAIN = 0x0039; // 测试DDNS域名是否可用 - public static final int NET_DEVSTATE_VIRTUALCAMERA = 0x003a; // 查询虚拟摄像头状态(对应 NETDEV_VIRTUALCAMERA_STATE_INFO) - public static final int NET_DEVSTATE_TRAFFICWORKSTATE = 0x003b; // 获取设备工作视频/线圈模式状态等(对应NETDEV_TRAFFICWORKSTATE_INFO) - public static final int NET_DEVSTATE_ALARM_CAMERA_MOVE = 0x003c; // 获取摄像机移位报警事件状态(对应ALARM_CAMERA_MOVE_INFO) - public static final int NET_DEVSTATE_ALARM = 0x003e; // 获取外部报警状态(对应 NET_CLIENT_ALARM_STATE) - public static final int NET_DEVSTATE_VIDEOLOST = 0x003f; // 获取视频丢失报警状态(对应 NET_CLIENT_VIDEOLOST_STATE) - public static final int NET_DEVSTATE_MOTIONDETECT = 0x0040; // 获取动态监测报警状态(对应 NET_CLIENT_MOTIONDETECT_STATE) - public static final int NET_DEVSTATE_DETAILEDMOTION = 0x0041; // 获取详细的动态监测报警状态(对应 NET_CLIENT_DETAILEDMOTION_STATE) - public static final int NET_DEVSTATE_VEHICLE_INFO = 0x0042; // 获取车载自身各种硬件信息(对应 NETDEV_VEHICLE_INFO) - public static final int NET_DEVSTATE_VIDEOBLIND = 0x0043; // 获取视频遮挡报警状态(对应 NET_CLIENT_VIDEOBLIND_STATE) - public static final int NET_DEVSTATE_3GSTATE_INFO = 0x0044; // 查询3G模块相关信息(对应结构体NETDEV_VEHICLE_3GMODULE) - public static final int NET_DEVSTATE_NETINTERFACE = 0x0045; // 查询网络接口信息(对应 NETDEV_NETINTERFACE_INFO) - - public static final int NET_DEVSTATE_PICINPIC_CHN = 0x0046; // 查询画中画通道号(对应DWORD数组) - public static final int NET_DEVSTATE_COMPOSITE_CHN = 0x0047; // 查询融合屏通道信息(对应 NET_COMPOSITE_CHANNEL数组) - public static final int NET_DEVSTATE_WHOLE_RECORDING = 0x0048; // 查询设备整体录像状态(对应BOOL), 只要有一个通道在录像,即为设备整体状态为录像 - public static final int NET_DEVSTATE_WHOLE_ENCODING = 0x0049; // 查询设备整体编码状态(对应BOOL), 只要有一个通道在编码,即为设备整体状态为编码 - public static final int NET_DEVSTATE_DISK_RECORDE_TIME = 0x004a; // 查询设备硬盘录像时间信息(pBuf = DEV_DISK_RECORD_TIME*,可以有多个结构体) - public static final int NET_DEVSTATE_BURNER_DOOR = 0x004b; // 是否已弹出刻录机光驱门(对应结构体 NET_DEVSTATE_BURNERDOOR) - public static final int NET_DEVSTATE_GET_DATA_CHECK = 0x004c; // 查询光盘数据校验进度(对应 NET_DEVSTATE_DATA_CHECK) - public static final int NET_DEVSTATE_ALARM_IN_CHANNEL = 0x004f; // 查询报警输入通道信息(对应NET_ALARM_IN_CHANNEL数组) - public static final int NET_DEVSTATE_ALARM_CHN_COUNT = 0x0050; // 查询报警通道数(对应NET_ALARM_CHANNEL_COUNT) - public static final int NET_DEVSTATE_PTZ_VIEW_RANGE = 0x0051; // 查询云台可视域状态(对应 NET_OUT_PTZ_VIEW_RANGE_STATUS ) - public static final int NET_DEVSTATE_DEV_CHN_COUNT = 0x0052; // 查询设备通道信息(对应NET_DEV_CHN_COUNT_INFO) - public static final int NET_DEVSTATE_RTSP_URL = 0x0053; // 查询设备支持的RTSP URL列表,见结构体DEV_RTSPURL_LIST - public static final int NET_DEVSTATE_LIMIT_LOGIN_TIME = 0x0054; // 查询设备登录的在线超时时间,返回一个BTYE,(单位:分钟) ,0表示不限制,非零正整数表示限制的分钟数 - public static final int NET_DEVSTATE_GET_COMM_COUNT = 0x0055; // 获取串口数 见结构体NET_GET_COMM_COUNT - public static final int NET_DEVSTATE_RECORDING_DETAIL = 0x0056; // 查询录象状态详细信息(pBuf = NET_RECORD_STATE_DETAIL*) - public static final int NET_DEVSTATE_PTZ_PRESET_LIST = 0x0057; // 获取当前云台的预置点列表(对应结构NET_PTZ_PRESET_LIST) - public static final int NET_DEVSTATE_EXTERNAL_DEVICE = 0x0058; // 外接设备信息(pBuf = NET_EXTERNAL_DEVICE*) - public static final int NET_DEVSTATE_GET_UPGRADE_STATE = 0x0059; // 获取设备升级状态(对应结构 NETDEV_UPGRADE_STATE_INFO) + public static final int NET_DEVSTATE_COMM_ALARM = 0x0001; // 查询普通报警状态(包括外部报警,视频丢失,动态检测) + public static final int NET_DEVSTATE_SHELTER_ALARM = 0x0002; // 查询遮挡报警状态 + public static final int NET_DEVSTATE_RECORDING = 0x0003; // 查询录象状态 + public static final int NET_DEVSTATE_DISK = 0x0004; // 查询硬盘信息 + public static final int NET_DEVSTATE_RESOURCE = 0x0005; // 查询系统资源状态 + public static final int NET_DEVSTATE_BITRATE = 0x0006; // 查询通道码流 + public static final int NET_DEVSTATE_CONN = 0x0007; // 查询设备连接状态 + public static final int NET_DEVSTATE_PROTOCAL_VER = 0x0008; // 查询网络协议版本号,pBuf = int* + public static final int NET_DEVSTATE_TALK_ECTYPE = 0x0009; // 查询设备支持的语音对讲格式列表,见结构体NETDEV_TALKFORMAT_LIST + public static final int NET_DEVSTATE_SD_CARD = 0x000A; // 查询SD卡信息(IPC类产品) + public static final int NET_DEVSTATE_BURNING_DEV = 0x000B; // 查询刻录机信息,见结构体NET_BURNING_DEVINFO + public static final int NET_DEVSTATE_BURNING_PROGRESS = 0x000C; // 查询刻录进度 + public static final int NET_DEVSTATE_PLATFORM = 0x000D; // 查询设备支持的接入平台 + public static final int NET_DEVSTATE_CAMERA = 0x000E; // 查询摄像头属性信息(IPC类产品),pBuf = NETDEV_CAMERA_INFO *,可以有多个结构体 + public static final int NET_DEVSTATE_SOFTWARE = 0x000F; // 查询设备软件版本信息 NETDEV_VERSION_INFO + public static final int NET_DEVSTATE_LANGUAGE = 0x0010; // 查询设备支持的语音种类 + public static final int NET_DEVSTATE_DSP = 0x0011; // 查询DSP能力描述(对应结构体NET_DEV_DSP_ENCODECAP) + public static final int NET_DEVSTATE_OEM = 0x0012; // 查询OEM信息 + public static final int NET_DEVSTATE_NET = 0x0013; // 查询网络运行状态信息 + public static final int NET_DEVSTATE_TYPE = 0x0014; // 查询设备类型 + public static final int NET_DEVSTATE_SNAP = 0x0015; // 查询功能属性(IPC类产品) + public static final int NET_DEVSTATE_RECORD_TIME = 0x0016; // 查询最早录像时间和最近录像时间 + public static final int NET_DEVSTATE_NET_RSSI = 0x0017; // 查询无线网络信号强度,见结构体NETDEV_WIRELESS_RSS_INFO + public static final int NET_DEVSTATE_BURNING_ATTACH = 0x0018; // 查询附件刻录选项 + public static final int NET_DEVSTATE_BACKUP_DEV = 0x0019; // 查询备份设备列表 + public static final int NET_DEVSTATE_BACKUP_DEV_INFO = 0x001a; // 查询备份设备详细信息 NETDEV_BACKUP_INFO + public static final int NET_DEVSTATE_BACKUP_FEEDBACK = 0x001b; // 备份进度反馈 + public static final int NET_DEVSTATE_ATM_QUERY_TRADE = 0x001c; // 查询ATM交易类型 + public static final int NET_DEVSTATE_SIP = 0x001d; // 查询sip状态 + public static final int NET_DEVSTATE_VICHILE_STATE = 0x001e; // 查询车载wifi状态 + public static final int NET_DEVSTATE_TEST_EMAIL = 0x001f; // 查询邮件配置是否成功 + public static final int NET_DEVSTATE_SMART_HARD_DISK = 0x0020; // 查询硬盘smart信息 + public static final int NET_DEVSTATE_TEST_SNAPPICTURE = 0x0021; // 查询抓图设置是否成功 + public static final int NET_DEVSTATE_STATIC_ALARM = 0x0022; // 查询静态报警状态 + public static final int NET_DEVSTATE_SUBMODULE_INFO = 0x0023; // 查询设备子模块信息 + public static final int NET_DEVSTATE_DISKDAMAGE = 0x0024; // 查询硬盘坏道能力 + public static final int NET_DEVSTATE_IPC = 0x0025; // 查询设备支持的IPC能力, 见结构体NET_DEV_IPC_INFO + public static final int NET_DEVSTATE_ALARM_ARM_DISARM = 0x0026; // 查询报警布撤防状态 + public static final int NET_DEVSTATE_ACC_POWEROFF_ALARM = 0x0027; // 查询ACC断电报警状态(返回一个DWORD, 1表示断电,0表示通电) + public static final int NET_DEVSTATE_TEST_FTP_SERVER = 0x0028; // 测试FTP服务器连接 + public static final int NET_DEVSTATE_3GFLOW_EXCEED = 0x0029; // 查询3G流量超出阈值状态,(见结构体 NETDEV_3GFLOW_EXCEED_STATE_INFO) + public static final int NET_DEVSTATE_3GFLOW_INFO = 0x002a; // 查询3G网络流量信息,见结构体 NET_DEV_3GFLOW_INFO + public static final int NET_DEVSTATE_VIHICLE_INFO_UPLOAD = 0x002b; // 车载自定义信息上传(见结构体 ALARM_VEHICLE_INFO_UPLOAD) + public static final int NET_DEVSTATE_SPEED_LIMIT = 0x002c; // 查询限速报警状态(见结构体ALARM_SPEED_LIMIT) + public static final int NET_DEVSTATE_DSP_EX = 0x002d; // 查询DSP扩展能力描述(对应结构体 NET_DEV_DSP_ENCODECAP_EX) + public static final int NET_DEVSTATE_3GMODULE_INFO = 0x002e; // 查询3G模块信息(对应结构体NET_DEV_3GMODULE_INFO) + public static final int NET_DEVSTATE_MULTI_DDNS = 0x002f; // 查询多DDNS状态信息(对应结构体NET_DEV_MULTI_DDNS_INFO) + public static final int NET_DEVSTATE_CONFIG_URL = 0x0030; // 查询设备配置URL信息(对应结构体NET_DEV_URL_INFO) + public static final int NET_DEVSTATE_HARDKEY = 0x0031; // 查询HardKey状态(对应结构体NETDEV_HARDKEY_STATE) + public static final int NET_DEVSTATE_ISCSI_PATH = 0x0032; // 查询ISCSI路径列表(对应结构体NETDEV_ISCSI_PATHLIST) + public static final int NET_DEVSTATE_DLPREVIEW_SLIPT_CAP = 0x0033; // 查询设备本地预览支持的分割模式(对应结构体DEVICE_LOCALPREVIEW_SLIPT_CAP) + public static final int NET_DEVSTATE_WIFI_ROUTE_CAP = 0x0034; // 查询无线路由能力信息(对应结构体NETDEV_WIFI_ROUTE_CAP) + public static final int NET_DEVSTATE_ONLINE = 0x0035; // 查询设备的在线状态(返回一个DWORD, 1表示在线, 0表示断线) + public static final int NET_DEVSTATE_PTZ_LOCATION = 0x0036; // 查询云台状态信息(对应结构体 NET_PTZ_LOCATION_INFO) + public static final int NET_DEVSTATE_MONITOR_INFO = 0x0037; // 画面监控辅助信息(对应结构体NETDEV_MONITOR_INFO) + public static final int NET_DEVSTATE_SUBDEVICE = 0x0300; // 查询子设备(电源, 风扇等)状态(对应结构体CFG_DEVICESTATUS_INFO) + public static final int NET_DEVSTATE_RAID_INFO = 0x0038; // 查询RAID状态(对应结构体ALARM_RAID_INFO) + public static final int NET_DEVSTATE_TEST_DDNSDOMAIN = 0x0039; // 测试DDNS域名是否可用 + public static final int NET_DEVSTATE_VIRTUALCAMERA = 0x003a; // 查询虚拟摄像头状态(对应 NETDEV_VIRTUALCAMERA_STATE_INFO) + public static final int NET_DEVSTATE_TRAFFICWORKSTATE = 0x003b; // 获取设备工作视频/线圈模式状态等(对应NETDEV_TRAFFICWORKSTATE_INFO) + public static final int NET_DEVSTATE_ALARM_CAMERA_MOVE = 0x003c; // 获取摄像机移位报警事件状态(对应ALARM_CAMERA_MOVE_INFO) + public static final int NET_DEVSTATE_ALARM = 0x003e; // 获取外部报警状态(对应 NET_CLIENT_ALARM_STATE) + public static final int NET_DEVSTATE_VIDEOLOST = 0x003f; // 获取视频丢失报警状态(对应 NET_CLIENT_VIDEOLOST_STATE) + public static final int NET_DEVSTATE_MOTIONDETECT = 0x0040; // 获取动态监测报警状态(对应 NET_CLIENT_MOTIONDETECT_STATE) + public static final int NET_DEVSTATE_DETAILEDMOTION = 0x0041; // 获取详细的动态监测报警状态(对应 NET_CLIENT_DETAILEDMOTION_STATE) + public static final int NET_DEVSTATE_VEHICLE_INFO = 0x0042; // 获取车载自身各种硬件信息(对应 NETDEV_VEHICLE_INFO) + public static final int NET_DEVSTATE_VIDEOBLIND = 0x0043; // 获取视频遮挡报警状态(对应 NET_CLIENT_VIDEOBLIND_STATE) + public static final int NET_DEVSTATE_3GSTATE_INFO = 0x0044; // 查询3G模块相关信息(对应结构体NETDEV_VEHICLE_3GMODULE) + public static final int NET_DEVSTATE_NETINTERFACE = 0x0045; // 查询网络接口信息(对应 NETDEV_NETINTERFACE_INFO) + + public static final int NET_DEVSTATE_PICINPIC_CHN = 0x0046; // 查询画中画通道号(对应DWORD数组) + public static final int NET_DEVSTATE_COMPOSITE_CHN = 0x0047; // 查询融合屏通道信息(对应 NET_COMPOSITE_CHANNEL数组) + public static final int NET_DEVSTATE_WHOLE_RECORDING = 0x0048; // 查询设备整体录像状态(对应BOOL), 只要有一个通道在录像,即为设备整体状态为录像 + public static final int NET_DEVSTATE_WHOLE_ENCODING = 0x0049; // 查询设备整体编码状态(对应BOOL), 只要有一个通道在编码,即为设备整体状态为编码 + public static final int NET_DEVSTATE_DISK_RECORDE_TIME = 0x004a; // 查询设备硬盘录像时间信息(pBuf = DEV_DISK_RECORD_TIME*,可以有多个结构体) + public static final int NET_DEVSTATE_BURNER_DOOR = 0x004b; // 是否已弹出刻录机光驱门(对应结构体 NET_DEVSTATE_BURNERDOOR) + public static final int NET_DEVSTATE_GET_DATA_CHECK = 0x004c; // 查询光盘数据校验进度(对应 NET_DEVSTATE_DATA_CHECK) + public static final int NET_DEVSTATE_ALARM_IN_CHANNEL = 0x004f; // 查询报警输入通道信息(对应NET_ALARM_IN_CHANNEL数组) + public static final int NET_DEVSTATE_ALARM_CHN_COUNT = 0x0050; // 查询报警通道数(对应NET_ALARM_CHANNEL_COUNT) + public static final int NET_DEVSTATE_PTZ_VIEW_RANGE = 0x0051; // 查询云台可视域状态(对应 NET_OUT_PTZ_VIEW_RANGE_STATUS ) + public static final int NET_DEVSTATE_DEV_CHN_COUNT = 0x0052; // 查询设备通道信息(对应NET_DEV_CHN_COUNT_INFO) + public static final int NET_DEVSTATE_RTSP_URL = 0x0053; // 查询设备支持的RTSP URL列表,见结构体DEV_RTSPURL_LIST + public static final int NET_DEVSTATE_LIMIT_LOGIN_TIME = 0x0054; // 查询设备登录的在线超时时间,返回一个BTYE,(单位:分钟) ,0表示不限制,非零正整数表示限制的分钟数 + public static final int NET_DEVSTATE_GET_COMM_COUNT = 0x0055; // 获取串口数 见结构体NET_GET_COMM_COUNT + public static final int NET_DEVSTATE_RECORDING_DETAIL = 0x0056; // 查询录象状态详细信息(pBuf = NET_RECORD_STATE_DETAIL*) + public static final int NET_DEVSTATE_PTZ_PRESET_LIST = 0x0057; // 获取当前云台的预置点列表(对应结构NET_PTZ_PRESET_LIST) + public static final int NET_DEVSTATE_EXTERNAL_DEVICE = 0x0058; // 外接设备信息(pBuf = NET_EXTERNAL_DEVICE*) + public static final int NET_DEVSTATE_GET_UPGRADE_STATE = 0x0059; // 获取设备升级状态(对应结构 NETDEV_UPGRADE_STATE_INFO) public static final int NET_DEVSTATE_MULTIPLAYBACK_SPLIT_CAP = 0x005a; // 获取多通道预览分割能力( 对应结构体 NET_MULTIPLAYBACK_SPLIT_CAP ) - public static final int NET_DEVSTATE_BURN_SESSION_NUM = 0x005b; // 获取刻录会话总数(pBuf = int*) - public static final int NET_DEVSTATE_PROTECTIVE_CAPSULE = 0X005c; // 查询防护舱状态(对应结构体ALARM_PROTECTIVE_CAPSULE_INFO) - public static final int NET_DEVSTATE_GET_DOORWORK_MODE = 0X005d; // 获取门锁控制模式( 对应 NET_GET_DOORWORK_MODE) - public static final int NET_DEVSTATE_PTZ_ZOOM_INFO = 0x005e; // 查询云台获取光学变倍信息(对应 NET_OUT_PTZ_ZOOM_INFO ) - - public static final int NET_DEVSTATE_POWER_STATE = 0x0152; // 查询电源状态(对应结构体NET_POWER_STATUS) - public static final int NET_DEVSTATE_ALL_ALARM_CHANNELS_STATE = 0x153; // 查询报警通道状态(对应结构体 NET_CLIENT_ALARM_CHANNELS_STATE) - public static final int NET_DEVSTATE_ALARMKEYBOARD_COUNT = 0x0154; // 查询串口上连接的报警键盘数(对应结构体NET_ALARMKEYBOARD_COUNT) - public static final int NET_DEVSTATE_EXALARMCHANNELS = 0x0155; // 查询扩展报警模块通道映射关系(对应结构体 NET_EXALARMCHANNELS) - public static final int NET_DEVSTATE_GET_BYPASS = 0x0156; // 查询通道旁路状态(对应结构体 NET_DEVSTATE_GET_BYPASS) - public static final int NET_DEVSTATE_ACTIVATEDDEFENCEAREA = 0x0157; // 获取激活的防区信息(对应结构体 NET_ACTIVATEDDEFENCEAREA) - public static final int NET_DEVSTATE_DEV_RECORDSET = 0x0158; // 查询设备记录集信息(对应 NET_CTRL_RECORDSET_PARAM) - public static final int NET_DEVSTATE_DOOR_STATE = 0x0159; // 查询门禁状态(对应NET_DOOR_STATUS_INFO) - public static final int NET_DEVSTATE_ANALOGALARM_CHANNELS = 0x1560; // 模拟量报警输入通道映射关系(对应NET_ANALOGALARM_CHANNELS) - public static final int NET_DEVSTATE_GET_SENSORLIST = 0x1561; // 获取设备支持的传感器列表(对应 NET_SENSOR_LIST) - public static final int NET_DEVSTATE_ALARM_CHANNELS = 0x1562; // 查询开关量报警模块通道映射关系(对应结构体 NET_ALARM_CHANNELS) - // 如果设备不支持查询扩展报警模块通道,可以用该功能查询扩展通道的逻辑通道号,并当做本地报警通道使用 + public static final int NET_DEVSTATE_BURN_SESSION_NUM = 0x005b; // 获取刻录会话总数(pBuf = int*) + public static final int NET_DEVSTATE_PROTECTIVE_CAPSULE = 0X005c; // 查询防护舱状态(对应结构体ALARM_PROTECTIVE_CAPSULE_INFO) + public static final int NET_DEVSTATE_GET_DOORWORK_MODE = 0X005d; // 获取门锁控制模式( 对应 NET_GET_DOORWORK_MODE) + public static final int NET_DEVSTATE_PTZ_ZOOM_INFO = 0x005e; // 查询云台获取光学变倍信息(对应 NET_OUT_PTZ_ZOOM_INFO ) + + public static final int NET_DEVSTATE_POWER_STATE = 0x0152; // 查询电源状态(对应结构体NET_POWER_STATUS) + public static final int NET_DEVSTATE_ALL_ALARM_CHANNELS_STATE = 0x153; // 查询报警通道状态(对应结构体 NET_CLIENT_ALARM_CHANNELS_STATE) + public static final int NET_DEVSTATE_ALARMKEYBOARD_COUNT = 0x0154; // 查询串口上连接的报警键盘数(对应结构体NET_ALARMKEYBOARD_COUNT) + public static final int NET_DEVSTATE_EXALARMCHANNELS = 0x0155; // 查询扩展报警模块通道映射关系(对应结构体 NET_EXALARMCHANNELS) + public static final int NET_DEVSTATE_GET_BYPASS = 0x0156; // 查询通道旁路状态(对应结构体 NET_DEVSTATE_GET_BYPASS) + public static final int NET_DEVSTATE_ACTIVATEDDEFENCEAREA = 0x0157; // 获取激活的防区信息(对应结构体 NET_ACTIVATEDDEFENCEAREA) + public static final int NET_DEVSTATE_DEV_RECORDSET = 0x0158; // 查询设备记录集信息(对应 NET_CTRL_RECORDSET_PARAM) + public static final int NET_DEVSTATE_DOOR_STATE = 0x0159; // 查询门禁状态(对应NET_DOOR_STATUS_INFO) + public static final int NET_DEVSTATE_ANALOGALARM_CHANNELS = 0x1560; // 模拟量报警输入通道映射关系(对应NET_ANALOGALARM_CHANNELS) + public static final int NET_DEVSTATE_GET_SENSORLIST = 0x1561; // 获取设备支持的传感器列表(对应 NET_SENSOR_LIST) + public static final int NET_DEVSTATE_ALARM_CHANNELS = 0x1562; // 查询开关量报警模块通道映射关系(对应结构体 NET_ALARM_CHANNELS) + // 如果设备不支持查询扩展报警模块通道,可以用该功能查询扩展通道的逻辑通道号,并当做本地报警通道使用 public static final int NET_DEVSTATE_GET_ALARM_SUBSYSTEM_ACTIVATESTATUS = 0x1563; // 获取当前子系统启用状态( 对应 NET_GET_ALARM_SUBSYSTEM_ACTIVATE_STATUES) - public static final int NET_DEVSTATE_AIRCONDITION_STATE = 0x1564; // 获取空调工作状态(对应 NET_GET_AIRCONDITION_STATE) - public static final int NET_DEVSTATE_ALARMSUBSYSTEM_STATE = 0x1565; // 获取子系统状态(对应NET_ALARM_SUBSYSTEM_STATE) - public static final int NET_DEVSTATE_ALARM_FAULT_STATE = 0x1566; // 获取故障状态(对应 NET_ALARM_FAULT_STATE_INFO) - public static final int NET_DEVSTATE_DEFENCE_STATE = 0x1567; // 获取防区状态(对应 NET_DEFENCE_STATE_INFO, 和旁路状态变化事件、本地报警事件、报警信号源事件的状态描述有区别,不能混用,仅个别设备使用) - public static final int NET_DEVSTATE_CLUSTER_STATE = 0x1568; // 获取集群状态(对应 NET_CLUSTER_STATE_INFO) - public static final int NET_DEVSTATE_SCADA_POINT_LIST = 0x1569; // 获取点位表路径信息(对应 NET_SCADA_POINT_LIST_INFO) - public static final int NET_DEVSTATE_SCADA_INFO = 0x156a; // 获取监测点位信息(对应 NET_SCADA_INFO) - public static final int NET_DEVSTATE_SCADA_CAPS = 0X156b; // 获取SCADA能力集(对应 NET_SCADA_CAPS) - public static final int NET_DEVSTATE_GET_CODEID_COUNT = 0x156c; // 获取对码成功的总条数(对应 NET_GET_CODEID_COUNT) - public static final int NET_DEVSTATE_GET_CODEID_LIST = 0x156d; // 查询对码信息(对应 NET_GET_CODEID_LIST) - public static final int NET_DEVSTATE_ANALOGALARM_DATA = 0x156e; // 查询模拟量通道数据(对应 NET_GET_ANALOGALARM_DATA) - public static final int NET_DEVSTATE_VTP_CALLSTATE = 0x156f; // 获取视频电话呼叫状态(对应 NET_GET_VTP_CALLSTATE) - public static final int NET_DEVSTATE_SCADA_INFO_BY_ID = 0x1570; // 通过设备、获取监测点位信息(对应 NET_SCADA_INFO_BY_ID) - public static final int NET_DEVSTATE_SCADA_DEVICE_LIST = 0x1571; // 获取当前主机所接入的外部设备ID(对应 NET_SCADA_DEVICE_LIST) - public static final int NET_DEVSTATE_DEV_RECORDSET_EX = 0x1572; // 查询设备记录集信息(带二进制数据)(对应NET_CTRL_RECORDSET_PARAM) - public static final int NET_DEVSTATE_ACCESS_LOCK_VER = 0x1573; // 获取门锁软件版本号(对应 NET_ACCESS_LOCK_VER) - public static final int NET_DEVSTATE_MONITORWALL_TVINFO = 0x1574; // 获取电视墙显示信息(对应 NET_CTRL_MONITORWALL_TVINFO) - public static final int NET_DEVSTATE_GET_ALL_POS = 0x1575; // 获取所有用户可用Pos设备配置信息(对应 NET_POS_ALL_INFO) - public static final int NET_DEVSTATE_GET_ROAD_LIST = 0x1576; // 获取城市及路段编码信息,哥伦比亚项目专用(对应 NET_ROAD_LIST_INFO) - public static final int NET_DEVSTATE_GET_HEAT_MAP = 0x1577; // 获取热度统计信息(对应 NET_QUERY_HEAT_MAP) - public static final int NET_DEVSTATE_GET_WORK_STATE = 0x1578; // 获取盒子工作状态信息(对应 NET_QUERY_WORK_STATE ) - public static final int NET_DEVSTATE_GET_WIRESSLESS_STATE = 0x1579; // 获取无线设备状态信息(对应 NET_GET_WIRELESS_DEVICE_STATE) + public static final int NET_DEVSTATE_AIRCONDITION_STATE = 0x1564; // 获取空调工作状态(对应 NET_GET_AIRCONDITION_STATE) + public static final int NET_DEVSTATE_ALARMSUBSYSTEM_STATE = 0x1565; // 获取子系统状态(对应NET_ALARM_SUBSYSTEM_STATE) + public static final int NET_DEVSTATE_ALARM_FAULT_STATE = 0x1566; // 获取故障状态(对应 NET_ALARM_FAULT_STATE_INFO) + public static final int NET_DEVSTATE_DEFENCE_STATE = 0x1567; // 获取防区状态(对应 NET_DEFENCE_STATE_INFO, 和旁路状态变化事件、本地报警事件、报警信号源事件的状态描述有区别,不能混用,仅个别设备使用) + public static final int NET_DEVSTATE_CLUSTER_STATE = 0x1568; // 获取集群状态(对应 NET_CLUSTER_STATE_INFO) + public static final int NET_DEVSTATE_SCADA_POINT_LIST = 0x1569; // 获取点位表路径信息(对应 NET_SCADA_POINT_LIST_INFO) + public static final int NET_DEVSTATE_SCADA_INFO = 0x156a; // 获取监测点位信息(对应 NET_SCADA_INFO) + public static final int NET_DEVSTATE_SCADA_CAPS = 0X156b; // 获取SCADA能力集(对应 NET_SCADA_CAPS) + public static final int NET_DEVSTATE_GET_CODEID_COUNT = 0x156c; // 获取对码成功的总条数(对应 NET_GET_CODEID_COUNT) + public static final int NET_DEVSTATE_GET_CODEID_LIST = 0x156d; // 查询对码信息(对应 NET_GET_CODEID_LIST) + public static final int NET_DEVSTATE_ANALOGALARM_DATA = 0x156e; // 查询模拟量通道数据(对应 NET_GET_ANALOGALARM_DATA) + public static final int NET_DEVSTATE_VTP_CALLSTATE = 0x156f; // 获取视频电话呼叫状态(对应 NET_GET_VTP_CALLSTATE) + public static final int NET_DEVSTATE_SCADA_INFO_BY_ID = 0x1570; // 通过设备、获取监测点位信息(对应 NET_SCADA_INFO_BY_ID) + public static final int NET_DEVSTATE_SCADA_DEVICE_LIST = 0x1571; // 获取当前主机所接入的外部设备ID(对应 NET_SCADA_DEVICE_LIST) + public static final int NET_DEVSTATE_DEV_RECORDSET_EX = 0x1572; // 查询设备记录集信息(带二进制数据)(对应NET_CTRL_RECORDSET_PARAM) + public static final int NET_DEVSTATE_ACCESS_LOCK_VER = 0x1573; // 获取门锁软件版本号(对应 NET_ACCESS_LOCK_VER) + public static final int NET_DEVSTATE_MONITORWALL_TVINFO = 0x1574; // 获取电视墙显示信息(对应 NET_CTRL_MONITORWALL_TVINFO) + public static final int NET_DEVSTATE_GET_ALL_POS = 0x1575; // 获取所有用户可用Pos设备配置信息(对应 NET_POS_ALL_INFO) + public static final int NET_DEVSTATE_GET_ROAD_LIST = 0x1576; // 获取城市及路段编码信息,哥伦比亚项目专用(对应 NET_ROAD_LIST_INFO) + public static final int NET_DEVSTATE_GET_HEAT_MAP = 0x1577; // 获取热度统计信息(对应 NET_QUERY_HEAT_MAP) + public static final int NET_DEVSTATE_GET_WORK_STATE = 0x1578; // 获取盒子工作状态信息(对应 NET_QUERY_WORK_STATE ) + public static final int NET_DEVSTATE_GET_WIRESSLESS_STATE = 0x1579; // 获取无线设备状态信息(对应 NET_GET_WIRELESS_DEVICE_STATE) public static final int NET_DEVSTATE_GET_REDUNDANCE_POWER_INFO = 0x157a; // 获取冗余电源信息(对应 NET_GET_REDUNDANCE_POWER_INFO) - + // 查询设备信息类型, 对应接口 CLIENT_QueryDevInfo // 设备信息类型,对应CLIENT_QueryDevInfo接口 - public static final int NET_QUERY_DEV_STORAGE_NAMES = 0x01; // 查询设备的存储模块名列表 , pInBuf=NET_IN_STORAGE_DEV_NAMES *, pOutBuf=NET_OUT_STORAGE_DEV_NAMES * - public static final int NET_QUERY_DEV_STORAGE_INFOS = 0x02; // 查询设备的存储模块信息列表, pInBuf=NET_IN_STORAGE_DEV_INFOS*, pOutBuf= NET_OUT_STORAGE_DEV_INFOS * - public static final int NET_QUERY_RECENCY_JNNCTION_CAR_INFO = 0x03; // 查询最近的卡口车辆信息接口, pInBuf=NET_IN_GET_RECENCY_JUNCTION_CAR_INFO*, pOutBuf=NET_OUT_GET_RECENCY_JUNCTION_CAR_INFO* - public static final int NET_QUERY_LANES_STATE = 0x04; // 查询车道信息,pInBuf = NET_IN_GET_LANES_STATE , pOutBuf = NET_OUT_GET_LANES_STATE - public static final int NET_QUERY_DEV_FISHEYE_WININFO = 0x05; // 查询鱼眼窗口信息 , pInBuf= NET_IN_FISHEYE_WININFO*, pOutBuf=NET_OUT_FISHEYE_WININFO * - public static final int NET_QUERY_DEV_REMOTE_DEVICE_INFO = 0x06;; // 查询远程设备信息 , pInBuf= NET_IN_GET_DEVICE_INFO*, pOutBuf= NET_OUT_GET_DEVICE_INFO * - public static final int NET_QUERY_SYSTEM_INFO = 0x07; // 查询设备系统信息 , pInBuf= NET_IN_SYSTEM_INFO*, pOutBuf= NET_OUT_SYSTEM_INFO* - public static final int NET_QUERY_REG_DEVICE_NET_INFO = 0x08; // 查询主动注册设备的网络连接 , pInBuf=NET_IN_REGDEV_NET_INFO * , pOutBuf=NET_OUT_REGDEV_NET_INFO * - public static final int NET_QUERY_DEV_THERMO_GRAPHY_PRESET = 0x09; // 查询热成像预设信息 , pInBuf= NET_IN_THERMO_GET_PRESETINFO*, pOutBuf= NET_OUT_THERMO_GET_PRESETINFO * - public static final int NET_QUERY_DEV_THERMO_GRAPHY_OPTREGION = 0x0a; // 查询热成像感兴趣区域信息,pInBuf= NET_IN_THERMO_GET_OPTREGION*, pOutBuf= NET_OUT_THERMO_GET_OPTREGION * - public static final int NET_QUERY_DEV_THERMO_GRAPHY_EXTSYSINFO = 0x0b; // 查询热成像外部系统信息, pInBuf= NET_IN_THERMO_GET_EXTSYSINFO*, pOutBuf= NET_OUT_THERMO_GET_EXTSYSINFO * - public static final int NET_QUERY_DEV_RADIOMETRY_POINT_TEMPER = 0x0c; // 查询测温点的参数值, pInBuf= NET_IN_RADIOMETRY_GETPOINTTEMPER*, pOutBuf= NET_OUT_RADIOMETRY_GETPOINTTEMPER * - public static final int NET_QUERY_DEV_RADIOMETRY_TEMPER = 0x0d; // 查询测温项的参数值, pInBuf= NET_IN_RADIOMETRY_GETTEMPER*, pOutBuf= NET_OUT_RADIOMETRY_GETTEMPER * - public static final int NET_QUERY_GET_CAMERA_STATE = 0x0e; // 获取摄像机状态, pInBuf= NET_IN_GET_CAMERA_STATEINFO*, pOutBuf= NET_OUT_GET_CAMERA_STATEINFO * - public static final int NET_QUERY_GET_REMOTE_CHANNEL_AUDIO_ENCODE = 0x0f; // 获取远程通道音频编码方式, pInBuf= NET_IN_GET_REMOTE_CHANNEL_AUDIO_ENCODEINFO*, pOutBuf= NET_OUT_GET_REMOTE_CHANNEL_AUDIO_ENCODEINFO * - public static final int NET_QUERY_GET_COMM_PORT_INFO = 0x10; // 获取设备串口信息, pInBuf=NET_IN_GET_COMM_PORT_INFO* , pOutBuf=NET_OUT_GET_COMM_PORT_INFO* - public static final int NET_QUERY_GET_LINKCHANNELS = 0x11; // 查询某视频通道的关联通道列表,pInBuf=NET_IN_GET_LINKCHANNELS* , pOutBuf=NET_OUT_GET_LINKCHANNELS* - public static final int NET_QUERY_GET_VIDEOOUTPUTCHANNELS = 0x12; // 获取解码通道数量统计信息, pInBuf=NET_IN_GET_VIDEOOUTPUTCHANNELS*, pOutBuf=NET_OUT_GET_VIDEOOUTPUTCHANNELS* - public static final int NET_QUERY_GET_VIDEOINFO = 0x13; // 获取解码通道信息, pInBuf=NET_IN_GET_VIDEOINFO*, pOutBuf=NET_OUT_GET_VIDEOINFO* - public static final int NET_QUERY_GET_ALLLINKCHANNELS = 0x14; // 查询全部视频关联通道列表,pInBuf=NET_IN_GET_ALLLINKCHANNELS* , pOutBuf=NET_OUT_GET_ALLLINKCHANNELS* - public static final int NET_QUERY_VIDEOCHANNELSINFO = 0x15; // 查询视频通道信息,pInBuf=NET_IN_GET_VIDEOCHANNELSINFO* , pOutBuf=NET_OUT_GET_VIDEOCHANNELSINFO* - public static final int NET_QUERY_TRAFFICRADAR_VERSION = 0x16; // 查询雷达设备版本,pInBuf=NET_IN_TRAFFICRADAR_VERSION* , pOutBuf=NET_OUT_TRAFFICRADAR_VERSION* - public static final int NET_QUERY_WORKGROUP_NAMES = 0x17; // 查询所有的工作目录组名,pInBuf=NET_IN_WORKGROUP_NAMES* , pOutBuf=NET_OUT_WORKGROUP_NAMES* - public static final int NET_QUERY_WORKGROUP_INFO = 0x18; // 查询工作组信息,pInBuf=NET_IN_WORKGROUP_INFO* , pOutBuf=NET_OUT_WORKGROUP_INFO* - public static final int NET_QUERY_WLAN_ACCESSPOINT = 0x19; // 查询无线网络接入点信息,pInBuf=NET_IN_WLAN_ACCESSPOINT* , pOutBuf=NET_OUT_WLAN_ACCESSPOINT* - public static final int NET_QUERY_GPS_INFO = 0x1a; // 查询设备GPS信息,pInBuf=NET_IN_DEV_GPS_INFO* , pOutBuf=NET_OUT_DEV_GPS_INFO* - public static final int NET_QUERY_IVS_REMOTE_DEVICE_INFO = 0x1b; // 查询IVS的前端设备所关联的远程设备信息, pInBuf = NET_IN_IVS_REMOTE_DEV_INFO*, pOutBuf = NET_OUT_IVS_REMOTE_DEV_INFO* - + public static final int NET_QUERY_DEV_STORAGE_NAMES = 0x01; // 查询设备的存储模块名列表 , pInBuf=NET_IN_STORAGE_DEV_NAMES *, pOutBuf=NET_OUT_STORAGE_DEV_NAMES * + public static final int NET_QUERY_DEV_STORAGE_INFOS = 0x02; // 查询设备的存储模块信息列表, pInBuf=NET_IN_STORAGE_DEV_INFOS*, pOutBuf= NET_OUT_STORAGE_DEV_INFOS * + public static final int NET_QUERY_RECENCY_JNNCTION_CAR_INFO = 0x03; // 查询最近的卡口车辆信息接口, pInBuf=NET_IN_GET_RECENCY_JUNCTION_CAR_INFO*, pOutBuf=NET_OUT_GET_RECENCY_JUNCTION_CAR_INFO* + public static final int NET_QUERY_LANES_STATE = 0x04; // 查询车道信息,pInBuf = NET_IN_GET_LANES_STATE , pOutBuf = NET_OUT_GET_LANES_STATE + public static final int NET_QUERY_DEV_FISHEYE_WININFO = 0x05; // 查询鱼眼窗口信息 , pInBuf= NET_IN_FISHEYE_WININFO*, pOutBuf=NET_OUT_FISHEYE_WININFO * + public static final int NET_QUERY_DEV_REMOTE_DEVICE_INFO = 0x06; + ; // 查询远程设备信息 , pInBuf= NET_IN_GET_DEVICE_INFO*, pOutBuf= NET_OUT_GET_DEVICE_INFO * + public static final int NET_QUERY_SYSTEM_INFO = 0x07; // 查询设备系统信息 , pInBuf= NET_IN_SYSTEM_INFO*, pOutBuf= NET_OUT_SYSTEM_INFO* + public static final int NET_QUERY_REG_DEVICE_NET_INFO = 0x08; // 查询主动注册设备的网络连接 , pInBuf=NET_IN_REGDEV_NET_INFO * , pOutBuf=NET_OUT_REGDEV_NET_INFO * + public static final int NET_QUERY_DEV_THERMO_GRAPHY_PRESET = 0x09; // 查询热成像预设信息 , pInBuf= NET_IN_THERMO_GET_PRESETINFO*, pOutBuf= NET_OUT_THERMO_GET_PRESETINFO * + public static final int NET_QUERY_DEV_THERMO_GRAPHY_OPTREGION = 0x0a; // 查询热成像感兴趣区域信息,pInBuf= NET_IN_THERMO_GET_OPTREGION*, pOutBuf= NET_OUT_THERMO_GET_OPTREGION * + public static final int NET_QUERY_DEV_THERMO_GRAPHY_EXTSYSINFO = 0x0b; // 查询热成像外部系统信息, pInBuf= NET_IN_THERMO_GET_EXTSYSINFO*, pOutBuf= NET_OUT_THERMO_GET_EXTSYSINFO * + public static final int NET_QUERY_DEV_RADIOMETRY_POINT_TEMPER = 0x0c; // 查询测温点的参数值, pInBuf= NET_IN_RADIOMETRY_GETPOINTTEMPER*, pOutBuf= NET_OUT_RADIOMETRY_GETPOINTTEMPER * + public static final int NET_QUERY_DEV_RADIOMETRY_TEMPER = 0x0d; // 查询测温项的参数值, pInBuf= NET_IN_RADIOMETRY_GETTEMPER*, pOutBuf= NET_OUT_RADIOMETRY_GETTEMPER * + public static final int NET_QUERY_GET_CAMERA_STATE = 0x0e; // 获取摄像机状态, pInBuf= NET_IN_GET_CAMERA_STATEINFO*, pOutBuf= NET_OUT_GET_CAMERA_STATEINFO * + public static final int NET_QUERY_GET_REMOTE_CHANNEL_AUDIO_ENCODE = 0x0f; // 获取远程通道音频编码方式, pInBuf= NET_IN_GET_REMOTE_CHANNEL_AUDIO_ENCODEINFO*, pOutBuf= NET_OUT_GET_REMOTE_CHANNEL_AUDIO_ENCODEINFO * + public static final int NET_QUERY_GET_COMM_PORT_INFO = 0x10; // 获取设备串口信息, pInBuf=NET_IN_GET_COMM_PORT_INFO* , pOutBuf=NET_OUT_GET_COMM_PORT_INFO* + public static final int NET_QUERY_GET_LINKCHANNELS = 0x11; // 查询某视频通道的关联通道列表,pInBuf=NET_IN_GET_LINKCHANNELS* , pOutBuf=NET_OUT_GET_LINKCHANNELS* + public static final int NET_QUERY_GET_VIDEOOUTPUTCHANNELS = 0x12; // 获取解码通道数量统计信息, pInBuf=NET_IN_GET_VIDEOOUTPUTCHANNELS*, pOutBuf=NET_OUT_GET_VIDEOOUTPUTCHANNELS* + public static final int NET_QUERY_GET_VIDEOINFO = 0x13; // 获取解码通道信息, pInBuf=NET_IN_GET_VIDEOINFO*, pOutBuf=NET_OUT_GET_VIDEOINFO* + public static final int NET_QUERY_GET_ALLLINKCHANNELS = 0x14; // 查询全部视频关联通道列表,pInBuf=NET_IN_GET_ALLLINKCHANNELS* , pOutBuf=NET_OUT_GET_ALLLINKCHANNELS* + public static final int NET_QUERY_VIDEOCHANNELSINFO = 0x15; // 查询视频通道信息,pInBuf=NET_IN_GET_VIDEOCHANNELSINFO* , pOutBuf=NET_OUT_GET_VIDEOCHANNELSINFO* + public static final int NET_QUERY_TRAFFICRADAR_VERSION = 0x16; // 查询雷达设备版本,pInBuf=NET_IN_TRAFFICRADAR_VERSION* , pOutBuf=NET_OUT_TRAFFICRADAR_VERSION* + public static final int NET_QUERY_WORKGROUP_NAMES = 0x17; // 查询所有的工作目录组名,pInBuf=NET_IN_WORKGROUP_NAMES* , pOutBuf=NET_OUT_WORKGROUP_NAMES* + public static final int NET_QUERY_WORKGROUP_INFO = 0x18; // 查询工作组信息,pInBuf=NET_IN_WORKGROUP_INFO* , pOutBuf=NET_OUT_WORKGROUP_INFO* + public static final int NET_QUERY_WLAN_ACCESSPOINT = 0x19; // 查询无线网络接入点信息,pInBuf=NET_IN_WLAN_ACCESSPOINT* , pOutBuf=NET_OUT_WLAN_ACCESSPOINT* + public static final int NET_QUERY_GPS_INFO = 0x1a; // 查询设备GPS信息,pInBuf=NET_IN_DEV_GPS_INFO* , pOutBuf=NET_OUT_DEV_GPS_INFO* + public static final int NET_QUERY_IVS_REMOTE_DEVICE_INFO = 0x1b; // 查询IVS的前端设备所关联的远程设备信息, pInBuf = NET_IN_IVS_REMOTE_DEV_INFO*, pOutBuf = NET_OUT_IVS_REMOTE_DEV_INFO* + // 设备能力类型, 对应CLIENT_GetDevCaps接口 - public static final int NET_THERMO_GRAPHY_CAPS = 0x06; // 热成像摄像头属性能力,pInBuf=NET_IN_THERMO_GETCAPS*, pOutBuf=NET_OUT_THERMO_GETCAPS* - public static final int NET_RADIOMETRY_CAPS = 0x07; // 热成像测温全局配置能力,pInBuf=NET_IN_RADIOMETRY_GETCAPS*, pOutBuf=NET_OUT_RADIOMETRY_GETCAPS* - + public static final int NET_THERMO_GRAPHY_CAPS = 0x06; // 热成像摄像头属性能力,pInBuf=NET_IN_THERMO_GETCAPS*, pOutBuf=NET_OUT_THERMO_GETCAPS* + public static final int NET_RADIOMETRY_CAPS = 0x07; // 热成像测温全局配置能力,pInBuf=NET_IN_RADIOMETRY_GETCAPS*, pOutBuf=NET_OUT_RADIOMETRY_GETCAPS* + /////////////////////////////////// 矩阵 /////////////////////////////////////// - public static final int NET_MATRIX_INTERFACE_LEN = 16; // 信号接口名称长度 - public static final int NET_MATRIX_MAX_CARDS = 128; // 矩阵子卡最大数量 - public static final int NET_SPLIT_PIP_BASE = 1000; // 分割模式画中画的基础值 - public static final int NET_MAX_SPLIT_MODE_NUM = 64; // 最大分割模式数 - public static final int NET_MATRIX_MAX_CHANNEL_IN = 1500; // 矩阵最大输入通道数 - public static final int NET_MATRIX_MAX_CHANNEL_OUT = 256; // 矩阵最大输出通道数 - public static final int NET_DEVICE_NAME_LEN = 64; // 设备名称长度 - public static final int NET_MAX_CPU_NUM = 16; // 最大CPU数量 - public static final int NET_MAX_FAN_NUM = 16; // 最大风扇数量 - public static final int NET_MAX_POWER_NUM = 16; // 最大电源数量 - public static final int NET_MAX_BATTERY_NUM = 16; // 最大电池数量 - public static final int NET_MAX_TEMPERATURE_NUM = 256; // 最大温度传感器数量 - public static final int NET_MAX_ISCSI_NAME_LEN = 128; // ISCSI名称长度 - public static final int NET_VERSION_LEN = 64; // 版本信息长度 - public static final int NET_MAX_STORAGE_PARTITION_NUM = 32; // 存储分区最大数量 - public static final int NET_STORAGE_MOUNT_LEN = 64; // 挂载点长度 - public static final int NET_STORAGE_FILE_SYSTEM_LEN = 16; // 文件系统名称长度 - public static final int NET_MAX_MEMBER_PER_RAID = 32; // RAID成员最大数量 - public static final int NET_DEV_ID_LEN_EX = 128; // 设备ID最大长度 - public static final int NET_MAX_BLOCK_NUM = 32; // 最大区块数量 - public static final int NET_MAX_SPLIT_WINDOW = 128; // 最大分割窗口数量 - public static final int NET_FILE_TYPE_LEN = 64; // 文件类型长度 - public static final int NET_DEV_ID_LEN = 128; // 设备ID最大长度 - public static final int NET_DEV_NAME_LEN = 128; // 设备名称最大长度 - public static final int NET_TSCHE_DAY_NUM = 8; // 时间表第一维大小, 表示天数 - public static final int NET_TSCHE_SEC_NUM = 6; // 时间表第二维大小, 表示时段数 - public static final int NET_SPLIT_INPUT_NUM = 256; // 司法设备二级切换时第一级split支持的输入通道数 - - public static final String NET_DEVICE_ID_LOCAL = "Local"; // 本地设备ID - public static final String NET_DEVICE_ID_REMOTE = "Remote"; // 远程设备ID - public static final String NET_DEVICE_ID_UNIQUE = "Unique"; // 设备内统一编号 - + public static final int NET_MATRIX_INTERFACE_LEN = 16; // 信号接口名称长度 + public static final int NET_MATRIX_MAX_CARDS = 128; // 矩阵子卡最大数量 + public static final int NET_SPLIT_PIP_BASE = 1000; // 分割模式画中画的基础值 + public static final int NET_MAX_SPLIT_MODE_NUM = 64; // 最大分割模式数 + public static final int NET_MATRIX_MAX_CHANNEL_IN = 1500; // 矩阵最大输入通道数 + public static final int NET_MATRIX_MAX_CHANNEL_OUT = 256; // 矩阵最大输出通道数 + public static final int NET_DEVICE_NAME_LEN = 64; // 设备名称长度 + public static final int NET_MAX_CPU_NUM = 16; // 最大CPU数量 + public static final int NET_MAX_FAN_NUM = 16; // 最大风扇数量 + public static final int NET_MAX_POWER_NUM = 16; // 最大电源数量 + public static final int NET_MAX_BATTERY_NUM = 16; // 最大电池数量 + public static final int NET_MAX_TEMPERATURE_NUM = 256; // 最大温度传感器数量 + public static final int NET_MAX_ISCSI_NAME_LEN = 128; // ISCSI名称长度 + public static final int NET_VERSION_LEN = 64; // 版本信息长度 + public static final int NET_MAX_STORAGE_PARTITION_NUM = 32; // 存储分区最大数量 + public static final int NET_STORAGE_MOUNT_LEN = 64; // 挂载点长度 + public static final int NET_STORAGE_FILE_SYSTEM_LEN = 16; // 文件系统名称长度 + public static final int NET_MAX_MEMBER_PER_RAID = 32; // RAID成员最大数量 + public static final int NET_DEV_ID_LEN_EX = 128; // 设备ID最大长度 + public static final int NET_MAX_BLOCK_NUM = 32; // 最大区块数量 + public static final int NET_MAX_SPLIT_WINDOW = 128; // 最大分割窗口数量 + public static final int NET_FILE_TYPE_LEN = 64; // 文件类型长度 + public static final int NET_DEV_ID_LEN = 128; // 设备ID最大长度 + public static final int NET_DEV_NAME_LEN = 128; // 设备名称最大长度 + public static final int NET_TSCHE_DAY_NUM = 8; // 时间表第一维大小, 表示天数 + public static final int NET_TSCHE_SEC_NUM = 6; // 时间表第二维大小, 表示时段数 + public static final int NET_SPLIT_INPUT_NUM = 256; // 司法设备二级切换时第一级split支持的输入通道数 + + public static final String NET_DEVICE_ID_LOCAL = "Local"; // 本地设备ID + public static final String NET_DEVICE_ID_REMOTE = "Remote"; // 远程设备ID + public static final String NET_DEVICE_ID_UNIQUE = "Unique"; // 设备内统一编号 + //其他定义 - public static final int NET_MAX_NAME_LEN = 16; // 通用名字字符串长度 - public static final int NET_MAX_PERSON_ID_LEN = 32; // 人员id最大长度 - public static final int NET_MAX_PERSON_IMAGE_NUM = 48; // 每个人员对应的最大人脸图片数 - public static final int NET_MAX_PROVINCE_NAME_LEN = 64; // 省份名称最大长度 - public static final int NET_MAX_CITY_NAME_LEN = 64; // 城市名称最大长度 - public static final int NET_MAX_PERSON_NAME_LEN = 64; // 人员名字最大长度 - public static final int MAX_FACE_AREA_NUM = 8; // 最大人脸区域个数 - public static final int MAX_PATH = 260; - public static final int MAX_FACE_DB_NUM = 8; // 最大人脸数据库个数 - public static final int MAX_GOURP_NUM = 128; // 人脸库最大个数 - public static final int MAX_AGE_NUM = 2; // 最大年龄个数 - public static final int MAX_EMOTION_NUM = 8; // 最大表情条件的个数 - - public static final int MAX_FIND_COUNT = 20; - public static final int NET_MAX_POLYGON_NUM = 16; // 多边形最大顶点个数 - public static final int NET_MAX_CANDIDATE_NUM = 50; // 人脸识别最大匹配数 - public static final int MAX_POLYGON_NUM = 20; // 视频分析设备区域顶点个数上限 - public static final int MAX_CALIBRATEBOX_NUM = 10; // 智能分析校准框个数上限 - public static final int MAX_NAME_LEN = 128; // 通用名字字符串长度 - public static final int MAX_EXCLUDEREGION_NUM = 10; // 智能分析检测区域中需要排除的区域个数上限 - public static final int MAX_OBJECT_LIST_SIZE = 16; // 视频分析设备支持的检测物体类型列表个数上限 - public static final int MAX_SPECIALDETECT_NUM = 10; // 智能分析特殊检测区域上限 - public static final int MAX_OBJECT_ATTRIBUTES_SIZE = 16; // 视频分析设备支持的检测物体属性类型列表个数上限 - public static final int MAX_CATEGORY_TYPE_NUMBER = 128; // 子类别类型数 - public static final int MAX_ANALYSE_MODULE_NUM = 16; // 视频分析设备最大检测模块个数 - public static final int MAX_LOG_PATH_LEN = 260; // 日志路径名最大长度 - public static final int MAX_CHANNELNAME_LEN = 64; // 最大通道名称长度 - public static final int MAX_VIDEO_CHANNEL_NUM = 256; // 最大通道数256 - public static final int MAX_PSTN_SERVER_NUM = 8; // 最大报警电话服务器数 - public static final int MAX_TIME_SCHEDULE_NUM = 8; // 时间表元素个数 - public static final int MAX_REC_TSECT = 6; // 录像时间段个数 - public static final int MAX_REC_TSECT_EX = 10; // 录像时间段扩展个数 - public static final int MAX_NAS_TIME_SECTION = 2; // 网络存储时间段个数 - public static final int MAX_CHANNEL_COUNT = 16; - public static final int MAX_ACCESSCONTROL_NUM = 8; // 最大门禁操作的组合数 - public static final int MAX_DBKEY_NUM = 64; // 数据库关键字最大值 - public static final int MAX_SUMMARY_LEN = 1024; // 叠加到JPEG图片的摘要信息最大长度 - public static final int WEEK_DAY_NUM = 7; // 一周的天数 - public static final int NET_MAX_FACEDETECT_FEATURE_NUM = 32; // 人脸特征最大个数 - public static final int NET_MAX_OBJECT_LIST = 16; // 智能分析设备检测到的物体ID个数上限 - public static final int NET_MAX_RULE_LIST = 16; // 智能分析设备规则个数上限 - public static final int MAX_HUMANFACE_LIST_SIZE = 8; // 视频分析设备支持的人脸检测类型列表个数上限 - public static final int MAX_FEATURE_LIST_SIZE = 32; // 视频分析设备支持的人脸属性列表个数上限 - public static final int NET_MAX_DETECT_REGION_NUM = 20; // 规则检测区域最大顶点数 - public static final int NET_MAX_DETECT_LINE_NUM = 20; // 规则检测线最大顶点数 - public static final int NET_MAX_TRACK_LINE_NUM = 20; // 物体运动轨迹最大顶点数 - public static final int NET_MACADDR_LEN = 40; // MAC地址字符串长度 - public static final int NET_DEV_TYPE_LEN = 32; // 设备型号字符串(如"IPC-F725")长度 - public static final int NET_DEV_SERIALNO_LEN = 48; // 序列号字符串长度 - public static final int NET_MAX_URL_LEN = 128; // URL字符串长度 - public static final int NET_MAX_STRING_LEN = 128; - public static final int NET_MACHINE_NAME_NUM = 64; // 机器名称长度 - public static final int NET_USER_NAME_LENGTH_EX = 16; // 用户名长度 - public static final int NET_USER_NAME_LENGTH = 8; // 用户名长度 - public static final int NET_USER_PSW_LENGTH = 8; // 用户密码长度 - public static final int NET_EVENT_NAME_LEN = 128; // 事件名称长度 - public static final int NET_MAX_LANE_NUM = 8; // 视频分析设备每个通道对应车道数上限 - public static final int MAX_DRIVING_DIR_NUM = 16; // 车道行驶方向最大个数 - public static final int FLOWSTAT_ADDR_NAME = 16; // 上下行地点名长 - public static final int NET_MAX_DRIVINGDIRECTION = 256; // 行驶方向字符串长度 - public static final int COMMON_SEAT_MAX_NUMBER = 8; // 默认检测最大座驾个数 - public static final int NET_MAX_ATTACHMENT_NUM = 8; // 最大车辆物件数量 - public static final int NET_MAX_ANNUUALINSPECTION_NUM = 8; // 最大年检标识位置 - public static final int NET_MAX_EVENT_PIC_NUM = 6; // 最大原始图片张数 - public static final int NET_COMMON_STRING_4 = 4; // 通用字符串长度4 - public static final int NET_COMMON_STRING_8 = 8; // 通用字符串长度8 - public static final int NET_COMMON_STRING_16 = 16; // 通用字符串长度16 - public static final int NET_COMMON_STRING_32 = 32; // 通用字符串长度32 - public static final int NET_COMMON_STRING_64 = 64; // 通用字符串长度64 - public static final int NET_COMMON_STRING_128 = 128; // 通用字符串长度128 - public static final int NET_COMMON_STRING_256 = 256; // 通用字符串长度256 - public static final int NET_COMMON_STRING_512 = 512; // 通用字符串长度512 - public static final int NET_COMMON_STRING_1024 = 1024; // 通用字符串长度1024 - public static final int NET_COMMON_STRING_2048 = 2048; // 通用字符串长度2048 - public static final int MAX_VIDEOSTREAM_NUM = 4; // 最大码流个数 - public static final int MAX_VIDEO_COVER_NUM = 16; // 最大遮挡区域个数 - public static final int MAX_VIDEO_IN_ZOOM = 32; // 单通道最大变速配置个数 - public static final int NET_EVENT_CARD_LEN = 36; // 卡片名称长度 - public static final int NET_EVENT_MAX_CARD_NUM = 16; // 事件上报信息包含最大卡片个数 - public static final int MAX_STATUS_NUM = 16; // 交通设备状态最大个数 - public static final int NET_MAX_CHANMASK = 64; // 通道掩码最大值 - public static final int NET_CHAN_NAME_LEN = 32; // 通道名长度,DVR DSP能力限制,最多32字节 - public static final int MAX_LANE_NUM = 8; // 视频分析设备每个通道对应车道数上限 - public static final int MAX_STAFF_NUM = 20; // 视频分析设备每个通道对应的标尺数上限 - public static final int MAX_ANALYSE_RULE_NUM = 32; // 视频分析设备最大规则个数 - public static final int MAX_POLYLINE_NUM = 20; // 视频分析设备折线顶点个数上限 - public static final int MAX_TEMPLATEREGION_NUM = 32; // 视频分析设备模拟区域信息点对个数上限 - public static final int POINT_PAIR_NUM = 2; // 视频分析设备模拟区域点对包含的点个数 - public static final int MAX_VEHICLE_SIZE_LIST = 4; // 视频分析设备车辆大小个数上限 - public static final int MAX_VEHICLE_TYPE_LIST = 4; // 视频分析设备车辆类型个数上限 - public static final int MAX_PLATE_TYPE_LIST = 32; // 视频分析设备车牌类型个数上限 - public static final int MAX_CALIBRATEAREA_NUM = 20; // 视频分析设备标定区域的上限 - public static final int MAX_ANALYSE_SCENE_NUM = 32; // 视频分析全局配置场景最大数量 - public static final int MAX_PLATEHINT_NUM = 8; // 车牌字符暗示个数上限 - public static final int MAX_LIGHT_NUM = 8; // 交通灯个数上限 - public static final int MAX_LIGHTGROUP_NUM = 8; // 交通灯组个数上限 - public static final int MAX_LIGHT_TYPE = 8; // 交通灯类型上限 - public static final int MAX_PARKING_SPACE_NUM = 6; // 最多配置6个车位信息 - public static final int MAX_SHIELD_AREA_NUM = 16; // 1个车位最多对应16个屏蔽区域 - public static final int MAX_SCENE_TYPE_LIST_SIZE = 8; // 场景列表中最多支持的场景个数 - public static final int MAX_LIGHT_DIRECTION = 8; // 交通灯指示方向数上限 - public static final int CFG_FLOWSTAT_ADDR_NAME = 16; //上下行地点名长 - public static final int MAX_ACCESS_READER_NUM = 32; // 门禁单个门最大读卡器数量 - public static final int MAX_ACCESSSUBCONTROLLER_NUM = 64; // 最大门禁分控器数量 - public static final int MAX_BACKPIC_COUNT = 8; // 最大背景图片个数 + public static final int NET_MAX_NAME_LEN = 16; // 通用名字字符串长度 + public static final int NET_MAX_PERSON_ID_LEN = 32; // 人员id最大长度 + public static final int NET_MAX_PERSON_IMAGE_NUM = 48; // 每个人员对应的最大人脸图片数 + public static final int NET_MAX_PROVINCE_NAME_LEN = 64; // 省份名称最大长度 + public static final int NET_MAX_CITY_NAME_LEN = 64; // 城市名称最大长度 + public static final int NET_MAX_PERSON_NAME_LEN = 64; // 人员名字最大长度 + public static final int MAX_FACE_AREA_NUM = 8; // 最大人脸区域个数 + public static final int MAX_PATH = 260; + public static final int MAX_FACE_DB_NUM = 8; // 最大人脸数据库个数 + public static final int MAX_GOURP_NUM = 128; // 人脸库最大个数 + public static final int MAX_AGE_NUM = 2; // 最大年龄个数 + public static final int MAX_EMOTION_NUM = 8; // 最大表情条件的个数 + + public static final int MAX_FIND_COUNT = 20; + public static final int NET_MAX_POLYGON_NUM = 16; // 多边形最大顶点个数 + public static final int NET_MAX_CANDIDATE_NUM = 50; // 人脸识别最大匹配数 + public static final int MAX_POLYGON_NUM = 20; // 视频分析设备区域顶点个数上限 + public static final int MAX_CALIBRATEBOX_NUM = 10; // 智能分析校准框个数上限 + public static final int MAX_NAME_LEN = 128; // 通用名字字符串长度 + public static final int MAX_EXCLUDEREGION_NUM = 10; // 智能分析检测区域中需要排除的区域个数上限 + public static final int MAX_OBJECT_LIST_SIZE = 16; // 视频分析设备支持的检测物体类型列表个数上限 + public static final int MAX_SPECIALDETECT_NUM = 10; // 智能分析特殊检测区域上限 + public static final int MAX_OBJECT_ATTRIBUTES_SIZE = 16; // 视频分析设备支持的检测物体属性类型列表个数上限 + public static final int MAX_CATEGORY_TYPE_NUMBER = 128; // 子类别类型数 + public static final int MAX_ANALYSE_MODULE_NUM = 16; // 视频分析设备最大检测模块个数 + public static final int MAX_LOG_PATH_LEN = 260; // 日志路径名最大长度 + public static final int MAX_CHANNELNAME_LEN = 64; // 最大通道名称长度 + public static final int MAX_VIDEO_CHANNEL_NUM = 256; // 最大通道数256 + public static final int MAX_PSTN_SERVER_NUM = 8; // 最大报警电话服务器数 + public static final int MAX_TIME_SCHEDULE_NUM = 8; // 时间表元素个数 + public static final int MAX_REC_TSECT = 6; // 录像时间段个数 + public static final int MAX_REC_TSECT_EX = 10; // 录像时间段扩展个数 + public static final int MAX_NAS_TIME_SECTION = 2; // 网络存储时间段个数 + public static final int MAX_CHANNEL_COUNT = 16; + public static final int MAX_ACCESSCONTROL_NUM = 8; // 最大门禁操作的组合数 + public static final int MAX_DBKEY_NUM = 64; // 数据库关键字最大值 + public static final int MAX_SUMMARY_LEN = 1024; // 叠加到JPEG图片的摘要信息最大长度 + public static final int WEEK_DAY_NUM = 7; // 一周的天数 + public static final int NET_MAX_FACEDETECT_FEATURE_NUM = 32; // 人脸特征最大个数 + public static final int NET_MAX_OBJECT_LIST = 16; // 智能分析设备检测到的物体ID个数上限 + public static final int NET_MAX_RULE_LIST = 16; // 智能分析设备规则个数上限 + public static final int MAX_HUMANFACE_LIST_SIZE = 8; // 视频分析设备支持的人脸检测类型列表个数上限 + public static final int MAX_FEATURE_LIST_SIZE = 32; // 视频分析设备支持的人脸属性列表个数上限 + public static final int NET_MAX_DETECT_REGION_NUM = 20; // 规则检测区域最大顶点数 + public static final int NET_MAX_DETECT_LINE_NUM = 20; // 规则检测线最大顶点数 + public static final int NET_MAX_TRACK_LINE_NUM = 20; // 物体运动轨迹最大顶点数 + public static final int NET_MACADDR_LEN = 40; // MAC地址字符串长度 + public static final int NET_DEV_TYPE_LEN = 32; // 设备型号字符串(如"IPC-F725")长度 + public static final int NET_DEV_SERIALNO_LEN = 48; // 序列号字符串长度 + public static final int NET_MAX_URL_LEN = 128; // URL字符串长度 + public static final int NET_MAX_STRING_LEN = 128; + public static final int NET_MACHINE_NAME_NUM = 64; // 机器名称长度 + public static final int NET_USER_NAME_LENGTH_EX = 16; // 用户名长度 + public static final int NET_USER_NAME_LENGTH = 8; // 用户名长度 + public static final int NET_USER_PSW_LENGTH = 8; // 用户密码长度 + public static final int NET_EVENT_NAME_LEN = 128; // 事件名称长度 + public static final int NET_MAX_LANE_NUM = 8; // 视频分析设备每个通道对应车道数上限 + public static final int MAX_DRIVING_DIR_NUM = 16; // 车道行驶方向最大个数 + public static final int FLOWSTAT_ADDR_NAME = 16; // 上下行地点名长 + public static final int NET_MAX_DRIVINGDIRECTION = 256; // 行驶方向字符串长度 + public static final int COMMON_SEAT_MAX_NUMBER = 8; // 默认检测最大座驾个数 + public static final int NET_MAX_ATTACHMENT_NUM = 8; // 最大车辆物件数量 + public static final int NET_MAX_ANNUUALINSPECTION_NUM = 8; // 最大年检标识位置 + public static final int NET_MAX_EVENT_PIC_NUM = 6; // 最大原始图片张数 + public static final int NET_COMMON_STRING_4 = 4; // 通用字符串长度4 + public static final int NET_COMMON_STRING_8 = 8; // 通用字符串长度8 + public static final int NET_COMMON_STRING_16 = 16; // 通用字符串长度16 + public static final int NET_COMMON_STRING_32 = 32; // 通用字符串长度32 + public static final int NET_COMMON_STRING_64 = 64; // 通用字符串长度64 + public static final int NET_COMMON_STRING_128 = 128; // 通用字符串长度128 + public static final int NET_COMMON_STRING_256 = 256; // 通用字符串长度256 + public static final int NET_COMMON_STRING_512 = 512; // 通用字符串长度512 + public static final int NET_COMMON_STRING_1024 = 1024; // 通用字符串长度1024 + public static final int NET_COMMON_STRING_2048 = 2048; // 通用字符串长度2048 + public static final int MAX_VIDEOSTREAM_NUM = 4; // 最大码流个数 + public static final int MAX_VIDEO_COVER_NUM = 16; // 最大遮挡区域个数 + public static final int MAX_VIDEO_IN_ZOOM = 32; // 单通道最大变速配置个数 + public static final int NET_EVENT_CARD_LEN = 36; // 卡片名称长度 + public static final int NET_EVENT_MAX_CARD_NUM = 16; // 事件上报信息包含最大卡片个数 + public static final int MAX_STATUS_NUM = 16; // 交通设备状态最大个数 + public static final int NET_MAX_CHANMASK = 64; // 通道掩码最大值 + public static final int NET_CHAN_NAME_LEN = 32; // 通道名长度,DVR DSP能力限制,最多32字节 + public static final int MAX_LANE_NUM = 8; // 视频分析设备每个通道对应车道数上限 + public static final int MAX_STAFF_NUM = 20; // 视频分析设备每个通道对应的标尺数上限 + public static final int MAX_ANALYSE_RULE_NUM = 32; // 视频分析设备最大规则个数 + public static final int MAX_POLYLINE_NUM = 20; // 视频分析设备折线顶点个数上限 + public static final int MAX_TEMPLATEREGION_NUM = 32; // 视频分析设备模拟区域信息点对个数上限 + public static final int POINT_PAIR_NUM = 2; // 视频分析设备模拟区域点对包含的点个数 + public static final int MAX_VEHICLE_SIZE_LIST = 4; // 视频分析设备车辆大小个数上限 + public static final int MAX_VEHICLE_TYPE_LIST = 4; // 视频分析设备车辆类型个数上限 + public static final int MAX_PLATE_TYPE_LIST = 32; // 视频分析设备车牌类型个数上限 + public static final int MAX_CALIBRATEAREA_NUM = 20; // 视频分析设备标定区域的上限 + public static final int MAX_ANALYSE_SCENE_NUM = 32; // 视频分析全局配置场景最大数量 + public static final int MAX_PLATEHINT_NUM = 8; // 车牌字符暗示个数上限 + public static final int MAX_LIGHT_NUM = 8; // 交通灯个数上限 + public static final int MAX_LIGHTGROUP_NUM = 8; // 交通灯组个数上限 + public static final int MAX_LIGHT_TYPE = 8; // 交通灯类型上限 + public static final int MAX_PARKING_SPACE_NUM = 6; // 最多配置6个车位信息 + public static final int MAX_SHIELD_AREA_NUM = 16; // 1个车位最多对应16个屏蔽区域 + public static final int MAX_SCENE_TYPE_LIST_SIZE = 8; // 场景列表中最多支持的场景个数 + public static final int MAX_LIGHT_DIRECTION = 8; // 交通灯指示方向数上限 + public static final int CFG_FLOWSTAT_ADDR_NAME = 16; //上下行地点名长 + public static final int MAX_ACCESS_READER_NUM = 32; // 门禁单个门最大读卡器数量 + public static final int MAX_ACCESSSUBCONTROLLER_NUM = 64; // 最大门禁分控器数量 + public static final int MAX_BACKPIC_COUNT = 8; // 最大背景图片个数 public static final int NET_WIRELESS_DEVICE_SERIAL_NUMBER_MAX_LEN = 32;// 无线设备序列号最大长度 - public static final int NET_MAX_CUSTOM_PERSON_INFO_NUM = 4; // 注册人员信息扩展最大个数 - public static final int NET_MAX_PERSON_INFO_LEN = 64; // 人员扩展信息最大长度 - - public static final int NET_NEW_MAX_RIGHT_NUM = 1024; // 用户权限个数上限 - public static final int NET_MAX_GROUP_NUM = 20; // 用户组个数上限 - public static final int NET_MAX_USER_NUM = 200; // 用户个数上限 - public static final int NET_RIGHT_NAME_LENGTH = 32; // 权限名长度 - public static final int NET_MEMO_LENGTH = 32; // 备注长度 - public static final int NET_NEW_USER_NAME_LENGTH = 128; // 用户名长度 - public static final int NET_NEW_USER_PSW_LENGTH = 128; // 密码 - public static final int NET_MAX_RIGHT_NUM = 100; // 用户权限个数上限 - public static final int NET_COMMENT_LENGTH = 100; // 备注信息长度 - public static final int NET_GROUPID_LENGTH = 64; // group id 信息长度 - public static final int NET_GROUPNAME_LENGTH = 128; // group name 信息长度 - public static final int NET_FEATUREVALUE_LENGTH = 128; // 人脸特征 信息长度 - - public static final int MAX_GROUP_ID_LEN = 64; // 最大布控组ID长度 - public static final int MAX_COLOR_NAME_LEN = 32; // 最大颜色名长度 - public static final int MAX_COLOR_HEX_LEN = 8; // 最大HEX颜色长度 - public static final int MAX_LINK_GROUP_NUM = 20; // 联动的布控组最大数量 - public static final int MAX_PATH_LEN = 260; // 最大路径长度 - public static final int MAX_RIDER_NUM = 16; // 骑车人数组上限 - public static final int MAX_ALARM_CHANNEL_NAME_LEN = 64; // 最大报警名称长度 - public static final int MAX_SMALLPIC_NUM = 32; // 最大小图张数 - - // 支持用户名最大长度为8位或16位的设备,对应扩展接口CLIENT_QueryUserInfoEx和CLIENT_OperateUserInfoEx - public static final int NET_USER_PSW_LENGTH_EX = 16; // 密码 - - public static final int AV_CFG_Device_ID_Len = 64; // 设备ID长度 - public static final int AV_CFG_Channel_Name_Len = 64; // 通道名称长度 - public static final int AV_CFG_Monitor_Name_Len = 64; // 电视墙名称长度 - public static final int AV_CFG_Max_TV_In_Block = 128; // 区块中TV的最大数量 - public static final int AV_CFG_Max_Block_In_Wall = 128; // 电视墙中区块的最大数量 - public static final int AV_CFG_IP_Address_Len = 32; // IP 长度 - public static final int AV_CFG_Protocol_Len = 32; // 协议名长度 - public static final int AV_CFG_User_Name_Len = 64; // 用户名长度 - public static final int AV_CFG_Password_Len = 64; // 密码长度 - public static final int AV_CFG_Serial_Len = 32; // 序列号长度 - public static final int AV_CFG_Device_Class_Len = 16; // 设备类型长度 - public static final int AV_CFG_Device_Type_Len = 32; // 设备具体型号长度 - public static final int AV_CFG_Device_Name_Len = 128; // 机器名称 - public static final int AV_CFG_Address_Len = 128; // 机器部署地点 - public static final int AV_CFG_Max_Path = 260; // 路径长度 - public static final int AV_CFG_Group_Name_Len = 64; // 分组名称长度 - public static final int AV_CFG_DeviceNo_Len = 32; // 设备编号长度 - public static final int AV_CFG_Group_Memo_Len = 128; // 分组说明长度 - public static final int AV_CFG_Max_Channel_Num = 1024; // 最大通道数量 - public static final int MAX_DEVICE_NAME_LEN = 64; // 机器名称 - public static final int MAX_DEV_ID_LEN_EX = 128; // 设备ID最大长度 - public static final int MAX_PATH_STOR = 240; // 远程目录的长度 - public static final int MAX_REMOTE_DEV_NUM = 256; // 最大远程设备数量 - public static final int NET_MAX_PLATE_NUMBER_LEN = 32; // 车牌字符长度 - public static final int NET_MAX_AUTHORITY_LIST_NUM = 16; // 权限列表最大个数 - public static final int NET_MAX_ALARMOUT_NUM_EX = 32; //报警输出口个数上限扩展 - public static final int NET_MAX_VIDEO_IN_NUM_EX = 32; //视频输入口个数上限扩展 - public static final int NET_MAX_SAERCH_IP_NUM = 256; // 最大搜索IP个数 - public static final int NET_MAX_POS_MAC_NUM = 8; // 刷卡机Mac码最大长度 - public static final int NET_MAX_BUSCARD_NUM = 64; // 公交卡号最大长度 - public static final int NET_STORAGE_NAME_LEN = 128; // 存储设备名称长度 - - public static final int NET_MAX_DOOR_NUM = 32; // 最大有权限门禁数目 - public static final int NET_MAX_TIMESECTION_NUM = 32; // 最大有效时间段数目 - public static final int NET_MAX_CARDNAME_LEN = 64; // 门禁卡命名最大长度 - public static final int NET_MAX_CARDNO_LEN = 32; // 门禁卡号最大长度 - public static final int NET_MAX_USERID_LEN = 32; // 门禁卡用户ID最大长度 - public static final int NET_MAX_IC_LEN = 32; // 身份证最大长度 - public static final int NET_MAX_QRCODE_LEN = 128; // QRCode 最大长度 - public static final int NET_MAX_CARD_INFO_LEN = 256; // 卡号信息最大长度 - public static final int NET_MAX_SIM_LEN = 16; // SIM卡的值的最大长度 - public static final int NET_MAX_DISKNUM = 256; // 最大硬盘个数 - public static final int MAX_FACE_DATA_NUM = 20; // 人脸模版最大个数 - public static final int MAX_FINGERPRINT_NUM = 10; // 最大指纹个数 - public static final int MAX_FACE_DATA_LEN = 2 * 1024; // 人脸模版数据最大长度 - public static final int MAX_COMMON_STRING_8 = 8; // 通用字符串长度8 - public static final int MAX_COMMON_STRING_16 = 16; // 通用字符串长度16 - public static final int MAX_COMMON_STRING_32 = 32; // 通用字符串长度32 - public static final int MAX_COMMON_STRING_64 = 64; // 通用字符串长度64 - public static final int MAX_COMMON_STRING_128 = 128; // 通用字符串长度128 - public static final int MAX_USER_NAME_LEN = 128; // 最大用户名长度 - public static final int MAX_ROOMNUM_COUNT = 32; // 房间最大个数 - public static final int MAX_FACE_COUTN = 20; // 人脸模板数据最大个数 - public static final int MAX_PHOTO_COUNT = 5; // 人脸照片最大个数 - public static final int MAX_WINDOWS_COUNT = 16; // 诱导屏最大窗口个数 - public static final int MAX_CLASS_NUMBER_LEN = 32; // 最大班级长度 - public static final int MAX_PHONENUMBER_LEN = 16; // 最大电话长度 - public static final int MAX_NASFILE_NUM = 8; // 最大NAS文件个数 - public static final int MAX_CELL_PHONE_NUMBER_LEN = 32; // 最大手机号长度 - public static final int MAX_MAIL_LEN = 64; // 邮箱最大长度 - public static final int MAX_PWD_LEN = 128; // 最大密码长度 - public static final int MAX_ACCESS_FLOOR_NUM = 64; // 最大楼层数量 - public static final int MAX_ORDER_NUMBER = 6; // 排序规则的最大数量 - public static final int MAX_NUMBER_REGISTER_INFO = 32; - - public static final int CFG_COMMON_STRING_8 = 8; // 通用字符串长度8 - public static final int CFG_COMMON_STRING_16 = 16; // 通用字符串长度16 - public static final int CFG_COMMON_STRING_32 = 32; // 通用字符串长度32 - public static final int CFG_COMMON_STRING_64 = 64; // 通用字符串长度64 - public static final int CFG_COMMON_STRING_128 = 128; // 通用字符串长度128 - public static final int CFG_COMMON_STRING_256 = 256; // 通用字符串长度256 - public static final int CFG_COMMON_STRING_512 = 512; // 通用字符串长度512 - - public static final int MAX_COILCONFIG = 3; // 智能交通车检器线圈配置上限 - public static final int MAX_DETECTOR = 6; // 智能交通车检器配置上限 - public static final int MAX_VIOLATIONCODE = 16; // 智能交通违章代码长度上限 - public static final int MAX_LANE_CONFIG_NUMBER = 32; // 车道最大个数 - public static final int MAX_VIOLATIONCODE_DESCRIPT = 64; // 智能交通违章代码长度上限 - public static final int MAX_ROADWAYNO = 128; // 道路编号 由32个数字和字母构成 - public static final int MAX_PRIORITY_NUMBER = 256; // 违章优先级包含违章最大个数 - public static final int MAX_DRIVINGDIRECTION = 256; // 行驶方向字符串长度 - - public static final int MAX_OSD_CUSTOM_SORT_NUM = 8; - public static final int MAX_OSD_CUSTOM_SORT_ELEM_NUM = 8; - public static final int MAX_OSD_CUSTOM_GENERAL_NUM = 8; - public static final int MAX_OSD_ITEM_ATTR_NUM = 8; - public static final int MAX_PRE_POX_STR_LEN = 32; - public static final int MAX_OSD_CUSTOM_NAME_LEN = 32; - public static final int MAX_OSD_CUSTOM_VALUE_LEN = 256; - public static final int MAX_CONF_CHAR = 256; - public static final int MAX_IVS_EVENT_NUM = 256; - public static final int MAX_QUERY_USER_NUM = 4; // 最大查询用户个数 - public static final int MAX_DEVICE_ADDRESS = 256; // TrafficSnapshot智能交通设备地址 - public static final int MAX_STORAGE_NUM = 8; // 存储设备最大个数 - public static final int MAX_PARTITION_NUM = 8; // 最大分区个数 - public static final int MAX_SCADA_POINT_LIST_INFO_NUM = 256; // 最大点位表路径个数 + public static final int NET_MAX_CUSTOM_PERSON_INFO_NUM = 4; // 注册人员信息扩展最大个数 + public static final int NET_MAX_PERSON_INFO_LEN = 64; // 人员扩展信息最大长度 + + public static final int NET_NEW_MAX_RIGHT_NUM = 1024; // 用户权限个数上限 + public static final int NET_MAX_GROUP_NUM = 20; // 用户组个数上限 + public static final int NET_MAX_USER_NUM = 200; // 用户个数上限 + public static final int NET_RIGHT_NAME_LENGTH = 32; // 权限名长度 + public static final int NET_MEMO_LENGTH = 32; // 备注长度 + public static final int NET_NEW_USER_NAME_LENGTH = 128; // 用户名长度 + public static final int NET_NEW_USER_PSW_LENGTH = 128; // 密码 + public static final int NET_MAX_RIGHT_NUM = 100; // 用户权限个数上限 + public static final int NET_COMMENT_LENGTH = 100; // 备注信息长度 + public static final int NET_GROUPID_LENGTH = 64; // group id 信息长度 + public static final int NET_GROUPNAME_LENGTH = 128; // group name 信息长度 + public static final int NET_FEATUREVALUE_LENGTH = 128; // 人脸特征 信息长度 + + public static final int MAX_GROUP_ID_LEN = 64; // 最大布控组ID长度 + public static final int MAX_COLOR_NAME_LEN = 32; // 最大颜色名长度 + public static final int MAX_COLOR_HEX_LEN = 8; // 最大HEX颜色长度 + public static final int MAX_LINK_GROUP_NUM = 20; // 联动的布控组最大数量 + public static final int MAX_PATH_LEN = 260; // 最大路径长度 + public static final int MAX_RIDER_NUM = 16; // 骑车人数组上限 + public static final int MAX_ALARM_CHANNEL_NAME_LEN = 64; // 最大报警名称长度 + public static final int MAX_SMALLPIC_NUM = 32; // 最大小图张数 + + // 支持用户名最大长度为8位或16位的设备,对应扩展接口CLIENT_QueryUserInfoEx和CLIENT_OperateUserInfoEx + public static final int NET_USER_PSW_LENGTH_EX = 16; // 密码 + + public static final int AV_CFG_Device_ID_Len = 64; // 设备ID长度 + public static final int AV_CFG_Channel_Name_Len = 64; // 通道名称长度 + public static final int AV_CFG_Monitor_Name_Len = 64; // 电视墙名称长度 + public static final int AV_CFG_Max_TV_In_Block = 128; // 区块中TV的最大数量 + public static final int AV_CFG_Max_Block_In_Wall = 128; // 电视墙中区块的最大数量 + public static final int AV_CFG_IP_Address_Len = 32; // IP 长度 + public static final int AV_CFG_Protocol_Len = 32; // 协议名长度 + public static final int AV_CFG_User_Name_Len = 64; // 用户名长度 + public static final int AV_CFG_Password_Len = 64; // 密码长度 + public static final int AV_CFG_Serial_Len = 32; // 序列号长度 + public static final int AV_CFG_Device_Class_Len = 16; // 设备类型长度 + public static final int AV_CFG_Device_Type_Len = 32; // 设备具体型号长度 + public static final int AV_CFG_Device_Name_Len = 128; // 机器名称 + public static final int AV_CFG_Address_Len = 128; // 机器部署地点 + public static final int AV_CFG_Max_Path = 260; // 路径长度 + public static final int AV_CFG_Group_Name_Len = 64; // 分组名称长度 + public static final int AV_CFG_DeviceNo_Len = 32; // 设备编号长度 + public static final int AV_CFG_Group_Memo_Len = 128; // 分组说明长度 + public static final int AV_CFG_Max_Channel_Num = 1024; // 最大通道数量 + public static final int MAX_DEVICE_NAME_LEN = 64; // 机器名称 + public static final int MAX_DEV_ID_LEN_EX = 128; // 设备ID最大长度 + public static final int MAX_PATH_STOR = 240; // 远程目录的长度 + public static final int MAX_REMOTE_DEV_NUM = 256; // 最大远程设备数量 + public static final int NET_MAX_PLATE_NUMBER_LEN = 32; // 车牌字符长度 + public static final int NET_MAX_AUTHORITY_LIST_NUM = 16; // 权限列表最大个数 + public static final int NET_MAX_ALARMOUT_NUM_EX = 32; //报警输出口个数上限扩展 + public static final int NET_MAX_VIDEO_IN_NUM_EX = 32; //视频输入口个数上限扩展 + public static final int NET_MAX_SAERCH_IP_NUM = 256; // 最大搜索IP个数 + public static final int NET_MAX_POS_MAC_NUM = 8; // 刷卡机Mac码最大长度 + public static final int NET_MAX_BUSCARD_NUM = 64; // 公交卡号最大长度 + public static final int NET_STORAGE_NAME_LEN = 128; // 存储设备名称长度 + + public static final int NET_MAX_DOOR_NUM = 32; // 最大有权限门禁数目 + public static final int NET_MAX_TIMESECTION_NUM = 32; // 最大有效时间段数目 + public static final int NET_MAX_CARDNAME_LEN = 64; // 门禁卡命名最大长度 + public static final int NET_MAX_CARDNO_LEN = 32; // 门禁卡号最大长度 + public static final int NET_MAX_USERID_LEN = 32; // 门禁卡用户ID最大长度 + public static final int NET_MAX_IC_LEN = 32; // 身份证最大长度 + public static final int NET_MAX_QRCODE_LEN = 128; // QRCode 最大长度 + public static final int NET_MAX_CARD_INFO_LEN = 256; // 卡号信息最大长度 + public static final int NET_MAX_SIM_LEN = 16; // SIM卡的值的最大长度 + public static final int NET_MAX_DISKNUM = 256; // 最大硬盘个数 + public static final int MAX_FACE_DATA_NUM = 20; // 人脸模版最大个数 + public static final int MAX_FINGERPRINT_NUM = 10; // 最大指纹个数 + public static final int MAX_FACE_DATA_LEN = 2 * 1024; // 人脸模版数据最大长度 + public static final int MAX_COMMON_STRING_8 = 8; // 通用字符串长度8 + public static final int MAX_COMMON_STRING_16 = 16; // 通用字符串长度16 + public static final int MAX_COMMON_STRING_32 = 32; // 通用字符串长度32 + public static final int MAX_COMMON_STRING_64 = 64; // 通用字符串长度64 + public static final int MAX_COMMON_STRING_128 = 128; // 通用字符串长度128 + public static final int MAX_USER_NAME_LEN = 128; // 最大用户名长度 + public static final int MAX_ROOMNUM_COUNT = 32; // 房间最大个数 + public static final int MAX_FACE_COUTN = 20; // 人脸模板数据最大个数 + public static final int MAX_PHOTO_COUNT = 5; // 人脸照片最大个数 + public static final int MAX_WINDOWS_COUNT = 16; // 诱导屏最大窗口个数 + public static final int MAX_CLASS_NUMBER_LEN = 32; // 最大班级长度 + public static final int MAX_PHONENUMBER_LEN = 16; // 最大电话长度 + public static final int MAX_NASFILE_NUM = 8; // 最大NAS文件个数 + public static final int MAX_CELL_PHONE_NUMBER_LEN = 32; // 最大手机号长度 + public static final int MAX_MAIL_LEN = 64; // 邮箱最大长度 + public static final int MAX_PWD_LEN = 128; // 最大密码长度 + public static final int MAX_ACCESS_FLOOR_NUM = 64; // 最大楼层数量 + public static final int MAX_ORDER_NUMBER = 6; // 排序规则的最大数量 + public static final int MAX_NUMBER_REGISTER_INFO = 32; + + public static final int CFG_COMMON_STRING_8 = 8; // 通用字符串长度8 + public static final int CFG_COMMON_STRING_16 = 16; // 通用字符串长度16 + public static final int CFG_COMMON_STRING_32 = 32; // 通用字符串长度32 + public static final int CFG_COMMON_STRING_64 = 64; // 通用字符串长度64 + public static final int CFG_COMMON_STRING_128 = 128; // 通用字符串长度128 + public static final int CFG_COMMON_STRING_256 = 256; // 通用字符串长度256 + public static final int CFG_COMMON_STRING_512 = 512; // 通用字符串长度512 + + public static final int MAX_COILCONFIG = 3; // 智能交通车检器线圈配置上限 + public static final int MAX_DETECTOR = 6; // 智能交通车检器配置上限 + public static final int MAX_VIOLATIONCODE = 16; // 智能交通违章代码长度上限 + public static final int MAX_LANE_CONFIG_NUMBER = 32; // 车道最大个数 + public static final int MAX_VIOLATIONCODE_DESCRIPT = 64; // 智能交通违章代码长度上限 + public static final int MAX_ROADWAYNO = 128; // 道路编号 由32个数字和字母构成 + public static final int MAX_PRIORITY_NUMBER = 256; // 违章优先级包含违章最大个数 + public static final int MAX_DRIVINGDIRECTION = 256; // 行驶方向字符串长度 + + public static final int MAX_OSD_CUSTOM_SORT_NUM = 8; + public static final int MAX_OSD_CUSTOM_SORT_ELEM_NUM = 8; + public static final int MAX_OSD_CUSTOM_GENERAL_NUM = 8; + public static final int MAX_OSD_ITEM_ATTR_NUM = 8; + public static final int MAX_PRE_POX_STR_LEN = 32; + public static final int MAX_OSD_CUSTOM_NAME_LEN = 32; + public static final int MAX_OSD_CUSTOM_VALUE_LEN = 256; + public static final int MAX_CONF_CHAR = 256; + public static final int MAX_IVS_EVENT_NUM = 256; + public static final int MAX_QUERY_USER_NUM = 4; // 最大查询用户个数 + public static final int MAX_DEVICE_ADDRESS = 256; // TrafficSnapshot智能交通设备地址 + public static final int MAX_STORAGE_NUM = 8; // 存储设备最大个数 + public static final int MAX_PARTITION_NUM = 8; // 最大分区个数 + public static final int MAX_SCADA_POINT_LIST_INFO_NUM = 256; // 最大点位表路径个数 public static final int MAX_SCADA_POINT_LIST_ALARM_INFO_NUM = 256; // 最大点位表报警个数 - public static final int MAX_LABEL_ARRAY = 1024; - - public static final int MAX_DELIVERY_FILE_NUM = 128; // 最大投放文件数量 - public static final int DELIVERY_FILE_URL_LEN = 128; // 投放文件的URL长度 - - public static final int MAX_COMMON_STRING_512 = 512; // 通用字符串长度512 - public static final int MAX_RFIDELETAG_CARDID_LEN = 16; // RFID 电子车牌标签信息中卡号最大长度 - public static final int MAX_RFIDELETAG_DATE_LEN = 16; // RFID 电子车牌标签信息中时间最大长度 - public static final int MAX_REPEATENTERROUTE_NUM = 12; //反潜路径个数 - public static final int ECK_SCREEN_NUM_MAX = 8; // 智能停车系统出入口机最大屏数量 - public static final int MAX_CAR_CANDIDATE_NUM = 50; - public static final int MAX_REGISTER_NUM = 10; // 主动注册配置最大个数 - public static final int MAX_SERVER_NUM = 10; // 服务器最大个数 - public static final int NET_COUNTRY_LENGTH = 3; // 国家缩写长度 - public static final int MAX_ATTENDANCE_USERNAME_LEN = 36; // 考勤用户名长度 - public static final int NET_MAX_FINGER_PRINT = 10; // 指纹最大个数 - public static final int MAX_EVENT_ID_LEN = 52; // 国标事件ID最大长度 - public static final int MAX_HUMANTRAIT_EVENT_LEN = 36; // 补充人体特征上报事件最大长度 - public static final int MAX_EXIT_MAN_NUM = 32; // 最大支持的离开人员数量 - + public static final int MAX_LABEL_ARRAY = 1024; + + public static final int MAX_DELIVERY_FILE_NUM = 128; // 最大投放文件数量 + public static final int DELIVERY_FILE_URL_LEN = 128; // 投放文件的URL长度 + + public static final int MAX_COMMON_STRING_512 = 512; // 通用字符串长度512 + public static final int MAX_RFIDELETAG_CARDID_LEN = 16; // RFID 电子车牌标签信息中卡号最大长度 + public static final int MAX_RFIDELETAG_DATE_LEN = 16; // RFID 电子车牌标签信息中时间最大长度 + public static final int MAX_REPEATENTERROUTE_NUM = 12; //反潜路径个数 + public static final int ECK_SCREEN_NUM_MAX = 8; // 智能停车系统出入口机最大屏数量 + public static final int MAX_CAR_CANDIDATE_NUM = 50; + public static final int MAX_REGISTER_NUM = 10; // 主动注册配置最大个数 + public static final int MAX_SERVER_NUM = 10; // 服务器最大个数 + public static final int NET_COUNTRY_LENGTH = 3; // 国家缩写长度 + public static final int MAX_ATTENDANCE_USERNAME_LEN = 36; // 考勤用户名长度 + public static final int NET_MAX_FINGER_PRINT = 10; // 指纹最大个数 + public static final int MAX_EVENT_ID_LEN = 52; // 国标事件ID最大长度 + public static final int MAX_HUMANTRAIT_EVENT_LEN = 36; // 补充人体特征上报事件最大长度 + public static final int MAX_EXIT_MAN_NUM = 32; // 最大支持的离开人员数量 + // 矩阵子卡类型, 多种类型可以组合 - public static final int NET_MATRIX_CARD_MAIN = 0x10000000; // 主卡 - public static final int NET_MATRIX_CARD_INPUT = 0x00000001; // 输入卡 - public static final int NET_MATRIX_CARD_OUTPUT = 0x00000002; // 输出卡 - public static final int NET_MATRIX_CARD_ENCODE = 0x00000004; // 编码卡 - public static final int NET_MATRIX_CARD_DECODE = 0x00000008; // 解码卡 - public static final int NET_MATRIX_CARD_CASCADE = 0x00000010; // 级联卡 - public static final int NET_MATRIX_CARD_INTELLIGENT = 0x00000020; // 智能卡 - public static final int NET_MATRIX_CARD_ALARM = 0x00000040; // 报警卡 - public static final int NET_MATRIX_CARD_RAID = 0x00000080; // 硬Raid卡 - public static final int NET_MATRIX_CARD_NET_DECODE = 0x00000100; // 网络解码卡 - - public static final int RESERVED_TYPE_FOR_INTEL_BOX = 0x00000001; - public static final int RESERVED_TYPE_FOR_COMMON = 0x00000010; - + public static final int NET_MATRIX_CARD_MAIN = 0x10000000; // 主卡 + public static final int NET_MATRIX_CARD_INPUT = 0x00000001; // 输入卡 + public static final int NET_MATRIX_CARD_OUTPUT = 0x00000002; // 输出卡 + public static final int NET_MATRIX_CARD_ENCODE = 0x00000004; // 编码卡 + public static final int NET_MATRIX_CARD_DECODE = 0x00000008; // 解码卡 + public static final int NET_MATRIX_CARD_CASCADE = 0x00000010; // 级联卡 + public static final int NET_MATRIX_CARD_INTELLIGENT = 0x00000020; // 智能卡 + public static final int NET_MATRIX_CARD_ALARM = 0x00000040; // 报警卡 + public static final int NET_MATRIX_CARD_RAID = 0x00000080; // 硬Raid卡 + public static final int NET_MATRIX_CARD_NET_DECODE = 0x00000100; // 网络解码卡 + + public static final int RESERVED_TYPE_FOR_INTEL_BOX = 0x00000001; + public static final int RESERVED_TYPE_FOR_COMMON = 0x00000010; + /************************************************************************ ** 结构体 ***********************************************************************/ // 设置登入时的相关参数 - public static class NET_PARAM extends Structure - { - public int nWaittime; // 等待超时时间(毫秒为单位),为0默认5000ms - public int nConnectTime; // 连接超时时间(毫秒为单位),为0默认1500ms - public int nConnectTryNum; // 连接尝试次数,为0默认1次 - public int nSubConnectSpaceTime; // 子连接之间的等待时间(毫秒为单位),为0默认10ms - public int nGetDevInfoTime; // 获取设备信息超时时间,为0默认1000ms - public int nConnectBufSize; // 每个连接接收数据缓冲大小(字节为单位),为0默认250*1024 - public int nGetConnInfoTime; // 获取子连接信息超时时间(毫秒为单位),为0默认1000ms - public int nSearchRecordTime; // 按时间查询录像文件的超时时间(毫秒为单位),为0默认为3000ms - public int nsubDisconnetTime; // 检测子链接断线等待时间(毫秒为单位),为0默认为60000ms - public byte byNetType; // 网络类型, 0-LAN, 1-WAN - public byte byPlaybackBufSize; // 回放数据接收缓冲大小(M为单位),为0默认为4M - public byte bDetectDisconnTime; // 心跳检测断线时间(单位为秒),为0默认为60s,最小时间为2s - public byte bKeepLifeInterval; // 心跳包发送间隔(单位为秒),为0默认为10s,最小间隔为2s - public int nPicBufSize; // 实时图片接收缓冲大小(字节为单位),为0默认为2*1024*1024 - public byte[] bReserved = new byte[4]; // 保留字段字段 - } - + public static class NET_PARAM extends Structure { + public int nWaittime; // 等待超时时间(毫秒为单位),为0默认5000ms + public int nConnectTime; // 连接超时时间(毫秒为单位),为0默认1500ms + public int nConnectTryNum; // 连接尝试次数,为0默认1次 + public int nSubConnectSpaceTime; // 子连接之间的等待时间(毫秒为单位),为0默认10ms + public int nGetDevInfoTime; // 获取设备信息超时时间,为0默认1000ms + public int nConnectBufSize; // 每个连接接收数据缓冲大小(字节为单位),为0默认250*1024 + public int nGetConnInfoTime; // 获取子连接信息超时时间(毫秒为单位),为0默认1000ms + public int nSearchRecordTime; // 按时间查询录像文件的超时时间(毫秒为单位),为0默认为3000ms + public int nsubDisconnetTime; // 检测子链接断线等待时间(毫秒为单位),为0默认为60000ms + public byte byNetType; // 网络类型, 0-LAN, 1-WAN + public byte byPlaybackBufSize; // 回放数据接收缓冲大小(M为单位),为0默认为4M + public byte bDetectDisconnTime; // 心跳检测断线时间(单位为秒),为0默认为60s,最小时间为2s + public byte bKeepLifeInterval; // 心跳包发送间隔(单位为秒),为0默认为10s,最小间隔为2s + public int nPicBufSize; // 实时图片接收缓冲大小(字节为单位),为0默认为2*1024*1024 + public byte[] bReserved = new byte[4]; // 保留字段字段 + } + // 设备信息 public static class NET_DEVICEINFO extends Structure { - public byte[] sSerialNumber = new byte[NET_SERIALNO_LEN]; // 序列号 - public byte byAlarmInPortNum; // DVR报警输入个数 - public byte byAlarmOutPortNum; // DVR报警输出个数 - public byte byDiskNum; // DVR硬盘个数 - public byte byDVRType; // DVR类型, 见枚举NET_DEV_DEVICE_TYPE - public union union = new union(); + public byte[] sSerialNumber = new byte[NET_SERIALNO_LEN]; // 序列号 + public byte byAlarmInPortNum; // DVR报警输入个数 + public byte byAlarmOutPortNum; // DVR报警输出个数 + public byte byDiskNum; // DVR硬盘个数 + public byte byDVRType; // DVR类型, 见枚举NET_DEV_DEVICE_TYPE + public union union = new union(); + public static class union extends Union { - public byte byChanNum; // DVR通道个数 - public byte byLeftLogTimes; // 当登陆失败原因为密码错误时,通过此参数通知用户,剩余登陆次数,为0时表示此参数无效 + public byte byChanNum; // DVR通道个数 + public byte byLeftLogTimes; // 当登陆失败原因为密码错误时,通过此参数通知用户,剩余登陆次数,为0时表示此参数无效 } } - + // 设备信息扩展/////////////////////////////////////////////////// public static class NET_DEVICEINFO_Ex extends Structure { - public byte[] sSerialNumber = new byte[NET_SERIALNO_LEN]; // 序列号 - public int byAlarmInPortNum; // DVR报警输入个数 - public int byAlarmOutPortNum; // DVR报警输出个数 - public int byDiskNum; // DVR硬盘个数 - public int byDVRType; // DVR类型,见枚举NET_DEVICE_TYPE - public int byChanNum; // DVR通道个数 - public byte byLimitLoginTime; // 在线超时时间,为0表示不限制登陆,非0表示限制的分钟数 - public byte byLeftLogTimes; // 当登陆失败原因为密码错误时,通过此参数通知用户,剩余登陆次数,为0时表示此参数无效 - public byte[] bReserved = new byte[2]; // 保留字节,字节对齐 - public int byLockLeftTime; // 当登陆失败,用户解锁剩余时间(秒数), -1表示设备未设置该参数 - public byte[] Reserved = new byte[24]; // 保留 - } - + public byte[] sSerialNumber = new byte[NET_SERIALNO_LEN]; // 序列号 + public int byAlarmInPortNum; // DVR报警输入个数 + public int byAlarmOutPortNum; // DVR报警输出个数 + public int byDiskNum; // DVR硬盘个数 + public int byDVRType; // DVR类型,见枚举NET_DEVICE_TYPE + public int byChanNum; // DVR通道个数 + public byte byLimitLoginTime; // 在线超时时间,为0表示不限制登陆,非0表示限制的分钟数 + public byte byLeftLogTimes; // 当登陆失败原因为密码错误时,通过此参数通知用户,剩余登陆次数,为0时表示此参数无效 + public byte[] bReserved = new byte[2]; // 保留字节,字节对齐 + public int byLockLeftTime; // 当登陆失败,用户解锁剩余时间(秒数), -1表示设备未设置该参数 + public byte[] Reserved = new byte[24]; // 保留 + } + // 对应接口 CLIENT_LoginEx2///////////////////////////////////////////////////////// public static class EM_LOGIN_SPAC_CAP_TYPE extends Structure { - public static final int EM_LOGIN_SPEC_CAP_TCP = 0; // TCP登陆, 默认方式 - public static final int EM_LOGIN_SPEC_CAP_ANY = 1; // 无条件登陆 - public static final int EM_LOGIN_SPEC_CAP_SERVER_CONN = 2; // 主动注册的登入 - public static final int EM_LOGIN_SPEC_CAP_MULTICAST = 3; // 组播登陆 - public static final int EM_LOGIN_SPEC_CAP_UDP = 4; // UDP方式下的登入 - public static final int EM_LOGIN_SPEC_CAP_MAIN_CONN_ONLY = 6; // 只建主连接下的登入 - public static final int EM_LOGIN_SPEC_CAP_SSL = 7; // SSL加密方式登陆 - - public static final int EM_LOGIN_SPEC_CAP_INTELLIGENT_BOX = 9; // 登录智能盒远程设备 - public static final int EM_LOGIN_SPEC_CAP_NO_CONFIG = 10; // 登录设备后不做取配置操作 - public static final int EM_LOGIN_SPEC_CAP_U_LOGIN = 11; // 用U盾设备的登入 - public static final int EM_LOGIN_SPEC_CAP_LDAP = 12; // LDAP方式登录 - public static final int EM_LOGIN_SPEC_CAP_AD = 13; // AD(ActiveDirectory)登录方式 - public static final int EM_LOGIN_SPEC_CAP_RADIUS = 14; // Radius 登录方式 - public static final int EM_LOGIN_SPEC_CAP_SOCKET_5 = 15; // Socks5登陆方式 - public static final int EM_LOGIN_SPEC_CAP_CLOUD = 16; // 云登陆方式 - public static final int EM_LOGIN_SPEC_CAP_AUTH_TWICE = 17; // 二次鉴权登陆方式 - public static final int EM_LOGIN_SPEC_CAP_TS = 18; // TS码流客户端登陆方式 - public static final int EM_LOGIN_SPEC_CAP_P2P = 19; // 为P2P登陆方式 - public static final int EM_LOGIN_SPEC_CAP_MOBILE = 20; // 手机客户端登陆 - } - + public static final int EM_LOGIN_SPEC_CAP_TCP = 0; // TCP登陆, 默认方式 + public static final int EM_LOGIN_SPEC_CAP_ANY = 1; // 无条件登陆 + public static final int EM_LOGIN_SPEC_CAP_SERVER_CONN = 2; // 主动注册的登入 + public static final int EM_LOGIN_SPEC_CAP_MULTICAST = 3; // 组播登陆 + public static final int EM_LOGIN_SPEC_CAP_UDP = 4; // UDP方式下的登入 + public static final int EM_LOGIN_SPEC_CAP_MAIN_CONN_ONLY = 6; // 只建主连接下的登入 + public static final int EM_LOGIN_SPEC_CAP_SSL = 7; // SSL加密方式登陆 + + public static final int EM_LOGIN_SPEC_CAP_INTELLIGENT_BOX = 9; // 登录智能盒远程设备 + public static final int EM_LOGIN_SPEC_CAP_NO_CONFIG = 10; // 登录设备后不做取配置操作 + public static final int EM_LOGIN_SPEC_CAP_U_LOGIN = 11; // 用U盾设备的登入 + public static final int EM_LOGIN_SPEC_CAP_LDAP = 12; // LDAP方式登录 + public static final int EM_LOGIN_SPEC_CAP_AD = 13; // AD(ActiveDirectory)登录方式 + public static final int EM_LOGIN_SPEC_CAP_RADIUS = 14; // Radius 登录方式 + public static final int EM_LOGIN_SPEC_CAP_SOCKET_5 = 15; // Socks5登陆方式 + public static final int EM_LOGIN_SPEC_CAP_CLOUD = 16; // 云登陆方式 + public static final int EM_LOGIN_SPEC_CAP_AUTH_TWICE = 17; // 二次鉴权登陆方式 + public static final int EM_LOGIN_SPEC_CAP_TS = 18; // TS码流客户端登陆方式 + public static final int EM_LOGIN_SPEC_CAP_P2P = 19; // 为P2P登陆方式 + public static final int EM_LOGIN_SPEC_CAP_MOBILE = 20; // 手机客户端登陆 + } + // 时间 public static class NET_TIME extends Structure { - public int dwYear; // 年 - public int dwMonth; // 月 - public int dwDay; // 日 - public int dwHour; // 时 - public int dwMinute; // 分 - public int dwSecond; // 秒 - + public int dwYear; // 年 + public int dwMonth; // 月 + public int dwDay; // 日 + public int dwHour; // 时 + public int dwMinute; // 分 + public int dwSecond; // 秒 + public NET_TIME() { this.dwYear = 0; this.dwMonth = 0; @@ -1320,16 +1328,16 @@ public interface NetSDKLib extends Library { this.dwMinute = 0; this.dwSecond = 0; } - + public void setTime(int year, int month, int day, int hour, int minute, int second) { - this.dwYear = year; - this.dwMonth= month; - this.dwDay= day; - this.dwHour=hour; - this.dwMinute=minute; - this.dwSecond=second; - } - + this.dwYear = year; + this.dwMonth = month; + this.dwDay = day; + this.dwHour = hour; + this.dwMinute = minute; + this.dwSecond = second; + } + public NET_TIME(NET_TIME other) { this.dwYear = other.dwYear; this.dwMonth = other.dwMonth; @@ -1338,590 +1346,541 @@ public interface NetSDKLib extends Library { this.dwMinute = other.dwMinute; this.dwSecond = other.dwSecond; } - + //用于列表中显示 public String toStringTime() { - return String.format("%02d/%02d/%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); + return String.format("%02d/%02d/%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); } - + public String toStringTimeEx() { - return String.format("%02d-%02d-%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); + return String.format("%02d-%02d-%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); } - + public String toString() { - return String.format("%02d%02d%02d%02d%02d%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); + return String.format("%02d%02d%02d%02d%02d%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); } } - public static class NET_TIME_EX extends Structure - { - public int dwYear; // 年 - public int dwMonth; // 月 - public int dwDay; // 日 - public int dwHour; // 时 - public int dwMinute; // 分 - public int dwSecond; // 秒 - public int dwMillisecond; // 毫秒 - public int[] dwReserved = new int[2]; // 保留字段 - + public static class NET_TIME_EX extends Structure { + public int dwYear; // 年 + public int dwMonth; // 月 + public int dwDay; // 日 + public int dwHour; // 时 + public int dwMinute; // 分 + public int dwSecond; // 秒 + public int dwMillisecond; // 毫秒 + public int[] dwReserved = new int[2]; // 保留字段 + public String toString() { return dwYear + "/" + dwMonth + "/" + dwDay + " " + dwHour + ":" + dwMinute + ":" + dwSecond; } //用于列表中显示 - public String toStringTime() - { - return String.format("%02d/%02d/%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); + public String toStringTime() { + return String.format("%02d/%02d/%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); } //存储文件名使用 - public String toStringTitle() - { - return String.format("Time_%02d%02d%02d_%02d%02d%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); + public String toStringTitle() { + return String.format("Time_%02d%02d%02d_%02d%02d%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond); } } - + // 区域 - public static class NET_CFG_Rect extends Structure - { - public int nStructSize; - public int nLeft; - public int nTop; - public int nRight; - public int nBottom; - - public NET_CFG_Rect() - { + public static class NET_CFG_Rect extends Structure { + public int nStructSize; + public int nLeft; + public int nTop; + public int nRight; + public int nBottom; + + public NET_CFG_Rect() { this.nStructSize = this.size(); } } - + // 颜色 - public static class NET_CFG_Color extends Structure - { - public int nStructSize; - public int nRed; // 红 - public int nGreen; // 绿 - public int nBlue; // 蓝 - public int nAlpha; // 透明 - - public NET_CFG_Color() - { + public static class NET_CFG_Color extends Structure { + public int nStructSize; + public int nRed; // 红 + public int nGreen; // 绿 + public int nBlue; // 蓝 + public int nAlpha; // 透明 + + public NET_CFG_Color() { this.nStructSize = this.size(); } } // 编码物件-通道标题 - public static class NET_CFG_VideoWidgetChannelTitle extends Structure - { - public int nStructSize; - public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1 - public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1 - public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色 - public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色 - public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点 - public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 - - public NET_CFG_VideoWidgetChannelTitle() - { + public static class NET_CFG_VideoWidgetChannelTitle extends Structure { + public int nStructSize; + public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1 + public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1 + public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色 + public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色 + public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点 + public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 + + public NET_CFG_VideoWidgetChannelTitle() { this.nStructSize = this.size(); } } // 编码物件-时间标题 - public static class NET_CFG_VideoWidgetTimeTitle extends Structure - { - public int nStructSize; - public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1 - public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1 - public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色 - public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色 - public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点 - public int bShowWeek; // 是否显示星期, 类型为BOOL, 取值0或者1 - public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 - - public NET_CFG_VideoWidgetTimeTitle() - { + public static class NET_CFG_VideoWidgetTimeTitle extends Structure { + public int nStructSize; + public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1 + public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1 + public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色 + public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色 + public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点 + public int bShowWeek; // 是否显示星期, 类型为BOOL, 取值0或者1 + public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 + + public NET_CFG_VideoWidgetTimeTitle() { this.nStructSize = this.size(); } } - + // 编码物件-区域覆盖配置 - public static class NET_CFG_VideoWidgetCover extends Structure - { - public int nStructSize; - public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1 - public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1 - public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色 - public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色 - public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191 - public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 - - public NET_CFG_VideoWidgetCover() - { + public static class NET_CFG_VideoWidgetCover extends Structure { + public int nStructSize; + public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1 + public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1 + public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色 + public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色 + public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191 + public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 + + public NET_CFG_VideoWidgetCover() { this.nStructSize = this.size(); } } - - public class EM_TITLE_TEXT_ALIGN - { - public static final int EM_TEXT_ALIGN_INVALID = 0; // 无效的对齐方式 - public static final int EM_TEXT_ALIGN_LEFT = 1; // 左对齐 - public static final int EM_TEXT_ALIGN_XCENTER = 2; // X坐标中对齐 - public static final int EM_TEXT_ALIGN_YCENTER = 3; // Y坐标中对齐 - public static final int EM_TEXT_ALIGN_CENTER = 4; // 居中 - public static final int EM_TEXT_ALIGN_RIGHT = 5; // 右对齐 - public static final int EM_TEXT_ALIGN_TOP = 6; // 按照顶部对齐 - public static final int EM_TEXT_ALIGN_BOTTOM = 7; // 按照底部对齐 - public static final int EM_TEXT_ALIGN_LEFTTOP = 8; // 按照左上角对齐 - public static final int EM_TEXT_ALIGN_CHANGELINE = 9; // 换行对齐 + + public class EM_TITLE_TEXT_ALIGN { + public static final int EM_TEXT_ALIGN_INVALID = 0; // 无效的对齐方式 + public static final int EM_TEXT_ALIGN_LEFT = 1; // 左对齐 + public static final int EM_TEXT_ALIGN_XCENTER = 2; // X坐标中对齐 + public static final int EM_TEXT_ALIGN_YCENTER = 3; // Y坐标中对齐 + public static final int EM_TEXT_ALIGN_CENTER = 4; // 居中 + public static final int EM_TEXT_ALIGN_RIGHT = 5; // 右对齐 + public static final int EM_TEXT_ALIGN_TOP = 6; // 按照顶部对齐 + public static final int EM_TEXT_ALIGN_BOTTOM = 7; // 按照底部对齐 + public static final int EM_TEXT_ALIGN_LEFTTOP = 8; // 按照左上角对齐 + public static final int EM_TEXT_ALIGN_CHANGELINE = 9; // 换行对齐 } // 编码物件-自定义标题 - public static class NET_CFG_VideoWidgetCustomTitle extends Structure - { - public int nStructSize; - public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1 - public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1 - public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1 - public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色 - public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色 - public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点 - public byte[] szText = new byte[NET_CFG_Custom_Title_Len];// 标题内容 - public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 - public byte[] szType = new byte[NET_CFG_Custom_TitleType_Len];// 标题类型 "Rtinfo" 实时刻录信息 "Custom" 自定义叠加、温湿度叠加 "Title" :片头信息 "Check" 校验码 - // 地理信息 "Geography" ATM卡号信息 "ATMCardInfo" 摄像机编号 "CameraID" - public int emTextAlign; // 标题对齐方式 (参见EM_TITLE_TEXT_ALIGN) - - public NET_CFG_VideoWidgetCustomTitle() - { + public static class NET_CFG_VideoWidgetCustomTitle extends Structure { + public int nStructSize; + public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1 + public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1 + public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1 + public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色 + public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色 + public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点 + public byte[] szText = new byte[NET_CFG_Custom_Title_Len];// 标题内容 + public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 + public byte[] szType = new byte[NET_CFG_Custom_TitleType_Len];// 标题类型 "Rtinfo" 实时刻录信息 "Custom" 自定义叠加、温湿度叠加 "Title" :片头信息 "Check" 校验码 + // 地理信息 "Geography" ATM卡号信息 "ATMCardInfo" 摄像机编号 "CameraID" + public int emTextAlign; // 标题对齐方式 (参见EM_TITLE_TEXT_ALIGN) + + public NET_CFG_VideoWidgetCustomTitle() { this.nStructSize = this.size(); } } - + // 编码物件-叠加传感器信息-叠加内容描述 - public static class NET_CFG_VideoWidgetSensorInfo_Description extends Structure - { - public int nStructSize; - public int nSensorID; // 需要描述的传感器的ID(即模拟量报警通道号) - public byte[] szDevID = new byte[CFG_COMMON_STRING_32]; // 设备ID - public byte[] szPointID = new byte[CFG_COMMON_STRING_32];// 测点ID - public byte[] szText = new byte[CFG_COMMON_STRING_256]; // 需要叠加的内容 - public NET_CFG_VideoWidgetSensorInfo_Description() - { + public static class NET_CFG_VideoWidgetSensorInfo_Description extends Structure { + public int nStructSize; + public int nSensorID; // 需要描述的传感器的ID(即模拟量报警通道号) + public byte[] szDevID = new byte[CFG_COMMON_STRING_32]; // 设备ID + public byte[] szPointID = new byte[CFG_COMMON_STRING_32];// 测点ID + public byte[] szText = new byte[CFG_COMMON_STRING_256]; // 需要叠加的内容 + + public NET_CFG_VideoWidgetSensorInfo_Description() { this.nStructSize = this.size(); } } // 编码物件-叠加传感器信息 - public static class NET_CFG_VideoWidgetSensorInfo extends Structure - { - public int nStructSize; - public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 - public int bEncodeBlend; // 叠加到主码流视频编码, 类型为BOOL, 取值0或者1 - public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191 - public int nDescriptionNum; // 叠加区域描述数目 - public NET_CFG_VideoWidgetSensorInfo_Description[] stuDescription = (NET_CFG_VideoWidgetSensorInfo_Description[])new NET_CFG_VideoWidgetSensorInfo_Description().toArray(NET_CFG_Max_Description_Num);// 叠加区域描述信息 - - public NET_CFG_VideoWidgetSensorInfo() - { + public static class NET_CFG_VideoWidgetSensorInfo extends Structure { + public int nStructSize; + public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1 + public int bEncodeBlend; // 叠加到主码流视频编码, 类型为BOOL, 取值0或者1 + public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191 + public int nDescriptionNum; // 叠加区域描述数目 + public NET_CFG_VideoWidgetSensorInfo_Description[] stuDescription = (NET_CFG_VideoWidgetSensorInfo_Description[]) new NET_CFG_VideoWidgetSensorInfo_Description().toArray(NET_CFG_Max_Description_Num);// 叠加区域描述信息 + + public NET_CFG_VideoWidgetSensorInfo() { this.nStructSize = this.size(); } } // 视频编码物件配置 - public static class NET_CFG_VideoWidget extends Structure - { - public int nStructSize; - public NET_CFG_VideoWidgetChannelTitle stuChannelTitle = new NET_CFG_VideoWidgetChannelTitle(); // 通道标题 - public NET_CFG_VideoWidgetTimeTitle stuTimeTitle = new NET_CFG_VideoWidgetTimeTitle(); // 时间标题 - public int nConverNum; // 区域覆盖数量 - public NET_CFG_VideoWidgetCover[] stuCovers = new NET_CFG_VideoWidgetCover[NET_CFG_Max_Video_Widget_Cover]; // 覆盖区域 - public int nCustomTitleNum; // 自定义标题数量 + public static class NET_CFG_VideoWidget extends Structure { + public int nStructSize; + public NET_CFG_VideoWidgetChannelTitle stuChannelTitle = new NET_CFG_VideoWidgetChannelTitle(); // 通道标题 + public NET_CFG_VideoWidgetTimeTitle stuTimeTitle = new NET_CFG_VideoWidgetTimeTitle(); // 时间标题 + public int nConverNum; // 区域覆盖数量 + public NET_CFG_VideoWidgetCover[] stuCovers = new NET_CFG_VideoWidgetCover[NET_CFG_Max_Video_Widget_Cover]; // 覆盖区域 + public int nCustomTitleNum; // 自定义标题数量 public NET_CFG_VideoWidgetCustomTitle[] stuCustomTitle = new NET_CFG_VideoWidgetCustomTitle[NET_CFG_Max_Video_Widget_Custom_Title]; // 自定义标题 - public int nSensorInfo; // 传感器信息叠加区域数目 - public NET_CFG_VideoWidgetSensorInfo[] stuSensorInfo = new NET_CFG_VideoWidgetSensorInfo[NET_CFG_Max_Video_Widget_Sensor_Info]; // 传感器信息叠加区域信息 - public double fFontSizeScale; //叠加字体大小放大比例 - //当fFontSizeScale≠0时,nFontSize不起作用 - //当fFontSizeScale=0时,nFontSize起作用 - //设备默认fFontSizeScale=1.0 - //如果需要修改倍数,修改该值 - //如果需要按照像素设置,则置该值为0,nFontSize的值生效 - public int nFontSize; //叠加到主码流上的全局字体大小,单位 px. - //和fFontSizeScale共同作用 - public int nFontSizeExtra1; //叠加到辅码流1上的全局字体大小,单位 px - public int nFontSizeExtra2; //叠加到辅码流2上的全局字体大小,单位 px - public int nFontSizeExtra3; //叠加到辅码流3上的全局字体大小,单位 px - public int nFontSizeSnapshot; //叠加到抓图流上的全局字体大小, 单位 px - public int nFontSizeMergeSnapshot; //叠加到抓图流上合成图片的字体大小,单位 px - - public NET_CFG_VideoWidget() - { + public int nSensorInfo; // 传感器信息叠加区域数目 + public NET_CFG_VideoWidgetSensorInfo[] stuSensorInfo = new NET_CFG_VideoWidgetSensorInfo[NET_CFG_Max_Video_Widget_Sensor_Info]; // 传感器信息叠加区域信息 + public double fFontSizeScale; //叠加字体大小放大比例 + //当fFontSizeScale≠0时,nFontSize不起作用 + //当fFontSizeScale=0时,nFontSize起作用 + //设备默认fFontSizeScale=1.0 + //如果需要修改倍数,修改该值 + //如果需要按照像素设置,则置该值为0,nFontSize的值生效 + public int nFontSize; //叠加到主码流上的全局字体大小,单位 px. + //和fFontSizeScale共同作用 + public int nFontSizeExtra1; //叠加到辅码流1上的全局字体大小,单位 px + public int nFontSizeExtra2; //叠加到辅码流2上的全局字体大小,单位 px + public int nFontSizeExtra3; //叠加到辅码流3上的全局字体大小,单位 px + public int nFontSizeSnapshot; //叠加到抓图流上的全局字体大小, 单位 px + public int nFontSizeMergeSnapshot; //叠加到抓图流上合成图片的字体大小,单位 px + + public NET_CFG_VideoWidget() { this.nStructSize = this.size(); for (int i = 0; i < stuCustomTitle.length; i++) { - stuCustomTitle[i] = new NET_CFG_VideoWidgetCustomTitle(); - } - + stuCustomTitle[i] = new NET_CFG_VideoWidgetCustomTitle(); + } + for (int i = 0; i < stuCovers.length; i++) { - stuCovers[i] = new NET_CFG_VideoWidgetCover(); - } - + stuCovers[i] = new NET_CFG_VideoWidgetCover(); + } + for (int i = 0; i < stuSensorInfo.length; i++) { - stuSensorInfo[i] = new NET_CFG_VideoWidgetSensorInfo(); - } + stuSensorInfo[i] = new NET_CFG_VideoWidgetSensorInfo(); + } } } - + // 报警事件类型 NET_EVENT_VIDEOABNORMALDETECTION 对应的数据描述信息 - public static class ALARM_VIDEOABNORMAL_DETECTION_INFO extends Structure - { - public int dwSize; - public int nChannelID; // 通道号 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public int nType; // 检测类型,0-视频丢失, 1-视频遮挡, 2-画面冻结, 3-过亮, 4-过暗, 5-场景变化 - // 6-条纹检测 , 7-噪声检测 , 8-偏色检测 , 9-视频模糊检测 , 10-对比度异常检测 - // 11-视频运动, 12-视频闪烁, 13-视频颜色, 14-虚焦检测, 15-过曝检测 - public int nValue; // 检测值,值越高表示视频质量越差, GB30147定义 - public int nOccurrenceCount; // 规则被触发生次数 - - public ALARM_VIDEOABNORMAL_DETECTION_INFO() - { - this.dwSize = this.size(); - } - } - + public static class ALARM_VIDEOABNORMAL_DETECTION_INFO extends Structure { + public int dwSize; + public int nChannelID; // 通道号 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public int nType; // 检测类型,0-视频丢失, 1-视频遮挡, 2-画面冻结, 3-过亮, 4-过暗, 5-场景变化 + // 6-条纹检测 , 7-噪声检测 , 8-偏色检测 , 9-视频模糊检测 , 10-对比度异常检测 + // 11-视频运动, 12-视频闪烁, 13-视频颜色, 14-虚焦检测, 15-过曝检测 + public int nValue; // 检测值,值越高表示视频质量越差, GB30147定义 + public int nOccurrenceCount; // 规则被触发生次数 + + public ALARM_VIDEOABNORMAL_DETECTION_INFO() { + this.dwSize = this.size(); + } + } + // 停车发卡刷卡类型 - public static class NET_PARKING_CARD_TYPE extends Structure - { + public static class NET_PARKING_CARD_TYPE extends Structure { public static final int NET_PARKING_CARD_TYPE_UNKNOWN = 0; public static final int NET_PARKING_CARD_TYPE_SEND = 1; // 发卡 public static final int NET_PARKING_CARD_TYPE_DETECT = 2; // 刷卡 } - + // 报警事件类型 NET_ALARM_PARKING_CARD (停车刷卡事件)对应的数据描述信息 public static class ALARM_PARKING_CARD extends Structure { - public int dwSize; - public int emType; // 类型, 参考 NET_PARKING_CARD_TYPE - public int dwCardNo; // 卡号 - public byte[] szPlate = new byte[NET_COMMON_STRING_16]; // 车牌 - + public int dwSize; + public int emType; // 类型, 参考 NET_PARKING_CARD_TYPE + public int dwCardNo; // 卡号 + public byte[] szPlate = new byte[NET_COMMON_STRING_16]; // 车牌 + public ALARM_PARKING_CARD() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } // 报警事件类型 NET_ALARM_NEW_FILE 对应的数据描述信息 - public static class ALARM_NEW_FILE_INFO extends Structure - { - public int dwSize; - public int nChannel; // 抓图通道号 - public int nEventID; // 事件ID - public int dwEvent; // 事件类型 - public int FileSize; // 文件大小,单位是字节 - public int nIndex; // 事件源通道 - public int dwStorPoint; // 存储点 - public byte[] szFileName = new byte[128]; // 文件名 - - public ALARM_NEW_FILE_INFO() - { + public static class ALARM_NEW_FILE_INFO extends Structure { + public int dwSize; + public int nChannel; // 抓图通道号 + public int nEventID; // 事件ID + public int dwEvent; // 事件类型 + public int FileSize; // 文件大小,单位是字节 + public int nIndex; // 事件源通道 + public int dwStorPoint; // 存储点 + public byte[] szFileName = new byte[128]; // 文件名 + + public ALARM_NEW_FILE_INFO() { this.dwSize = this.size(); } } // 人数越上限类型 - public static class EM_UPPER_LIMIT_TYPE extends Structure - { - public static final int EM_UPPER_LIMIT_TYPE_UNKNOWN = 0; - public static final int EM_UPPER_LIMIT_TYPE_ENTER_OVER = 1; // 进入越上限 - public static final int EM_UPPER_LIMIT_TYPE_EXIT_OVER = 2; // 出来越上限 + public static class EM_UPPER_LIMIT_TYPE extends Structure { + public static final int EM_UPPER_LIMIT_TYPE_UNKNOWN = 0; + public static final int EM_UPPER_LIMIT_TYPE_ENTER_OVER = 1; // 进入越上限 + public static final int EM_UPPER_LIMIT_TYPE_EXIT_OVER = 2; // 出来越上限 public static final int EM_UPPER_LIMIT_TYPE_INSIDE_OVER = 3; // 内部越上限 } - + // 事件类型 NET_ALARM_HUMAM_NUMBER_STATISTIC (人数量/客流量统计事件NumberStat对应的数据描述信息) - public static class ALARM_HUMAN_NUMBER_STATISTIC_INFO extends Structure - { - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventAction; // 事件动作,0-事件持续, 1-表示事件开始, 2-表示事件结束; - public int nNumber; // 区域内物体的个数 - public int nEnteredNumber; // 进入区域或者出入口内的物体个数 - public int nExitedNumber; // 出来区域或者出入口内的物体个数 - public int emUpperLimitType; // 人数越上限类型,参见EM_UPPER_LIMIT_TYPE定义 - public byte[] reserved = new byte[512]; // 预留 - } - + public static class ALARM_HUMAN_NUMBER_STATISTIC_INFO extends Structure { + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventAction; // 事件动作,0-事件持续, 1-表示事件开始, 2-表示事件结束; + public int nNumber; // 区域内物体的个数 + public int nEnteredNumber; // 进入区域或者出入口内的物体个数 + public int nExitedNumber; // 出来区域或者出入口内的物体个数 + public int emUpperLimitType; // 人数越上限类型,参见EM_UPPER_LIMIT_TYPE定义 + public byte[] reserved = new byte[512]; // 预留 + } + /////////////////////////////////智能支持///////////////////////////////// //物体对应图片文件信息 - public static class NET_PIC_INFO extends Structure - { - public int dwOffSet; // 文件在二进制数据块中的偏移位置,单位:字节 - public int dwFileLenth; // 文件大小,单位:字节 - public short wWidth; // 图片宽度,单位:像素 - public short wHeight; // 图片高度,单位:像素 - public Pointer pszFilePath; // 鉴于历史原因,该成员只在事件上报时有效, char * - // 文件路径 - // 用户使用该字段时需要自行申请空间进行拷贝保存 - public byte bIsDetected; // 图片是否算法检测出来的检测过的提交识别服务器时, - // 则不需要再时检测定位抠图,1:检测过的,0:没有检测过 - public byte[] bReserved = new byte[3]; // 12<--16 - public int nFilePathLen; // 文件路径长度 既pszFilePath 用户申请的大小 - public NET_POINT stuPoint; // 小图左上角在大图的位置,使用绝对坐标系 + public static class NET_PIC_INFO extends Structure { + public int dwOffSet; // 文件在二进制数据块中的偏移位置,单位:字节 + public int dwFileLenth; // 文件大小,单位:字节 + public short wWidth; // 图片宽度,单位:像素 + public short wHeight; // 图片高度,单位:像素 + public Pointer pszFilePath; // 鉴于历史原因,该成员只在事件上报时有效, char * + // 文件路径 + // 用户使用该字段时需要自行申请空间进行拷贝保存 + public byte bIsDetected; // 图片是否算法检测出来的检测过的提交识别服务器时, + // 则不需要再时检测定位抠图,1:检测过的,0:没有检测过 + public byte[] bReserved = new byte[3]; // 12<--16 + public int nFilePathLen; // 文件路径长度 既pszFilePath 用户申请的大小 + public NET_POINT stuPoint; // 小图左上角在大图的位置,使用绝对坐标系 } // 人员类型 - public static class EM_PERSON_TYPE extends Structure - { - public static final int PERSON_TYPE_UNKNOWN = 0; - public static final int PERSON_TYPE_NORMAL = 1; //普通人员 + public static class EM_PERSON_TYPE extends Structure { + public static final int PERSON_TYPE_UNKNOWN = 0; + public static final int PERSON_TYPE_NORMAL = 1; //普通人员 public static final int PERSON_TYPE_SUSPICION = 2; //嫌疑人员 } // 证件类型 - public static class EM_CERTIFICATE_TYPE extends Structure - { - public static final int CERTIFICATE_TYPE_UNKNOWN = 0; - public static final int CERTIFICATE_TYPE_IC = 1; //身份证 + public static class EM_CERTIFICATE_TYPE extends Structure { + public static final int CERTIFICATE_TYPE_UNKNOWN = 0; + public static final int CERTIFICATE_TYPE_IC = 1; //身份证 public static final int CERTIFICATE_TYPE_PASSPORT = 2; //护照 } - + //人员信息 - public static class FACERECOGNITION_PERSON_INFO extends Structure - { - public byte[] szPersonName = new byte[NET_MAX_NAME_LEN]; // 姓名,此参数作废 - public short wYear; // 出生年,作为查询条件时,此参数填0,则表示此参数无效 - public byte byMonth; // 出生月,作为查询条件时,此参数填0,则表示此参数无效 - public byte byDay; // 出生日,作为查询条件时,此参数填0,则表示此参数无效 - public byte[] szID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标示(身份证号码,工号,或其他编号) - public byte bImportantRank; // 人员重要等级,1~10,数值越高越重要,作为查询条件时,此参数填0,则表示此参数无效 - public byte bySex; // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效 - public short wFacePicNum; // 图片张数 - public NET_PIC_INFO[] szFacePicInfo = (NET_PIC_INFO[])new NET_PIC_INFO().toArray(NET_MAX_PERSON_IMAGE_NUM);//当前人员对应的图片信息 - public byte byType; // 人员类型,详见EM_PERSON_TYPE - public byte byIDType; // 证件类型,详见EM_CERTIFICATE_TYPE - public byte byGlasses; // 是否戴眼镜,0-未知 1-不戴 2-戴 - public byte byAge; // 年龄,0表示未知 - public byte[] szProvince = new byte[NET_MAX_PROVINCE_NAME_LEN];// 省份 - public byte[] szCity = new byte[NET_MAX_CITY_NAME_LEN]; // 城市 - public byte[] szPersonNameEx = new byte[NET_MAX_PERSON_NAME_LEN];// 姓名,因存在姓名过长,16字节无法存放问题,故增加此参数, - public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标识符,首次由服务端生成,区别于ID字段 - // 修改,删除操作时必填 - public byte[] szCountry = new byte[NET_COUNTRY_LENGTH]; // 国籍,符合ISO3166规范 - public byte byIsCustomType; // 人员类型是否为自定义: 0 使用Type规定的类型 1 自定义,使用szPersonName字段 - public Pointer pszComment; // 备注信息, 用户自己申请内存的情况时, - // 下方bCommentLen需填写对应的具体长度值,推荐长度 NET_COMMENT_LENGTH - - public Pointer pszGroupID; // 人员所属组ID, 用户自己申请内存的情况时, - // 下方bGroupIdLen需填写对应的具体长度值,推荐长度 NET_GROUPID_LENGTH - - public Pointer pszGroupName; // 人员所属组名, 用户自己申请内存的情况时, - // 下方bGroupNameLen需填写对应的具体长度值,推荐长度 NET_GROUPNAME_LENGTH - - public Pointer pszFeatureValue; // 人脸特征, 用户自己申请内存的情况时, - // 下方bFeatureValueLen需填写对应的具体长度值,推荐长度 NET_FEATUREVALUE_LENGTH - - public byte bGroupIdLen; // pszGroupID的长度 - public byte bGroupNameLen; // pszGroupName的长度 - public byte bFeatureValueLen; // pszFeatureValue的长度 - public byte bCommentLen; // pszComment的长度 - public int emEmotion; // 表情, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE + public static class FACERECOGNITION_PERSON_INFO extends Structure { + public byte[] szPersonName = new byte[NET_MAX_NAME_LEN]; // 姓名,此参数作废 + public short wYear; // 出生年,作为查询条件时,此参数填0,则表示此参数无效 + public byte byMonth; // 出生月,作为查询条件时,此参数填0,则表示此参数无效 + public byte byDay; // 出生日,作为查询条件时,此参数填0,则表示此参数无效 + public byte[] szID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标示(身份证号码,工号,或其他编号) + public byte bImportantRank; // 人员重要等级,1~10,数值越高越重要,作为查询条件时,此参数填0,则表示此参数无效 + public byte bySex; // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效 + public short wFacePicNum; // 图片张数 + public NET_PIC_INFO[] szFacePicInfo = (NET_PIC_INFO[]) new NET_PIC_INFO().toArray(NET_MAX_PERSON_IMAGE_NUM);//当前人员对应的图片信息 + public byte byType; // 人员类型,详见EM_PERSON_TYPE + public byte byIDType; // 证件类型,详见EM_CERTIFICATE_TYPE + public byte byGlasses; // 是否戴眼镜,0-未知 1-不戴 2-戴 + public byte byAge; // 年龄,0表示未知 + public byte[] szProvince = new byte[NET_MAX_PROVINCE_NAME_LEN];// 省份 + public byte[] szCity = new byte[NET_MAX_CITY_NAME_LEN]; // 城市 + public byte[] szPersonNameEx = new byte[NET_MAX_PERSON_NAME_LEN];// 姓名,因存在姓名过长,16字节无法存放问题,故增加此参数, + public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标识符,首次由服务端生成,区别于ID字段 + // 修改,删除操作时必填 + public byte[] szCountry = new byte[NET_COUNTRY_LENGTH]; // 国籍,符合ISO3166规范 + public byte byIsCustomType; // 人员类型是否为自定义: 0 使用Type规定的类型 1 自定义,使用szPersonName字段 + public Pointer pszComment; // 备注信息, 用户自己申请内存的情况时, + // 下方bCommentLen需填写对应的具体长度值,推荐长度 NET_COMMENT_LENGTH + + public Pointer pszGroupID; // 人员所属组ID, 用户自己申请内存的情况时, + // 下方bGroupIdLen需填写对应的具体长度值,推荐长度 NET_GROUPID_LENGTH + + public Pointer pszGroupName; // 人员所属组名, 用户自己申请内存的情况时, + // 下方bGroupNameLen需填写对应的具体长度值,推荐长度 NET_GROUPNAME_LENGTH + + public Pointer pszFeatureValue; // 人脸特征, 用户自己申请内存的情况时, + // 下方bFeatureValueLen需填写对应的具体长度值,推荐长度 NET_FEATUREVALUE_LENGTH + + public byte bGroupIdLen; // pszGroupID的长度 + public byte bGroupNameLen; // pszGroupName的长度 + public byte bFeatureValueLen; // pszFeatureValue的长度 + public byte bCommentLen; // pszComment的长度 + public int emEmotion; // 表情, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE } ///////////////////////////////////人脸识别模块相关结构体/////////////////////////////////////// - public static class NET_UID_CHAR extends Structure - { + public static class NET_UID_CHAR extends Structure { public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN];//UID内容 } - + //人脸识别数据库操作 - public static class EM_OPERATE_FACERECONGNITIONDB_TYPE - { - public static final int NET_FACERECONGNITIONDB_UNKOWN = 0; + public static class EM_OPERATE_FACERECONGNITIONDB_TYPE { + public static final int NET_FACERECONGNITIONDB_UNKOWN = 0; public static final int NET_FACERECONGNITIONDB_ADD = 1; //添加人员信息和人脸样本,如果人员已经存在,图片数据和原来的数据合并 public static final int NET_FACERECONGNITIONDB_DELETE = 2; //删除人员信息和人脸样本 public static final int NET_FACERECONGNITIONDB_MODIFY = 3; //修改人员信息和人脸样本,人员的UID标识必填 public static final int NET_FACERECONGNITIONDB_DELETE_BY_UID = 4; //通过UID删除人员信息和人脸样本 } - + //CLIENT_OperateFaceRecognitionDB接口输入参数 - public static class NET_IN_OPERATE_FACERECONGNITIONDB extends Structure - { - public int dwSize; - public int emOperateType; //操作类型, 取EM_OPERATE_FACERECONGNITIONDB_TYPE中的值 - public FACERECOGNITION_PERSON_INFO stPersonInfo; //人员信息 - //emOperateType操作类型为ET_FACERECONGNITIONDB_DELETE_BY_UID时使用,stPeronInfo字段无效 - public int nUIDNum; //UID个数 - public Pointer stuUIDs; //人员唯一标识符,首次由服务端生成,区别于ID字段, NET_UID_CHAR[] - + public static class NET_IN_OPERATE_FACERECONGNITIONDB extends Structure { + public int dwSize; + public int emOperateType; //操作类型, 取EM_OPERATE_FACERECONGNITIONDB_TYPE中的值 + public FACERECOGNITION_PERSON_INFO stPersonInfo; //人员信息 + //emOperateType操作类型为ET_FACERECONGNITIONDB_DELETE_BY_UID时使用,stPeronInfo字段无效 + public int nUIDNum; //UID个数 + public Pointer stuUIDs; //人员唯一标识符,首次由服务端生成,区别于ID字段, NET_UID_CHAR[] + // 图片二进制数据 - public Pointer pBuffer; //缓冲地址, char * - public int nBufferLen; //缓冲数据长度 - - public int bUsePersonInfoEx; // 使用人员扩展信息, 1:true 0:false - public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展 - - public NET_IN_OPERATE_FACERECONGNITIONDB() - { + public Pointer pBuffer; //缓冲地址, char * + public int nBufferLen; //缓冲数据长度 + + public int bUsePersonInfoEx; // 使用人员扩展信息, 1:true 0:false + public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展 + + public NET_IN_OPERATE_FACERECONGNITIONDB() { this.dwSize = this.size(); } } - + //CLIENT_OperateFaceRecognitionDB接口输出参数 - public static class NET_OUT_OPERATE_FACERECONGNITIONDB extends Structure - { - public int dwSize; - public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标识符, 只有在操作类型为NET_FACERECONGNITIONDB_ADD时有效 + public static class NET_OUT_OPERATE_FACERECONGNITIONDB extends Structure { + public int dwSize; + public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标识符, 只有在操作类型为NET_FACERECONGNITIONDB_ADD时有效 - - public NET_OUT_OPERATE_FACERECONGNITIONDB() - { + + public NET_OUT_OPERATE_FACERECONGNITIONDB() { this.dwSize = this.size(); } } - + //人脸对比模式 - public static class EM_FACE_COMPARE_MODE extends Structure - { + public static class EM_FACE_COMPARE_MODE extends Structure { public static final int NET_FACE_COMPARE_MODE_UNKOWN = 0; public static final int NET_FACE_COMPARE_MODE_NORMAL = 1; //正常 public static final int NET_FACE_COMPARE_MODE_AREA = 2; //指定人脸区域组合区域 - public static final int NET_FACE_COMPARE_MODE_AUTO = 3; //智能模式,算法根据人脸各个区域情况自动选取组合 + public static final int NET_FACE_COMPARE_MODE_AUTO = 3; //智能模式,算法根据人脸各个区域情况自动选取组合 } - + //人脸区域 - public static class EM_FACE_AREA_TYPE extends Structure - { - public static final int NET_FACE_AREA_TYPE_UNKOWN = 0; + public static class EM_FACE_AREA_TYPE extends Structure { + public static final int NET_FACE_AREA_TYPE_UNKOWN = 0; public static final int NET_FACE_AREA_TYPE_EYEBROW = 1; //眉毛 public static final int NET_FACE_AREA_TYPE_EYE = 2; //眼睛 - public static final int NET_FACE_AREA_TYPE_NOSE= 3; //鼻子 + public static final int NET_FACE_AREA_TYPE_NOSE = 3; //鼻子 public static final int NET_FACE_AREA_TYPE_MOUTH = 4; //嘴巴 - public static final int NET_FACE_AREA_TYPE_CHEEK =5; //脸颊 - } - - public static class NET_FACE_MATCH_OPTIONS extends Structure - { - public int dwSize; - public int nMatchImportant; // 人员重要等级1~10,数值越高越重要,(查询重要等级大于等于此等级的人员), 类型为unsigned int - public int emMode; // 人脸比对模式,详见EM_FACE_COMPARE_MODE, 取EM_FACE_COMPARE_MODE中的值 - public int nAreaNum; // 人脸区域个数 - public int[] szAreas= new int[MAX_FACE_AREA_NUM]; // 人脸区域组合,emMode为NET_FACE_COMPARE_MODE_AREA时有效, 数组元素取EM_FACE_AREA_TYPE中的值 - public int nAccuracy; // 识别精度(取值1~10,随着值增大,检测精度提高,检测速度下降。最小值为1表示检测速度优先,最大值为10表示检测精度优先。暂时只对人脸检测有效) - public int nSimilarity; // 相似度(必须大于该相识度才报告;百分比表示,1~100) - public int nMaxCandidate; // 报告的最大候选个数(根据相似度进行排序,取相似度最大的候选人数报告) - - public NET_FACE_MATCH_OPTIONS() - { - this.dwSize = this.size(); - } - } - + public static final int NET_FACE_AREA_TYPE_CHEEK = 5; //脸颊 + } + + public static class NET_FACE_MATCH_OPTIONS extends Structure { + public int dwSize; + public int nMatchImportant; // 人员重要等级1~10,数值越高越重要,(查询重要等级大于等于此等级的人员), 类型为unsigned int + public int emMode; // 人脸比对模式,详见EM_FACE_COMPARE_MODE, 取EM_FACE_COMPARE_MODE中的值 + public int nAreaNum; // 人脸区域个数 + public int[] szAreas = new int[MAX_FACE_AREA_NUM]; // 人脸区域组合,emMode为NET_FACE_COMPARE_MODE_AREA时有效, 数组元素取EM_FACE_AREA_TYPE中的值 + public int nAccuracy; // 识别精度(取值1~10,随着值增大,检测精度提高,检测速度下降。最小值为1表示检测速度优先,最大值为10表示检测精度优先。暂时只对人脸检测有效) + public int nSimilarity; // 相似度(必须大于该相识度才报告;百分比表示,1~100) + public int nMaxCandidate; // 报告的最大候选个数(根据相似度进行排序,取相似度最大的候选人数报告) + + public NET_FACE_MATCH_OPTIONS() { + this.dwSize = this.size(); + } + } + //人脸识别人脸类型 - public static class EM_FACERECOGNITION_FACE_TYPE extends Structure - { - public static final int EM_FACERECOGNITION_FACE_TYPE_UNKOWN = 0; - public static final int EM_FACERECOGNITION_FACE_TYPE_ALL = 1; // 所有人脸 - public static final int EM_FACERECOGNITION_FACE_TYPE_REC_SUCCESS= 2; // 识别成功 - public static final int EM_FACERECOGNITION_FACE_TYPE_REC_FAIL = 3; // 识别失败 - } - - public static class NET_FACE_FILTER_CONDTION extends Structure - { - public int dwSize; - public NET_TIME stStartTime; // 开始时间 - public NET_TIME stEndTime; // 结束时间 - public byte[] szMachineAddress = new byte[MAX_PATH]; // 地点,支持模糊匹配 - public int nRangeNum; // 实际数据库个数 - public byte[] szRange = new byte[MAX_FACE_DB_NUM]; // 待查询数据库类型,详见EM_FACE_DB_TYPE - public int emFaceType; // 待查询人脸类型,详见EM_FACERECOGNITION_FACE_TYPE, 取EM_FACERECOGNITION_FACE_TYPE中的值 - public int nGroupIdNum; // 人员组数 - public GROUP_ID[] szGroupIdArr = (GROUP_ID[])new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID - public NET_TIME stBirthdayRangeStart; // 生日起始时间 - public NET_TIME stBirthdayRangeEnd; // 生日结束时间 - public byte[] byAge = new byte[MAX_AGE_NUM]; // 年龄区间,当byAge[0]=0与byAge[1]=0时,表示查询全年龄 - public byte[] byReserved = new byte[2]; // 保留字节对齐 - public int[] emEmotion = new int[MAX_EMOTION_NUM]; // 表情条件 - public int nEmotionNum; // 表情条件的个数 - - public NET_FACE_FILTER_CONDTION() - { - this.dwSize = this.size(); - } - } - + public static class EM_FACERECOGNITION_FACE_TYPE extends Structure { + public static final int EM_FACERECOGNITION_FACE_TYPE_UNKOWN = 0; + public static final int EM_FACERECOGNITION_FACE_TYPE_ALL = 1; // 所有人脸 + public static final int EM_FACERECOGNITION_FACE_TYPE_REC_SUCCESS = 2; // 识别成功 + public static final int EM_FACERECOGNITION_FACE_TYPE_REC_FAIL = 3; // 识别失败 + } + + public static class NET_FACE_FILTER_CONDTION extends Structure { + public int dwSize; + public NET_TIME stStartTime; // 开始时间 + public NET_TIME stEndTime; // 结束时间 + public byte[] szMachineAddress = new byte[MAX_PATH]; // 地点,支持模糊匹配 + public int nRangeNum; // 实际数据库个数 + public byte[] szRange = new byte[MAX_FACE_DB_NUM]; // 待查询数据库类型,详见EM_FACE_DB_TYPE + public int emFaceType; // 待查询人脸类型,详见EM_FACERECOGNITION_FACE_TYPE, 取EM_FACERECOGNITION_FACE_TYPE中的值 + public int nGroupIdNum; // 人员组数 + public GROUP_ID[] szGroupIdArr = (GROUP_ID[]) new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID + public NET_TIME stBirthdayRangeStart; // 生日起始时间 + public NET_TIME stBirthdayRangeEnd; // 生日结束时间 + public byte[] byAge = new byte[MAX_AGE_NUM]; // 年龄区间,当byAge[0]=0与byAge[1]=0时,表示查询全年龄 + public byte[] byReserved = new byte[2]; // 保留字节对齐 + public int[] emEmotion = new int[MAX_EMOTION_NUM]; // 表情条件 + public int nEmotionNum; // 表情条件的个数 + + public NET_FACE_FILTER_CONDTION() { + this.dwSize = this.size(); + } + } + // 人员组ID - public static class GROUP_ID extends Structure - { - public byte[] szGroupId= new byte[NET_COMMON_STRING_64]; //人员组ID + public static class GROUP_ID extends Structure { + public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; //人员组ID } - + //CLIENT_StartFindFaceRecognition接口输入参数 - public static class NET_IN_STARTFIND_FACERECONGNITION extends Structure - { - public int dwSize; - public int bPersonEnable; // 人员信息查询条件是否有效, BOOL类型,取值0或1 - public FACERECOGNITION_PERSON_INFO stPerson; // 人员信息查询条件 - public NET_FACE_MATCH_OPTIONS stMatchOptions; // 人脸匹配选项 - public NET_FACE_FILTER_CONDTION stFilterInfo; // 查询过滤条件 - + public static class NET_IN_STARTFIND_FACERECONGNITION extends Structure { + public int dwSize; + public int bPersonEnable; // 人员信息查询条件是否有效, BOOL类型,取值0或1 + public FACERECOGNITION_PERSON_INFO stPerson; // 人员信息查询条件 + public NET_FACE_MATCH_OPTIONS stMatchOptions; // 人脸匹配选项 + public NET_FACE_FILTER_CONDTION stFilterInfo; // 查询过滤条件 + // 图片二进制数据 - public Pointer pBuffer; // 缓冲地址, char * - public int nBufferLen; // 缓冲数据长度 - public int nChannelID; // 通道号 - - public int bPersonExEnable; // 人员信息查询条件是否有效, 并使用扩展结构体 - public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展 - public int nSmallPicIDNum; // 小图ID数量 - public int[] nSmallPicID = new int[MAX_SMALLPIC_NUM]; // 小图ID - - public NET_IN_STARTFIND_FACERECONGNITION() - { + public Pointer pBuffer; // 缓冲地址, char * + public int nBufferLen; // 缓冲数据长度 + public int nChannelID; // 通道号 + + public int bPersonExEnable; // 人员信息查询条件是否有效, 并使用扩展结构体 + public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展 + public int nSmallPicIDNum; // 小图ID数量 + public int[] nSmallPicID = new int[MAX_SMALLPIC_NUM]; // 小图ID + + public NET_IN_STARTFIND_FACERECONGNITION() { this.dwSize = this.size(); } } - + //CLIENT_StartFindFaceRecognition接口输出参数 public static class NET_OUT_STARTFIND_FACERECONGNITION extends Structure { - public int dwSize; - public int nTotalCount; // 返回的符合查询条件的记录个数 - // -1表示总条数未生成,要推迟获取 - // 使用CLIENT_AttachFaceFindState接口状态 - public LLong lFindHandle; // 查询句柄 - public int nToken; // 获取到的查询令牌 - + public int dwSize; + public int nTotalCount; // 返回的符合查询条件的记录个数 + // -1表示总条数未生成,要推迟获取 + // 使用CLIENT_AttachFaceFindState接口状态 + public LLong lFindHandle; // 查询句柄 + public int nToken; // 获取到的查询令牌 + public NET_OUT_STARTFIND_FACERECONGNITION() { this.dwSize = this.size(); } } - + //CLIENT_DoFindFaceRecognition 接口输入参数 public static class NET_IN_DOFIND_FACERECONGNITION extends Structure { - public int dwSize; - public LLong lFindHandle; // 查询句柄 - public int nBeginNum; // 查询起始序号 - public int nCount; // 当前想查询的记录条数 - public int emDataType; // 指定查询结果返回图片的格式. 参考 EM_NEEDED_PIC_RETURN_TYPE - - public NET_IN_DOFIND_FACERECONGNITION() - { + public int dwSize; + public LLong lFindHandle; // 查询句柄 + public int nBeginNum; // 查询起始序号 + public int nCount; // 当前想查询的记录条数 + public int emDataType; // 指定查询结果返回图片的格式. 参考 EM_NEEDED_PIC_RETURN_TYPE + + public NET_IN_DOFIND_FACERECONGNITION() { this.dwSize = this.size(); } } - + // 查询结果返回图片的格式 public static class EM_NEEDED_PIC_RETURN_TYPE extends Structure { public static final int EM_NEEDED_PIC_TYPE_UNKOWN = 0; // 未知类型 @@ -1929,78 +1888,72 @@ public interface NetSDKLib extends Library { public static final int EM_NEEDED_PIC_TYPE_BINARY_DATA = 2; // 返回图片二进制数据 public static final int EM_NEEDED_PIC_TYPE_HTTP_AND_BINARY = 3; // 返回二进制和HTTP链接 } - + //候选人员信息 public static class CANDIDATE_INFO extends Structure { - public FACERECOGNITION_PERSON_INFO stPersonInfo; // 人员信息 - // 布控(黑名单)库,指布控库中人员信息; - // 历史库,指历史库中人员信息 - // 报警库,指布控库的人员信息 - public byte bySimilarity; // 和查询图片的相似度,百分比表示,1~100 - public byte byRange; // 人员所属数据库范围,详见EM_FACE_DB_TYPE - public byte[] byReserved1 = new byte[2]; - public NET_TIME stTime; // 当byRange为历史数据库时有效,表示查询人员出现的时间 - public byte[] szAddress = new byte[MAX_PATH]; // 当byRange为历史数据库时有效,表示查询人员出现的地点 - public int bIsHit; // BOOL类型,是否有识别结果,指这个检测出的人脸在库中有没有比对结果 - public NET_PIC_INFO_EX3 stuSceneImage; // 人脸全景图 - public int nChannelID; // 通道号 - public byte[] byReserved = new byte[32]; // 保留字节 - } - + public FACERECOGNITION_PERSON_INFO stPersonInfo; // 人员信息 + // 布控(黑名单)库,指布控库中人员信息; + // 历史库,指历史库中人员信息 + // 报警库,指布控库的人员信息 + public byte bySimilarity; // 和查询图片的相似度,百分比表示,1~100 + public byte byRange; // 人员所属数据库范围,详见EM_FACE_DB_TYPE + public byte[] byReserved1 = new byte[2]; + public NET_TIME stTime; // 当byRange为历史数据库时有效,表示查询人员出现的时间 + public byte[] szAddress = new byte[MAX_PATH]; // 当byRange为历史数据库时有效,表示查询人员出现的地点 + public int bIsHit; // BOOL类型,是否有识别结果,指这个检测出的人脸在库中有没有比对结果 + public NET_PIC_INFO_EX3 stuSceneImage; // 人脸全景图 + public int nChannelID; // 通道号 + public byte[] byReserved = new byte[32]; // 保留字节 + } + // 物体对应图片文件信息(包含图片路径) - public static class NET_PIC_INFO_EX3 extends Structure - { - public int dwOffSet; // 文件在二进制数据块中的偏移位置, 单位:字节 - public int dwFileLenth; // 文件大小, 单位:字节 - public short wWidth; // 图片宽度, 单位:像素 - public short wHeight; // 图片高度, 单位:像素 - public byte[] szFilePath = new byte[64]; // 文件路径 - public byte bIsDetected; // 图片是否算法检测出来的检测过的提交识别服务器时, - // 则不需要再时检测定位抠图,1:检测过的,0:没有检测过 - public byte[] bReserved = new byte[11]; // 保留 - } - + public static class NET_PIC_INFO_EX3 extends Structure { + public int dwOffSet; // 文件在二进制数据块中的偏移位置, 单位:字节 + public int dwFileLenth; // 文件大小, 单位:字节 + public short wWidth; // 图片宽度, 单位:像素 + public short wHeight; // 图片高度, 单位:像素 + public byte[] szFilePath = new byte[64]; // 文件路径 + public byte bIsDetected; // 图片是否算法检测出来的检测过的提交识别服务器时, + // 则不需要再时检测定位抠图,1:检测过的,0:没有检测过 + public byte[] bReserved = new byte[11]; // 保留 + } + //CLIENT_DoFindFaceRecognition接口输出参数 - public static class NET_OUT_DOFIND_FACERECONGNITION extends Structure - { - public int dwSize; - public int nCadidateNum; // 实际返回的候选信息结构体个数 - public CANDIDATE_INFO[] stCadidateInfo = (CANDIDATE_INFO[])new CANDIDATE_INFO().toArray(MAX_FIND_COUNT);//候选信息数组 - + public static class NET_OUT_DOFIND_FACERECONGNITION extends Structure { + public int dwSize; + public int nCadidateNum; // 实际返回的候选信息结构体个数 + public CANDIDATE_INFO[] stCadidateInfo = (CANDIDATE_INFO[]) new CANDIDATE_INFO().toArray(MAX_FIND_COUNT);//候选信息数组 + // 图片二进制数据 - public Pointer pBuffer; // 缓冲地址, char * - public int nBufferLen; // 缓冲数据长度 - - public int bUseCandidatesEx; // 是否使用候选对象扩展结构体, - // 若为1-true, 则表示使用stuCandidatesEx, 且stuCandidates无效, 否则相反 - public int nCadidateExNum; // 实际返回的候选信息结构体个数 - public CANDIDATE_INFOEX[] stuCandidatesEx = (CANDIDATE_INFOEX[])new CANDIDATE_INFOEX().toArray(MAX_FIND_COUNT); // 当前人脸匹配到的候选对象信息, 实际返回个数同nCandidateNum - - public NET_OUT_DOFIND_FACERECONGNITION() - { + public Pointer pBuffer; // 缓冲地址, char * + public int nBufferLen; // 缓冲数据长度 + + public int bUseCandidatesEx; // 是否使用候选对象扩展结构体, + // 若为1-true, 则表示使用stuCandidatesEx, 且stuCandidates无效, 否则相反 + public int nCadidateExNum; // 实际返回的候选信息结构体个数 + public CANDIDATE_INFOEX[] stuCandidatesEx = (CANDIDATE_INFOEX[]) new CANDIDATE_INFOEX().toArray(MAX_FIND_COUNT); // 当前人脸匹配到的候选对象信息, 实际返回个数同nCandidateNum + + public NET_OUT_DOFIND_FACERECONGNITION() { this.dwSize = this.size(); } } - + /////////////////////////////////智能支持///////////////////////////////// //CLIENT_DetectFace接口输入参数 - public static class NET_IN_DETECT_FACE extends Structure - { + public static class NET_IN_DETECT_FACE extends Structure { public int dwSize; public NET_PIC_INFO stPicInfo;//大图信息 // 图片二进制数据 public Pointer pBuffer;//缓冲地址, char * public int nBufferLen;//缓冲数据长度 - - public NET_IN_DETECT_FACE() - { + + public NET_IN_DETECT_FACE() { this.dwSize = this.size(); } } - + //CLIENT_DetectFace接口输出参数 - public static class NET_OUT_DETECT_FACE extends Structure - { + public static class NET_OUT_DETECT_FACE extends Structure { public int dwSize; public Pointer pPicInfo;//检测出的人脸图片信息,由用户申请空间, NET_PIC_INFO* public int nMaxPicNum;//最大人脸图片信息个数 @@ -2008,244 +1961,227 @@ public interface NetSDKLib extends Library { // 图片二进制数据 public Pointer pBuffer;//缓冲地址,由用户申请空间,存放检测出的人脸图片数据, char * public int nBufferLen;//缓冲数据长度 - - public NET_OUT_DETECT_FACE() - { + + public NET_OUT_DETECT_FACE() { this.dwSize = this.size(); } } - + // 人脸识别事件类型 - public static class EM_FACERECOGNITION_ALARM_TYPE extends Structure - { + public static class EM_FACERECOGNITION_ALARM_TYPE extends Structure { public static final int NET_FACERECOGNITION_ALARM_TYPE_UNKOWN = 0; public static final int NET_FACERECOGNITION_ALARM_TYPE_ALL = 1; //黑白名单 public static final int NET_FACERECOGNITION_ALARM_TYPE_BLACKLIST = 2; //黑名单 public static final int NET_FACERECOGNITION_ALARM_TYPE_WHITELIST = 3; //白名单 } - + // NET_FILE_QUERY_FACE 对应的人脸识别服务查询参数 - public static class MEDIAFILE_FACERECOGNITION_PARAM extends Structure - { - public int dwSize; // 结构体大小 - + public static class MEDIAFILE_FACERECOGNITION_PARAM extends Structure { + public int dwSize; // 结构体大小 + //////// 查询过滤条件 - public NET_TIME stStartTime; // 开始时间 - public NET_TIME stEndTime; // 结束时间 - public byte[] szMachineAddress = new byte[MAX_PATH];//地点,支持模糊匹配 - public int nAlarmType; // 待查询报警类型,详见 EM_FACERECOGNITION_ALARM_TYPE - public int abPersonInfo; // 人员信息是否有效, BOOL类型,取值0或1 - public FACERECOGNITION_PERSON_INFO stPersonInfo; // 人员信息 - public int nChannelId; // 通道号 - public int nGroupIdNum; // 人员组数 - public GROUP_ID[] szGroupIdArr = (GROUP_ID[])new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID - public int abPersonInfoEx; // 人员信息扩展是否有效 - public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展 - - public MEDIAFILE_FACERECOGNITION_PARAM() - { - this.dwSize = this.size(); - } - } - + public NET_TIME stStartTime; // 开始时间 + public NET_TIME stEndTime; // 结束时间 + public byte[] szMachineAddress = new byte[MAX_PATH];//地点,支持模糊匹配 + public int nAlarmType; // 待查询报警类型,详见 EM_FACERECOGNITION_ALARM_TYPE + public int abPersonInfo; // 人员信息是否有效, BOOL类型,取值0或1 + public FACERECOGNITION_PERSON_INFO stPersonInfo; // 人员信息 + public int nChannelId; // 通道号 + public int nGroupIdNum; // 人员组数 + public GROUP_ID[] szGroupIdArr = (GROUP_ID[]) new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID + public int abPersonInfoEx; // 人员信息扩展是否有效 + public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展 + + public MEDIAFILE_FACERECOGNITION_PARAM() { + this.dwSize = this.size(); + } + } + // NET_MEDIA_QUERY_TRAFFICCAR对应的查询条件 - public static class MEDIA_QUERY_TRAFFICCAR_PARAM extends Structure - { - public int nChannelID; // 通道号从0开始,-1表示查询所有通道 - public NET_TIME StartTime; // 开始时间 - public NET_TIME EndTime; // 结束时间 - public int nMediaType; // 文件类型,0:任意类型, 1:jpg图片, 2:dav文件 - public int nEventType; // 事件类型,详见"智能分析事件类型", 0:表示查询任意事件,此参数废弃,请使用pEventTypes - public byte[] szPlateNumber = new byte[32]; // 车牌号, "\0"则表示查询任意车牌号 - public int nSpeedUpperLimit; // 查询的车速范围; 速度上限 单位: km/h - public int nSpeedLowerLimit; // 查询的车速范围; 速度下限 单位: km/h - public int bSpeedLimit; // 是否按速度查询; TRUE:按速度查询,nSpeedUpperLimit和nSpeedLowerLimit有效。 - public int dwBreakingRule; // 违章类型: - // 当事件类型为 EVENT_IVS_TRAFFICGATE时 - // 第一位:逆行; 第二位:压线行驶; 第三位:超速行驶; - // 第四位:欠速行驶; 第五位:闯红灯; - // 当事件类型为 EVENT_IVS_TRAFFICJUNCTION - // 第一位:闯红灯; 第二位:不按规定车道行驶; - // 第三位:逆行; 第四位:违章掉头; - // 第五位:压线行驶; - - public byte[] szPlateType=new byte[32]; // 车牌类型,"Unknown" 未知,"Normal" 蓝牌黑牌,"Yellow" 黄牌,"DoubleYellow" 双层黄尾牌,"Police" 警牌"Armed" 武警牌, - // "Military" 部队号牌,"DoubleMilitary" 部队双层,"SAR" 港澳特区号牌,"Trainning" 教练车号牌 - // "Personal" 个性号牌,"Agri" 农用牌,"Embassy" 使馆号牌,"Moto" 摩托车号牌,"Tractor" 拖拉机号牌,"Other" 其他号牌 - public byte[] szPlateColor = new byte[16]; // 车牌颜色, "Blue"蓝色,"Yellow"黄色, "White"白色,"Black"黑色 - public byte[] szVehicleColor = new byte[16]; // 车身颜色:"White"白色, "Black"黑色, "Red"红色, "Yellow"黄色, "Gray"灰色, "Blue"蓝色,"Green"绿色 - public byte[] szVehicleSize = new byte[16]; // 车辆大小类型:"Light-duty":小型车;"Medium":中型车; "Oversize":大型车; "Unknown": 未知 - public int nGroupID; // 事件组编号(此值>=0时有效) - public short byLane; // 车道号(此值>=0时表示具体车道,-1表示所有车道,即不下发此字段) - public byte byFileFlag; // 文件标志, 0xFF-使用nFileFlagEx, 0-表示所有录像, 1-定时文件, 2-手动文件, 3-事件文件, 4-重要文件, 5-合成文件 - public byte byRandomAccess; // 是否需要在查询过程中随意跳转,0-不需要,1-需要 - public int nFileFlagEx; // 文件标志, 按位表示: bit0-定时文件, bit1-手动文件, bit2-事件文件, bit3-重要文件, bit4-合成文件, bit5-黑名单图片 0xFFFFFFFF-所有录像 - public int nDirection; // 车道方向(车开往的方向) 0-北 1-东北 2-东 3-东南 4-南 5-西南 6-西 7-西北 8-未知 -1-所有方向 - public Pointer szDirs; // 工作目录列表,一次可查询多个目录,为空表示查询所有目录。目录之间以分号分隔,如“/mnt/dvr/sda0;/mnt/dvr/sda1”,szDirs==null 或"" 表示查询所有 - public Pointer pEventTypes; // 待查询的事件类型数组指针,事件类型,详见"智能分析事件类型",若为NULL则认为查询所有事件(缓冲需由用户申请) - public int nEventTypeNum; // 事件类型数组大小 - public Pointer pszDeviceAddress; // 设备地址, NULL表示该字段不起作用 - public Pointer pszMachineAddress; // 机器部署地点, NULL表示该字段不起作用 - public Pointer pszVehicleSign; // 车辆标识, 例如 "Unknown"-未知, "Audi"-奥迪, "Honda"-本田... NULL表示该字段不起作用 - public short wVehicleSubBrand; // 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册 - public short wVehicleYearModel; // 车辆品牌年款 需要通过映射表得到真正的年款 映射表详见开发手册 - public int[] bReserved = new int[28]; // 保留字段 - } - + public static class MEDIA_QUERY_TRAFFICCAR_PARAM extends Structure { + public int nChannelID; // 通道号从0开始,-1表示查询所有通道 + public NET_TIME StartTime; // 开始时间 + public NET_TIME EndTime; // 结束时间 + public int nMediaType; // 文件类型,0:任意类型, 1:jpg图片, 2:dav文件 + public int nEventType; // 事件类型,详见"智能分析事件类型", 0:表示查询任意事件,此参数废弃,请使用pEventTypes + public byte[] szPlateNumber = new byte[32]; // 车牌号, "\0"则表示查询任意车牌号 + public int nSpeedUpperLimit; // 查询的车速范围; 速度上限 单位: km/h + public int nSpeedLowerLimit; // 查询的车速范围; 速度下限 单位: km/h + public int bSpeedLimit; // 是否按速度查询; TRUE:按速度查询,nSpeedUpperLimit和nSpeedLowerLimit有效。 + public int dwBreakingRule; // 违章类型: + // 当事件类型为 EVENT_IVS_TRAFFICGATE时 + // 第一位:逆行; 第二位:压线行驶; 第三位:超速行驶; + // 第四位:欠速行驶; 第五位:闯红灯; + // 当事件类型为 EVENT_IVS_TRAFFICJUNCTION + // 第一位:闯红灯; 第二位:不按规定车道行驶; + // 第三位:逆行; 第四位:违章掉头; + // 第五位:压线行驶; + + public byte[] szPlateType = new byte[32]; // 车牌类型,"Unknown" 未知,"Normal" 蓝牌黑牌,"Yellow" 黄牌,"DoubleYellow" 双层黄尾牌,"Police" 警牌"Armed" 武警牌, + // "Military" 部队号牌,"DoubleMilitary" 部队双层,"SAR" 港澳特区号牌,"Trainning" 教练车号牌 + // "Personal" 个性号牌,"Agri" 农用牌,"Embassy" 使馆号牌,"Moto" 摩托车号牌,"Tractor" 拖拉机号牌,"Other" 其他号牌 + public byte[] szPlateColor = new byte[16]; // 车牌颜色, "Blue"蓝色,"Yellow"黄色, "White"白色,"Black"黑色 + public byte[] szVehicleColor = new byte[16]; // 车身颜色:"White"白色, "Black"黑色, "Red"红色, "Yellow"黄色, "Gray"灰色, "Blue"蓝色,"Green"绿色 + public byte[] szVehicleSize = new byte[16]; // 车辆大小类型:"Light-duty":小型车;"Medium":中型车; "Oversize":大型车; "Unknown": 未知 + public int nGroupID; // 事件组编号(此值>=0时有效) + public short byLane; // 车道号(此值>=0时表示具体车道,-1表示所有车道,即不下发此字段) + public byte byFileFlag; // 文件标志, 0xFF-使用nFileFlagEx, 0-表示所有录像, 1-定时文件, 2-手动文件, 3-事件文件, 4-重要文件, 5-合成文件 + public byte byRandomAccess; // 是否需要在查询过程中随意跳转,0-不需要,1-需要 + public int nFileFlagEx; // 文件标志, 按位表示: bit0-定时文件, bit1-手动文件, bit2-事件文件, bit3-重要文件, bit4-合成文件, bit5-黑名单图片 0xFFFFFFFF-所有录像 + public int nDirection; // 车道方向(车开往的方向) 0-北 1-东北 2-东 3-东南 4-南 5-西南 6-西 7-西北 8-未知 -1-所有方向 + public Pointer szDirs; // 工作目录列表,一次可查询多个目录,为空表示查询所有目录。目录之间以分号分隔,如“/mnt/dvr/sda0;/mnt/dvr/sda1”,szDirs==null 或"" 表示查询所有 + public Pointer pEventTypes; // 待查询的事件类型数组指针,事件类型,详见"智能分析事件类型",若为NULL则认为查询所有事件(缓冲需由用户申请) + public int nEventTypeNum; // 事件类型数组大小 + public Pointer pszDeviceAddress; // 设备地址, NULL表示该字段不起作用 + public Pointer pszMachineAddress; // 机器部署地点, NULL表示该字段不起作用 + public Pointer pszVehicleSign; // 车辆标识, 例如 "Unknown"-未知, "Audi"-奥迪, "Honda"-本田... NULL表示该字段不起作用 + public short wVehicleSubBrand; // 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册 + public short wVehicleYearModel; // 车辆品牌年款 需要通过映射表得到真正的年款 映射表详见开发手册 + public int[] bReserved = new int[28]; // 保留字段 + } + // NET_MEDIA_QUERY_TRAFFICCAR_EX对应的查询条件 - public static class MEDIA_QUERY_TRAFFICCAR_PARAM_EX extends Structure - { - public int dwSize; + public static class MEDIA_QUERY_TRAFFICCAR_PARAM_EX extends Structure { + public int dwSize; public MEDIA_QUERY_TRAFFICCAR_PARAM stuParam; // 基本查询参数 - + public MEDIA_QUERY_TRAFFICCAR_PARAM_EX() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // NET_MEDIA_QUERY_TRAFFICCAR查询出来的media文件信息 - public static class MEDIAFILE_TRAFFICCAR_INFO extends Structure - { - public int ch; // 通道号 - public byte[] szFilePath = new byte[128]; // 文件路径 - public int size; // 文件长度 - public NET_TIME starttime; // 开始时间 - public NET_TIME endtime; // 结束时间 - public int nWorkDirSN; // 工作目录编号 - public byte nFileType; // 文件类型 1:jpg图片 - public byte bHint; // 文件定位索引 - public byte bDriveNo; // 磁盘号 - public byte bReserved2; - public int nCluster; // 簇号 - public byte byPictureType; // 图片类型, 0-普通, 1-合成, 2-抠图 - public byte[] bReserved = new byte[3]; // 保留字段 + public static class MEDIAFILE_TRAFFICCAR_INFO extends Structure { + public int ch; // 通道号 + public byte[] szFilePath = new byte[128]; // 文件路径 + public int size; // 文件长度 + public NET_TIME starttime; // 开始时间 + public NET_TIME endtime; // 结束时间 + public int nWorkDirSN; // 工作目录编号 + public byte nFileType; // 文件类型 1:jpg图片 + public byte bHint; // 文件定位索引 + public byte bDriveNo; // 磁盘号 + public byte bReserved2; + public int nCluster; // 簇号 + public byte byPictureType; // 图片类型, 0-普通, 1-合成, 2-抠图 + public byte[] bReserved = new byte[3]; // 保留字段 //以下是交通车辆信息 - public byte[] szPlateNumber = new byte[32]; // 车牌号码 - public byte[] szPlateType = new byte[32]; // 号牌类型"Unknown" 未知; "Normal" 蓝牌黑牌; "Yellow" 黄牌; "DoubleYellow" 双层黄尾牌 - // "Police" 警牌; "Armed" 武警牌; "Military" 部队号牌; "DoubleMilitary" 部队双层 - // "SAR" 港澳特区号牌; "Trainning" 教练车号牌; "Personal" 个性号牌; "Agri" 农用牌 - // "Embassy" 使馆号牌; "Moto" 摩托车号牌; "Tractor" 拖拉机号牌; "Other" 其他号牌 - public byte[] szPlateColor = new byte[16]; // 车牌颜色:"Blue","Yellow", "White","Black" - public byte[] szVehicleColor = new byte[16]; // 车身颜色:"White", "Black", "Red", "Yellow", "Gray", "Blue","Green" - public int nSpeed; // 车速,单位 Km/H - public int nEventsNum; // 关联的事件个数 - public int[] nEvents = new int[32]; // 关联的事件列表,数组值表示相应的事件,详见"智能分析事件类型" - public int dwBreakingRule; // 具体违章类型掩码,第一位:闯红灯; 第二位:不按规定车道行驶; - // 第三位:逆行; 第四位:违章掉头;否则默认为:交通路口事件 - public byte[] szVehicleSize = new byte[16]; // 车辆大小类型:"Light-duty":小型车;"Medium":中型车; "Oversize":大型车 - public byte[] szChannelName = new byte[NET_CHAN_NAME_LEN]; // 本地或远程的通道名称 - public byte[] szMachineName = new byte[NET_MAX_NAME_LEN]; // 本地或远程设备名称 - - public int nSpeedUpperLimit; // 速度上限 单位: km/h - public int nSpeedLowerLimit; // 速度下限 单位: km/h - public int nGroupID; // 事件里的组编号 - public byte byCountInGroup; // 一个事件组内的抓拍张数 - public byte byIndexInGroup; // 一个事件组内的抓拍序号 - public byte byLane; // 车道,参见MEDIA_QUERY_TRAFFICCAR_PARAM - public byte[] bReserved1 = new byte[21]; // 保留 - public NET_TIME stSnapTime; // 抓拍时间 - public int nDirection; // 车道方向,参见MEDIA_QUERY_TRAFFICCAR_PARAM - public byte[] szMachineAddress = new byte[MAX_PATH]; // 机器部署地点 - public long sizeEx; // 文件长度扩展,支持文件长度大于4G,单位字节 - } - + public byte[] szPlateNumber = new byte[32]; // 车牌号码 + public byte[] szPlateType = new byte[32]; // 号牌类型"Unknown" 未知; "Normal" 蓝牌黑牌; "Yellow" 黄牌; "DoubleYellow" 双层黄尾牌 + // "Police" 警牌; "Armed" 武警牌; "Military" 部队号牌; "DoubleMilitary" 部队双层 + // "SAR" 港澳特区号牌; "Trainning" 教练车号牌; "Personal" 个性号牌; "Agri" 农用牌 + // "Embassy" 使馆号牌; "Moto" 摩托车号牌; "Tractor" 拖拉机号牌; "Other" 其他号牌 + public byte[] szPlateColor = new byte[16]; // 车牌颜色:"Blue","Yellow", "White","Black" + public byte[] szVehicleColor = new byte[16]; // 车身颜色:"White", "Black", "Red", "Yellow", "Gray", "Blue","Green" + public int nSpeed; // 车速,单位 Km/H + public int nEventsNum; // 关联的事件个数 + public int[] nEvents = new int[32]; // 关联的事件列表,数组值表示相应的事件,详见"智能分析事件类型" + public int dwBreakingRule; // 具体违章类型掩码,第一位:闯红灯; 第二位:不按规定车道行驶; + // 第三位:逆行; 第四位:违章掉头;否则默认为:交通路口事件 + public byte[] szVehicleSize = new byte[16]; // 车辆大小类型:"Light-duty":小型车;"Medium":中型车; "Oversize":大型车 + public byte[] szChannelName = new byte[NET_CHAN_NAME_LEN]; // 本地或远程的通道名称 + public byte[] szMachineName = new byte[NET_MAX_NAME_LEN]; // 本地或远程设备名称 + + public int nSpeedUpperLimit; // 速度上限 单位: km/h + public int nSpeedLowerLimit; // 速度下限 单位: km/h + public int nGroupID; // 事件里的组编号 + public byte byCountInGroup; // 一个事件组内的抓拍张数 + public byte byIndexInGroup; // 一个事件组内的抓拍序号 + public byte byLane; // 车道,参见MEDIA_QUERY_TRAFFICCAR_PARAM + public byte[] bReserved1 = new byte[21]; // 保留 + public NET_TIME stSnapTime; // 抓拍时间 + public int nDirection; // 车道方向,参见MEDIA_QUERY_TRAFFICCAR_PARAM + public byte[] szMachineAddress = new byte[MAX_PATH]; // 机器部署地点 + public long sizeEx; // 文件长度扩展,支持文件长度大于4G,单位字节 + } + // NET_MEDIA_QUERY_TRAFFICCAR_EX查询出来的文件信息 - public static class MEDIAFILE_TRAFFICCAR_INFO_EX extends Structure - { - public int dwSize; - public MEDIAFILE_TRAFFICCAR_INFO stuInfo; // 基本信息 - public byte[] szDeviceAddr = new byte[NET_COMMON_STRING_256]; // 设备地址 - public byte[] szVehicleSign = new byte[NET_COMMON_STRING_32]; // 车辆标识, 例如 "Unknown"-未知, "Audi"-奥迪, "Honda"-本田... - public byte[] szCustomParkNo = new byte[NET_COMMON_STRING_64]; // 自定义车位号(停车场用) - public short wVehicleSubBrand; // 车辆子品牌,需要通过映射表得到真正的子品牌 - public short wVehicleYearModel; // 车辆年款,需要通过映射表得到真正的年款 - public NET_TIME stuEleTagInfoUTC; // 对应电子车牌标签信息中的过车时间(ThroughTime) - public int[] emFalgLists = new int[EM_RECORD_SNAP_FLAG_TYPE.FLAG_TYPE_MAX]; // 录像或抓图文件标志, 参考 EM_RECORD_SNAP_FLAG_TYPE - public int nFalgCount; // 标志总数 - - public MEDIAFILE_TRAFFICCAR_INFO_EX() { - this.dwSize = this.size(); - } - } - - public static class NET_PIC_INFO_EX extends Structure - { + public static class MEDIAFILE_TRAFFICCAR_INFO_EX extends Structure { + public int dwSize; + public MEDIAFILE_TRAFFICCAR_INFO stuInfo; // 基本信息 + public byte[] szDeviceAddr = new byte[NET_COMMON_STRING_256]; // 设备地址 + public byte[] szVehicleSign = new byte[NET_COMMON_STRING_32]; // 车辆标识, 例如 "Unknown"-未知, "Audi"-奥迪, "Honda"-本田... + public byte[] szCustomParkNo = new byte[NET_COMMON_STRING_64]; // 自定义车位号(停车场用) + public short wVehicleSubBrand; // 车辆子品牌,需要通过映射表得到真正的子品牌 + public short wVehicleYearModel; // 车辆年款,需要通过映射表得到真正的年款 + public NET_TIME stuEleTagInfoUTC; // 对应电子车牌标签信息中的过车时间(ThroughTime) + public int[] emFalgLists = new int[EM_RECORD_SNAP_FLAG_TYPE.FLAG_TYPE_MAX]; // 录像或抓图文件标志, 参考 EM_RECORD_SNAP_FLAG_TYPE + public int nFalgCount; // 标志总数 + + public MEDIAFILE_TRAFFICCAR_INFO_EX() { + this.dwSize = this.size(); + } + } + + public static class NET_PIC_INFO_EX extends Structure { public int dwSize;//结构体大小 public int dwFileLenth;//文件大小,单位:字节 public byte[] szFilePath = new byte[MAX_PATH];// 文件路径 - - public NET_PIC_INFO_EX() - { + + public NET_PIC_INFO_EX() { this.dwSize = this.size(); } } - + //区域;各边距按整长8192的比例 - public static class NET_RECT extends Structure - { + public static class NET_RECT extends Structure { public int left; public int top; public int right; public int bottom; - + public String toString() { - return "[" + left + " " + top + " " + right + " " + bottom + "]"; - } - } - - - // 时间段结构 - public static class NET_TSECT extends Structure - { - public int bEnable; // 当表示录像时间段时,按位表示四个使能,从低位到高位分别表示动检录象、报警录象、普通录象、动检和报警同时发生才录像 - public int iBeginHour; - public int iBeginMin; - public int iBeginSec; - public int iEndHour; - public int iEndMin; - public int iEndSec; - - public String startTime() { - return iBeginHour + ":" + iBeginMin + ":" + iBeginSec; - } - - public String endTime() { - return iEndHour + ":" + iEndMin + ":" + iEndSec; - } - } - - - public static class DH_RECT extends Structure - { - public NativeLong left; - public NativeLong top; - public NativeLong right; - public NativeLong bottom; - } - + return "[" + left + " " + top + " " + right + " " + bottom + "]"; + } + } + + + // 时间段结构 + public static class NET_TSECT extends Structure { + public int bEnable; // 当表示录像时间段时,按位表示四个使能,从低位到高位分别表示动检录象、报警录象、普通录象、动检和报警同时发生才录像 + public int iBeginHour; + public int iBeginMin; + public int iBeginSec; + public int iEndHour; + public int iEndMin; + public int iEndSec; + + public String startTime() { + return iBeginHour + ":" + iBeginMin + ":" + iBeginSec; + } + + public String endTime() { + return iEndHour + ":" + iEndMin + ":" + iEndSec; + } + } + + + public static class DH_RECT extends Structure { + public NativeLong left; + public NativeLong top; + public NativeLong right; + public NativeLong bottom; + } + //二维空间点 - public static class NET_POINT extends Structure - { + public static class NET_POINT extends Structure { public short nx; public short ny; } - - public static class NET_CANDIDAT_PIC_PATHS extends Structure - { + + public static class NET_CANDIDAT_PIC_PATHS extends Structure { public int dwSize;//结构体大小 public int nFileCount;//实际文件个数 - public NET_PIC_INFO_EX[] stFiles = (NET_PIC_INFO_EX[])new NET_PIC_INFO_EX().toArray(NET_MAX_PERSON_IMAGE_NUM);//文件信息 - - public NET_CANDIDAT_PIC_PATHS() - { + public NET_PIC_INFO_EX[] stFiles = (NET_PIC_INFO_EX[]) new NET_PIC_INFO_EX().toArray(NET_MAX_PERSON_IMAGE_NUM);//文件信息 + + public NET_CANDIDAT_PIC_PATHS() { this.dwSize = this.size(); } } - + //颜色类型 - public static class EM_COLOR_TYPE extends Structure - { + public static class EM_COLOR_TYPE extends Structure { public static final int NET_COLOR_TYPE_RED = 0;//红色 public static final int NET_COLOR_TYPE_YELLOW = 1;//黄色 public static final int NET_COLOR_TYPE_GREEN = 2; //绿色 @@ -2254,312 +2190,297 @@ public interface NetSDKLib extends Library { public static final int NET_COLOR_TYPE_PURPLE = 5; //紫色 public static final int NET_COLOR_TYPE_BLACK = 6; //黑色 public static final int NET_COLOR_TYPE_WHITE = 7; //白色 - public static final int NET_COLOR_TYPE_MAX = 8; + public static final int NET_COLOR_TYPE_MAX = 8; } - + //视频分析物体信息结构体 - public static class NET_MSG_OBJECT extends Structure - { - public int nObjectID; //物体ID,每个ID表示一个唯一的物体 - public byte[] szObjectType = new byte[128]; //物体类型 - public int nConfidence; //置信度(0~255),值越大表示置信度越高 - public int nAction; //物体动作:1:Appear2:Move3:Stay - public DH_RECT BoundingBox; //包围盒 - public NET_POINT Center; //物体型心 - public int nPolygonNum; //多边形顶点个数 - public NET_POINT[] Contour = (NET_POINT[])new NET_POINT().toArray(NET_MAX_POLYGON_NUM);//较精确的轮廓多边形 - public int rgbaMainColor; //表示车牌、车身等物体主要颜色;按字节表示,分别为红、绿、蓝和透明度,例如:RGB值为(0,255,0),透明度为0时,其值为0x00ff0000. - - public byte[] szText = new byte[128]; // 物体上相关的带0结束符文本,比如车牌,集装箱号等等 - // "ObjectType"为"Vehicle"或者"Logo"时(尽量使用Logo。Vehicle是为了兼容老产品)表示车标,支持: - // "Unknown"未知 - // "Audi" 奥迪 - // "Honda" 本田 - // "Buick" 别克 - // "Volkswagen" 大众 - // "Toyota" 丰田 - // "BMW" 宝马 - // "Peugeot" 标致 - // "Ford" 福特 - // "Mazda" 马自达 - // "Nissan" 尼桑 - // "Hyundai" 现代 - // "Suzuki" 铃木 - // "Citroen" 雪铁龙 - // "Benz" 奔驰 - // "BYD" 比亚迪 - // "Geely" 吉利 - // "Lexus" 雷克萨斯 - // "Chevrolet" 雪佛兰 - // "Chery" 奇瑞 - // "Kia" 起亚 - // "Charade" 夏利 - // "DF" 东风 - // "Naveco" 依维柯 - // "SGMW" 五菱 - // "Jinbei" 金杯 - // "JAC" 江淮 - // "Emgrand" 帝豪 - // "ChangAn" 长安 - // "Great Wall" 长城 - // "Skoda" 斯柯达 - // "BaoJun" 宝骏 - // "Subaru" 斯巴鲁 - // "LandWind" 陆风 - // "Luxgen" 纳智捷 - // "Renault" 雷诺 - // "Mitsubishi" 三菱 - // "Roewe" 荣威 - // "Cadillac" 凯迪拉克 - // "MG" 名爵 - // "Zotye" 众泰 - // "ZhongHua" 中华 - // "Foton" 福田 - // "SongHuaJiang" 松花江 - // "Opel" 欧宝 - // "HongQi" 一汽红旗 - // "Fiat" 菲亚特 - // "Jaguar" 捷豹 - // "Volvo" 沃尔沃 - // "Acura" 讴歌 - // "Porsche" 保时捷 - // "Jeep" 吉普 - // "Bentley" 宾利 - // "Bugatti" 布加迪 - // "ChuanQi" 传祺 - // "Daewoo" 大宇 - // "DongNan" 东南 - // "Ferrari" 法拉利 - // "Fudi" 福迪 - // "Huapu" 华普 - // "HawTai" 华泰 - // "JMC" 江铃 - // "JingLong" 金龙客车 - // "JoyLong" 九龙 - // "Karry" 开瑞 - // "Chrysler" 克莱斯勒 - // "Lamborghini" 兰博基尼 - // "RollsRoyce" 劳斯莱斯 - // "Linian" 理念 - // "LiFan" 力帆 - // "LieBao" 猎豹 - // "Lincoln" 林肯 - // "LandRover" 路虎 - // "Lotus" 路特斯 - // "Maserati" 玛莎拉蒂 - // "Maybach" 迈巴赫 - // "Mclaren" 迈凯轮 - // "Youngman" 青年客车 - // "Tesla" 特斯拉 - // "Rely" 威麟 - // "Lsuzu" 五十铃 - // "Yiqi" 一汽 - // "Infiniti" 英菲尼迪 - // "YuTong" 宇通客车 - // "AnKai" 安凯客车 - // "Canghe" 昌河 - // "HaiMa" 海马 - // "Crown" 丰田皇冠 - // "HuangHai" 黄海 - // "JinLv" 金旅客车 - // "JinNing" 精灵 - // "KuBo" 酷博 - // "Europestar" 莲花 - // "MINI" 迷你 - // "Gleagle" 全球鹰 - // "ShiDai" 时代 - // "ShuangHuan" 双环 - // "TianYe" 田野 - // "WeiZi" 威姿 - // "Englon" 英伦 - // "ZhongTong" 中通客车 - // "Changan" 长安轿车 - // "Yuejin" 跃进 - // "Taurus" 金牛星 - // "Alto" 奥拓 - // "Weiwang" 威旺 - // "Chenglong" 乘龙 - // "Haige" 海格 - // "Shaolin" 少林客车 - // "Beifang" 北方客车 - // "Beijing" 北京汽车 - // "Hafu" 哈弗 - - public byte[] szObjectSubType = new byte[62]; //物体子类别,根据不同的物体类型,可以取以下子类型: - // Vehicle Category:"Unknown" 未知,"Motor" 机动车,"Non-Motor":非机动车,"Bus": 公交车,"Bicycle" 自行车,"Motorcycle":摩托车,"PassengerCar":客车, - // "LargeTruck":大货车, "MidTruck":中货车,"SaloonCar":轿车,"Microbus":面包车,"MicroTruck":小货车,"Tricycle":三轮车, "Passerby":行人 - // Plate Category:"Unknown" 未知,"Normal" 蓝牌黑牌,"Yellow" 黄牌,"DoubleYellow" 双层黄尾牌,"Police" 警牌"Armed" 武警牌, - // "Military" 部队号牌,"DoubleMilitary" 部队双层,"SAR" 港澳特区号牌,"Trainning" 教练车号牌 - // "Personal" 个性号牌,"Agri" 农用牌,"Embassy" 使馆号牌,"Moto" 摩托车号牌,"Tractor" 拖拉机号牌,"Other" 其他号牌 - // HumanFace Category:"Normal" 普通人脸,"HideEye" 眼部遮挡,"HideNose" 鼻子遮挡,"HideMouth" 嘴部遮挡 - - public short wColorLogoIndex; // 车标索引 - public short wSubBrand; // 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册 - public byte byReserved1; - public byte bPicEnble; //是否有物体对应图片文件信息, 类型小bool, 取值0或者1 - public NET_PIC_INFO stPicInfo; //物体对应图片信息 - public byte bShotFrame; //是否是抓拍张的识别结果, 类型小bool, 取值0或者1 - public byte bColor; //物体颜色(rgbaMainColor)是否可用, 类型小bool, 取值0或者1 - public byte byReserved2; - public byte byTimeType; //时间表示类型,详见 EM_TIME_TYPE 说明 - public NET_TIME_EX stuCurrentTime; //针对视频浓缩,当前时间戳(物体抓拍或识别时,会将此识别智能帧附在一个视频帧或jpeg图片中,此帧所在原始视频中的出现时间) - public NET_TIME_EX stuStartTime; //开始时间戳(物体开始出现时) - public NET_TIME_EX stuEndTime; //结束时间戳(物体最后出现时) - public DH_RECT stuOriginalBoundingBox; //包围盒(绝对坐标) - public DH_RECT stuSignBoundingBox; //车标坐标包围盒 - public int dwCurrentSequence; //当前帧序号(抓下这个物体时的帧) - public int dwBeginSequence; //开始帧序号(物体开始出现时的帧序号) - public int dwEndSequence; //结束帧序号(物体消逝时的帧序号) - public long nBeginFileOffse; //开始时文件偏移,单位:字(物体开始出现时,视频帧在原始视频文件中相对于文件起始处的偏移) - public long nEndFileOffset; //结束时文件偏移,单位:字节(物体消逝时,视频帧在原始视频文件中相对于文件起始处的偏移) - public byte[] byColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //物体颜色相似度,取值范围:0-100,数组下标值代表某种颜色,详见 EM_COLOR_TYPE - public byte[] byUpperBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //上半身物体颜色相似度(物体类型为人时有效) - public byte[] byLowerBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //下半身物体颜色相似度(物体类型为人时有效) - public int nRelativeID; //相关物体ID - public byte[] szSubText = new byte[20]; //"ObjectType"为"Vehicle"或者"Logo"时,表示车标下的某一车系,比如奥迪A6L,由于车系较多,SDK实现时透传此字段,设备如实填写。 - public short wBrandYear; // 车辆品牌年款 需要通过映射表得到真正的年款 映射表详见开发手册 - - public NET_MSG_OBJECT() - { - if(Utils.getOsName().equals("win")) { + public static class NET_MSG_OBJECT extends Structure { + public int nObjectID; //物体ID,每个ID表示一个唯一的物体 + public byte[] szObjectType = new byte[128]; //物体类型 + public int nConfidence; //置信度(0~255),值越大表示置信度越高 + public int nAction; //物体动作:1:Appear2:Move3:Stay + public DH_RECT BoundingBox; //包围盒 + public NET_POINT Center; //物体型心 + public int nPolygonNum; //多边形顶点个数 + public NET_POINT[] Contour = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_POLYGON_NUM);//较精确的轮廓多边形 + public int rgbaMainColor; //表示车牌、车身等物体主要颜色;按字节表示,分别为红、绿、蓝和透明度,例如:RGB值为(0,255,0),透明度为0时,其值为0x00ff0000. + + public byte[] szText = new byte[128]; // 物体上相关的带0结束符文本,比如车牌,集装箱号等等 + // "ObjectType"为"Vehicle"或者"Logo"时(尽量使用Logo。Vehicle是为了兼容老产品)表示车标,支持: + // "Unknown"未知 + // "Audi" 奥迪 + // "Honda" 本田 + // "Buick" 别克 + // "Volkswagen" 大众 + // "Toyota" 丰田 + // "BMW" 宝马 + // "Peugeot" 标致 + // "Ford" 福特 + // "Mazda" 马自达 + // "Nissan" 尼桑 + // "Hyundai" 现代 + // "Suzuki" 铃木 + // "Citroen" 雪铁龙 + // "Benz" 奔驰 + // "BYD" 比亚迪 + // "Geely" 吉利 + // "Lexus" 雷克萨斯 + // "Chevrolet" 雪佛兰 + // "Chery" 奇瑞 + // "Kia" 起亚 + // "Charade" 夏利 + // "DF" 东风 + // "Naveco" 依维柯 + // "SGMW" 五菱 + // "Jinbei" 金杯 + // "JAC" 江淮 + // "Emgrand" 帝豪 + // "ChangAn" 长安 + // "Great Wall" 长城 + // "Skoda" 斯柯达 + // "BaoJun" 宝骏 + // "Subaru" 斯巴鲁 + // "LandWind" 陆风 + // "Luxgen" 纳智捷 + // "Renault" 雷诺 + // "Mitsubishi" 三菱 + // "Roewe" 荣威 + // "Cadillac" 凯迪拉克 + // "MG" 名爵 + // "Zotye" 众泰 + // "ZhongHua" 中华 + // "Foton" 福田 + // "SongHuaJiang" 松花江 + // "Opel" 欧宝 + // "HongQi" 一汽红旗 + // "Fiat" 菲亚特 + // "Jaguar" 捷豹 + // "Volvo" 沃尔沃 + // "Acura" 讴歌 + // "Porsche" 保时捷 + // "Jeep" 吉普 + // "Bentley" 宾利 + // "Bugatti" 布加迪 + // "ChuanQi" 传祺 + // "Daewoo" 大宇 + // "DongNan" 东南 + // "Ferrari" 法拉利 + // "Fudi" 福迪 + // "Huapu" 华普 + // "HawTai" 华泰 + // "JMC" 江铃 + // "JingLong" 金龙客车 + // "JoyLong" 九龙 + // "Karry" 开瑞 + // "Chrysler" 克莱斯勒 + // "Lamborghini" 兰博基尼 + // "RollsRoyce" 劳斯莱斯 + // "Linian" 理念 + // "LiFan" 力帆 + // "LieBao" 猎豹 + // "Lincoln" 林肯 + // "LandRover" 路虎 + // "Lotus" 路特斯 + // "Maserati" 玛莎拉蒂 + // "Maybach" 迈巴赫 + // "Mclaren" 迈凯轮 + // "Youngman" 青年客车 + // "Tesla" 特斯拉 + // "Rely" 威麟 + // "Lsuzu" 五十铃 + // "Yiqi" 一汽 + // "Infiniti" 英菲尼迪 + // "YuTong" 宇通客车 + // "AnKai" 安凯客车 + // "Canghe" 昌河 + // "HaiMa" 海马 + // "Crown" 丰田皇冠 + // "HuangHai" 黄海 + // "JinLv" 金旅客车 + // "JinNing" 精灵 + // "KuBo" 酷博 + // "Europestar" 莲花 + // "MINI" 迷你 + // "Gleagle" 全球鹰 + // "ShiDai" 时代 + // "ShuangHuan" 双环 + // "TianYe" 田野 + // "WeiZi" 威姿 + // "Englon" 英伦 + // "ZhongTong" 中通客车 + // "Changan" 长安轿车 + // "Yuejin" 跃进 + // "Taurus" 金牛星 + // "Alto" 奥拓 + // "Weiwang" 威旺 + // "Chenglong" 乘龙 + // "Haige" 海格 + // "Shaolin" 少林客车 + // "Beifang" 北方客车 + // "Beijing" 北京汽车 + // "Hafu" 哈弗 + + public byte[] szObjectSubType = new byte[62]; //物体子类别,根据不同的物体类型,可以取以下子类型: + // Vehicle Category:"Unknown" 未知,"Motor" 机动车,"Non-Motor":非机动车,"Bus": 公交车,"Bicycle" 自行车,"Motorcycle":摩托车,"PassengerCar":客车, + // "LargeTruck":大货车, "MidTruck":中货车,"SaloonCar":轿车,"Microbus":面包车,"MicroTruck":小货车,"Tricycle":三轮车, "Passerby":行人 + // Plate Category:"Unknown" 未知,"Normal" 蓝牌黑牌,"Yellow" 黄牌,"DoubleYellow" 双层黄尾牌,"Police" 警牌"Armed" 武警牌, + // "Military" 部队号牌,"DoubleMilitary" 部队双层,"SAR" 港澳特区号牌,"Trainning" 教练车号牌 + // "Personal" 个性号牌,"Agri" 农用牌,"Embassy" 使馆号牌,"Moto" 摩托车号牌,"Tractor" 拖拉机号牌,"Other" 其他号牌 + // HumanFace Category:"Normal" 普通人脸,"HideEye" 眼部遮挡,"HideNose" 鼻子遮挡,"HideMouth" 嘴部遮挡 + + public short wColorLogoIndex; // 车标索引 + public short wSubBrand; // 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册 + public byte byReserved1; + public byte bPicEnble; //是否有物体对应图片文件信息, 类型小bool, 取值0或者1 + public NET_PIC_INFO stPicInfo; //物体对应图片信息 + public byte bShotFrame; //是否是抓拍张的识别结果, 类型小bool, 取值0或者1 + public byte bColor; //物体颜色(rgbaMainColor)是否可用, 类型小bool, 取值0或者1 + public byte byReserved2; + public byte byTimeType; //时间表示类型,详见 EM_TIME_TYPE 说明 + public NET_TIME_EX stuCurrentTime; //针对视频浓缩,当前时间戳(物体抓拍或识别时,会将此识别智能帧附在一个视频帧或jpeg图片中,此帧所在原始视频中的出现时间) + public NET_TIME_EX stuStartTime; //开始时间戳(物体开始出现时) + public NET_TIME_EX stuEndTime; //结束时间戳(物体最后出现时) + public DH_RECT stuOriginalBoundingBox; //包围盒(绝对坐标) + public DH_RECT stuSignBoundingBox; //车标坐标包围盒 + public int dwCurrentSequence; //当前帧序号(抓下这个物体时的帧) + public int dwBeginSequence; //开始帧序号(物体开始出现时的帧序号) + public int dwEndSequence; //结束帧序号(物体消逝时的帧序号) + public long nBeginFileOffse; //开始时文件偏移,单位:字(物体开始出现时,视频帧在原始视频文件中相对于文件起始处的偏移) + public long nEndFileOffset; //结束时文件偏移,单位:字节(物体消逝时,视频帧在原始视频文件中相对于文件起始处的偏移) + public byte[] byColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //物体颜色相似度,取值范围:0-100,数组下标值代表某种颜色,详见 EM_COLOR_TYPE + public byte[] byUpperBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //上半身物体颜色相似度(物体类型为人时有效) + public byte[] byLowerBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //下半身物体颜色相似度(物体类型为人时有效) + public int nRelativeID; //相关物体ID + public byte[] szSubText = new byte[20]; //"ObjectType"为"Vehicle"或者"Logo"时,表示车标下的某一车系,比如奥迪A6L,由于车系较多,SDK实现时透传此字段,设备如实填写。 + public short wBrandYear; // 车辆品牌年款 需要通过映射表得到真正的年款 映射表详见开发手册 + + public NET_MSG_OBJECT() { + if (Utils.getOsName().equals("win")) { // 强制采用最大四字节对其 setAlignType(ALIGN_GNUC); - } + } } } - + // NET_FILE_QUERY_FACE 对应的人脸识别服务FINDNEXT查询返回参数 - public static class MEDIAFILE_FACERECOGNITION_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int bGlobalScenePic; // 全景图是否存在, BOOL类型,取值0或1 - public NET_PIC_INFO_EX stGlobalScenePic; // 全景图片文件路径 - public NET_MSG_OBJECT stuObject; // 目标人脸物体信息 - public NET_PIC_INFO_EX stObjectPic; // 目标人脸文件路径 - public int nCandidateNum; // 当前人脸匹配到的候选对象数量 - public CANDIDATE_INFO[] stuCandidates = (CANDIDATE_INFO[])new CANDIDATE_INFO().toArray(NET_MAX_CANDIDATE_NUM); //当前人脸匹配到的候选对象信息 - public NET_CANDIDAT_PIC_PATHS[] stuCandidatesPic = (NET_CANDIDAT_PIC_PATHS[])new NET_CANDIDAT_PIC_PATHS().toArray(NET_MAX_CANDIDATE_NUM);// 当前人脸匹配到的候选对象图片文件路径 - public NET_TIME stTime; // 报警发生时间 - public byte[] szAddress = new byte[MAX_PATH]; // 报警发生地点 - public int nChannelId; // 通道号 - public int bUseCandidatesEx; // 是否使用候选对象扩展结构体, 1-true, 0-false - // 若为TRUE, 则表示使用stuCandidatesEx, 且stuCandidates无效, 否则相反 - public int nCandidateExNum; // 当前人脸匹配到的候选对象(扩展结构体) 数量 - public CANDIDATE_INFOEX[] stuCandidatesEx = (CANDIDATE_INFOEX[])new CANDIDATE_INFOEX().toArray(NET_MAX_CANDIDATE_NUM); // 当前人脸匹配到的候选对象信息, 实际返回个数同nCandidateNum - - public MEDIAFILE_FACERECOGNITION_INFO() - { - this.dwSize = this.size(); - } - } - + public static class MEDIAFILE_FACERECOGNITION_INFO extends Structure { + public int dwSize; // 结构体大小 + public int bGlobalScenePic; // 全景图是否存在, BOOL类型,取值0或1 + public NET_PIC_INFO_EX stGlobalScenePic; // 全景图片文件路径 + public NET_MSG_OBJECT stuObject; // 目标人脸物体信息 + public NET_PIC_INFO_EX stObjectPic; // 目标人脸文件路径 + public int nCandidateNum; // 当前人脸匹配到的候选对象数量 + public CANDIDATE_INFO[] stuCandidates = (CANDIDATE_INFO[]) new CANDIDATE_INFO().toArray(NET_MAX_CANDIDATE_NUM); //当前人脸匹配到的候选对象信息 + public NET_CANDIDAT_PIC_PATHS[] stuCandidatesPic = (NET_CANDIDAT_PIC_PATHS[]) new NET_CANDIDAT_PIC_PATHS().toArray(NET_MAX_CANDIDATE_NUM);// 当前人脸匹配到的候选对象图片文件路径 + public NET_TIME stTime; // 报警发生时间 + public byte[] szAddress = new byte[MAX_PATH]; // 报警发生地点 + public int nChannelId; // 通道号 + public int bUseCandidatesEx; // 是否使用候选对象扩展结构体, 1-true, 0-false + // 若为TRUE, 则表示使用stuCandidatesEx, 且stuCandidates无效, 否则相反 + public int nCandidateExNum; // 当前人脸匹配到的候选对象(扩展结构体) 数量 + public CANDIDATE_INFOEX[] stuCandidatesEx = (CANDIDATE_INFOEX[]) new CANDIDATE_INFOEX().toArray(NET_MAX_CANDIDATE_NUM); // 当前人脸匹配到的候选对象信息, 实际返回个数同nCandidateNum + + public MEDIAFILE_FACERECOGNITION_INFO() { + this.dwSize = this.size(); + } + } + //每个视频输入通道对应的所有事件规则:缓冲区pRuleBuf填充多个事件规则信息,每个事件规则信息内容为 CFG_RULE_INFO + "事件类型对应的规则配置结构体"。 - public static class CFG_ANALYSERULES_INFO extends Structure - { - public int nRuleCount; // 事件规则个数 - public Pointer pRuleBuf; // 每个视频输入通道对应的视频分析事件规则配置缓冲, 对应 CFG_RULE_INFO[] - public int nRuleLen; // 缓冲大小 + public static class CFG_ANALYSERULES_INFO extends Structure { + public int nRuleCount; // 事件规则个数 + public Pointer pRuleBuf; // 每个视频输入通道对应的视频分析事件规则配置缓冲, 对应 CFG_RULE_INFO[] + public int nRuleLen; // 缓冲大小 } - + // 规则通用信息 - public static class CFG_RULE_COMM_INFO extends Structure - { - public byte bRuleId; // 规则编号 - public int emClassType; // 规则所属的场景, EM_SCENE_TYPE - public byte[] bReserved = new byte[512]; // 保留字节 - } - - public static class CFG_RULE_INFO extends Structure - { - public int dwRuleType; // 事件类型,详见dhnetsdk.h中"智能分析事件类型" - public int nRuleSize; // 该事件类型规则配置结构体大小 - public CFG_RULE_COMM_INFO stuRuleCommInfo; // 规则通用信息 - } - + public static class CFG_RULE_COMM_INFO extends Structure { + public byte bRuleId; // 规则编号 + public int emClassType; // 规则所属的场景, EM_SCENE_TYPE + public byte[] bReserved = new byte[512]; // 保留字节 + } + + public static class CFG_RULE_INFO extends Structure { + public int dwRuleType; // 事件类型,详见dhnetsdk.h中"智能分析事件类型" + public int nRuleSize; // 该事件类型规则配置结构体大小 + public CFG_RULE_COMM_INFO stuRuleCommInfo; // 规则通用信息 + } + // 应用场景, 内容与 EM_SCENE_CLASS_TYPE 一致 - public static class EM_SCENE_TYPE extends Structure - { - public static final int EM_SCENE_UNKNOW = 0; // 未知 - public static final int EM_SCENE_NORMAL = 1; // "Normal" 普通场景 - public static final int EM_SCENE_TRAFFIC = 2; // "Traffic" 交通场景 - public static final int EM_SCENE_TRAFFIC_PATROL = 3; // "TrafficPatrol" 交通巡视 - public static final int EM_SCENE_FACEDETECTION = 4; // "FaceDetection" 人脸检测/人脸识别 - public static final int EM_SCENE_ATM = 5; // "ATM" - public static final int EM_SCENE_INDOOR = 6; // "Indoor" 室内行为分析,和普通规则相同,对室内场景的算法优化版 - public static final int EM_SCENE_FACERECOGNITION = 7; // "FaceRecognition" 人脸识别 - public static final int EM_SCENE_PRISON = 8; // "Prison" 监狱 - public static final int EM_SCENE_NUMBERSTAT = 9; // "NumberStat" 客流量统计 - public static final int EM_SCENE_HEAT_MAP = 10; // "HeatMap" 热度图 - public static final int EM_SCENE_VIDEODIAGNOSIS = 11; // "VideoDiagnosis" 视频诊断 - public static final int EM_SCENE_VEHICLEANALYSE = 12; // "VehicleAnalyse" 车辆特征检测分析 - public static final int EM_SCENE_COURSERECORD = 13; // "CourseRecord" 自动录播 - public static final int EM_SCENE_VEHICLE = 14; // "Vehicle" 车载场景(车载行业用,不同于智能交通的Traffic) - public static final int EM_SCENE_STANDUPDETECTION = 15; // "StandUpDetection" 起立检测 - public static final int EM_SCENE_GATE = 16; // "Gate" 卡口 - public static final int EM_SCENE_SDFACEDETECTION = 17; // "SDFaceDetect" 多预置点人脸检测,配置一条规则但可以在不同预置点下生效 - public static final int EM_SCENE_HEAT_MAP_PLAN = 18; // "HeatMapPlan" 球机热度图计划 - public static final int EM_SCENE_NUMBERSTAT_PLAN = 19; // "NumberStatPlan" 球机客流量统计计划 - public static final int EM_SCENE_ATMFD = 20; // "ATMFD"金融人脸检测,包括正常人脸、异常人脸、相邻人脸、头盔人脸等针对ATM场景特殊优化 - public static final int EM_SCENE_HIGHWAY = 21; // "Highway" 高速交通事件检测 - public static final int EM_SCENE_CITY = 22; // "City" 城市交通事件检测 - public static final int EM_SCENE_LETRACK = 23; // "LeTrack" 民用简易跟踪 - public static final int EM_SCENE_SCR = 24; // "SCR"打靶相机 - public static final int EM_SCENE_STEREO_VISION = 25; // "StereoVision"立体视觉(双目) - public static final int EM_SCENE_HUMANDETECT = 26; // "HumanDetect"人体检测 - public static final int EM_SCENE_FACEANALYSIS = 27; // "FaceAnalysis" 人脸分析(同时支持人脸检测、人脸识别、人脸属性等综合型业务) - public static final int EM_SCENE_XRAY_DETECTION = 28; // "XRayDetection" X光检测 - public static final int EM_SCENE_STEREO_NUMBER = 29; // "StereoNumber" 双目相机客流量统计 - public static final int EM_SCENE_CROWD_DISTRI_MAP = 30; // "CrowdDistriMap" 人群分布图 - public static final int EM_SCENE_CLASS_OBJECTDETECT = 31; // "ObjectDetect"目标检测 - public static final int EM_SCENE_FACEATTRIBUTE = 32; // "FaceAttribute" IVSS人脸检测 - public static final int EM_SCENE_FACECOMPARE = 33; // "FaceCompare" IVSS人脸识别 - } - + public static class EM_SCENE_TYPE extends Structure { + public static final int EM_SCENE_UNKNOW = 0; // 未知 + public static final int EM_SCENE_NORMAL = 1; // "Normal" 普通场景 + public static final int EM_SCENE_TRAFFIC = 2; // "Traffic" 交通场景 + public static final int EM_SCENE_TRAFFIC_PATROL = 3; // "TrafficPatrol" 交通巡视 + public static final int EM_SCENE_FACEDETECTION = 4; // "FaceDetection" 人脸检测/人脸识别 + public static final int EM_SCENE_ATM = 5; // "ATM" + public static final int EM_SCENE_INDOOR = 6; // "Indoor" 室内行为分析,和普通规则相同,对室内场景的算法优化版 + public static final int EM_SCENE_FACERECOGNITION = 7; // "FaceRecognition" 人脸识别 + public static final int EM_SCENE_PRISON = 8; // "Prison" 监狱 + public static final int EM_SCENE_NUMBERSTAT = 9; // "NumberStat" 客流量统计 + public static final int EM_SCENE_HEAT_MAP = 10; // "HeatMap" 热度图 + public static final int EM_SCENE_VIDEODIAGNOSIS = 11; // "VideoDiagnosis" 视频诊断 + public static final int EM_SCENE_VEHICLEANALYSE = 12; // "VehicleAnalyse" 车辆特征检测分析 + public static final int EM_SCENE_COURSERECORD = 13; // "CourseRecord" 自动录播 + public static final int EM_SCENE_VEHICLE = 14; // "Vehicle" 车载场景(车载行业用,不同于智能交通的Traffic) + public static final int EM_SCENE_STANDUPDETECTION = 15; // "StandUpDetection" 起立检测 + public static final int EM_SCENE_GATE = 16; // "Gate" 卡口 + public static final int EM_SCENE_SDFACEDETECTION = 17; // "SDFaceDetect" 多预置点人脸检测,配置一条规则但可以在不同预置点下生效 + public static final int EM_SCENE_HEAT_MAP_PLAN = 18; // "HeatMapPlan" 球机热度图计划 + public static final int EM_SCENE_NUMBERSTAT_PLAN = 19; // "NumberStatPlan" 球机客流量统计计划 + public static final int EM_SCENE_ATMFD = 20; // "ATMFD"金融人脸检测,包括正常人脸、异常人脸、相邻人脸、头盔人脸等针对ATM场景特殊优化 + public static final int EM_SCENE_HIGHWAY = 21; // "Highway" 高速交通事件检测 + public static final int EM_SCENE_CITY = 22; // "City" 城市交通事件检测 + public static final int EM_SCENE_LETRACK = 23; // "LeTrack" 民用简易跟踪 + public static final int EM_SCENE_SCR = 24; // "SCR"打靶相机 + public static final int EM_SCENE_STEREO_VISION = 25; // "StereoVision"立体视觉(双目) + public static final int EM_SCENE_HUMANDETECT = 26; // "HumanDetect"人体检测 + public static final int EM_SCENE_FACEANALYSIS = 27; // "FaceAnalysis" 人脸分析(同时支持人脸检测、人脸识别、人脸属性等综合型业务) + public static final int EM_SCENE_XRAY_DETECTION = 28; // "XRayDetection" X光检测 + public static final int EM_SCENE_STEREO_NUMBER = 29; // "StereoNumber" 双目相机客流量统计 + public static final int EM_SCENE_CROWD_DISTRI_MAP = 30; // "CrowdDistriMap" 人群分布图 + public static final int EM_SCENE_CLASS_OBJECTDETECT = 31; // "ObjectDetect"目标检测 + public static final int EM_SCENE_FACEATTRIBUTE = 32; // "FaceAttribute" IVSS人脸检测 + public static final int EM_SCENE_FACECOMPARE = 33; // "FaceCompare" IVSS人脸识别 + } + //区域顶点信息 - public static class CFG_POLYGON extends Structure - { + public static class CFG_POLYGON extends Structure { public int nX;//0~8191 public int nY; } - + //区域信息 - public static class CFG_REGION extends Structure - { + public static class CFG_REGION extends Structure { public int nPointNum; - public CFG_POLYGON[] stuPolygon = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM); + public CFG_POLYGON[] stuPolygon = (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM); } - - public static class CFG_SIZE_Attribute extends Union - { + + public static class CFG_SIZE_Attribute extends Union { public float nWidth;//宽 public float nArea;//面积 } - + //Size - public static class CFG_SIZE extends Structure - { + public static class CFG_SIZE extends Structure { public CFG_SIZE_Attribute attr; public float nHeight;//高 } - - public static class NET_SIZE extends Structure - { - public int nWidth; // 宽度 - public int nHeight; // 高度 + + public static class NET_SIZE extends Structure { + public int nWidth; // 宽度 + public int nHeight; // 高度 } - + //校准框信息 - public static class CFG_CALIBRATEBOX_INFO extends Structure - { + public static class CFG_CALIBRATEBOX_INFO extends Structure { public CFG_POLYGON stuCenterPoint;//校准框中心点坐标(点的坐标归一化到[0,8191]区间) public float fRatio;//相对基准校准框的比率(比如1表示基准框大小,0.5表示基准框大小的一半) } - + //尺寸过滤器 - public static class CFG_SIZEFILTER_INFO extends Structure - { + public static class CFG_SIZEFILTER_INFO extends Structure { public int nCalibrateBoxNum;//校准框个数 - public CFG_CALIBRATEBOX_INFO[] stuCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//校准框(远端近端标定模式下有效) + public CFG_CALIBRATEBOX_INFO[] stuCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[]) new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//校准框(远端近端标定模式下有效) public byte bMeasureModeEnable;//计量方式参数是否有效, 类型bool, 取值0或1 public byte bMeasureMode;//计量方式,0-像素,不需要远端、近端标定,1-实际长度,单位:米,2-远端近端标定后的像素 public byte bFilterTypeEnable;//过滤类型参数是否有效, 类型bool, 取值0或1 @@ -2593,105 +2514,100 @@ public interface NetSDKLib extends Library { public CFG_SIZE stuMinRatioSize;//最小宽高比矩形框尺寸,最小宽高比对应矩形框的宽高尺寸。 public CFG_SIZE stuMaxRatioSize;//最大宽高比矩形框尺寸,同上 public int nAreaCalibrateBoxNum;//面积校准框个数 - public CFG_CALIBRATEBOX_INFO[] stuAreaCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//面积校准框 + public CFG_CALIBRATEBOX_INFO[] stuAreaCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[]) new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//面积校准框 public int nRatioCalibrateBoxs;//宽高校准框个数 - public CFG_CALIBRATEBOX_INFO[] stuRatioCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//宽高校准框 + public CFG_CALIBRATEBOX_INFO[] stuRatioCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[]) new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//宽高校准框 public byte abBySize;//长宽过滤使能参数是否有效, 类型bool, 取值0或1 public byte bBySize;//长宽过滤使能, 类型bool, 取值0或1 } - + //各种物体特定的过滤器 - public static class CFG_OBJECT_SIZEFILTER_INFO extends Structure - { + public static class CFG_OBJECT_SIZEFILTER_INFO extends Structure { public byte[] szObjectType = new byte[MAX_NAME_LEN];//物体类型 public CFG_SIZEFILTER_INFO stSizeFilter;//对应的尺寸过滤器 } - + //特殊区域的属性类型 - public static class EM_SEPCIALREGION_PROPERTY_TYPE extends Structure - { - public static final int EM_SEPCIALREGION_PROPERTY_TYPE_HIGHLIGHT = 1;//高亮,键盘检测区域具有此特性 - public static final int EM_SEPCIALREGION_PROPERTY_TYPE_REGULARBLINK = 2; //规律的闪烁,插卡区域具有此特性 - public static final int EM_SEPCIALREGION_PROPERTY_TYPE_IREGULARBLINK = 3; //不规律的闪烁,屏幕区域具有此特性 - public static final int EM_SEPCIALREGION_PROPERTY_TYPE_NUM = 4; - } - + public static class EM_SEPCIALREGION_PROPERTY_TYPE extends Structure { + public static final int EM_SEPCIALREGION_PROPERTY_TYPE_HIGHLIGHT = 1;//高亮,键盘检测区域具有此特性 + public static final int EM_SEPCIALREGION_PROPERTY_TYPE_REGULARBLINK = 2; //规律的闪烁,插卡区域具有此特性 + public static final int EM_SEPCIALREGION_PROPERTY_TYPE_IREGULARBLINK = 3; //不规律的闪烁,屏幕区域具有此特性 + public static final int EM_SEPCIALREGION_PROPERTY_TYPE_NUM = 4; + } + //特殊检测区,是指从检测区中区分出来,有特殊检测属性的区域 - public static class CFG_SPECIALDETECT_INFO extends Structure - { + public static class CFG_SPECIALDETECT_INFO extends Structure { public int nDetectNum;//检测区域顶点数 - public CFG_POLYGON[] stDetectRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//检测区域 + public CFG_POLYGON[] stDetectRegion = (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//检测区域 public int nPropertyNum;//特殊检测区属性个数 public int[] nPropertys = new int[EM_SEPCIALREGION_PROPERTY_TYPE.EM_SEPCIALREGION_PROPERTY_TYPE_NUM];//特殊检测区属性 } - + //各类物体的子类型 - public static class CFG_CATEGORY_TYPE extends Structure - { + public static class CFG_CATEGORY_TYPE extends Structure { public static final int CFG_CATEGORY_TYPE_UNKNOW = 0; //未知类型 - //车型相关子类别 - public static final int CFG_CATEGORY_VEHICLE_TYPE_MOTOR = 1; //"Motor"机动车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_NON_MOTOR = 2; //"Non-Motor"非机动车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_BUS = 3; //"Bus"公交车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_BICYCLE = 4; //"Bicycle"自行车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_MOTORCYCLE = 5; //"Motorcycle"摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_UNLICENSEDMOTOR = 6; //"UnlicensedMotor":无牌机动车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_LARGECAR = 7; //"LargeCar"大型汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROCAR = 8; //"MicroCar"小型汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_EMBASSYCAR = 9; //"EmbassyCar"使馆汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_MARGINALCAR = 10; //"MarginalCar"领馆汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_AREAOUTCAR = 11; //"AreaoutCar"境外汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_FOREIGNCAR = 12; //"ForeignCar"外籍汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_DUALTRIWHEELMOTORCYCLE = 13; //"DualTriWheelMotorcycle"两、三轮摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_LIGHTMOTORCYCLE = 14; //"LightMotorcycle"轻便摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_EMBASSYMOTORCYCLE = 15 ; //"EmbassyMotorcycle"使馆摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_MARGINALMOTORCYCLE = 16; //"MarginalMotorcycle"领馆摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_AREAOUTMOTORCYCLE = 17; //"AreaoutMotorcycle"境外摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_FOREIGNMOTORCYCLE = 18; //"ForeignMotorcycle"外籍摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_FARMTRANSMITCAR = 19; //"FarmTransmitCar"农用运输车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_TRACTOR = 20; //"Tractor"拖拉机 - public static final int CFG_CATEGORY_VEHICLE_TYPE_TRAILER = 21; //"Trailer"挂车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_COACHCAR = 22; //"CoachCar"教练汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_COACHMOTORCYCLE = 23; //"CoachMotorcycle"教练摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_TRIALCAR = 24; //"TrialCar"试验汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_TRIALMOTORCYCLE = 25; //"TrialMotorcycle"试验摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYENTRYCAR = 26; //"TemporaryEntryCar"临时入境汽车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYENTRYMOTORCYCLE = 27; //"TemporaryEntryMotorcycle"临时入境摩托车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYSTEERCAR = 28; //"TemporarySteerCar"临时行驶车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_PASSENGERCAR = 29; //"PassengerCar"客车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_LARGETRUCK = 30; //"LargeTruck"大货车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_MIDTRUCK =31 ; //"MidTruck"中货车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_SALOONCAR = 32; //"SaloonCar"轿车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROBUS = 33; //"Microbus"面包车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROTRUCK = 34; //"MicroTruck"小货车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_TRICYCLE = 35; //"Tricycle"三轮车 - public static final int CFG_CATEGORY_VEHICLE_TYPE_PASSERBY = 36; //"Passerby"行人 - //车牌相关子类别 - public static final int CFG_CATEGORY_PLATE_TYPE_NORMAL = 37; //"Normal"蓝牌黑字 - public static final int CFG_CATEGORY_PLATE_TYPE_YELLOW = 38; //"Yellow"黄牌 - public static final int CFG_CATEGORY_PLATE_TYPE_DOUBLEYELLOW = 39; //"DoubleYellow"双层黄尾牌 - public static final int CFG_CATEGORY_PLATE_TYPE_POLICE = 40; //"Police"警牌 - public static final int CFG_CATEGORY_PLATE_TYPE_ARMED = 41; //"Armed"武警牌 - public static final int CFG_CATEGORY_PLATE_TYPE_MILITARY = 42; //"Military"部队号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_DOUBLEMILITARY = 43; //"DoubleMilitary"部队双层 - public static final int CFG_CATEGORY_PLATE_TYPE_SAR = 44; //"SAR"港澳特区号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_TRAINNING = 45; //"Trainning"教练车号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_PERSONAL = 46; //"Personal"个性号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_AGRI = 47; //"Agri"农用牌 - public static final int CFG_CATEGORY_PLATE_TYPE_EMBASSY = 48; //"Embassy"使馆号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_MOTO = 49; //"Moto"摩托车号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_TRACTOR = 50; //"Tractor"拖拉机号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_OFFICIALCAR = 51; //"OfficialCar"公务车 - public static final int CFG_CATEGORY_PLATE_TYPE_PERSONALCAR = 52; //"PersonalCar"私家车 - public static final int CFG_CATEGORY_PLATE_TYPE_WARCAR = 53; //"WarCar"军用 - public static final int CFG_CATEGORY_PLATE_TYPE_OTHER = 54; //"Other"其他号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_CIVILAVIATION = 55; //"Civilaviation"民航号牌 - public static final int CFG_CATEGORY_PLATE_TYPE_BLACK = 56; //"Black"黑牌 - } - + //车型相关子类别 + public static final int CFG_CATEGORY_VEHICLE_TYPE_MOTOR = 1; //"Motor"机动车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_NON_MOTOR = 2; //"Non-Motor"非机动车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_BUS = 3; //"Bus"公交车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_BICYCLE = 4; //"Bicycle"自行车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_MOTORCYCLE = 5; //"Motorcycle"摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_UNLICENSEDMOTOR = 6; //"UnlicensedMotor":无牌机动车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_LARGECAR = 7; //"LargeCar"大型汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROCAR = 8; //"MicroCar"小型汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_EMBASSYCAR = 9; //"EmbassyCar"使馆汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_MARGINALCAR = 10; //"MarginalCar"领馆汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_AREAOUTCAR = 11; //"AreaoutCar"境外汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_FOREIGNCAR = 12; //"ForeignCar"外籍汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_DUALTRIWHEELMOTORCYCLE = 13; //"DualTriWheelMotorcycle"两、三轮摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_LIGHTMOTORCYCLE = 14; //"LightMotorcycle"轻便摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_EMBASSYMOTORCYCLE = 15; //"EmbassyMotorcycle"使馆摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_MARGINALMOTORCYCLE = 16; //"MarginalMotorcycle"领馆摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_AREAOUTMOTORCYCLE = 17; //"AreaoutMotorcycle"境外摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_FOREIGNMOTORCYCLE = 18; //"ForeignMotorcycle"外籍摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_FARMTRANSMITCAR = 19; //"FarmTransmitCar"农用运输车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_TRACTOR = 20; //"Tractor"拖拉机 + public static final int CFG_CATEGORY_VEHICLE_TYPE_TRAILER = 21; //"Trailer"挂车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_COACHCAR = 22; //"CoachCar"教练汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_COACHMOTORCYCLE = 23; //"CoachMotorcycle"教练摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_TRIALCAR = 24; //"TrialCar"试验汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_TRIALMOTORCYCLE = 25; //"TrialMotorcycle"试验摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYENTRYCAR = 26; //"TemporaryEntryCar"临时入境汽车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYENTRYMOTORCYCLE = 27; //"TemporaryEntryMotorcycle"临时入境摩托车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYSTEERCAR = 28; //"TemporarySteerCar"临时行驶车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_PASSENGERCAR = 29; //"PassengerCar"客车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_LARGETRUCK = 30; //"LargeTruck"大货车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_MIDTRUCK = 31; //"MidTruck"中货车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_SALOONCAR = 32; //"SaloonCar"轿车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROBUS = 33; //"Microbus"面包车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROTRUCK = 34; //"MicroTruck"小货车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_TRICYCLE = 35; //"Tricycle"三轮车 + public static final int CFG_CATEGORY_VEHICLE_TYPE_PASSERBY = 36; //"Passerby"行人 + //车牌相关子类别 + public static final int CFG_CATEGORY_PLATE_TYPE_NORMAL = 37; //"Normal"蓝牌黑字 + public static final int CFG_CATEGORY_PLATE_TYPE_YELLOW = 38; //"Yellow"黄牌 + public static final int CFG_CATEGORY_PLATE_TYPE_DOUBLEYELLOW = 39; //"DoubleYellow"双层黄尾牌 + public static final int CFG_CATEGORY_PLATE_TYPE_POLICE = 40; //"Police"警牌 + public static final int CFG_CATEGORY_PLATE_TYPE_ARMED = 41; //"Armed"武警牌 + public static final int CFG_CATEGORY_PLATE_TYPE_MILITARY = 42; //"Military"部队号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_DOUBLEMILITARY = 43; //"DoubleMilitary"部队双层 + public static final int CFG_CATEGORY_PLATE_TYPE_SAR = 44; //"SAR"港澳特区号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_TRAINNING = 45; //"Trainning"教练车号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_PERSONAL = 46; //"Personal"个性号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_AGRI = 47; //"Agri"农用牌 + public static final int CFG_CATEGORY_PLATE_TYPE_EMBASSY = 48; //"Embassy"使馆号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_MOTO = 49; //"Moto"摩托车号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_TRACTOR = 50; //"Tractor"拖拉机号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_OFFICIALCAR = 51; //"OfficialCar"公务车 + public static final int CFG_CATEGORY_PLATE_TYPE_PERSONALCAR = 52; //"PersonalCar"私家车 + public static final int CFG_CATEGORY_PLATE_TYPE_WARCAR = 53; //"WarCar"军用 + public static final int CFG_CATEGORY_PLATE_TYPE_OTHER = 54; //"Other"其他号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_CIVILAVIATION = 55; //"Civilaviation"民航号牌 + public static final int CFG_CATEGORY_PLATE_TYPE_BLACK = 56; //"Black"黑牌 + } + //不同区域各种类型物体的检测模块配置 - public static class CFG_MODULE_INFO extends Structure - { + public static class CFG_MODULE_INFO extends Structure { // 信息 public byte[] szObjectType = new byte[MAX_NAME_LEN];//默认物体类型,详见"支持的检测物体类型列表" public byte bSnapShot;//是否对识别物体抓图,类型bool,取值0或1 @@ -2699,9 +2615,9 @@ public interface NetSDKLib extends Library { public byte bMeasureModeEnable;//计量方式参数是否有效,类型bool,取值0或1 public byte bMeasureMode;//计量方式,0-像素,不需要远端、近端标定,1-实际长度,单位:米,2-远端近端标定后的像素 public int nDetectRegionPoint;//检测区域顶点数 - public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//检测区域 + public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//检测区域 public int nTrackRegionPoint;//跟踪区域顶点数 - public CFG_POLYGON[] stuTrackRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//跟踪区域 + public CFG_POLYGON[] stuTrackRegion = (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//跟踪区域 public byte bFilterTypeEnable;//过滤类型参数是否有效,类型bool,取值0或1 // ByArea,ByRatio仅作兼容使枚懒⒌腂yArea和ByRatio选项代替 2012/03/06 public byte nFilterType;//过滤类型:0:"ByLength",1:"ByArea",2:"ByWidthHeight",3:"ByRatio": @@ -2714,9 +2630,9 @@ public interface NetSDKLib extends Library { public CFG_SIZE stuFilterMinSize;//物体最小尺寸"ByLength"模式下表示宽高的尺寸,"ByArea"模式下宽表示面积,高无效。 public CFG_SIZE stuFilterMaxSize;//物体最大尺寸"ByLength"模式下表示宽高的尺寸,"ByArea"模式下宽表示面积,高无效。 public int nExcludeRegionNum;//排除区域数 - public CFG_REGION[] stuExcludeRegion = (CFG_REGION[])new CFG_REGION().toArray(MAX_EXCLUDEREGION_NUM);//排除区域 + public CFG_REGION[] stuExcludeRegion = (CFG_REGION[]) new CFG_REGION().toArray(MAX_EXCLUDEREGION_NUM);//排除区域 public int nCalibrateBoxNum;//校准框个数 - public CFG_CALIBRATEBOX_INFO[] stuCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//校准框(远端近端标定模式下有效) + public CFG_CALIBRATEBOX_INFO[] stuCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[]) new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//校准框(远端近端标定模式下有效) public byte bAccuracy;//检测精度是否有效,类型bool,取值0或1 public byte byAccuracy;//检测精度 public byte bMovingStep;//算法移动步长是否有效,类型bool,取值0或1 @@ -2727,10 +2643,14 @@ public interface NetSDKLib extends Library { public byte abDetectBalance;//漏检和误检平衡参数是否有效,类型bool,取值0或1 public int nDetectBalance;//漏检和误检平衡0-折中模式(默认)1-漏检更少2-误检更少 public byte abByRatio;//类型bool,取值0或1 - public byte abMinRatio;;//类型bool,取值0或1 - public byte abMaxRatio;;//类型bool,取值0或1 - public byte abMinAreaSize;;//类型bool,取值0或1 - public byte abMaxAreaSize;;//类型bool,取值0或1 + public byte abMinRatio; + ;//类型bool,取值0或1 + public byte abMaxRatio; + ;//类型bool,取值0或1 + public byte abMinAreaSize; + ;//类型bool,取值0或1 + public byte abMaxAreaSize; + ;//类型bool,取值0或1 public byte bByRatio;//是否按宽高比过滤通过能力ComplexSizeFilter判断是否可用可以和nFilterType复用,类型bool,取值0或1 public byte[] bReserved1 = new byte[2]; public double dMinRatio;//最小宽高比 @@ -2749,234 +2669,207 @@ public interface NetSDKLib extends Library { public CFG_SIZE stuMinRatioSize;//最小宽高比矩形框尺寸,最小宽高比对应矩形框的宽高尺寸。 public CFG_SIZE stuMaxRatioSize;//最大宽高比矩形框尺寸,同上 public int nAreaCalibrateBoxNum;//面积校准框个数 - public CFG_CALIBRATEBOX_INFO[] stuAreaCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//面积校准框 + public CFG_CALIBRATEBOX_INFO[] stuAreaCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[]) new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//面积校准框 public int nRatioCalibrateBoxs;//比例校准框个数 - public CFG_CALIBRATEBOX_INFO[] stuRatioCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//比例校准框个数 + public CFG_CALIBRATEBOX_INFO[] stuRatioCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[]) new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//比例校准框个数 public byte bAntiDisturbance;//是否开启去扰动模块,类型bool,取值0或1 public byte bBacklight;//是否有逆光,类型bool,取值0或1 public byte bShadow;//是否有阴影,类型bool,取值0或1 public byte bContourAssistantTrack;//是否开启轮廓辅助跟踪,例:在人脸识别时可以通过跟踪人体来辅助识别脸,类型bool,取值0或1 public int nPtzPresetId;//云台预置点,0~255,0表示固定场景,忽略预置点。大于0表示在此预置点时模块有效 public int nObjectFilterNum;//物体特定的过滤器个数 - public CFG_OBJECT_SIZEFILTER_INFO[] stObjectFilter= (CFG_OBJECT_SIZEFILTER_INFO[])new CFG_OBJECT_SIZEFILTER_INFO().toArray(MAX_OBJECT_LIST_SIZE);//物体特定的过滤器信息 + public CFG_OBJECT_SIZEFILTER_INFO[] stObjectFilter = (CFG_OBJECT_SIZEFILTER_INFO[]) new CFG_OBJECT_SIZEFILTER_INFO().toArray(MAX_OBJECT_LIST_SIZE);//物体特定的过滤器信息 public int abObjectImageSize; //BOOL类型,取值0或1 public CFG_SIZE stObjectImageSize;//保证物体图像尺寸相同,单位是像素,不支持小数,取值:>=0,0表示自动调整大小 public int nSpecailDetectNum;//特殊检测区域个数 - public CFG_SPECIALDETECT_INFO[] stSpecialDetectRegions= (CFG_SPECIALDETECT_INFO[])new CFG_SPECIALDETECT_INFO().toArray(MAX_SPECIALDETECT_NUM);//特殊检测区信息 + public CFG_SPECIALDETECT_INFO[] stSpecialDetectRegions = (CFG_SPECIALDETECT_INFO[]) new CFG_SPECIALDETECT_INFO().toArray(MAX_SPECIALDETECT_NUM);//特殊检测区信息 public int nAttribute;//需要识别物体的属性个数, 类型为unsigned int - public byte[] szAttributes = new byte[MAX_OBJECT_ATTRIBUTES_SIZE*MAX_NAME_LEN];//需要识别物体的属性列表,“Category” + public byte[] szAttributes = new byte[MAX_OBJECT_ATTRIBUTES_SIZE * MAX_NAME_LEN];//需要识别物体的属性列表,“Category” public int abPlateAnalyseMode;//nPlateAnalyseMode是否有效, BOOL类型,取值0或1 public int nPlateAnalyseMode;//车牌识别模式,0-只识别车头牌照1-只识别车尾牌照2-车头牌照优先(场景中大部分车均是车头牌照)3-车尾牌照优先(场景中大部分车均是车尾牌照) //szAttributes属性存在"Category"时生效 public int nCategoryNum;//需要识别物体的子类型总数 - public int[] emCategoryType= new int[MAX_CATEGORY_TYPE_NUMBER];//子类型信息, 元素取CFG_CATEGORY_TYPE中的值 - public byte[] szSceneType = new byte[CFG_COMMON_STRING_16]; // 检测区参数用于的场景类型 + public int[] emCategoryType = new int[MAX_CATEGORY_TYPE_NUMBER];//子类型信息, 元素取CFG_CATEGORY_TYPE中的值 + public byte[] szSceneType = new byte[CFG_COMMON_STRING_16]; // 检测区参数用于的场景类型 } - - public static class CFG_ANALYSEMODULES_INFO extends Structure - { + + public static class CFG_ANALYSEMODULES_INFO extends Structure { public int nMoudlesNum;//检测模块数 - public CFG_MODULE_INFO[] stuModuleInfo= (CFG_MODULE_INFO[])new CFG_MODULE_INFO().toArray(MAX_ANALYSE_MODULE_NUM);//每个视频输入通道对应的各种类型物体的检测模块配置 + public CFG_MODULE_INFO[] stuModuleInfo = (CFG_MODULE_INFO[]) new CFG_MODULE_INFO().toArray(MAX_ANALYSE_MODULE_NUM);//每个视频输入通道对应的各种类型物体的检测模块配置 } - + // CLIENT_FindGroupInfo接口输入参数 - public static class NET_IN_FIND_GROUP_INFO extends Structure - { + public static class NET_IN_FIND_GROUP_INFO extends Structure { public int dwSize; public byte[] szGroupId = new byte[NET_COMMON_STRING_64];//人员组ID,唯一标识一组人员,为空表示查询全部人员组信息 - - public NET_IN_FIND_GROUP_INFO() - { + + public NET_IN_FIND_GROUP_INFO() { this.dwSize = this.size(); } } - + // 人脸数据类型 - public static class EM_FACE_DB_TYPE extends Structure - { - public static final int NET_FACE_DB_TYPE_UNKOWN = 0; + public static class EM_FACE_DB_TYPE extends Structure { + public static final int NET_FACE_DB_TYPE_UNKOWN = 0; public static final int NET_FACE_DB_TYPE_HISTORY = 1; // 历史数据库,存放的是检测出的人脸信息,一般没有包含人脸对应人员信息 public static final int NET_FACE_DB_TYPE_BLACKLIST = 2; // 黑名单数据库 public static final int NET_FACE_DB_TYPE_WHITELIST = 3; // 白名单数据库,废弃 public static final int NET_FACE_DB_TYPE_ALARM = 4; // 报警库 } - + // 人员组信息 - public static class NET_FACERECONGNITION_GROUP_INFO extends Structure - { - public int dwSize; - public int emFaceDBType; // 人员组类型,详见EM_FACE_DB_TYPE, 取值为EM_FACE_DB_TYPE中的值 - public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID,唯一标识一组人员(不可修改,添加操作时无效) - public byte[] szGroupName = new byte[NET_COMMON_STRING_128]; // 人员组名称 - public byte[] szGroupRemarks = new byte[NET_COMMON_STRING_256]; // 人员组备注信息 - public int nGroupSize; // 当前组内人员数 - public int nRetSimilarityCount; // 实际返回的库相似度阈值个数 - public int[] nSimilarity = new int[MAX_SIMILARITY_COUNT]; // 库相似度阈值,人脸比对高于阈值认为匹配成功 - public int nRetChnCount; // 实际返回的通道号个数 - public int[] nChannel = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 当前组绑定到的视频通道号列表 - public int[] nFeatureState = new int[MAX_FEATURESTATE_NUM]; // 人脸组建模状态信息: - // [0]-准备建模的人员数量,不保证一定建模成功 - // [1]-建模失败的人员数量,图片不符合算法要求,需要更换图片 - // [2]-已建模成功人员数量,数据可用于算法进行人脸识别 - // [3]-曾经建模成功,但因算法升级变得不可用的数量,重新建模就可用 - - public NET_FACERECONGNITION_GROUP_INFO() - { - this.dwSize = this.size(); - } - } - + public static class NET_FACERECONGNITION_GROUP_INFO extends Structure { + public int dwSize; + public int emFaceDBType; // 人员组类型,详见EM_FACE_DB_TYPE, 取值为EM_FACE_DB_TYPE中的值 + public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID,唯一标识一组人员(不可修改,添加操作时无效) + public byte[] szGroupName = new byte[NET_COMMON_STRING_128]; // 人员组名称 + public byte[] szGroupRemarks = new byte[NET_COMMON_STRING_256]; // 人员组备注信息 + public int nGroupSize; // 当前组内人员数 + public int nRetSimilarityCount; // 实际返回的库相似度阈值个数 + public int[] nSimilarity = new int[MAX_SIMILARITY_COUNT]; // 库相似度阈值,人脸比对高于阈值认为匹配成功 + public int nRetChnCount; // 实际返回的通道号个数 + public int[] nChannel = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 当前组绑定到的视频通道号列表 + public int[] nFeatureState = new int[MAX_FEATURESTATE_NUM]; // 人脸组建模状态信息: + // [0]-准备建模的人员数量,不保证一定建模成功 + // [1]-建模失败的人员数量,图片不符合算法要求,需要更换图片 + // [2]-已建模成功人员数量,数据可用于算法进行人脸识别 + // [3]-曾经建模成功,但因算法升级变得不可用的数量,重新建模就可用 + + public NET_FACERECONGNITION_GROUP_INFO() { + this.dwSize = this.size(); + } + } + // CLIENT_FindGroupInfo接口输出参数 - public static class NET_OUT_FIND_GROUP_INFO extends Structure - { - public int dwSize; - public Pointer pGroupInfos; // 人员组信息,由用户申请空间, 指向 NET_FACERECONGNITION_GROUP_INFO 的指针 - public int nMaxGroupNum; // 当前申请的数组大小 - public int nRetGroupNum; // 设备返回的人员组个数 - - public NET_OUT_FIND_GROUP_INFO() - { + public static class NET_OUT_FIND_GROUP_INFO extends Structure { + public int dwSize; + public Pointer pGroupInfos; // 人员组信息,由用户申请空间, 指向 NET_FACERECONGNITION_GROUP_INFO 的指针 + public int nMaxGroupNum; // 当前申请的数组大小 + public int nRetGroupNum; // 设备返回的人员组个数 + + public NET_OUT_FIND_GROUP_INFO() { this.dwSize = this.size(); } } // 人员组操作枚举 - public static class EM_OPERATE_FACERECONGNITION_GROUP_TYPE extends Structure - { + public static class EM_OPERATE_FACERECONGNITION_GROUP_TYPE extends Structure { public static final int NET_FACERECONGNITION_GROUP_UNKOWN = 0; - public static final int NET_FACERECONGNITION_GROUP_ADD = 1; // 添加人员组信息, 对应结构体为 NET_ADD_FACERECONGNITION_GROUP_INFO + public static final int NET_FACERECONGNITION_GROUP_ADD = 1; // 添加人员组信息, 对应结构体为 NET_ADD_FACERECONGNITION_GROUP_INFO public static final int NET_FACERECONGNITION_GROUP_MODIFY = 2; // 修改人员组信息, 对应结构体为 NET_MODIFY_FACERECONGNITION_GROUP_INFO public static final int NET_FACERECONGNITION_GROUP_DELETE = 3; // 删除人员组信息, 对应结构体为 NET_DELETE_FACERECONGNITION_GROUP_INFO } - + // CLIENT_OperateFaceRecognitionGroup 接口输入参数 - public static class NET_IN_OPERATE_FACERECONGNITION_GROUP extends Structure - { - public int dwSize; - public int emOperateType; // 操作类型, 取值为 EM_OPERATE_FACERECONGNITION_GROUP_TYPE 中的值 - public Pointer pOPerateInfo; // 相关操作信息,指向void * - - public NET_IN_OPERATE_FACERECONGNITION_GROUP() - { + public static class NET_IN_OPERATE_FACERECONGNITION_GROUP extends Structure { + public int dwSize; + public int emOperateType; // 操作类型, 取值为 EM_OPERATE_FACERECONGNITION_GROUP_TYPE 中的值 + public Pointer pOPerateInfo; // 相关操作信息,指向void * + + public NET_IN_OPERATE_FACERECONGNITION_GROUP() { this.dwSize = this.size(); } } - + // CLIENT_OperateFaceRecognitionGroup接口输出参数 - public static class NET_OUT_OPERATE_FACERECONGNITION_GROUP extends Structure - { - public int dwSize; - public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 新增记录的人员组ID,唯一标识一组人员 - - public NET_OUT_OPERATE_FACERECONGNITION_GROUP() - { + public static class NET_OUT_OPERATE_FACERECONGNITION_GROUP extends Structure { + public int dwSize; + public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 新增记录的人员组ID,唯一标识一组人员 + + public NET_OUT_OPERATE_FACERECONGNITION_GROUP() { this.dwSize = this.size(); } } - + // 添加人员组信息 - public static class NET_ADD_FACERECONGNITION_GROUP_INFO extends Structure - { - public int dwSize; - public NET_FACERECONGNITION_GROUP_INFO stuGroupInfo; // 人员组信息 - + public static class NET_ADD_FACERECONGNITION_GROUP_INFO extends Structure { + public int dwSize; + public NET_FACERECONGNITION_GROUP_INFO stuGroupInfo; // 人员组信息 + public NET_ADD_FACERECONGNITION_GROUP_INFO() { - this.dwSize = this.size(); - } + this.dwSize = this.size(); + } } // 修改人员组信息 - public static class NET_MODIFY_FACERECONGNITION_GROUP_INFO extends Structure - { - public int dwSize; - public NET_FACERECONGNITION_GROUP_INFO stuGroupInfo; // 人员组信息 - + public static class NET_MODIFY_FACERECONGNITION_GROUP_INFO extends Structure { + public int dwSize; + public NET_FACERECONGNITION_GROUP_INFO stuGroupInfo; // 人员组信息 + public NET_MODIFY_FACERECONGNITION_GROUP_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 删除人员组信息 - public static class NET_DELETE_FACERECONGNITION_GROUP_INFO extends Structure - { - public int dwSize; - public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID,唯一标识一组人员 - + public static class NET_DELETE_FACERECONGNITION_GROUP_INFO extends Structure { + public int dwSize; + public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID,唯一标识一组人员 + public NET_DELETE_FACERECONGNITION_GROUP_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // CLIENT_SetGroupInfoForChannel接口输入参数 - public static class NET_IN_SET_GROUPINFO_FOR_CHANNEL extends Structure - { - public int dwSize; - public int nChannelID; // 通道号 - public int nGroupIdNum; // 人员组数 - public GROUP_ID[] szGroupIdArr = (GROUP_ID[])new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID - public int nSimilaryNum; // 相似度阈值个数, 与人员组数相同 - public int[] nSimilary = new int[MAX_GOURP_NUM]; // 每个人脸组的相似度阈值, 0-100 - - public NET_IN_SET_GROUPINFO_FOR_CHANNEL() - { + public static class NET_IN_SET_GROUPINFO_FOR_CHANNEL extends Structure { + public int dwSize; + public int nChannelID; // 通道号 + public int nGroupIdNum; // 人员组数 + public GROUP_ID[] szGroupIdArr = (GROUP_ID[]) new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID + public int nSimilaryNum; // 相似度阈值个数, 与人员组数相同 + public int[] nSimilary = new int[MAX_GOURP_NUM]; // 每个人脸组的相似度阈值, 0-100 + + public NET_IN_SET_GROUPINFO_FOR_CHANNEL() { this.dwSize = this.size(); } } - + // CLIENT_SetGroupInfoForChannel接口输出参数 - public static class NET_OUT_SET_GROUPINFO_FOR_CHANNEL extends Structure - { + public static class NET_OUT_SET_GROUPINFO_FOR_CHANNEL extends Structure { public int dwSize; - - public NET_OUT_SET_GROUPINFO_FOR_CHANNEL() - { + + public NET_OUT_SET_GROUPINFO_FOR_CHANNEL() { this.dwSize = this.size(); } } - + // 人脸查询状态信息回调函数, lAttachHandle是CLIENT_AttachFaceFindState的返回值 - public static class NET_CB_FACE_FIND_STATE extends Structure - { - public int dwSize; - public int nToken; // 视频浓缩任务数据库主键ID - public int nProgress; // 正常取值范围:0-100,-1,表示查询token不存在(当订阅一个不存在或结束的查询时) - public int nCurrentCount; // 目前符合查询条件的人脸数量 - - public NET_CB_FACE_FIND_STATE() - { + public static class NET_CB_FACE_FIND_STATE extends Structure { + public int dwSize; + public int nToken; // 视频浓缩任务数据库主键ID + public int nProgress; // 正常取值范围:0-100,-1,表示查询token不存在(当订阅一个不存在或结束的查询时) + public int nCurrentCount; // 目前符合查询条件的人脸数量 + + public NET_CB_FACE_FIND_STATE() { this.dwSize = this.size(); } } - + //CLIENT_AttachFaceFindState接口输入参数 - public static class NET_IN_FACE_FIND_STATE extends Structure - { - public int dwSize; //结构体大小,必须填写 - public int nTokenNum; //查询令牌数,为0时,表示订阅所有的查询任务 - public IntByReference nTokens; //查询令牌, 指向int的指针 - public StdCallCallback cbFaceFindState; //回调函数 fFaceFindState 回调 - public Pointer dwUser; //用户数据 - - public NET_IN_FACE_FIND_STATE() - { + public static class NET_IN_FACE_FIND_STATE extends Structure { + public int dwSize; //结构体大小,必须填写 + public int nTokenNum; //查询令牌数,为0时,表示订阅所有的查询任务 + public IntByReference nTokens; //查询令牌, 指向int的指针 + public StdCallCallback cbFaceFindState; //回调函数 fFaceFindState 回调 + public Pointer dwUser; //用户数据 + + public NET_IN_FACE_FIND_STATE() { this.dwSize = this.size(); } } - + //CLIENT_AttachFaceFindState接口输入参数 - public static class NET_OUT_FACE_FIND_STATE extends Structure - { + public static class NET_OUT_FACE_FIND_STATE extends Structure { public int dwSize; - - public NET_OUT_FACE_FIND_STATE() - { + + public NET_OUT_FACE_FIND_STATE() { this.dwSize = this.size(); } } - + // SDK全局日志打印信息 - public static class LOG_SET_PRINT_INFO extends Structure - { + public static class LOG_SET_PRINT_INFO extends Structure { public int dwSize; public int bSetFilePath;//是否重设日志路径, BOOL类型,取值0或1 public byte[] szLogFilePath = new byte[MAX_LOG_PATH_LEN];//日志路径(默认"./sdk_log/sdk_log.log") @@ -2986,59 +2879,52 @@ public interface NetSDKLib extends Library { public int nFileNum;//绕接日志文件个数(默认大小10), 类型为unsigned int public int bSetPrintStrategy;//是否重设日志打印输出策略, BOOL类型,取值0或1 public int nPrintStrategy;//日志输出策略,0:输出到文件(默认); 1:输出到窗口, 类型为unsigned int - - public LOG_SET_PRINT_INFO() - { + + public LOG_SET_PRINT_INFO() { this.dwSize = this.size(); } } - + // media文件查询条件 - public static class EM_FILE_QUERY_TYPE extends Structure - { - public static final int NET_FILE_QUERY_TRAFFICCAR = 0; //交通车辆信息 - public static final int NET_FILE_QUERY_ATM = 1; //ATM信息 - public static final int NET_FILE_QUERY_ATMTXN = 2; //ATM交易信息 - public static final int NET_FILE_QUERY_FACE = 3; //人脸信息 MEDIAFILE_FACERECOGNITION_PARAM 和 MEDIAFILE_FACERECOGNITION_INFO - public static final int NET_FILE_QUERY_FILE = 4; //文件信息对应 NET_IN_MEDIA_QUERY_FILE 和 NET_OUT_MEDIA_QUERY_FILE - public static final int NET_FILE_QUERY_TRAFFICCAR_EX = 5; //交通车辆信息,扩展NET_FILE_QUERY_TRAFFICCAR,支持更多的字段 - public static final int NET_FILE_QUERY_FACE_DETECTION = 6; //人脸检测事件信息MEDIAFILE_FACE_DETECTION_PARAM和 MEDIAFILE_FACE_DETECTION_INFO - } - + public static class EM_FILE_QUERY_TYPE extends Structure { + public static final int NET_FILE_QUERY_TRAFFICCAR = 0; //交通车辆信息 + public static final int NET_FILE_QUERY_ATM = 1; //ATM信息 + public static final int NET_FILE_QUERY_ATMTXN = 2; //ATM交易信息 + public static final int NET_FILE_QUERY_FACE = 3; //人脸信息 MEDIAFILE_FACERECOGNITION_PARAM 和 MEDIAFILE_FACERECOGNITION_INFO + public static final int NET_FILE_QUERY_FILE = 4; //文件信息对应 NET_IN_MEDIA_QUERY_FILE 和 NET_OUT_MEDIA_QUERY_FILE + public static final int NET_FILE_QUERY_TRAFFICCAR_EX = 5; //交通车辆信息,扩展NET_FILE_QUERY_TRAFFICCAR,支持更多的字段 + public static final int NET_FILE_QUERY_FACE_DETECTION = 6; //人脸检测事件信息MEDIAFILE_FACE_DETECTION_PARAM和 MEDIAFILE_FACE_DETECTION_INFO + } + // 查询跳转条件 - public static class NET_FINDING_JUMP_OPTION_INFO extends Structure - { + public static class NET_FINDING_JUMP_OPTION_INFO extends Structure { public int dwSize; public int nOffset;//查询结果偏移量,是相对于当前查询的第一条查询结果的位置偏移 - - public NET_FINDING_JUMP_OPTION_INFO() - { + + public NET_FINDING_JUMP_OPTION_INFO() { this.dwSize = this.size(); } } - + // 云台联动类型 - public static class CFG_LINK_TYPE extends Structure - { + public static class CFG_LINK_TYPE extends Structure { public static final int LINK_TYPE_NONE = 0; //无联动 public static final int LINK_TYPE_PRESET = 1; //联动预置点 public static final int LINK_TYPE_TOUR = 2; //联动巡航 public static final int LINK_TYPE_PATTERN = 3; //联动轨迹 - public static final int LINK_TYPE_ZOOM = 4; // 联动变倍 - public static final int LINK_TYPE_SINGLESCENE = 5; // 联动智能单场景 - public static final int LINK_TYPE_QUICKFOCUS = 6; // 热成像云台联动快速定位 + public static final int LINK_TYPE_ZOOM = 4; // 联动变倍 + public static final int LINK_TYPE_SINGLESCENE = 5; // 联动智能单场景 + public static final int LINK_TYPE_QUICKFOCUS = 6; // 热成像云台联动快速定位 } // 联动云台信息 - public static class CFG_PTZ_LINK extends Structure - { + public static class CFG_PTZ_LINK extends Structure { public int emType;//联动类型, 取值为CFG_LINK_TYPE中的值 public int nValue;//联动取值分别对应预置点号,巡航号等等 } // 联动云台信息扩展 - public static class CFG_PTZ_LINK_EX extends Structure - { + public static class CFG_PTZ_LINK_EX extends Structure { public int emType;//联动类型, 取值为CFG_LINK_TYPE中的值 public int nParam1;//联动参数1 public int nParam2;//联动参数2 @@ -3047,8 +2933,7 @@ public interface NetSDKLib extends Library { } // RGBA信息 - public static class CFG_RGBA extends Structure - { + public static class CFG_RGBA extends Structure { public int nRed; public int nGreen; public int nBlue; @@ -3056,63 +2941,58 @@ public interface NetSDKLib extends Library { } // 事件标题内容结构体 - public static class CFG_EVENT_TITLE extends Structure - { + public static class CFG_EVENT_TITLE extends Structure { public byte[] szText = new byte[MAX_CHANNELNAME_LEN]; public CFG_POLYGON stuPoint;//标题左上角坐标,采用0-8191相对坐标系 public CFG_SIZE stuSize;//标题的宽度和高度,采用0-8191相对坐标系,某项或者两项为0表示按照字体自适应宽高 public CFG_RGBA stuFrontColor;//前景颜色 public CFG_RGBA stuBackColor;//背景颜色 } - - public static class NET_CFG_EVENT_TITLE extends Structure - { + + public static class NET_CFG_EVENT_TITLE extends Structure { public byte[] szText = new byte[MAX_CHANNELNAME_LEN]; public NET_POINT stuPoint;//标题左上角坐标,采用0-8191相对坐标系 public NET_SIZE stuSize;//标题的宽度和高度,采用0-8191相对坐标系,某项或者两项为0表示按照字体自适应宽高 public CFG_RGBA stuFrontColor;//前景颜色 public CFG_RGBA stuBackColor;//背景颜色 } - - + + // 邮件附件类型 - public static class CFG_ATTACHMENT_TYPE extends Structure - { + public static class CFG_ATTACHMENT_TYPE extends Structure { public static final int ATTACHMENT_TYPE_PIC = 0; //图片附件 public static final int ATTACHMENT_TYPE_VIDEO = 1; //视频附件 public static final int ATTACHMENT_TYPE_NUM = 2; //附件类型总数 } // 分割模式 - public static class CFG_SPLITMODE extends Structure - { - public static final int SPLITMODE_1 =1;//1画面 - public static final int SPLITMODE_2 =2;//2画面 - public static final int SPLITMODE_4 =4;//4画面 - public static final int SPLITMODE_6 =6;//6画面 - public static final int SPLITMODE_8 =8;//8画面 - public static final int SPLITMODE_9 =9;//9画面 - public static final int SPLITMODE_3 = 10; // 3画面 + public static class CFG_SPLITMODE extends Structure { + public static final int SPLITMODE_1 = 1;//1画面 + public static final int SPLITMODE_2 = 2;//2画面 + public static final int SPLITMODE_4 = 4;//4画面 + public static final int SPLITMODE_6 = 6;//6画面 + public static final int SPLITMODE_8 = 8;//8画面 + public static final int SPLITMODE_9 = 9;//9画面 + public static final int SPLITMODE_3 = 10; // 3画面 public static final int SPLITMODE_3B = 11; // 3画面倒品 - public static final int SPLITMODE_12 =12;//12画面 - public static final int SPLITMODE_16 =16;//16画面 - public static final int SPLITMODE_20 =20;//20画面 - public static final int SPLITMODE_25 =25;//25画面 - public static final int SPLITMODE_36 =36;//36画面 - public static final int SPLITMODE_64 =64;//64画面 - public static final int SPLITMODE_144 =144;//144画面 - public static final int SPLITMODE_PIP =1000;//画中画分割模式基础值 - public static final int SPLITMODE_PIP1 =SPLITMODE_PIP+1;//画中画模式, 1个全屏大画面+1个小画面窗口 - public static final int SPLITMODE_PIP3 =SPLITMODE_PIP+3;//画中画模式, 1个全屏大画面+3个小画面窗口 - public static final int SPLITMODE_FREE =SPLITMODE_PIP*2;//自由开窗模式,可以自由创建、关闭窗口,自由设置窗口位置和Z轴次序 + public static final int SPLITMODE_12 = 12;//12画面 + public static final int SPLITMODE_16 = 16;//16画面 + public static final int SPLITMODE_20 = 20;//20画面 + public static final int SPLITMODE_25 = 25;//25画面 + public static final int SPLITMODE_36 = 36;//36画面 + public static final int SPLITMODE_64 = 64;//64画面 + public static final int SPLITMODE_144 = 144;//144画面 + public static final int SPLITMODE_PIP = 1000;//画中画分割模式基础值 + public static final int SPLITMODE_PIP1 = SPLITMODE_PIP + 1;//画中画模式, 1个全屏大画面+1个小画面窗口 + public static final int SPLITMODE_PIP3 = SPLITMODE_PIP + 3;//画中画模式, 1个全屏大画面+3个小画面窗口 + public static final int SPLITMODE_FREE = SPLITMODE_PIP * 2;//自由开窗模式,可以自由创建、关闭窗口,自由设置窗口位置和Z轴次序 public static final int SPLITMODE_COMPOSITE_1 = SPLITMODE_PIP * 3 + 1; // 融合屏成员1分割 public static final int SPLITMODE_COMPOSITE_4 = SPLITMODE_PIP * 3 + 4; // 融合屏成员4分割 - public static final int SPLITMODE_EOF = SPLITMODE_COMPOSITE_4+1; //结束标识 + public static final int SPLITMODE_EOF = SPLITMODE_COMPOSITE_4 + 1; //结束标识 } // 轮巡联动配置 - public static class CFG_TOURLINK extends Structure - { + public static class CFG_TOURLINK extends Structure { public int bEnable;//轮巡使能, BOOL类型,取值0或1 public int emSplitMode;//轮巡时的分割模式,取值范围为CFG_SPLITMODE中的值 public int[] nChannels = new int[MAX_VIDEO_CHANNEL_NUM];//轮巡通道号列表 @@ -3120,8 +3000,7 @@ public interface NetSDKLib extends Library { } // 门禁操作类型 - public static class EM_CFG_ACCESSCONTROLTYPE extends Structure - { + public static class EM_CFG_ACCESSCONTROLTYPE extends Structure { public static final int EM_CFG_ACCESSCONTROLTYPE_NULL = 0;//不做操作 public static final int EM_CFG_ACCESSCONTROLTYPE_AUTO = 1; //自动 public static final int EM_CFG_ACCESSCONTROLTYPE_OPEN = 2; //开门 @@ -3131,52 +3010,45 @@ public interface NetSDKLib extends Library { } // 邮件详细内容 - public static class CFG_MAIL_DETAIL extends Structure - { + public static class CFG_MAIL_DETAIL extends Structure { public int emAttachType;//附件类型, 取值范围为CFG_ATTACHMENT_TYPE中的值 public int nMaxSize;//文件大小上限,单位kB public int nMaxTimeLength;//最大录像时间长度,单位秒,对video有效 } // 语音呼叫发起方 - public static class EM_CALLER_TYPE extends Structure - { + public static class EM_CALLER_TYPE extends Structure { public static final int EM_CALLER_DEVICE = 0;//设备发起 } // 呼叫协议 - public static class EM_CALLER_PROTOCOL_TYPE extends Structure - { + public static class EM_CALLER_PROTOCOL_TYPE extends Structure { public static final int EM_CALLER_PROTOCOL_CELLULAR = 0;//手机方式 } // 语音呼叫联动信息 - public static class CFG_TALKBACK_INFO extends Structure - { + public static class CFG_TALKBACK_INFO extends Structure { public int bCallEnable;//语音呼叫使能, BOOL类型,取值0或1 public int emCallerType;//语音呼叫发起方, 取值范围为EM_CALLER_TYPE中的值 public int emCallerProtocol;//语音呼叫协议, 取值范围为EM_CALLER_PROTOCOL_TYPE中的值 } // 电话报警中心联动信息 - public static class CFG_PSTN_ALARM_SERVER extends Structure - { + public static class CFG_PSTN_ALARM_SERVER extends Structure { public int bNeedReport;//是否上报至电话报警中心, BOOL类型,取值0或1 public int nServerCount;//电话报警服务器个数 public byte[] byDestination = new byte[MAX_PSTN_SERVER_NUM];//上报的报警中心下标,详见配置CFG_PSTN_ALARM_CENTER_INFO } // 时间表信息 - public static class CFG_TIME_SCHEDULE extends Structure - { - public int bEnableHoliday; //是否支持节假日配置,默认为不支持,除非获取配置后返回为TRUE,不要使能假日配置, BOOL类型,取值0或1 - public TIME_SECTION_WEEK_DAY_6[] stuTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_6[])new TIME_SECTION_WEEK_DAY_6().toArray(MAX_TIME_SCHEDULE_NUM);//第一维前7个元素对应每周7天,第8个元素对应节假日,每天最多6个时间段 + public static class CFG_TIME_SCHEDULE extends Structure { + public int bEnableHoliday; //是否支持节假日配置,默认为不支持,除非获取配置后返回为TRUE,不要使能假日配置, BOOL类型,取值0或1 + public TIME_SECTION_WEEK_DAY_6[] stuTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_6[]) new TIME_SECTION_WEEK_DAY_6().toArray(MAX_TIME_SCHEDULE_NUM);//第一维前7个元素对应每周7天,第8个元素对应节假日,每天最多6个时间段 } // 报警联动信息 - public static class CFG_ALARM_MSG_HANDLE extends Structure - { + public static class CFG_ALARM_MSG_HANDLE extends Structure { //能力 public byte abRecordMask;//类型bool, 取值0或者1 public byte abRecordEnable;//类型bool, 取值0或者1 @@ -3231,7 +3103,7 @@ public interface NetSDKLib extends Library { public int nAlarmOutLatch;//报警输出延时时间(秒) public int[] dwExAlarmOutMask = new int[MAX_CHANNEL_COUNT];//扩展报警输出通道掩码 public int bExAlarmOutEn;//扩展报警输出使能, BOOL类型,取值0或1 - public CFG_PTZ_LINK [] stuPtzLink = (CFG_PTZ_LINK [])new CFG_PTZ_LINK().toArray(MAX_VIDEO_CHANNEL_NUM);//云台联动项 + public CFG_PTZ_LINK[] stuPtzLink = (CFG_PTZ_LINK[]) new CFG_PTZ_LINK().toArray(MAX_VIDEO_CHANNEL_NUM);//云台联动项 public int bPtzLinkEn;//云台联动使能, BOOL类型,取值0或1 public int[] dwTourMask = new int[MAX_CHANNEL_COUNT];//轮询通道掩码 public int bTourEnable;//轮询使能, BOOL类型,取值0或1 @@ -3255,17 +3127,17 @@ public interface NetSDKLib extends Library { public int nTourSplit;//轮巡时的分割模式0:1画面; public int bSnapshotTitleEn;//是否叠加图片标题, BOOL类型,取值0或1 public int nPtzLinkExNum;//云台配置数 - public CFG_PTZ_LINK_EX[] stuPtzLinkEx = (CFG_PTZ_LINK_EX[])new CFG_PTZ_LINK_EX().toArray(MAX_VIDEO_CHANNEL_NUM);//扩展云台信息 + public CFG_PTZ_LINK_EX[] stuPtzLinkEx = (CFG_PTZ_LINK_EX[]) new CFG_PTZ_LINK_EX().toArray(MAX_VIDEO_CHANNEL_NUM);//扩展云台信息 public int nSnapTitleNum;//图片标题内容数 - public CFG_EVENT_TITLE[] stuSnapshotTitle = (CFG_EVENT_TITLE[])new CFG_EVENT_TITLE().toArray(MAX_VIDEO_CHANNEL_NUM);//图片标题内容 + public CFG_EVENT_TITLE[] stuSnapshotTitle = (CFG_EVENT_TITLE[]) new CFG_EVENT_TITLE().toArray(MAX_VIDEO_CHANNEL_NUM);//图片标题内容 public CFG_MAIL_DETAIL stuMailDetail;//邮件详细内容 public int bVideoTitleEn;//是否叠加视频标题,主要指主码流, BOOL类型,取值0或1 public int nVideoTitleNum;//视频标题内容数目 - public CFG_EVENT_TITLE[] stuVideoTitle = (CFG_EVENT_TITLE[])new CFG_EVENT_TITLE().toArray(MAX_VIDEO_CHANNEL_NUM);//视频标题内容 + public CFG_EVENT_TITLE[] stuVideoTitle = (CFG_EVENT_TITLE[]) new CFG_EVENT_TITLE().toArray(MAX_VIDEO_CHANNEL_NUM);//视频标题内容 public int nTourNum;//轮询联动数目 - public CFG_TOURLINK[] stuTour = (CFG_TOURLINK[])new CFG_TOURLINK().toArray(MAX_VIDEO_CHANNEL_NUM);//轮询联动配置 + public CFG_TOURLINK[] stuTour = (CFG_TOURLINK[]) new CFG_TOURLINK().toArray(MAX_VIDEO_CHANNEL_NUM);//轮询联动配置 public int nDBKeysNum;//指定数据库关键字的有效数 - public byte[] szDBKeys = new byte[MAX_DBKEY_NUM*MAX_CHANNELNAME_LEN];//指定事件详细信息里需要写到数据库的关键字 + public byte[] szDBKeys = new byte[MAX_DBKEY_NUM * MAX_CHANNELNAME_LEN];//指定事件详细信息里需要写到数据库的关键字 public byte[] byJpegSummary = new byte[MAX_SUMMARY_LEN];//叠加到JPEG图片的摘要信息 public int bFlashEnable;//是否使能补光灯, BOOL类型,取值0或1 public int nFlashLatch;//补光灯延时时间(秒),延时时间范围:10,300] @@ -3286,469 +3158,450 @@ public interface NetSDKLib extends Library { public byte abAlarmBellLatch;//bool类型,取值0或1 public int nAlarmBellLatch;//警号输出延时时间(10-300秒) } - + // 报警联动信息 - public static class NET_ALARM_MSG_HANDLE extends Structure - { - //能力 - public byte abChannelCount; // 是否支持通道数量 bool类型,取值0或1 - public byte abAlarmOutCount; // 是否支持报警输出数量 bool类型,取值0或1 - - public byte abRecordMask; // 是否支持录像通道 bool类型,取值0或1 - public byte abRecordEnable; // 是否支持录像使能 bool类型,取值0或1 - public byte abRecordLatch; // 是否支持录像延时 bool类型,取值0或1 - - public byte abAlarmOutMask; // 是否支持报警输出通道 bool类型,取值0或1 - - public byte abAlarmOutEn; // 是否支持报警输出使能 bool类型,取值0或1 - public byte abAlarmOutLatch; // 是否支持报警输出延时 bool类型,取值0或1 - public byte abExAlarmOutMask; // 是否支持扩展报警输出通道 bool类型,取值0或1 - public byte abExAlarmOutEn; // 是否支持扩展报警输出使能 bool类型,取值0或1 - - public byte abPtzLinkEn; // 是否支持云台联动使能 bool类型,取值0或1 - public byte abTourMask; // 是否支持轮巡掩码 bool类型,取值0或1 - public byte abTourEnable; // 是否支持轮巡使能 bool类型,取值0或1 - - public byte abSnapshot; // 是否支持快照 bool类型,取值0或1 - public byte abSnapshotEn; // 是否支持快照使能 bool类型,取值0或1 - public byte abSnapshotPeriod; // 是否支持帧间隔,每隔多少帧抓一张图片 bool类型,取值0或1 - public byte abSnapshotTimes; // 是否支持连拍次数 bool类型,取值0或1 - public byte abTipEnable; // 是否支持本地消息框提示 bool类型,取值0或1 - - public byte abMailEnable; // 是否支持发送邮件 bool类型,取值0或1 - public byte abMessageEnable; // 是否支持上传到报警中心服务器 bool类型,取值0或1 - public byte abBeepEnable; // 是否支持蜂鸣 bool类型,取值0或1 - public byte abVoiceEnable; // 是否支持语音提示 bool类型,取值0或1 - - public byte abMatrixMask; // 是否支持联动视频矩阵掩码 bool类型,取值0或1 - public byte abMatrixEnable; // 是否支持联动视频矩阵使能 bool类型,取值0或1 - public byte abEventLatch; // 是否支持联动开始延时时间 bool类型,取值0或1 - public byte abLogEnable; // 是否支持日志使能 bool类型,取值0或1 - - public byte abDelay; // 是否支持报警延时 bool类型,取值0或1 - public byte abVideoMessageEn; // 是否支持叠加提示字幕到视频 bool类型,取值0或1 - public byte abMMSEnable; // 是否支持发送短消息 bool类型,取值0或1 - public byte abMessageToNetEn; // 是否支持消息上传给网络使能 bool类型,取值0或1 - public byte abTourSplit; // 是否支持换面分割轮巡 bool类型,取值0或1 - - public byte abSnapshotTitleEn; // 是否支持叠加图片标题使能 bool类型,取值0或1 - public byte abPtzLinkEx; // 是否支持云台联动使能 bool类型,取值0或1 - public byte abSnapshotTitle; // 是否支持叠加图片标题 bool类型,取值0或1 - public byte abMailDetail; // 是否支持邮件详情 bool类型,取值0或1 - public byte abVideoTitleEn; // 是否支持叠加视频标题,主要指主码流 bool类型,取值0或1 - public byte abVideoTitle; // 是否支持视频标题内容 bool类型,取值0或1 - - public byte abTour; // 是否支持轮巡 bool类型,取值0或1 - public byte abDBKeys; // 是否支持指定事件详细信息里需要写到数据库的关键字 bool类型,取值0或1 - public byte abJpegSummary; // 是否支持叠加到JPEG图片的摘要信息 bool类型,取值0或1 - public byte abFlashEn; // 是否支持补光灯使能 bool类型,取值0或1 - public byte abFlashLatch; // 是否支持补光灯延时bool类型,取值0或1 - - public byte abAudioFileName; // 是否支持联动语音文件绝对路径 bool类型,取值0或1 - public byte abAlarmBellEn; // 是否支持警号使能 bool类型,取值0或1 - public byte abAccessControlEn; // 是否支持门禁控制使能 bool类型,取值0或1 - public byte abAccessControl; // 是否支持门禁控制 bool类型,取值0或1 - - public byte abTalkBack; // 是否支持语音呼叫 bool类型,取值0或1 - public byte abPSTNAlarmServer; // 是否支持电话报警中心 bool类型,取值0或1 - public byte abAlarmBellLatch; // 是否支持警号输出延时 bool类型,取值0或1 - - public byte abPlayTimes; // 是否支持联动语音播放次数 bool类型,取值0或1 - public byte abReboot; // 是否支持重启使能 bool类型,取值0或1 - public byte abBeepTime; // 是否支持蜂鸣时长 bool类型,取值0或1 - - public byte[] byReserved = new byte[68]; // 能力保留字段 - - //信息 - public CFG_TIME_SCHEDULE stuTimeSection; // 事件响应时间表 - - public int nChannelCount; // 设备的视频通道数 - public int nAlarmOutCount; // 设备的报警输出个数 - - public int[] dwRecordMask = new int[MAX_CHANNEL_COUNT]; // 录像通道掩码(按位) - public int bRecordEnable; // 录像使能 - public int nRecordLatch; // 录像延时时间(秒) - public int[] dwAlarmOutMask = new int[MAX_CHANNEL_COUNT]; // 报警输出通道掩码 - - public int bAlarmOutEn; // 报警输出使能 - public int nAlarmOutLatch; // 报警输出延时时间(秒) - public int[] dwExAlarmOutMask = new int[MAX_CHANNEL_COUNT]; // 扩展报警输出通道掩码 - public int bExAlarmOutEn; // 扩展报警输出使能 - - public CFG_PTZ_LINK[] stuPtzLink = (CFG_PTZ_LINK [])new CFG_PTZ_LINK().toArray(MAX_VIDEO_CHANNEL_NUM); // 云台联动项 //这个参数并没有被解析,应该是被扩展替代 - public int bPtzLinkEn; // 云台联动使能 - public int[] dwTourMask = new int[MAX_CHANNEL_COUNT]; // 轮询通道掩码 - public int bTourEnable; // 轮询使能 - - public int[] dwSnapshot = new int[MAX_CHANNEL_COUNT]; // 快照通道号掩码 - public int bSnapshotEn; // 快照使能 - public int nSnapshotPeriod; // 连拍周期(秒) - public int nSnapshotTimes; // 连拍次数 - public int bTipEnable; // 本地消息框提示 - - public int bMailEnable; // 发送邮件,如果有图片,作为附件 - public int bMessageEnable; // 上传到报警服务器 - public int bBeepEnable; // 蜂鸣 - - public int bVoiceEnable; // 语音提示 - public int nPlayTimes; // 联动语音播放次数bVoiceEnable=TRUE时生效 - - public int[] dwMatrixMask = new int[MAX_CHANNEL_COUNT]; // 联动视频矩阵通道掩码 - public int bMatrixEnable; // 联动视频矩阵 - public int nEventLatch; // 联动开始延时时间(秒),0-15 - public int bLogEnable; // 是否记录日志 - - public int nDelay; // 设置时先延时再生效,单位为秒 - public int bVideoMessageEn; // 叠加提示字幕到视频。叠加的字幕包括事件类型,通道号,秒计时。 - public int bMMSEnable; // 发送彩信使能 - public int bMessageToNetEn; // 消息上传给网络使能 - public int nTourSplit; // 轮巡时的分割模式 0: 1画面; 1: 8画面 - - public int bSnapshotTitleEn; // 是否叠加图片标题 - public int nPtzLinkExNum; // 云台配置数 - public CFG_PTZ_LINK_EX[] stuPtzLinkEx = (CFG_PTZ_LINK_EX [])new CFG_PTZ_LINK_EX().toArray(MAX_VIDEO_CHANNEL_NUM); // 扩展云台信息 - public int nSnapTitleNum; // 图片标题内容数 - public NET_CFG_EVENT_TITLE[] stuSnapshotTitle = (NET_CFG_EVENT_TITLE [])new NET_CFG_EVENT_TITLE().toArray(MAX_VIDEO_CHANNEL_NUM); // 图片标题内容 - public CFG_MAIL_DETAIL stuMailDetail; // 邮件详细内容 - public int bVideoTitleEn; // 是否叠加视频标题,主要指主码流 - public int nVideoTitleNum; // 视频标题内容数目 - public NET_CFG_EVENT_TITLE[] stuVideoTitle = (NET_CFG_EVENT_TITLE [])new NET_CFG_EVENT_TITLE().toArray(MAX_VIDEO_CHANNEL_NUM); // 视频标题内容 - - public int nTourNum; // 轮询联动数目 - public CFG_TOURLINK[] stuTour = (CFG_TOURLINK [])new CFG_TOURLINK().toArray(MAX_VIDEO_CHANNEL_NUM);// 轮询联动配置 - public int nDBKeysNum; // 指定数据库关键字的有效数 - public byte[] szDBKeys = new byte[MAX_DBKEY_NUM * MAX_CHANNELNAME_LEN]; // 指定事件详细信息里需要写到数据库的关键字 - public byte[] byJpegSummary = new byte[MAX_SUMMARY_LEN]; // 叠加到JPEG图片的摘要信息 - public int bFlashEnable; // 是否使能补光灯 - public int nFlashLatch; // 补光灯延时时间(秒),延时时间范围:[10,300] - - public byte[] szAudioFileName = new byte[MAX_PATH]; // 联动语音文件绝对路径 - public int bAlarmBellEn; // 警号使能 - public int bAccessControlEn; // 门禁使能 - public int dwAccessControl; // 门禁组数 - public int[] emAccessControlType = new int[MAX_ACCESSCONTROL_NUM]; // 门禁联动操作信息,详见EM_CFG_ACCESSCONTROLTYPE - - public CFG_TALKBACK_INFO stuTalkback; // 语音呼叫联动信息 - public CFG_PSTN_ALARM_SERVER stuPSTNAlarmServer; // 电话报警中心联动信息 - public int nAlarmBellLatch; // 警号输出延时时间(10-300秒) - - public int bReboot; //重启使能TRUE:使能 FALSE:不使能 - public int nBeepTime; //蜂鸣时长最大值为3600,0代表持续蜂鸣 - public byte[] byReserve = new byte[2048]; // 预留字节 + public static class NET_ALARM_MSG_HANDLE extends Structure { + //能力 + public byte abChannelCount; // 是否支持通道数量 bool类型,取值0或1 + public byte abAlarmOutCount; // 是否支持报警输出数量 bool类型,取值0或1 + + public byte abRecordMask; // 是否支持录像通道 bool类型,取值0或1 + public byte abRecordEnable; // 是否支持录像使能 bool类型,取值0或1 + public byte abRecordLatch; // 是否支持录像延时 bool类型,取值0或1 + + public byte abAlarmOutMask; // 是否支持报警输出通道 bool类型,取值0或1 + + public byte abAlarmOutEn; // 是否支持报警输出使能 bool类型,取值0或1 + public byte abAlarmOutLatch; // 是否支持报警输出延时 bool类型,取值0或1 + public byte abExAlarmOutMask; // 是否支持扩展报警输出通道 bool类型,取值0或1 + public byte abExAlarmOutEn; // 是否支持扩展报警输出使能 bool类型,取值0或1 + + public byte abPtzLinkEn; // 是否支持云台联动使能 bool类型,取值0或1 + public byte abTourMask; // 是否支持轮巡掩码 bool类型,取值0或1 + public byte abTourEnable; // 是否支持轮巡使能 bool类型,取值0或1 + + public byte abSnapshot; // 是否支持快照 bool类型,取值0或1 + public byte abSnapshotEn; // 是否支持快照使能 bool类型,取值0或1 + public byte abSnapshotPeriod; // 是否支持帧间隔,每隔多少帧抓一张图片 bool类型,取值0或1 + public byte abSnapshotTimes; // 是否支持连拍次数 bool类型,取值0或1 + public byte abTipEnable; // 是否支持本地消息框提示 bool类型,取值0或1 + + public byte abMailEnable; // 是否支持发送邮件 bool类型,取值0或1 + public byte abMessageEnable; // 是否支持上传到报警中心服务器 bool类型,取值0或1 + public byte abBeepEnable; // 是否支持蜂鸣 bool类型,取值0或1 + public byte abVoiceEnable; // 是否支持语音提示 bool类型,取值0或1 + + public byte abMatrixMask; // 是否支持联动视频矩阵掩码 bool类型,取值0或1 + public byte abMatrixEnable; // 是否支持联动视频矩阵使能 bool类型,取值0或1 + public byte abEventLatch; // 是否支持联动开始延时时间 bool类型,取值0或1 + public byte abLogEnable; // 是否支持日志使能 bool类型,取值0或1 + + public byte abDelay; // 是否支持报警延时 bool类型,取值0或1 + public byte abVideoMessageEn; // 是否支持叠加提示字幕到视频 bool类型,取值0或1 + public byte abMMSEnable; // 是否支持发送短消息 bool类型,取值0或1 + public byte abMessageToNetEn; // 是否支持消息上传给网络使能 bool类型,取值0或1 + public byte abTourSplit; // 是否支持换面分割轮巡 bool类型,取值0或1 + + public byte abSnapshotTitleEn; // 是否支持叠加图片标题使能 bool类型,取值0或1 + public byte abPtzLinkEx; // 是否支持云台联动使能 bool类型,取值0或1 + public byte abSnapshotTitle; // 是否支持叠加图片标题 bool类型,取值0或1 + public byte abMailDetail; // 是否支持邮件详情 bool类型,取值0或1 + public byte abVideoTitleEn; // 是否支持叠加视频标题,主要指主码流 bool类型,取值0或1 + public byte abVideoTitle; // 是否支持视频标题内容 bool类型,取值0或1 + + public byte abTour; // 是否支持轮巡 bool类型,取值0或1 + public byte abDBKeys; // 是否支持指定事件详细信息里需要写到数据库的关键字 bool类型,取值0或1 + public byte abJpegSummary; // 是否支持叠加到JPEG图片的摘要信息 bool类型,取值0或1 + public byte abFlashEn; // 是否支持补光灯使能 bool类型,取值0或1 + public byte abFlashLatch; // 是否支持补光灯延时bool类型,取值0或1 + + public byte abAudioFileName; // 是否支持联动语音文件绝对路径 bool类型,取值0或1 + public byte abAlarmBellEn; // 是否支持警号使能 bool类型,取值0或1 + public byte abAccessControlEn; // 是否支持门禁控制使能 bool类型,取值0或1 + public byte abAccessControl; // 是否支持门禁控制 bool类型,取值0或1 + + public byte abTalkBack; // 是否支持语音呼叫 bool类型,取值0或1 + public byte abPSTNAlarmServer; // 是否支持电话报警中心 bool类型,取值0或1 + public byte abAlarmBellLatch; // 是否支持警号输出延时 bool类型,取值0或1 + + public byte abPlayTimes; // 是否支持联动语音播放次数 bool类型,取值0或1 + public byte abReboot; // 是否支持重启使能 bool类型,取值0或1 + public byte abBeepTime; // 是否支持蜂鸣时长 bool类型,取值0或1 + + public byte[] byReserved = new byte[68]; // 能力保留字段 + + //信息 + public CFG_TIME_SCHEDULE stuTimeSection; // 事件响应时间表 + + public int nChannelCount; // 设备的视频通道数 + public int nAlarmOutCount; // 设备的报警输出个数 + + public int[] dwRecordMask = new int[MAX_CHANNEL_COUNT]; // 录像通道掩码(按位) + public int bRecordEnable; // 录像使能 + public int nRecordLatch; // 录像延时时间(秒) + public int[] dwAlarmOutMask = new int[MAX_CHANNEL_COUNT]; // 报警输出通道掩码 + + public int bAlarmOutEn; // 报警输出使能 + public int nAlarmOutLatch; // 报警输出延时时间(秒) + public int[] dwExAlarmOutMask = new int[MAX_CHANNEL_COUNT]; // 扩展报警输出通道掩码 + public int bExAlarmOutEn; // 扩展报警输出使能 + + public CFG_PTZ_LINK[] stuPtzLink = (CFG_PTZ_LINK[]) new CFG_PTZ_LINK().toArray(MAX_VIDEO_CHANNEL_NUM); // 云台联动项 //这个参数并没有被解析,应该是被扩展替代 + public int bPtzLinkEn; // 云台联动使能 + public int[] dwTourMask = new int[MAX_CHANNEL_COUNT]; // 轮询通道掩码 + public int bTourEnable; // 轮询使能 + + public int[] dwSnapshot = new int[MAX_CHANNEL_COUNT]; // 快照通道号掩码 + public int bSnapshotEn; // 快照使能 + public int nSnapshotPeriod; // 连拍周期(秒) + public int nSnapshotTimes; // 连拍次数 + public int bTipEnable; // 本地消息框提示 + + public int bMailEnable; // 发送邮件,如果有图片,作为附件 + public int bMessageEnable; // 上传到报警服务器 + public int bBeepEnable; // 蜂鸣 + + public int bVoiceEnable; // 语音提示 + public int nPlayTimes; // 联动语音播放次数bVoiceEnable=TRUE时生效 + + public int[] dwMatrixMask = new int[MAX_CHANNEL_COUNT]; // 联动视频矩阵通道掩码 + public int bMatrixEnable; // 联动视频矩阵 + public int nEventLatch; // 联动开始延时时间(秒),0-15 + public int bLogEnable; // 是否记录日志 + + public int nDelay; // 设置时先延时再生效,单位为秒 + public int bVideoMessageEn; // 叠加提示字幕到视频。叠加的字幕包括事件类型,通道号,秒计时。 + public int bMMSEnable; // 发送彩信使能 + public int bMessageToNetEn; // 消息上传给网络使能 + public int nTourSplit; // 轮巡时的分割模式 0: 1画面; 1: 8画面 + + public int bSnapshotTitleEn; // 是否叠加图片标题 + public int nPtzLinkExNum; // 云台配置数 + public CFG_PTZ_LINK_EX[] stuPtzLinkEx = (CFG_PTZ_LINK_EX[]) new CFG_PTZ_LINK_EX().toArray(MAX_VIDEO_CHANNEL_NUM); // 扩展云台信息 + public int nSnapTitleNum; // 图片标题内容数 + public NET_CFG_EVENT_TITLE[] stuSnapshotTitle = (NET_CFG_EVENT_TITLE[]) new NET_CFG_EVENT_TITLE().toArray(MAX_VIDEO_CHANNEL_NUM); // 图片标题内容 + public CFG_MAIL_DETAIL stuMailDetail; // 邮件详细内容 + public int bVideoTitleEn; // 是否叠加视频标题,主要指主码流 + public int nVideoTitleNum; // 视频标题内容数目 + public NET_CFG_EVENT_TITLE[] stuVideoTitle = (NET_CFG_EVENT_TITLE[]) new NET_CFG_EVENT_TITLE().toArray(MAX_VIDEO_CHANNEL_NUM); // 视频标题内容 + + public int nTourNum; // 轮询联动数目 + public CFG_TOURLINK[] stuTour = (CFG_TOURLINK[]) new CFG_TOURLINK().toArray(MAX_VIDEO_CHANNEL_NUM);// 轮询联动配置 + public int nDBKeysNum; // 指定数据库关键字的有效数 + public byte[] szDBKeys = new byte[MAX_DBKEY_NUM * MAX_CHANNELNAME_LEN]; // 指定事件详细信息里需要写到数据库的关键字 + public byte[] byJpegSummary = new byte[MAX_SUMMARY_LEN]; // 叠加到JPEG图片的摘要信息 + public int bFlashEnable; // 是否使能补光灯 + public int nFlashLatch; // 补光灯延时时间(秒),延时时间范围:[10,300] + + public byte[] szAudioFileName = new byte[MAX_PATH]; // 联动语音文件绝对路径 + public int bAlarmBellEn; // 警号使能 + public int bAccessControlEn; // 门禁使能 + public int dwAccessControl; // 门禁组数 + public int[] emAccessControlType = new int[MAX_ACCESSCONTROL_NUM]; // 门禁联动操作信息,详见EM_CFG_ACCESSCONTROLTYPE + + public CFG_TALKBACK_INFO stuTalkback; // 语音呼叫联动信息 + public CFG_PSTN_ALARM_SERVER stuPSTNAlarmServer; // 电话报警中心联动信息 + public int nAlarmBellLatch; // 警号输出延时时间(10-300秒) + + public int bReboot; //重启使能TRUE:使能 FALSE:不使能 + public int nBeepTime; //蜂鸣时长最大值为3600,0代表持续蜂鸣 + public byte[] byReserve = new byte[2048]; // 预留字节 } // 时间段信息 - public static class CFG_TIME_SECTION extends Structure - { - public int dwRecordMask;//录像掩码,按位分别为动态检测录像、报警录像、定时录像、Bit3~Bit15保留、Bit16动态检测抓图、Bit17报警抓图、Bit18定时抓图 - public int nBeginHour; - public int nBeginMin; - public int nBeginSec; - public int nEndHour; - public int nEndMin; - public int nEndSec; - + public static class CFG_TIME_SECTION extends Structure { + public int dwRecordMask;//录像掩码,按位分别为动态检测录像、报警录像、定时录像、Bit3~Bit15保留、Bit16动态检测抓图、Bit17报警抓图、Bit18定时抓图 + public int nBeginHour; + public int nBeginMin; + public int nBeginSec; + public int nEndHour; + public int nEndMin; + public int nEndSec; + public String startTime() { - return nBeginHour + ":" + nBeginMin + ":" + nBeginSec; + return nBeginHour + ":" + nBeginMin + ":" + nBeginSec; } - + public String endTime() { - return nEndHour + ":" + nEndMin + ":" + nEndSec; + return nEndHour + ":" + nEndMin + ":" + nEndSec; } } // 事件类型EVENT_IVS_FACERECOGNITION(人脸识别)对应的规则配置 - public static class CFG_FACERECOGNITION_INFO extends Structure - { - // 信息 - public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 - public byte bRuleEnable; // 规则使能,bool类型,取值0或1 - public byte[] bReserved = new byte[2]; // 保留字段 - public int nObjectTypeNum; // 相应物体类型个数 - public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE*MAX_NAME_LEN];//相应物体类型列表 - public int nPtzPresetId; // 云台预置点编号0~65535 - public byte bySimilarity; // 相似度,必须大于该相识度才报告(1~100) - public byte byAccuracy; // 识别精度(取值1~10,随着值增大,检测精度提高,检测速度下降。最小值为1表示检测速度优先,最大值为10表示检测精度优先) - public byte byMode; // 对比模式,0-正常,1-指定人脸区域组合, - public byte byImportantRank; // 查询重要等级大于等于此等级的人员(1~10,数值越高越重要) - public int nAreaNum; // 区域数 - public byte[] byAreas = new byte[8]; // 人脸区域组合,0-眉毛,1-眼睛,2-鼻子,3-嘴巴,4-脸颊(此参数在对比模式为1时有效) - public int nMaxCandidate; // 报告的最大匹配图片个数 - public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 - public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_10[])new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM); // 事件响应时间段 - } - + public static class CFG_FACERECOGNITION_INFO extends Structure { + // 信息 + public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 + public byte bRuleEnable; // 规则使能,bool类型,取值0或1 + public byte[] bReserved = new byte[2]; // 保留字段 + public int nObjectTypeNum; // 相应物体类型个数 + public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE * MAX_NAME_LEN];//相应物体类型列表 + public int nPtzPresetId; // 云台预置点编号0~65535 + public byte bySimilarity; // 相似度,必须大于该相识度才报告(1~100) + public byte byAccuracy; // 识别精度(取值1~10,随着值增大,检测精度提高,检测速度下降。最小值为1表示检测速度优先,最大值为10表示检测精度优先) + public byte byMode; // 对比模式,0-正常,1-指定人脸区域组合, + public byte byImportantRank; // 查询重要等级大于等于此等级的人员(1~10,数值越高越重要) + public int nAreaNum; // 区域数 + public byte[] byAreas = new byte[8]; // 人脸区域组合,0-眉毛,1-眼睛,2-鼻子,3-嘴巴,4-脸颊(此参数在对比模式为1时有效) + public int nMaxCandidate; // 报告的最大匹配图片个数 + public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 + public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_10[]) new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM); // 事件响应时间段 + } + // 事件类型EVENT_IVSS_FACEATTRIBUTE(IVSS人脸检测事件) 对应的规则配置 - public static class CFG_FACEATTRIBUTE_INFO extends Structure - { - // 信息 - public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 - public byte bRuleEnable; // 规则使能,bool类型,取值0或1 - public byte[] bReserved = new byte[3]; // 保留字 - public int nObjectTypeNum; // 相应物体类型个数 - public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE*MAX_NAME_LEN]; // 相应物体类型列表 - public int nDetectRegionPoint; // 检测区顶点数 - public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区 - public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 - public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_10[])new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM);// 事件响应时间段 - public int nPtzPresetId; // 云台预置点编号 0~65535 - public int nMinDuration; // 最短触发时间,单位:秒 - public int nTriggerTargetsNumber; // 触发报警的人脸个数 - public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测 - public int nReportInterval; // 重复报警间隔,单位:秒,[0,600](等于0表示不重复报警) - public int bSizeFileter; // 规则特定的尺寸过滤器是否有效,bool类型 取值0或1 - public CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器 - public int nFaceFeatureNum; // 需要检测的人脸属性个数 - public int[] emFaceFeatureType = new int[MAX_FEATURE_LIST_SIZE]; // 需检测的人脸属性, 参考 EM_FACEFEATURE_TYPE + public static class CFG_FACEATTRIBUTE_INFO extends Structure { + // 信息 + public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 + public byte bRuleEnable; // 规则使能,bool类型,取值0或1 + public byte[] bReserved = new byte[3]; // 保留字 + public int nObjectTypeNum; // 相应物体类型个数 + public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE * MAX_NAME_LEN]; // 相应物体类型列表 + public int nDetectRegionPoint; // 检测区顶点数 + public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区 + public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 + public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_10[]) new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM);// 事件响应时间段 + public int nPtzPresetId; // 云台预置点编号 0~65535 + public int nMinDuration; // 最短触发时间,单位:秒 + public int nTriggerTargetsNumber; // 触发报警的人脸个数 + public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测 + public int nReportInterval; // 重复报警间隔,单位:秒,[0,600](等于0表示不重复报警) + public int bSizeFileter; // 规则特定的尺寸过滤器是否有效,bool类型 取值0或1 + public CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器 + public int nFaceFeatureNum; // 需要检测的人脸属性个数 + public int[] emFaceFeatureType = new int[MAX_FEATURE_LIST_SIZE]; // 需检测的人脸属性, 参考 EM_FACEFEATURE_TYPE } // 联动的布控组 - public static class CFG_LINKGROUP_INFO extends Structure - { - public byte bEnable; // 布控组是否启用,bool类型 取值0或1 - public byte[] szGroupID = new byte[MAX_GROUP_ID_LEN]; // 布控组ID - public byte bySimilarity; // 相似度阈值 - public byte[] szColorName = new byte[MAX_COLOR_NAME_LEN]; // 事件触发时绘制人脸框的颜色 - public byte bShowTitle; // 事件触发时规则框上是否显示报警标题,bool类型 取值0或1 - public byte bShowPlate; // 事件触发时是否显示比对面板 ,bool类型 取值0或1 - public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 + public static class CFG_LINKGROUP_INFO extends Structure { + public byte bEnable; // 布控组是否启用,bool类型 取值0或1 + public byte[] szGroupID = new byte[MAX_GROUP_ID_LEN]; // 布控组ID + public byte bySimilarity; // 相似度阈值 + public byte[] szColorName = new byte[MAX_COLOR_NAME_LEN]; // 事件触发时绘制人脸框的颜色 + public byte bShowTitle; // 事件触发时规则框上是否显示报警标题,bool类型 取值0或1 + public byte bShowPlate; // 事件触发时是否显示比对面板 ,bool类型 取值0或1 + public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 } // 陌生人布防模式 - public static class CFG_STRANGERMODE_INFO extends Structure - { - public byte bEnable; // 模式是否启用,bool类型 取值0或1 - public byte[] szColorHex = new byte[MAX_COLOR_HEX_LEN]; // 事件触发时绘制人脸框的颜色 - public byte bShowTitle; // 事件触发时规则框上是否显示报警标题,bool类型 取值0或1 - public byte bShowPlate; // 事件触发时是否显示比对面板,bool类型 取值0或1 - public byte bReserved; // 保留字段 - public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 + public static class CFG_STRANGERMODE_INFO extends Structure { + public byte bEnable; // 模式是否启用,bool类型 取值0或1 + public byte[] szColorHex = new byte[MAX_COLOR_HEX_LEN]; // 事件触发时绘制人脸框的颜色 + public byte bShowTitle; // 事件触发时规则框上是否显示报警标题,bool类型 取值0或1 + public byte bShowPlate; // 事件触发时是否显示比对面板,bool类型 取值0或1 + public byte bReserved; // 保留字段 + public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 } // 事件类型EVENT_IVS_FACEANALYSIS(人脸分析事件) 对应的规则配置 - public static class CFG_FACEANALYSIS_INFO extends Structure - { - public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 - public byte bRuleEnable; // 规则使能,bool类型,取值0或1 - public byte[] bReserved = new byte[3]; // 保留字 - public int nObjectTypeNum; // 相应物体类型个数 - public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE*MAX_NAME_LEN]; // 相应物体类型列表 - public int nDetectRegionPoint; // 检测区顶点数 - public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区 - public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 - public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_10[])new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM);// 事件响应时间段 - public int nPtzPresetId; // 云台预置点编号 0~65535 - public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测 - public int nLinkGroupNum; // 联动布控个数 - public CFG_LINKGROUP_INFO[] stuLinkGroupArr = (CFG_LINKGROUP_INFO[])new CFG_LINKGROUP_INFO().toArray(MAX_LINK_GROUP_NUM); // 联动的布控组 - public CFG_STRANGERMODE_INFO stuStrangerMode; // 陌生人布防模式 - public int bSizeFileter; // 规则特定的尺寸过滤器是否有效 - public CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器, 1-true 0-false - public int bFeatureEnable; // 是否开启人脸属性识别 - public int nFaceFeatureNum; // 需要检测的人脸属性个数 - public int[] emFaceFeatureType = new int[MAX_FEATURE_LIST_SIZE]; // 需检测的人脸属性, 参考 EM_FACEFEATURE_TYPE - public int bFeatureFilter; // 在人脸属性开启前提下,如果人脸图像质量太差,是否不上报属性 - // true-图像太差不上报属性 false-图像很差也上报属性(可能会非常不准,影响用户体验) - public int nMinQuality; // 人脸图片质量阈值,和bFeatureFilter一起使用 范围[1,100] + public static class CFG_FACEANALYSIS_INFO extends Structure { + public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 + public byte bRuleEnable; // 规则使能,bool类型,取值0或1 + public byte[] bReserved = new byte[3]; // 保留字 + public int nObjectTypeNum; // 相应物体类型个数 + public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE * MAX_NAME_LEN]; // 相应物体类型列表 + public int nDetectRegionPoint; // 检测区顶点数 + public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区 + public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 + public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_10[]) new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM);// 事件响应时间段 + public int nPtzPresetId; // 云台预置点编号 0~65535 + public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测 + public int nLinkGroupNum; // 联动布控个数 + public CFG_LINKGROUP_INFO[] stuLinkGroupArr = (CFG_LINKGROUP_INFO[]) new CFG_LINKGROUP_INFO().toArray(MAX_LINK_GROUP_NUM); // 联动的布控组 + public CFG_STRANGERMODE_INFO stuStrangerMode; // 陌生人布防模式 + public int bSizeFileter; // 规则特定的尺寸过滤器是否有效 + public CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器, 1-true 0-false + public int bFeatureEnable; // 是否开启人脸属性识别 + public int nFaceFeatureNum; // 需要检测的人脸属性个数 + public int[] emFaceFeatureType = new int[MAX_FEATURE_LIST_SIZE]; // 需检测的人脸属性, 参考 EM_FACEFEATURE_TYPE + public int bFeatureFilter; // 在人脸属性开启前提下,如果人脸图像质量太差,是否不上报属性 + // true-图像太差不上报属性 false-图像很差也上报属性(可能会非常不准,影响用户体验) + public int nMinQuality; // 人脸图片质量阈值,和bFeatureFilter一起使用 范围[1,100] } // 事件类型EVENT_IVSS_FACECOMPARE(IVSS人脸识别事件) 对应的规则配置 - public static class CFG_FACECOMPARE_INFO extends Structure - { - public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 - public byte bRuleEnable; // 规则使能,bool类型,取值0或1 - public byte[] bReserved = new byte[3]; // 保留字 - public int nObjectTypeNum; // 相应物体类型个数 - public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE*MAX_NAME_LEN]; // 相应物体类型列表 - public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 - public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_10[])new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM);// 事件响应时间段 - public int nPtzPresetId; // 云台预置点编号 0~65535 - public int nLinkGroupNum; // 联动布控个数 - public CFG_LINKGROUP_INFO[] stuLinkGroupArr = (CFG_LINKGROUP_INFO[])new CFG_LINKGROUP_INFO().toArray(MAX_LINK_GROUP_NUM); // 联动的布控组 - public CFG_STRANGERMODE_INFO stuStrangerMode; // 陌生人布防模式 - } - + public static class CFG_FACECOMPARE_INFO extends Structure { + public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 + public byte bRuleEnable; // 规则使能,bool类型,取值0或1 + public byte[] bReserved = new byte[3]; // 保留字 + public int nObjectTypeNum; // 相应物体类型个数 + public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE * MAX_NAME_LEN]; // 相应物体类型列表 + public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 + public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_10[]) new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM);// 事件响应时间段 + public int nPtzPresetId; // 云台预置点编号 0~65535 + public int nLinkGroupNum; // 联动布控个数 + public CFG_LINKGROUP_INFO[] stuLinkGroupArr = (CFG_LINKGROUP_INFO[]) new CFG_LINKGROUP_INFO().toArray(MAX_LINK_GROUP_NUM); // 联动的布控组 + public CFG_STRANGERMODE_INFO stuStrangerMode; // 陌生人布防模式 + } + // 大类业务方案 - public static class EM_CLASS_TYPE extends Structure - { - public static final int EM_CLASS_UNKNOWN =0;//未知业务 - public static final int EM_CLASS_VIDEO_SYNOPSIS =1;//视频浓缩 - public static final int EM_CLASS_TRAFFIV_GATE =2;//卡口 - public static final int EM_CLASS_ELECTRONIC_POLICE =3;//电警 - public static final int EM_CLASS_SINGLE_PTZ_PARKING =4;//单球违停 - public static final int EM_CLASS_PTZ_PARKINBG =5;//主从违停 - public static final int EM_CLASS_TRAFFIC =6;//交通事件"Traffic" - public static final int EM_CLASS_NORMAL =7;//通用行为分析"Normal" - public static final int EM_CLASS_PRISON =8;//监所行为分析"Prison" - public static final int EM_CLASS_ATM =9;//金融行为分析"ATM" - public static final int EM_CLASS_METRO =10;//地铁行为分析 - public static final int EM_CLASS_FACE_DETECTION =11;//人脸检测"FaceDetection" - public static final int EM_CLASS_FACE_RECOGNITION =12;//人脸识别"FaceRecognition" - public static final int EM_CLASS_NUMBER_STAT =13;//人数统计"NumberStat" - public static final int EM_CLASS_HEAT_MAP =14;//热度图"HeatMap" - public static final int EM_CLASS_VIDEO_DIAGNOSIS =15;//视频诊断"VideoDiagnosis" - public static final int EM_CLASS_VIDEO_ENHANCE =16;//视频增强 - public static final int EM_CLASS_SMOKEFIRE_DETECT =17;//烟火检测 - public static final int EM_CLASS_VEHICLE_ANALYSE =18;//车辆特征识别"VehicleAnalyse" - public static final int EM_CLASS_PERSON_FEATURE =19;//人员特征识别 - } - + public static class EM_CLASS_TYPE extends Structure { + public static final int EM_CLASS_UNKNOWN = 0;//未知业务 + public static final int EM_CLASS_VIDEO_SYNOPSIS = 1;//视频浓缩 + public static final int EM_CLASS_TRAFFIV_GATE = 2;//卡口 + public static final int EM_CLASS_ELECTRONIC_POLICE = 3;//电警 + public static final int EM_CLASS_SINGLE_PTZ_PARKING = 4;//单球违停 + public static final int EM_CLASS_PTZ_PARKINBG = 5;//主从违停 + public static final int EM_CLASS_TRAFFIC = 6;//交通事件"Traffic" + public static final int EM_CLASS_NORMAL = 7;//通用行为分析"Normal" + public static final int EM_CLASS_PRISON = 8;//监所行为分析"Prison" + public static final int EM_CLASS_ATM = 9;//金融行为分析"ATM" + public static final int EM_CLASS_METRO = 10;//地铁行为分析 + public static final int EM_CLASS_FACE_DETECTION = 11;//人脸检测"FaceDetection" + public static final int EM_CLASS_FACE_RECOGNITION = 12;//人脸识别"FaceRecognition" + public static final int EM_CLASS_NUMBER_STAT = 13;//人数统计"NumberStat" + public static final int EM_CLASS_HEAT_MAP = 14;//热度图"HeatMap" + public static final int EM_CLASS_VIDEO_DIAGNOSIS = 15;//视频诊断"VideoDiagnosis" + public static final int EM_CLASS_VIDEO_ENHANCE = 16;//视频增强 + public static final int EM_CLASS_SMOKEFIRE_DETECT = 17;//烟火检测 + public static final int EM_CLASS_VEHICLE_ANALYSE = 18;//车辆特征识别"VehicleAnalyse" + public static final int EM_CLASS_PERSON_FEATURE = 19;//人员特征识别 + } + // 智能报警事件公共信息 - public static class EVENT_INTELLI_COMM_INFO extends Structure - { - public int emClassType; // 智能事件所属大类, 取值为 EM_CLASS_TYPE 中的值 - public int nPresetID; // 该事件触发的预置点,对应该设置规则的预置点 - public byte[] bReserved = new byte[124]; // 保留字节,留待扩展. + public static class EVENT_INTELLI_COMM_INFO extends Structure { + public int emClassType; // 智能事件所属大类, 取值为 EM_CLASS_TYPE 中的值 + public int nPresetID; // 该事件触发的预置点,对应该设置规则的预置点 + public byte[] bReserved = new byte[124]; // 保留字节,留待扩展. } - + // 事件类型EVENT_IVS_FACERECOGNITION(人脸识别)对应的数据块描述信息 - public static class DEV_EVENT_FACERECOGNITION_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public int nEventID; // 事件ID - public NET_TIME_EX UTC; // 事件发生的时间 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public int nCandidateNum; // 当前人脸匹配到的候选对象数量 - public CANDIDATE_INFO[] stuCandidates = (CANDIDATE_INFO[])new CANDIDATE_INFO().toArray(NET_MAX_CANDIDATE_NUM);//当前人脸匹配到的候选对象信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte byImageIndex; // 图片的序号,同一时间内(精确到秒)可能有多张图片,从0开始 - public byte[] byReserved1 = new byte[2]; // 对齐 - public int bGlobalScenePic; // 全景图是否存在, 类型为BOOL, 取值为0或者1 - public NET_PIC_INFO stuGlobalScenePicInfo; // 全景图片信息 - public byte[] szSnapDevAddress = new byte[MAX_PATH]; // 抓拍当前人脸的设备地址,如:滨康路37号 - public int nOccurrenceCount; // 事件触发累计次数, 类型为unsigned int - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public NET_FACE_DATA stuFaceData; // 人脸数据 - public byte[] szUID = new byte[NET_COMMON_STRING_32]; // 抓拍人员写入数据库的唯一标识符 - public NET_FEATURE_VECTOR stuFeatureVector; // 特征值信息 - public byte[] szFeatureVersion = new byte[32]; // 特征值算法版本 - public byte[] bReserved = new byte[864]; // 保留字节,留待扩展. - public int nRetCandidatesExNum; // 当前人脸匹配到的候选对象数量实际返回值 - public CANDIDATE_INFOEX[] stuCandidatesEx = (CANDIDATE_INFOEX[])new CANDIDATE_INFOEX().toArray(NET_MAX_CANDIDATE_NUM); // 当前人脸匹配到的候选对象信息扩展 - } - - // 候选人员信息扩展结构体 - public static class CANDIDATE_INFOEX extends Structure - { - public FACERECOGNITION_PERSON_INFOEX stPersonInfo; // 人员信息扩展 - // 布控(黑名单)库,指布控库中人员信息; - // 历史库,指历史库中人员信息 - // 报警库,指布控库的人员信息 - public byte bySimilarity; // 和查询图片的相似度,百分比表示,1~100 - public byte byRange; // 人员所属数据库范围,详见EM_FACE_DB_TYPE - public byte[] byReserved1 = new byte[2]; - public NET_TIME stTime; // 当byRange为历史数据库时有效,表示查询人员出现的时间 - public byte[] szAddress = new byte[MAX_PATH]; // 当byRange为历史数据库时有效,表示查询人员出现的地点 - public int bIsHit; // 是否有识别结果,指这个检测出的人脸在库中有没有比对结果 - public NET_PIC_INFO_EX3 stuSceneImage; // 人脸全景图 - public int nChannelID; // 通道号 - public byte[] szFilePathEx = new byte[256]; // 文件路径 - public byte[] byReserved = new byte[1024]; // 保留字节 - } - + public static class DEV_EVENT_FACERECOGNITION_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public int nEventID; // 事件ID + public NET_TIME_EX UTC; // 事件发生的时间 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public int nCandidateNum; // 当前人脸匹配到的候选对象数量 + public CANDIDATE_INFO[] stuCandidates = (CANDIDATE_INFO[]) new CANDIDATE_INFO().toArray(NET_MAX_CANDIDATE_NUM);//当前人脸匹配到的候选对象信息 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte byImageIndex; // 图片的序号,同一时间内(精确到秒)可能有多张图片,从0开始 + public byte[] byReserved1 = new byte[2]; // 对齐 + public int bGlobalScenePic; // 全景图是否存在, 类型为BOOL, 取值为0或者1 + public NET_PIC_INFO stuGlobalScenePicInfo; // 全景图片信息 + public byte[] szSnapDevAddress = new byte[MAX_PATH]; // 抓拍当前人脸的设备地址,如:滨康路37号 + public int nOccurrenceCount; // 事件触发累计次数, 类型为unsigned int + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public NET_FACE_DATA stuFaceData; // 人脸数据 + public byte[] szUID = new byte[NET_COMMON_STRING_32]; // 抓拍人员写入数据库的唯一标识符 + public NET_FEATURE_VECTOR stuFeatureVector; // 特征值信息 + public byte[] szFeatureVersion = new byte[32]; // 特征值算法版本 + public byte[] bReserved = new byte[864]; // 保留字节,留待扩展. + public int nRetCandidatesExNum; // 当前人脸匹配到的候选对象数量实际返回值 + public CANDIDATE_INFOEX[] stuCandidatesEx = (CANDIDATE_INFOEX[]) new CANDIDATE_INFOEX().toArray(NET_MAX_CANDIDATE_NUM); // 当前人脸匹配到的候选对象信息扩展 + } + + // 候选人员信息扩展结构体 + public static class CANDIDATE_INFOEX extends Structure { + public FACERECOGNITION_PERSON_INFOEX stPersonInfo; // 人员信息扩展 + // 布控(黑名单)库,指布控库中人员信息; + // 历史库,指历史库中人员信息 + // 报警库,指布控库的人员信息 + public byte bySimilarity; // 和查询图片的相似度,百分比表示,1~100 + public byte byRange; // 人员所属数据库范围,详见EM_FACE_DB_TYPE + public byte[] byReserved1 = new byte[2]; + public NET_TIME stTime; // 当byRange为历史数据库时有效,表示查询人员出现的时间 + public byte[] szAddress = new byte[MAX_PATH]; // 当byRange为历史数据库时有效,表示查询人员出现的地点 + public int bIsHit; // 是否有识别结果,指这个检测出的人脸在库中有没有比对结果 + public NET_PIC_INFO_EX3 stuSceneImage; // 人脸全景图 + public int nChannelID; // 通道号 + public byte[] szFilePathEx = new byte[256]; // 文件路径 + public byte[] byReserved = new byte[1024]; // 保留字节 + } + // 存储IVSS项目招行VIP需求,特征值信息 - public static class NET_FEATURE_VECTOR extends Structure - { - public int dwOffset; // 人脸小图特征值在二进制数据块中的偏移 - public int dwLength; // 人脸小图特征值长度,单位:字节 - public byte[] byReserved = new byte[120]; // 保留 + public static class NET_FEATURE_VECTOR extends Structure { + public int dwOffset; // 人脸小图特征值在二进制数据块中的偏移 + public int dwLength; // 人脸小图特征值长度,单位:字节 + public byte[] byReserved = new byte[120]; // 保留 } - + // 人员信息扩展结构体 - public static class FACERECOGNITION_PERSON_INFOEX extends Structure - { - public byte[] szPersonName = new byte[NET_MAX_PERSON_NAME_LEN]; // 姓名 - public short wYear; // 出生年,作为查询条件时,此参数填0,则表示此参数无效 - public byte byMonth; // 出生月,作为查询条件时,此参数填0,则表示此参数无效 - public byte byDay; // 出生日,作为查询条件时,此参数填0,则表示此参数无效 - public byte bImportantRank; // 人员重要等级,1~10,数值越高越重要,作为查询条件时,此参数填0,则表示此参数无效 - public byte bySex; // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效 - public byte[] szID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标示(身份证号码,工号,或其他编号) - public short wFacePicNum; // 图片张数 - public NET_PIC_INFO[] szFacePicInfo = (NET_PIC_INFO[])new NET_PIC_INFO().toArray(NET_MAX_PERSON_IMAGE_NUM); // 当前人员对应的图片信息 - public byte byType; // 人员类型,详见 EM_PERSON_TYPE - public byte byIDType; // 证件类型,详见 EM_CERTIFICATE_TYPE - public byte byGlasses; // 是否戴眼镜,0-未知 1-不戴 2-戴 - public byte byAge; // 年龄,0表示未知 - public byte[] szProvince = new byte[NET_MAX_PROVINCE_NAME_LEN]; // 省份 - public byte[] szCity = new byte[NET_MAX_CITY_NAME_LEN]; // 城市 - public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标识符,首次由服务端生成,区别于ID字段 - // 修改,删除操作时必填 - public byte[] szCountry = new byte[NET_COUNTRY_LENGTH]; // 国籍,符合ISO3166规范 - public byte byIsCustomType; // 人员类型是否为自定义: 0 使用Type规定的类型 1 自定义,使用szCustomType字段 - public byte[] szCustomType = new byte[NET_COMMON_STRING_16]; // 人员自定义类型 - public byte[] szComment = new byte[NET_COMMENT_LENGTH]; // 备注信息 - public byte[] szGroupID = new byte[NET_GROUPID_LENGTH]; // 人员所属组ID - public byte[] szGroupName = new byte[NET_GROUPNAME_LENGTH]; // 人员所属组名, 用户自己申请内存的情况时, - public int emEmotion; // 表情, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE - public byte[] szHomeAddress = new byte[NET_COMMON_STRING_128]; // 注册人员家庭地址 - public int emGlassesType; // 眼镜类型, 参考 EM_GLASSES_TYPE - public int emRace; // 种族, 参考 EM_RACE_TYPE - public int emEye; // 眼睛状态, 参考 EM_EYE_STATE_TYPE - public int emMouth; // 嘴巴状态, 参考 EM_MOUTH_STATE_TYPE - public int emMask; // 口罩状态, 参考 EM_MASK_STATE_TYPE - public int emBeard; // 胡子状态, 参考 EM_BEARD_STATE_TYPE - public int nAttractive; // 魅力值, -1表示无效, 0未识别,识别时范围1-100,得分高魅力高 - public int emFeatureState; // 人员建模状态, 参考 EM_PERSON_FEATURE_STATE - public int bAgeEnable; // 是否指定年龄段, 1-true; 0-false - public int[] nAgeRange = new int[2]; // 年龄范围 - public int nEmotionValidNum; // 人脸特征数组有效个数,与 emFeature 结合使用, 如果为0则表示查询所有表情 - public int[] emEmotions = new int[NET_MAX_FACEDETECT_FEATURE_NUM];// 人脸特征数组,与 byFeatureValidNum 结合使用 设置查询条件的时候使用, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE - public int nCustomPersonInfoNum; // 注册人员信息扩展个数 - public CUSTOM_PERSON_INFO[] szCustomPersonInfo - = (CUSTOM_PERSON_INFO[])new CUSTOM_PERSON_INFO().toArray(NET_MAX_CUSTOM_PERSON_INFO_NUM); //注册人员信息扩展 - public byte[] byReserved = new byte[1144]; // 保留字节 - } - + public static class FACERECOGNITION_PERSON_INFOEX extends Structure { + public byte[] szPersonName = new byte[NET_MAX_PERSON_NAME_LEN]; // 姓名 + public short wYear; // 出生年,作为查询条件时,此参数填0,则表示此参数无效 + public byte byMonth; // 出生月,作为查询条件时,此参数填0,则表示此参数无效 + public byte byDay; // 出生日,作为查询条件时,此参数填0,则表示此参数无效 + public byte bImportantRank; // 人员重要等级,1~10,数值越高越重要,作为查询条件时,此参数填0,则表示此参数无效 + public byte bySex; // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效 + public byte[] szID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标示(身份证号码,工号,或其他编号) + public short wFacePicNum; // 图片张数 + public NET_PIC_INFO[] szFacePicInfo = (NET_PIC_INFO[]) new NET_PIC_INFO().toArray(NET_MAX_PERSON_IMAGE_NUM); // 当前人员对应的图片信息 + public byte byType; // 人员类型,详见 EM_PERSON_TYPE + public byte byIDType; // 证件类型,详见 EM_CERTIFICATE_TYPE + public byte byGlasses; // 是否戴眼镜,0-未知 1-不戴 2-戴 + public byte byAge; // 年龄,0表示未知 + public byte[] szProvince = new byte[NET_MAX_PROVINCE_NAME_LEN]; // 省份 + public byte[] szCity = new byte[NET_MAX_CITY_NAME_LEN]; // 城市 + public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标识符,首次由服务端生成,区别于ID字段 + // 修改,删除操作时必填 + public byte[] szCountry = new byte[NET_COUNTRY_LENGTH]; // 国籍,符合ISO3166规范 + public byte byIsCustomType; // 人员类型是否为自定义: 0 使用Type规定的类型 1 自定义,使用szCustomType字段 + public byte[] szCustomType = new byte[NET_COMMON_STRING_16]; // 人员自定义类型 + public byte[] szComment = new byte[NET_COMMENT_LENGTH]; // 备注信息 + public byte[] szGroupID = new byte[NET_GROUPID_LENGTH]; // 人员所属组ID + public byte[] szGroupName = new byte[NET_GROUPNAME_LENGTH]; // 人员所属组名, 用户自己申请内存的情况时, + public int emEmotion; // 表情, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE + public byte[] szHomeAddress = new byte[NET_COMMON_STRING_128]; // 注册人员家庭地址 + public int emGlassesType; // 眼镜类型, 参考 EM_GLASSES_TYPE + public int emRace; // 种族, 参考 EM_RACE_TYPE + public int emEye; // 眼睛状态, 参考 EM_EYE_STATE_TYPE + public int emMouth; // 嘴巴状态, 参考 EM_MOUTH_STATE_TYPE + public int emMask; // 口罩状态, 参考 EM_MASK_STATE_TYPE + public int emBeard; // 胡子状态, 参考 EM_BEARD_STATE_TYPE + public int nAttractive; // 魅力值, -1表示无效, 0未识别,识别时范围1-100,得分高魅力高 + public int emFeatureState; // 人员建模状态, 参考 EM_PERSON_FEATURE_STATE + public int bAgeEnable; // 是否指定年龄段, 1-true; 0-false + public int[] nAgeRange = new int[2]; // 年龄范围 + public int nEmotionValidNum; // 人脸特征数组有效个数,与 emFeature 结合使用, 如果为0则表示查询所有表情 + public int[] emEmotions = new int[NET_MAX_FACEDETECT_FEATURE_NUM];// 人脸特征数组,与 byFeatureValidNum 结合使用 设置查询条件的时候使用, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE + public int nCustomPersonInfoNum; // 注册人员信息扩展个数 + public CUSTOM_PERSON_INFO[] szCustomPersonInfo + = (CUSTOM_PERSON_INFO[]) new CUSTOM_PERSON_INFO().toArray(NET_MAX_CUSTOM_PERSON_INFO_NUM); //注册人员信息扩展 + public byte[] byReserved = new byte[1144]; // 保留字节 + } + //注册人员信息扩展结构体 - public static class CUSTOM_PERSON_INFO extends Structure - { - public byte[] szPersonInfo = new byte[NET_MAX_PERSON_INFO_LEN]; //人员扩展信息 - public byte[] byReserved = new byte[124]; // 保留字节 - } - + public static class CUSTOM_PERSON_INFO extends Structure { + public byte[] szPersonInfo = new byte[NET_MAX_PERSON_INFO_LEN]; //人员扩展信息 + public byte[] byReserved = new byte[124]; // 保留字节 + } + // 人脸数据 - public static class NET_FACE_DATA extends Structure - { - public int emSex; // 性别, 参考 EM_DEV_EVENT_FACEDETECT_SEX_TYPE - public int nAge; // 年龄,-1表示该字段数据无效 - public int nFeatureValidNum; // 人脸特征数组有效个数,与 emFeature 结合使用 - public int[] emFeature = new int[NET_MAX_FACEDETECT_FEATURE_NUM]; // 人脸特征数组,与 nFeatureValidNum 结合使用, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE - public int emRace; // 种族, 参考 EM_RACE_TYPE - public int emEye; // 眼睛状态, 参考 EM_EYE_STATE_TYPE - public int emMouth; // 嘴巴状态, 参考 EM_MOUTH_STATE_TYPE - public int emMask; // 口罩状态, 参考 EM_MASK_STATE_TYPE - public int emBeard; // 胡子状态, 参考 EM_BEARD_STATE_TYPE - public int nAttractive; // 魅力值, -1表示无效, 0未识别,识别时范围1-100,得分高魅力高 - public int emNation; // 民族, 参考 EM_NATION_TYPE - public byte[] bReserved = new byte[124]; // 保留字节,留待扩展. - } - + public static class NET_FACE_DATA extends Structure { + public int emSex; // 性别, 参考 EM_DEV_EVENT_FACEDETECT_SEX_TYPE + public int nAge; // 年龄,-1表示该字段数据无效 + public int nFeatureValidNum; // 人脸特征数组有效个数,与 emFeature 结合使用 + public int[] emFeature = new int[NET_MAX_FACEDETECT_FEATURE_NUM]; // 人脸特征数组,与 nFeatureValidNum 结合使用, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE + public int emRace; // 种族, 参考 EM_RACE_TYPE + public int emEye; // 眼睛状态, 参考 EM_EYE_STATE_TYPE + public int emMouth; // 嘴巴状态, 参考 EM_MOUTH_STATE_TYPE + public int emMask; // 口罩状态, 参考 EM_MASK_STATE_TYPE + public int emBeard; // 胡子状态, 参考 EM_BEARD_STATE_TYPE + public int nAttractive; // 魅力值, -1表示无效, 0未识别,识别时范围1-100,得分高魅力高 + public int emNation; // 民族, 参考 EM_NATION_TYPE + public byte[] bReserved = new byte[124]; // 保留字节,留待扩展. + } + //民族 - public static class EM_NATION_TYPE extends Structure - { - public static final int EM_NATION_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_NATION_TYPE_UYGUR = 1; // 维族(新疆) - public static final int EM_NATION_TYPE_OTHER = 2; // 其他 - public static final int EM_NATION_TYPE_UNIDENTIFIED = 3; // 设备未识别 - } - + public static class EM_NATION_TYPE extends Structure { + public static final int EM_NATION_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_NATION_TYPE_UYGUR = 1; // 维族(新疆) + public static final int EM_NATION_TYPE_OTHER = 2; // 其他 + public static final int EM_NATION_TYPE_UNIDENTIFIED = 3; // 设备未识别 + } + //人脸检测对应性别类型 - public static class EM_DEV_EVENT_FACEDETECT_SEX_TYPE extends Structure - { + public static class EM_DEV_EVENT_FACEDETECT_SEX_TYPE extends Structure { public static final int EM_DEV_EVENT_FACEDETECT_SEX_TYPE_UNKNOWN = 0; //未知 public static final int EM_DEV_EVENT_FACEDETECT_SEX_TYPE_MAN = 1; //男性 public static final int EM_DEV_EVENT_FACEDETECT_SEX_TYPE_WOMAN = 2; //女性 } //人脸检测对应人脸特征类型 - public static class EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE extends Structure - { + public static class EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE extends Structure { public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_UNKNOWN = 0; //未知 public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_WEAR_GLASSES = 1; //戴眼镜 public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_SMILE = 2; //微笑 @@ -3760,316 +3613,295 @@ public interface NetSDKLib extends Library { public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_NEUTRAL = 8; //正常 public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_LAUGH = 9; //大笑 public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_NOGLASSES = 10; // 没戴眼镜 - public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_HAPPY = 11; // 高兴 - public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_CONFUSED = 12; // 困惑 - public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_SCREAM = 13; // 尖叫 + public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_HAPPY = 11; // 高兴 + public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_CONFUSED = 12; // 困惑 + public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_SCREAM = 13; // 尖叫 public static final int EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE_WEAR_SUNGLASSES = 14; // 戴太阳眼镜 } - + // 种族类型 - public static class EM_RACE_TYPE extends Structure - { - public static final int EM_RACE_UNKNOWN = 0; // 未知 - public static final int EM_RACE_NODISTI = 1; // 未识别 - public static final int EM_RACE_YELLOW = 2; // 黄种人 - public static final int EM_RACE_BLACK = 3; // 黑人 - public static final int EM_RACE_WHITE = 4; // 白人 - } - + public static class EM_RACE_TYPE extends Structure { + public static final int EM_RACE_UNKNOWN = 0; // 未知 + public static final int EM_RACE_NODISTI = 1; // 未识别 + public static final int EM_RACE_YELLOW = 2; // 黄种人 + public static final int EM_RACE_BLACK = 3; // 黑人 + public static final int EM_RACE_WHITE = 4; // 白人 + } + // 眼睛状态 - public static class EM_EYE_STATE_TYPE extends Structure - { - public static final int EM_EYE_STATE_UNKNOWN = 0; // 未知 - public static final int EM_EYE_STATE_NODISTI = 1; // 未识别 - public static final int EM_EYE_STATE_CLOSE = 2; // 闭眼 - public static final int EM_EYE_STATE_OPEN = 3; // 睁眼 - } + public static class EM_EYE_STATE_TYPE extends Structure { + public static final int EM_EYE_STATE_UNKNOWN = 0; // 未知 + public static final int EM_EYE_STATE_NODISTI = 1; // 未识别 + public static final int EM_EYE_STATE_CLOSE = 2; // 闭眼 + public static final int EM_EYE_STATE_OPEN = 3; // 睁眼 + } // 嘴巴状态 - public static class EM_MOUTH_STATE_TYPE extends Structure - { - public static final int EM_MOUTH_STATE_UNKNOWN = 0; // 未知 - public static final int EM_MOUTH_STATE_NODISTI = 1; // 未识别 - public static final int EM_MOUTH_STATE_CLOSE = 2; // 闭嘴 - public static final int EM_MOUTH_STATE_OPEN = 3; // 张嘴 - } + public static class EM_MOUTH_STATE_TYPE extends Structure { + public static final int EM_MOUTH_STATE_UNKNOWN = 0; // 未知 + public static final int EM_MOUTH_STATE_NODISTI = 1; // 未识别 + public static final int EM_MOUTH_STATE_CLOSE = 2; // 闭嘴 + public static final int EM_MOUTH_STATE_OPEN = 3; // 张嘴 + } // 口罩状态 - public static class EM_MASK_STATE_TYPE extends Structure - { - public static final int EM_MASK_STATE_UNKNOWN = 0; // 未知 - public static final int EM_MASK_STATE_NODISTI = 1; // 未识别 - public static final int EM_MASK_STATE_NOMASK = 2; // 没戴口罩 - public static final int EM_MASK_STATE_WEAR = 3; // 戴口罩 - } + public static class EM_MASK_STATE_TYPE extends Structure { + public static final int EM_MASK_STATE_UNKNOWN = 0; // 未知 + public static final int EM_MASK_STATE_NODISTI = 1; // 未识别 + public static final int EM_MASK_STATE_NOMASK = 2; // 没戴口罩 + public static final int EM_MASK_STATE_WEAR = 3; // 戴口罩 + } // 胡子状态 - public static class EM_BEARD_STATE_TYPE extends Structure - { - public static final int EM_BEARD_STATE_UNKNOWN = 0; // 未知 - public static final int EM_BEARD_STATE__NODISTI = 1; // 未识别 - public static final int EM_BEARD_STATE_NOBEARD = 2; // 没胡子 - public static final int EM_BEARD_STATE_HAVEBEARD = 3; // 有胡子 - } - + public static class EM_BEARD_STATE_TYPE extends Structure { + public static final int EM_BEARD_STATE_UNKNOWN = 0; // 未知 + public static final int EM_BEARD_STATE__NODISTI = 1; // 未识别 + public static final int EM_BEARD_STATE_NOBEARD = 2; // 没胡子 + public static final int EM_BEARD_STATE_HAVEBEARD = 3; // 有胡子 + } + // 人员建模状态 - public static class EM_PERSON_FEATURE_STATE extends Structure - { - public static final int EM_PERSON_FEATURE_UNKNOWN = 0; // 未知 - public static final int EM_PERSON_FEATURE_FAIL = 1; // 建模失败,可能是图片不符合要求,需要换图片 - public static final int EM_PERSON_FEATURE_USEFUL = 2; // 有可用的特征值 - public static final int EM_PERSON_FEATURE_CALCULATING = 3; // 正在计算特征值 - public static final int EM_PERSON_FEATURE_UNUSEFUL = 4; // 已建模,但算法升级导致数据不可用,需要重新建模 - } - + public static class EM_PERSON_FEATURE_STATE extends Structure { + public static final int EM_PERSON_FEATURE_UNKNOWN = 0; // 未知 + public static final int EM_PERSON_FEATURE_FAIL = 1; // 建模失败,可能是图片不符合要求,需要换图片 + public static final int EM_PERSON_FEATURE_USEFUL = 2; // 有可用的特征值 + public static final int EM_PERSON_FEATURE_CALCULATING = 3; // 正在计算特征值 + public static final int EM_PERSON_FEATURE_UNUSEFUL = 4; // 已建模,但算法升级导致数据不可用,需要重新建模 + } + // 事件文件的文件标签类型 - public static class EM_EVENT_FILETAG extends Structure - { + public static class EM_EVENT_FILETAG extends Structure { public static final int NET_ATMBEFOREPASTE = 1; //ATM贴条前 public static final int NET_ATMAFTERPASTE = 2; //ATM贴条后 } // 事件对应文件信息 - public static class NET_EVENT_FILE_INFO extends Structure - { - public byte bCount; // 当前文件所在文件组中的文件总数 - public byte bIndex; // 当前文件在文件组中的文件编号(编号1开始) - public byte bFileTag; // 文件标签,具体说明见枚举类型 EM_EVENT_FILETAG - public byte bFileType; // 文件类型,0-普通1-合成2-抠图 - public NET_TIME_EX stuFileTime; // 文件时间 - public int nGroupId; // 同一组抓拍文件的唯一标识 + public static class NET_EVENT_FILE_INFO extends Structure { + public byte bCount; // 当前文件所在文件组中的文件总数 + public byte bIndex; // 当前文件在文件组中的文件编号(编号1开始) + public byte bFileTag; // 文件标签,具体说明见枚举类型 EM_EVENT_FILETAG + public byte bFileType; // 文件类型,0-普通1-合成2-抠图 + public NET_TIME_EX stuFileTime; // 文件时间 + public int nGroupId; // 同一组抓拍文件的唯一标识 } // 多人脸检测信息 - public static class NET_FACE_INFO extends Structure - { - public int nObjectID; // 物体ID,每个ID表示一个唯一的物体 - public byte[] szObjectType = new byte[128]; // 物体类型 - public int nRelativeID; // Relative与另一张图片ID相同,表示这张人脸抠图是从大图中取出的 - public DH_RECT BoundingBox; // 包围盒 - public NET_POINT Center; // 物体型心 + public static class NET_FACE_INFO extends Structure { + public int nObjectID; // 物体ID,每个ID表示一个唯一的物体 + public byte[] szObjectType = new byte[128]; // 物体类型 + public int nRelativeID; // Relative与另一张图片ID相同,表示这张人脸抠图是从大图中取出的 + public DH_RECT BoundingBox; // 包围盒 + public NET_POINT Center; // 物体型心 } //事件类型EVENT_IVS_FACEDETECT(人脸检测事件)对应的数据块描述信息 - public static class DEV_EVENT_FACEDETECT_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] reserved = new byte[2]; // 保留字节 - public byte byImageIndex; // 图片的序号,同一时间内(精确到秒)可能有多张图片,从0开始 - public int nDetectRegionNum; // 规则检测区域顶点数 - public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);// 规则检测区域 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON - public byte[] szSnapDevAddress = new byte[MAX_PATH];// 抓拍当前人脸的设备地址,如:滨康路37号 - public int nOccurrenceCount; // 事件触发累计次数, 类型为unsigned int - public int emSex; // 性别, 取值为EM_DEV_EVENT_FACEDETECT_SEX_TYPE中的值 - public int nAge; // 年龄,-1表示该字段数据无效 - public int nFeatureValidNum; //人脸特征数组有效个数,与emFeature结合使用, 类型为unsigned int - public int[] emFeature = new int[NET_MAX_FACEDETECT_FEATURE_NUM]; // 人脸特征数组,与nFeatureValidNum, 取值为EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE中的值 - public int nFacesNum; // 指示stuFaces有效数量 - public NET_FACE_INFO[] stuFaces = (NET_FACE_INFO[])new NET_FACE_INFO().toArray(10);// 多张人脸时使用,此时没有Object - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public int emRace; // 种族 - public int emEye; // 眼睛状态 - public int emMouth; // 嘴巴状态 - public int emMask; // 口罩状态 - public int emBeard; // 胡子状态 - public int nAttractive; // 魅力值, -1表示无效, 0未识别,识别时范围1-100,得分高魅力高 - public byte[] szUID = new byte[NET_COMMON_STRING_32]; // 抓拍人员写入数据库的唯一标识符 - public byte[] bReserved = new byte[836]; // 保留字节,留待扩展 - } - + public static class DEV_EVENT_FACEDETECT_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] reserved = new byte[2]; // 保留字节 + public byte byImageIndex; // 图片的序号,同一时间内(精确到秒)可能有多张图片,从0开始 + public int nDetectRegionNum; // 规则检测区域顶点数 + public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);// 规则检测区域 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON + public byte[] szSnapDevAddress = new byte[MAX_PATH];// 抓拍当前人脸的设备地址,如:滨康路37号 + public int nOccurrenceCount; // 事件触发累计次数, 类型为unsigned int + public int emSex; // 性别, 取值为EM_DEV_EVENT_FACEDETECT_SEX_TYPE中的值 + public int nAge; // 年龄,-1表示该字段数据无效 + public int nFeatureValidNum; //人脸特征数组有效个数,与emFeature结合使用, 类型为unsigned int + public int[] emFeature = new int[NET_MAX_FACEDETECT_FEATURE_NUM]; // 人脸特征数组,与nFeatureValidNum, 取值为EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE中的值 + public int nFacesNum; // 指示stuFaces有效数量 + public NET_FACE_INFO[] stuFaces = (NET_FACE_INFO[]) new NET_FACE_INFO().toArray(10);// 多张人脸时使用,此时没有Object + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public int emRace; // 种族 + public int emEye; // 眼睛状态 + public int emMouth; // 嘴巴状态 + public int emMask; // 口罩状态 + public int emBeard; // 胡子状态 + public int nAttractive; // 魅力值, -1表示无效, 0未识别,识别时范围1-100,得分高魅力高 + public byte[] szUID = new byte[NET_COMMON_STRING_32]; // 抓拍人员写入数据库的唯一标识符 + public byte[] bReserved = new byte[836]; // 保留字节,留待扩展 + } + // 事件类型EVENT_IVS_TRAFFICJAM(交通拥堵事件)对应的数据块描述信息 public static class DEV_EVENT_TRAFFICJAM_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte bJamLenght; // 表示拥堵长度(总车道长度百分比)0-100 - public byte reserved; // 保留字节 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public NET_TIME_EX stuStartJamTime; // 开始停车时间 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束(bEventAction=2时此参数有效) - public int nAlarmIntervalTime; // 报警时间间隔,单位:秒。(此事件为连续性事件,在收到第一个此事件之后,若在超过间隔时间后未收到此事件的后续事件,则认为此事件异常结束了) - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte bJamLenght; // 表示拥堵长度(总车道长度百分比)0-100 + public byte reserved; // 保留字节 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public NET_TIME_EX stuStartJamTime; // 开始停车时间 + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束(bEventAction=2时此参数有效) + public int nAlarmIntervalTime; // 报警时间间隔,单位:秒。(此事件为连续性事件,在收到第一个此事件之后,若在超过间隔时间后未收到此事件的后续事件,则认为此事件异常结束了) + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public int nJamRealLength; // 表实际的拥堵长度,单位米 - public byte[] bReserved = new byte[1008]; // 保留字节,留待扩展. + public int nJamRealLength; // 表实际的拥堵长度,单位米 + public byte[] bReserved = new byte[1008]; // 保留字节,留待扩展. public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + // 车辆行驶方向 - public static class NET_FLOWSTAT_DIRECTION extends Structure - { - public static final int DRIVING_DIR_UNKNOW = 0 ; //兼容之前 - public static final int DRIVING_DIR_APPROACH = 1 ; //上行,即车辆离设备部署点越来越近 - public static final int DRIVING_DIR_LEAVE = 2 ; //下行,即车辆离设备部署点越来越远 + public static class NET_FLOWSTAT_DIRECTION extends Structure { + public static final int DRIVING_DIR_UNKNOW = 0; //兼容之前 + public static final int DRIVING_DIR_APPROACH = 1; //上行,即车辆离设备部署点越来越近 + public static final int DRIVING_DIR_LEAVE = 2; //下行,即车辆离设备部署点越来越远 } - + //车辆流量统计车辆行驶方向信息 - public static class NET_TRAFFIC_FLOWSTAT_INFO_DIR extends Structure - { - public int emDrivingDir; //行驶方向 (参见NET_FLOWSTAT_DIRECTION) - public byte[] szUpGoing = new byte[FLOWSTAT_ADDR_NAME]; //上行地点 - public byte[] szDownGoing = new byte[FLOWSTAT_ADDR_NAME]; //下行地点 - public byte[] reserved= new byte[32]; //保留字节 - - } - - public static class NET_TRAFFIC_JAM_STATUS extends Structure - { - public static final int JAM_STATUS_UNKNOW = 0; //未知 - public static final int JAM_STATUS_CLEAR = 1; //通畅 - public static final int JAM_STATUS_JAMMED = 2; //拥堵 - } - - - public static class NET_TRAFFIC_FLOW_STATE extends Structure - { - public int nLane; // 车道号 - public int dwState; // 状态值 - // 1- 流量过大 - // 2- 流量过大恢复 - // 3- 正常 - // 4- 流量过小 - // 5- 流量过小恢复 - public int dwFlow; // 流量值, 单位: 辆 - public int dwPeriod; // 流量值对应的统计时间 - public NET_TRAFFIC_FLOWSTAT_INFO_DIR stTrafficFlowDir; // 车道方向信息 - public int nVehicles; // 通过车辆总数 - public float fAverageSpeed; // 平均车速,单位km/h - public float fAverageLength; // 平均车长,单位米 - public float fTimeOccupyRatio; // 时间占有率,即单位时间内通过断面的车辆所用时间的总和占单位时间的比例 - public float fSpaceOccupyRatio; // 空间占有率,即按百分率计量的车辆长度总和除以时间间隔内车辆平均行驶距离 - public float fSpaceHeadway; // 车头间距,相邻车辆之间的距离,单位米/辆 - public float fTimeHeadway; // 车头时距,单位秒/辆 - public float fDensity; // 车辆密度,每公里的车辆数,单位辆/km - public int nOverSpeedVehicles; // 超速车辆数 - public int nUnderSpeedVehicles; // 低速车辆数 - public int nLargeVehicles; // 大车交通量(9米<车长<12米),辆/单位时间 - public int nMediumVehicles; // 中型车交通量(6米<车长<9米),辆/单位时间 - public int nSmallVehicles; // 小车交通量(4米<车长<6米),辆/单位时间, - public int nMotoVehicles; // 摩托交通量(微型车,车长<4米),辆/单位时间, - public int nLongVehicles; // 超长交通量(车长>=12米),辆/单位时间, - public int nVolume; // 交通量, 辆/单位时间, 某时间间隔通过车道、道路或其他通道上一点的车辆数,常以1小时计, - public int nFlowRate; // 流率小车当量,辆/小时, 车辆通过车道、道路某一断面或某一路段的当量小时流量 - public int nBackOfQueue; // 排队长度,单位:米, 从信号交叉口停车线到上游排队车辆末端之间的距离 - public int nTravelTime; // 旅行时间,单位:秒, 车辆通过某一条道路所用时间。包括所有停车延误 - public int nDelay; // 延误,单位:秒,驾驶员、乘客或行人花费的额外的行程时间 - public byte[] byDirection = new byte[MAX_DRIVING_DIR_NUM]; // 车道方向,详见NET_ROAD_DIRECTION - public byte byDirectionNum; // 车道行驶方向个数 - public byte[] reserved1 = new byte[3]; // 字节对齐 - public int emJamState; // 道路拥挤状况 (参见 NET_TRAFFIC_JAM_STATUS ) + public static class NET_TRAFFIC_FLOWSTAT_INFO_DIR extends Structure { + public int emDrivingDir; //行驶方向 (参见NET_FLOWSTAT_DIRECTION) + public byte[] szUpGoing = new byte[FLOWSTAT_ADDR_NAME]; //上行地点 + public byte[] szDownGoing = new byte[FLOWSTAT_ADDR_NAME]; //下行地点 + public byte[] reserved = new byte[32]; //保留字节 + + } + + public static class NET_TRAFFIC_JAM_STATUS extends Structure { + public static final int JAM_STATUS_UNKNOW = 0; //未知 + public static final int JAM_STATUS_CLEAR = 1; //通畅 + public static final int JAM_STATUS_JAMMED = 2; //拥堵 + } + + + public static class NET_TRAFFIC_FLOW_STATE extends Structure { + public int nLane; // 车道号 + public int dwState; // 状态值 + // 1- 流量过大 + // 2- 流量过大恢复 + // 3- 正常 + // 4- 流量过小 + // 5- 流量过小恢复 + public int dwFlow; // 流量值, 单位: 辆 + public int dwPeriod; // 流量值对应的统计时间 + public NET_TRAFFIC_FLOWSTAT_INFO_DIR stTrafficFlowDir; // 车道方向信息 + public int nVehicles; // 通过车辆总数 + public float fAverageSpeed; // 平均车速,单位km/h + public float fAverageLength; // 平均车长,单位米 + public float fTimeOccupyRatio; // 时间占有率,即单位时间内通过断面的车辆所用时间的总和占单位时间的比例 + public float fSpaceOccupyRatio; // 空间占有率,即按百分率计量的车辆长度总和除以时间间隔内车辆平均行驶距离 + public float fSpaceHeadway; // 车头间距,相邻车辆之间的距离,单位米/辆 + public float fTimeHeadway; // 车头时距,单位秒/辆 + public float fDensity; // 车辆密度,每公里的车辆数,单位辆/km + public int nOverSpeedVehicles; // 超速车辆数 + public int nUnderSpeedVehicles; // 低速车辆数 + public int nLargeVehicles; // 大车交通量(9米<车长<12米),辆/单位时间 + public int nMediumVehicles; // 中型车交通量(6米<车长<9米),辆/单位时间 + public int nSmallVehicles; // 小车交通量(4米<车长<6米),辆/单位时间, + public int nMotoVehicles; // 摩托交通量(微型车,车长<4米),辆/单位时间, + public int nLongVehicles; // 超长交通量(车长>=12米),辆/单位时间, + public int nVolume; // 交通量, 辆/单位时间, 某时间间隔通过车道、道路或其他通道上一点的车辆数,常以1小时计, + public int nFlowRate; // 流率小车当量,辆/小时, 车辆通过车道、道路某一断面或某一路段的当量小时流量 + public int nBackOfQueue; // 排队长度,单位:米, 从信号交叉口停车线到上游排队车辆末端之间的距离 + public int nTravelTime; // 旅行时间,单位:秒, 车辆通过某一条道路所用时间。包括所有停车延误 + public int nDelay; // 延误,单位:秒,驾驶员、乘客或行人花费的额外的行程时间 + public byte[] byDirection = new byte[MAX_DRIVING_DIR_NUM]; // 车道方向,详见NET_ROAD_DIRECTION + public byte byDirectionNum; // 车道行驶方向个数 + public byte[] reserved1 = new byte[3]; // 字节对齐 + public int emJamState; // 道路拥挤状况 (参见 NET_TRAFFIC_JAM_STATUS ) // 按车辆类型统计交通量 - public int nPassengerCarVehicles; // 客车交通量(辆/单位时间) - public int nLargeTruckVehicles; // 大货车交通量(辆/单位时间) - public int nMidTruckVehicles; // 中货车交通量(辆/单位时间) - public int nSaloonCarVehicles; // 轿车交通量(辆/单位时间) - public int nMicrobusVehicles; // 面包车交通量(辆/单位时间) - public int nMicroTruckVehicles; // 小货车交通量(辆/单位时间) - public int nTricycleVehicles; // 三轮车交通量(辆/单位时间) - public int nMotorcycleVehicles; // 摩托车交通量(辆/单位时间) - public int nPasserbyVehicles; // 行人交通量(辆/单位时间) - public int emRank; // 道路等级, 参考 NET_TRAFFIC_ROAD_RANK - public int nState; // 流量状态 - // 1- 流量过大(拥堵) - // 2- 流量过大恢复(略堵) - // 3- 正常 - // 4- 流量过小(通畅) - // 5- 流量过小恢复(良好) - public int bOccupyHeadCoil; // 车头虚拟线圈是否被占用 TURE表示占用,FALSE表示未占用 - public int bOccupyTailCoil; // 车尾虚拟线圈是否被占用 TURE表示占用,FALSE表示未占用 - public int bStatistics; // 流量数据是否有效 TURE表示有效,FALSE表示无效 - - public int nLeftVehicles; // 左转车辆总数,单位:分钟 - public int nRightVehicles; // 右转车辆总数,单位:分钟 - public int nStraightVehicles; // 直行车辆总数,单位:分钟 - public int nUTurnVehicles; // 掉头车辆总数,单位:分钟 - public NET_POINT stQueueEnd; // 每个车道的最后一辆车坐标,采用8192坐标系 - public double dBackOfQueue; // 排队长度,单位:米, 从信号交叉口停车线到上游排队车辆末端之间的距离 - public int dwPeriodByMili; // 流量值的毫秒时间,值不超过60000,和dwPeriod一起使用,流量值总时间:dwPeriod*60*1000+dwPeriodByMili(单位:毫秒) - public int nBusVehicles; // 公交车交通量(辆/单位时间) - public int nMPVVehicles; // MPV交通量(辆/单位时间) - public int nMidPassengerCarVehicles; // 中客车交通量(辆/单位时间) - public int nMiniCarriageVehicles; // 微型轿车交通量(辆/单位时间) - public int nOilTankTruckVehicles; // 油罐车交通量(辆/单位时间) - public int nPickupVehicles; // 皮卡车交通量(辆/单位时间) - public int nSUVVehicles; // SUV交通量(辆/单位时间) - public int nSUVorMPVVehicles; // SUV或者MPV交通量(辆/单位时间) - public int nTankCarVehicles; // 槽罐车交通量(辆/单位时间) - public int nUnknownVehicles; // 未知车辆交通量(辆/单位时间) - public byte[] reserved = new byte[724]; // 保留字节 + public int nPassengerCarVehicles; // 客车交通量(辆/单位时间) + public int nLargeTruckVehicles; // 大货车交通量(辆/单位时间) + public int nMidTruckVehicles; // 中货车交通量(辆/单位时间) + public int nSaloonCarVehicles; // 轿车交通量(辆/单位时间) + public int nMicrobusVehicles; // 面包车交通量(辆/单位时间) + public int nMicroTruckVehicles; // 小货车交通量(辆/单位时间) + public int nTricycleVehicles; // 三轮车交通量(辆/单位时间) + public int nMotorcycleVehicles; // 摩托车交通量(辆/单位时间) + public int nPasserbyVehicles; // 行人交通量(辆/单位时间) + public int emRank; // 道路等级, 参考 NET_TRAFFIC_ROAD_RANK + public int nState; // 流量状态 + // 1- 流量过大(拥堵) + // 2- 流量过大恢复(略堵) + // 3- 正常 + // 4- 流量过小(通畅) + // 5- 流量过小恢复(良好) + public int bOccupyHeadCoil; // 车头虚拟线圈是否被占用 TURE表示占用,FALSE表示未占用 + public int bOccupyTailCoil; // 车尾虚拟线圈是否被占用 TURE表示占用,FALSE表示未占用 + public int bStatistics; // 流量数据是否有效 TURE表示有效,FALSE表示无效 + + public int nLeftVehicles; // 左转车辆总数,单位:分钟 + public int nRightVehicles; // 右转车辆总数,单位:分钟 + public int nStraightVehicles; // 直行车辆总数,单位:分钟 + public int nUTurnVehicles; // 掉头车辆总数,单位:分钟 + public NET_POINT stQueueEnd; // 每个车道的最后一辆车坐标,采用8192坐标系 + public double dBackOfQueue; // 排队长度,单位:米, 从信号交叉口停车线到上游排队车辆末端之间的距离 + public int dwPeriodByMili; // 流量值的毫秒时间,值不超过60000,和dwPeriod一起使用,流量值总时间:dwPeriod*60*1000+dwPeriodByMili(单位:毫秒) + public int nBusVehicles; // 公交车交通量(辆/单位时间) + public int nMPVVehicles; // MPV交通量(辆/单位时间) + public int nMidPassengerCarVehicles; // 中客车交通量(辆/单位时间) + public int nMiniCarriageVehicles; // 微型轿车交通量(辆/单位时间) + public int nOilTankTruckVehicles; // 油罐车交通量(辆/单位时间) + public int nPickupVehicles; // 皮卡车交通量(辆/单位时间) + public int nSUVVehicles; // SUV交通量(辆/单位时间) + public int nSUVorMPVVehicles; // SUV或者MPV交通量(辆/单位时间) + public int nTankCarVehicles; // 槽罐车交通量(辆/单位时间) + public int nUnknownVehicles; // 未知车辆交通量(辆/单位时间) + public byte[] reserved = new byte[724]; // 保留字节 } //事件类型 EVENT_IVS_TRAFFIC_FLOWSTATE(交通流量事件)对应数据块描述信息 - public static class DEV_EVENT_TRAFFIC_FLOW_STATE extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[8]; // 字节对齐 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nSequence; // 序号 - public int nStateNum; // 流量状态数量 - public NET_TRAFFIC_FLOW_STATE[] stuStates = (NET_TRAFFIC_FLOW_STATE[])new NET_TRAFFIC_FLOW_STATE().toArray(NET_MAX_LANE_NUM); // 流量状态, 每个车道对应数组中一个元素 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] bReserved = new byte[892]; // 保留字节 - } - + public static class DEV_EVENT_TRAFFIC_FLOW_STATE extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[8]; // 字节对齐 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nSequence; // 序号 + public int nStateNum; // 流量状态数量 + public NET_TRAFFIC_FLOW_STATE[] stuStates = (NET_TRAFFIC_FLOW_STATE[]) new NET_TRAFFIC_FLOW_STATE().toArray(NET_MAX_LANE_NUM); // 流量状态, 每个车道对应数组中一个元素 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] bReserved = new byte[892]; // 保留字节 + } + // 图片分辨率 - public static class NET_RESOLUTION_INFO extends Structure - { + public static class NET_RESOLUTION_INFO extends Structure { public short snWidth;//宽 public short snHight;//高 } - public static class EM_COMMON_SEAT_TYPE extends Structure - { + public static class EM_COMMON_SEAT_TYPE extends Structure { public static final int COMMON_SEAT_TYPE_UNKNOWN = 0;//未识别 public static final int COMMON_SEAT_TYPE_MAIN = 1;//主驾驶 public static final int COMMON_SEAT_TYPE_SLAVE = 2;//副驾驶 } // 违规状态 - public static class EVENT_COMM_STATUS extends Structure - { + public static class EVENT_COMM_STATUS extends Structure { public byte bySmoking;//是否抽烟 public byte byCalling;//是否打电话 public byte[] szReserved = new byte[14];//预留字段 } - public static class NET_SAFEBELT_STATE extends Structure - { + public static class NET_SAFEBELT_STATE extends Structure { public static final int SS_NUKNOW = 0;//未知 public static final int SS_WITH_SAFE_BELT = 1;//已系安全带 public static final int SS_WITHOUT_SAFE_BELT = 2;//未系安全带 } //遮阳板状态 - public static class NET_SUNSHADE_STATE extends Structure - { + public static class NET_SUNSHADE_STATE extends Structure { public static final int SS_NUKNOW_SUN_SHADE = 0;//未知 public static final int SS_WITH_SUN_SHADE = 1;//有遮阳板 public static final int SS_WITHOUT_SUN_SHADE = 2;//无遮阳板 } // 驾驶位违规信息 - public static class EVENT_COMM_SEAT extends Structure - { + public static class EVENT_COMM_SEAT extends Structure { public int bEnable;//是否检测到座驾信息, 类型BOOL, 取值0或者1 public int emSeatType;//座驾类型,0:未识别;1:主驾驶; 取值为EM_COMMON_SEAT_TYPE中的值 public EVENT_COMM_STATUS stStatus;//违规状态 @@ -4078,8 +3910,7 @@ public interface NetSDKLib extends Library { public byte[] szReserved = new byte[24];//预留字节 } - public static class EM_COMM_ATTACHMENT_TYPE extends Structure - { + public static class EM_COMM_ATTACHMENT_TYPE extends Structure { public static final int COMM_ATTACHMENT_TYPE_UNKNOWN = 0;// 未知类型 public static final int COMM_ATTACHMENT_TYPE_FURNITURE = 1;// 摆件 public static final int COMM_ATTACHMENT_TYPE_PENDANT = 2;// 挂件 @@ -4088,174 +3919,165 @@ public interface NetSDKLib extends Library { } // 车辆物件 - public static class EVENT_COMM_ATTACHMENT extends Structure - { + public static class EVENT_COMM_ATTACHMENT extends Structure { public int emAttachmentType;//物件类型, 取值为EM_COMM_ATTACHMENT_TYPE中的值 public NET_RECT stuRect;//坐标 public byte[] bReserved = new byte[20];//预留字节 } - + //NTP校时状态 - public static class EM_NTP_STATUS extends Structure - { + public static class EM_NTP_STATUS extends Structure { public static final int NET_NTP_STATUS_UNKNOWN = 0; public static final int NET_NTP_STATUS_DISABLE = 1; public static final int NET_NTP_STATUS_SUCCESSFUL = 2; public static final int NET_NTP_STATUS_FAILED = 3; } - + // 交通抓图图片信息 - public static class EVENT_PIC_INFO extends Structure - { - public int nOffset; // 原始图片偏移,单位字节 - public int nLength; // 原始图片长度,单位字节 - } - - public static class EVENT_COMM_INFO extends Structure - { - public int emNTPStatus; // NTP校时状态, 取值为EM_NTP_STATUS中的值 - public int nDriversNum; // 驾驶员信息数 - public Pointer pstDriversInfo; // 驾驶员信息数据,类型为 NET_MSG_OBJECT_EX* - public Pointer pszFilePath; // 本地硬盘或者sd卡成功写入路径,为NULL时,路径不存在, 类型为char * - public Pointer pszFTPPath; // 设备成功写到ftp服务器的路径, 类型为char * - public Pointer pszVideoPath; // 当前接入需要获取当前违章的关联视频的FTP上传路径, 类型为char * - public EVENT_COMM_SEAT[] stCommSeat = (EVENT_COMM_SEAT[])new EVENT_COMM_SEAT().toArray(COMMON_SEAT_MAX_NUMBER);// 驾驶位信息 - public int nAttachmentNum; // 车辆物件个数 - public EVENT_COMM_ATTACHMENT[] stuAttachment = (EVENT_COMM_ATTACHMENT[])new EVENT_COMM_ATTACHMENT().toArray(NET_MAX_ATTACHMENT_NUM);//车辆物件信息 - public int nAnnualInspectionNum; // 年检标志个数 - public NET_RECT[] stuAnnualInspection = (NET_RECT[])new NET_RECT().toArray(NET_MAX_ANNUUALINSPECTION_NUM);//年检标志 - public float fHCRatio; // HC所占比例,单位:% - public float fNORatio; // NO所占比例,单位:% - public float fCOPercent; // CO所占百分比,单位:% 取值0~100 - public float fCO2Percent; // CO2所占百分比,单位:% 取值0~100 - public float fLightObscuration; // 不透光度,单位:% 取值0~100 - public int nPictureNum; // 原始图片张数 - public EVENT_PIC_INFO[] stuPicInfos = (EVENT_PIC_INFO[])new EVENT_PIC_INFO().toArray(NET_MAX_EVENT_PIC_NUM);// 原始图片信息 - public float fTemperature; // 温度值,单位摄氏度 - public int nHumidity; // 相对湿度百分比值 - public float fPressure; // 气压值,单位Kpa - public float fWindForce; // 风力值,单位m/s - public int nWindDirection; // 风向,单位度,范围:[0,360] - public float fRoadGradient; // 道路坡度值,单位度 - public float fAcceleration; // 加速度值,单位:m/s2 - public NET_RFIDELETAG_INFO stuRFIDEleTagInfo; // RFID 电子车牌标签信息 - public byte[] bReserved = new byte[704]; // 预留字节 - public byte[] szCountry = new byte[20]; // 国家 - } - - // RFID 电子车牌标签信息 - public static class NET_RFIDELETAG_INFO extends Structure - { - public byte[] szCardID = new byte[MAX_RFIDELETAG_CARDID_LEN]; // 卡号 - public int nCardType; // 卡号类型, 0:交通管理机关发行卡, 1:新车出厂预装卡 - public int emCardPrivince; // 卡号省份, 对应 EM_CARD_PROVINCE - public byte[] szPlateNumber = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号码 - public byte[] szProductionDate = new byte[MAX_RFIDELETAG_DATE_LEN]; // 出厂日期 - public int emCarType; // 车辆类型, 对应 EM_CAR_TYPE - public int nPower; // 功率,单位:千瓦时,功率值范围0~254;255表示该车功率大于可存储的最大功率值 - public int nDisplacement; // 排量,单位:百毫升,排量值范围0~254;255表示该车排量大于可存储的最大排量值 - public int nAntennaID; // 天线ID,取值范围:1~4 - public int emPlateType; // 号牌种类, 对应 EM_PLATE_TYPE - public byte[] szInspectionValidity = new byte[MAX_RFIDELETAG_DATE_LEN]; // 检验有效期,年-月 - public int nInspectionFlag; // 逾期未年检标志, 0:已年检, 1:逾期未年检 - public int nMandatoryRetirement; // 强制报废期,从检验有效期开始,距离强制报废期的年数 - public int emCarColor; // 车身颜色, 对应 EM_CAR_COLOR_TYPE - public int nApprovedCapacity; // 核定载客量,该值<0时:无效;此值表示核定载客,单位为人 - public int nApprovedTotalQuality; // 此值表示总质量,单位为百千克;该值<0时:无效;该值的有效范围为0~0x3FF,0x3FF(1023)表示数据值超过了可存储的最大值 - public NET_TIME_EX stuThroughTime; // 过车时间 - public int emUseProperty; // 使用性质, 对应 EM_USE_PROPERTY_TYPE - public byte[] szPlateCode = new byte[MAX_COMMON_STRING_8]; // 发牌代号,UTF-8编码 - public byte[] szPlateSN = new byte[MAX_COMMON_STRING_16]; // 号牌号码序号,UTF-8编码 - public byte[] bReserved = new byte[104]; // 保留字节,留待扩展. - } - + public static class EVENT_PIC_INFO extends Structure { + public int nOffset; // 原始图片偏移,单位字节 + public int nLength; // 原始图片长度,单位字节 + } + + public static class EVENT_COMM_INFO extends Structure { + public int emNTPStatus; // NTP校时状态, 取值为EM_NTP_STATUS中的值 + public int nDriversNum; // 驾驶员信息数 + public Pointer pstDriversInfo; // 驾驶员信息数据,类型为 NET_MSG_OBJECT_EX* + public Pointer pszFilePath; // 本地硬盘或者sd卡成功写入路径,为NULL时,路径不存在, 类型为char * + public Pointer pszFTPPath; // 设备成功写到ftp服务器的路径, 类型为char * + public Pointer pszVideoPath; // 当前接入需要获取当前违章的关联视频的FTP上传路径, 类型为char * + public EVENT_COMM_SEAT[] stCommSeat = (EVENT_COMM_SEAT[]) new EVENT_COMM_SEAT().toArray(COMMON_SEAT_MAX_NUMBER);// 驾驶位信息 + public int nAttachmentNum; // 车辆物件个数 + public EVENT_COMM_ATTACHMENT[] stuAttachment = (EVENT_COMM_ATTACHMENT[]) new EVENT_COMM_ATTACHMENT().toArray(NET_MAX_ATTACHMENT_NUM);//车辆物件信息 + public int nAnnualInspectionNum; // 年检标志个数 + public NET_RECT[] stuAnnualInspection = (NET_RECT[]) new NET_RECT().toArray(NET_MAX_ANNUUALINSPECTION_NUM);//年检标志 + public float fHCRatio; // HC所占比例,单位:% + public float fNORatio; // NO所占比例,单位:% + public float fCOPercent; // CO所占百分比,单位:% 取值0~100 + public float fCO2Percent; // CO2所占百分比,单位:% 取值0~100 + public float fLightObscuration; // 不透光度,单位:% 取值0~100 + public int nPictureNum; // 原始图片张数 + public EVENT_PIC_INFO[] stuPicInfos = (EVENT_PIC_INFO[]) new EVENT_PIC_INFO().toArray(NET_MAX_EVENT_PIC_NUM);// 原始图片信息 + public float fTemperature; // 温度值,单位摄氏度 + public int nHumidity; // 相对湿度百分比值 + public float fPressure; // 气压值,单位Kpa + public float fWindForce; // 风力值,单位m/s + public int nWindDirection; // 风向,单位度,范围:[0,360] + public float fRoadGradient; // 道路坡度值,单位度 + public float fAcceleration; // 加速度值,单位:m/s2 + public NET_RFIDELETAG_INFO stuRFIDEleTagInfo; // RFID 电子车牌标签信息 + public byte[] bReserved = new byte[704]; // 预留字节 + public byte[] szCountry = new byte[20]; // 国家 + } + + // RFID 电子车牌标签信息 + public static class NET_RFIDELETAG_INFO extends Structure { + public byte[] szCardID = new byte[MAX_RFIDELETAG_CARDID_LEN]; // 卡号 + public int nCardType; // 卡号类型, 0:交通管理机关发行卡, 1:新车出厂预装卡 + public int emCardPrivince; // 卡号省份, 对应 EM_CARD_PROVINCE + public byte[] szPlateNumber = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号码 + public byte[] szProductionDate = new byte[MAX_RFIDELETAG_DATE_LEN]; // 出厂日期 + public int emCarType; // 车辆类型, 对应 EM_CAR_TYPE + public int nPower; // 功率,单位:千瓦时,功率值范围0~254;255表示该车功率大于可存储的最大功率值 + public int nDisplacement; // 排量,单位:百毫升,排量值范围0~254;255表示该车排量大于可存储的最大排量值 + public int nAntennaID; // 天线ID,取值范围:1~4 + public int emPlateType; // 号牌种类, 对应 EM_PLATE_TYPE + public byte[] szInspectionValidity = new byte[MAX_RFIDELETAG_DATE_LEN]; // 检验有效期,年-月 + public int nInspectionFlag; // 逾期未年检标志, 0:已年检, 1:逾期未年检 + public int nMandatoryRetirement; // 强制报废期,从检验有效期开始,距离强制报废期的年数 + public int emCarColor; // 车身颜色, 对应 EM_CAR_COLOR_TYPE + public int nApprovedCapacity; // 核定载客量,该值<0时:无效;此值表示核定载客,单位为人 + public int nApprovedTotalQuality; // 此值表示总质量,单位为百千克;该值<0时:无效;该值的有效范围为0~0x3FF,0x3FF(1023)表示数据值超过了可存储的最大值 + public NET_TIME_EX stuThroughTime; // 过车时间 + public int emUseProperty; // 使用性质, 对应 EM_USE_PROPERTY_TYPE + public byte[] szPlateCode = new byte[MAX_COMMON_STRING_8]; // 发牌代号,UTF-8编码 + public byte[] szPlateSN = new byte[MAX_COMMON_STRING_16]; // 号牌号码序号,UTF-8编码 + public byte[] bReserved = new byte[104]; // 保留字节,留待扩展. + } + // 车检器冗余信息 - public static class NET_SIG_CARWAY_INFO_EX extends Structure - { + public static class NET_SIG_CARWAY_INFO_EX extends Structure { public byte[] byRedundance = new byte[8];//由车检器产生抓拍信号冗余信息 public byte[] bReserved = new byte[120];//保留字段 } - + // 颜色RGBA - public static class NET_COLOR_RGBA extends Structure - { + public static class NET_COLOR_RGBA extends Structure { public int nRed;//红 public int nGreen;//绿 public int nBlue;//蓝 public int nAlpha;//透明 - + public String toString() { - return "[" + nRed + " " + nGreen + " " + nBlue + " " + nAlpha + "]"; + return "[" + nRed + " " + nGreen + " " + nBlue + " " + nAlpha + "]"; } } // TrafficCar 交通车辆信息 - public static class DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO extends Structure - { - public byte[] szPlateNumber = new byte[32]; //车牌号码 - public byte[] szPlateType = new byte[32]; //号牌类型参见VideoAnalyseRule中车牌类型定义 - public byte[] szPlateColor = new byte[32]; //车牌颜色"Blue","Yellow", - public byte[] szVehicleColor = new byte[32]; //车身颜色"White", - public int nSpeed; //速度单位Km/H - public byte[] szEvent = new byte[64]; //触发的相关事件参见事件列表Event - public byte[] szViolationCode = new byte[32]; //违章代码详见TrafficGlobal.ViolationCode - public byte[] szViolationDesc = new byte[64]; //违章描述 - public int nLowerSpeedLimit; //速度下限 - public int nUpperSpeedLimit; //速度上限 - public int nOverSpeedMargin; //限高速宽限值单位:km/h - public int nUnderSpeedMargin; //限低速宽限值单位:km/h - public int nLane; //车道参见事件列表EventList中卡口和路口事件。 - public int nVehicleSize; //车辆大小,-1表示未知,否则按位 - // 第0位:"Light-duty", 小型车 - // 第1位:"Medium", 中型车 - // 第2位:"Oversize", 大型车 - // 第3位:"Minisize", 微型车 - // 第4位:"Largesize", 长车 - public float fVehicleLength; //车辆长度单位米 - public int nSnapshotMode; //抓拍方式0-未分类,1-全景,2-近景,4-同向抓拍,8-反向抓拍,16-号牌图像 - public byte[] szChannelName = new byte[32]; //本地或远程的通道名称,可以是地点信息来源于通道标题配置ChannelTitle.Name - public byte[] szMachineName = new byte[256]; // 本地或远程设备名称来源于普通配置General.MachineName - public byte[] szMachineGroup = new byte[256]; // 机器分组或叫设备所属单位默认为空,用户可以将不同的设备编为一组,便于管理,可重复。 - public byte[] szRoadwayNo = new byte[64]; // 道路编号 - public byte[] szDrivingDirection = new byte[3*NET_MAX_DRIVINGDIRECTION];// - // 行驶方向 , "DrivingDirection" : ["Approach", "上海", "杭州"], - // "Approach"-上行,即车辆离设备部署点越来越近;"Leave"-下行, - // 即车辆离设备部署点越来越远,第二和第三个参数分别代表上行和 - // 下行的两个地点 - public Pointer szDeviceAddress; // 设备地址,OSD叠加到图片上的,来源于配 置TrafficSnapshot.DeviceAddress,'\0'结束 - public byte[] szVehicleSign = new byte[32]; // 车辆标识,例如 - public NET_SIG_CARWAY_INFO_EX stuSigInfo; // 由车检器产生抓拍信号冗余信息 - public Pointer szMachineAddr; // 设备部署地点 - public float fActualShutter; // 当前图片曝光时间,单位为毫秒 - public byte byActualGain; // 当前图片增益,范围为0~100 - public byte byDirection; // 车道方向,0-南向北1-西南向东北2-西向东 - public byte[] byReserved = new byte[2]; - public Pointer szDetailedAddress; // 详细地址,作为szDeviceAddress的补充 - public byte[] szDefendCode = new byte[NET_COMMON_STRING_64];//图片防伪码 - public int nTrafficBlackListID; // 关联黑名单数据库记录默认主键ID,0,无效;>0,黑名单数据记录 - public NET_COLOR_RGBA stuRGBA; // 车身颜色RGBA - public NET_TIME stSnapTime; // 抓拍时间 - public int nRecNo; // 记录编号 - public byte[] szCustomParkNo= new byte[NET_COMMON_STRING_32+1];// 自定义车位号(停车场用) - public byte[] byReserved1 = new byte[3]; - public int nDeckNo; // 车板位号 - public int nFreeDeckCount; // 空闲车板数量 - public int nFullDeckCount; // 占用车板数量 - public int nTotalDeckCount; // 总共车板数量 - public byte[] szViolationName = new byte[64]; // 违章名称 - public int nWeight; // 车重(单位Kg), 类型为unsigned int - - public byte[] szCustomRoadwayDirection = new byte[32];// 自定义车道方向,byDirection为9时有效 - public byte byPhysicalLane; // 物理车道号,取值0到5 - public byte[] byReserved2 = new byte[3]; - public int emMovingDirection; // 车辆行驶方向 EM_TRAFFICCAR_MOVE_DIRECTION - public NET_TIME stuEleTagInfoUTC; // 对应电子车牌标签信息中的过车时间(ThroughTime) - public byte[] bReserved = new byte[552]; // 保留字节,留待扩展. + public static class DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO extends Structure { + public byte[] szPlateNumber = new byte[32]; //车牌号码 + public byte[] szPlateType = new byte[32]; //号牌类型参见VideoAnalyseRule中车牌类型定义 + public byte[] szPlateColor = new byte[32]; //车牌颜色"Blue","Yellow", + public byte[] szVehicleColor = new byte[32]; //车身颜色"White", + public int nSpeed; //速度单位Km/H + public byte[] szEvent = new byte[64]; //触发的相关事件参见事件列表Event + public byte[] szViolationCode = new byte[32]; //违章代码详见TrafficGlobal.ViolationCode + public byte[] szViolationDesc = new byte[64]; //违章描述 + public int nLowerSpeedLimit; //速度下限 + public int nUpperSpeedLimit; //速度上限 + public int nOverSpeedMargin; //限高速宽限值单位:km/h + public int nUnderSpeedMargin; //限低速宽限值单位:km/h + public int nLane; //车道参见事件列表EventList中卡口和路口事件。 + public int nVehicleSize; //车辆大小,-1表示未知,否则按位 + // 第0位:"Light-duty", 小型车 + // 第1位:"Medium", 中型车 + // 第2位:"Oversize", 大型车 + // 第3位:"Minisize", 微型车 + // 第4位:"Largesize", 长车 + public float fVehicleLength; //车辆长度单位米 + public int nSnapshotMode; //抓拍方式0-未分类,1-全景,2-近景,4-同向抓拍,8-反向抓拍,16-号牌图像 + public byte[] szChannelName = new byte[32]; //本地或远程的通道名称,可以是地点信息来源于通道标题配置ChannelTitle.Name + public byte[] szMachineName = new byte[256]; // 本地或远程设备名称来源于普通配置General.MachineName + public byte[] szMachineGroup = new byte[256]; // 机器分组或叫设备所属单位默认为空,用户可以将不同的设备编为一组,便于管理,可重复。 + public byte[] szRoadwayNo = new byte[64]; // 道路编号 + public byte[] szDrivingDirection = new byte[3 * NET_MAX_DRIVINGDIRECTION];// + // 行驶方向 , "DrivingDirection" : ["Approach", "上海", "杭州"], + // "Approach"-上行,即车辆离设备部署点越来越近;"Leave"-下行, + // 即车辆离设备部署点越来越远,第二和第三个参数分别代表上行和 + // 下行的两个地点 + public Pointer szDeviceAddress; // 设备地址,OSD叠加到图片上的,来源于配 置TrafficSnapshot.DeviceAddress,'\0'结束 + public byte[] szVehicleSign = new byte[32]; // 车辆标识,例如 + public NET_SIG_CARWAY_INFO_EX stuSigInfo; // 由车检器产生抓拍信号冗余信息 + public Pointer szMachineAddr; // 设备部署地点 + public float fActualShutter; // 当前图片曝光时间,单位为毫秒 + public byte byActualGain; // 当前图片增益,范围为0~100 + public byte byDirection; // 车道方向,0-南向北1-西南向东北2-西向东 + public byte[] byReserved = new byte[2]; + public Pointer szDetailedAddress; // 详细地址,作为szDeviceAddress的补充 + public byte[] szDefendCode = new byte[NET_COMMON_STRING_64];//图片防伪码 + public int nTrafficBlackListID; // 关联黑名单数据库记录默认主键ID,0,无效;>0,黑名单数据记录 + public NET_COLOR_RGBA stuRGBA; // 车身颜色RGBA + public NET_TIME stSnapTime; // 抓拍时间 + public int nRecNo; // 记录编号 + public byte[] szCustomParkNo = new byte[NET_COMMON_STRING_32 + 1];// 自定义车位号(停车场用) + public byte[] byReserved1 = new byte[3]; + public int nDeckNo; // 车板位号 + public int nFreeDeckCount; // 空闲车板数量 + public int nFullDeckCount; // 占用车板数量 + public int nTotalDeckCount; // 总共车板数量 + public byte[] szViolationName = new byte[64]; // 违章名称 + public int nWeight; // 车重(单位Kg), 类型为unsigned int + + public byte[] szCustomRoadwayDirection = new byte[32];// 自定义车道方向,byDirection为9时有效 + public byte byPhysicalLane; // 物理车道号,取值0到5 + public byte[] byReserved2 = new byte[3]; + public int emMovingDirection; // 车辆行驶方向 EM_TRAFFICCAR_MOVE_DIRECTION + public NET_TIME stuEleTagInfoUTC; // 对应电子车牌标签信息中的过车时间(ThroughTime) + public byte[] bReserved = new byte[552]; // 保留字节,留待扩展. } // 事件类型EVENT_IVS_TRAFFIC_PARKING(交通违章停车事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_PARKING_INFO extends Structure - { + public static class DEV_EVENT_TRAFFIC_PARKING_INFO extends Structure { public int nChannelID;//通道号 public byte[] szName = new byte[128];//事件名称 public byte[] bReserved1 = new byte[4];//字节对齐 @@ -4274,7 +4096,7 @@ public interface NetSDKLib extends Library { public int nAlarmIntervalTime;//报警时间间隔,单位:秒。(此事件为连续性事件,在收到第一个此事件之后,若在超过间隔时间后未收到此事件的后续事件,则认为此事件异常结束了) public int nParkingAllowedTime;//允许停车时长,单位:秒。 public int nDetectRegionNum;//规则检测区域顶点数 - public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);//规则检测区域 + public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);//规则检测区域 public int dwSnapFlagMask;//抓图标志(按位),具体见NET_RESERVED_COMMON public NET_RESOLUTION_INFO stuResolution;//对应图片的分辨率 public int bIsExistAlarmRecord;//true:有对应的报警录像;false:无对应的报警录像, 类型为BOOL, 取值为0或1 @@ -4282,1588 +4104,1531 @@ public interface NetSDKLib extends Library { public byte[] szAlarmRecordPath = new byte[NET_COMMON_STRING_256];//录像路径 public byte[] szFTPPath = new byte[NET_COMMON_STRING_256];//FTP路径 public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo;//智能事件公共信息 - public byte byPreAlarm; // 是否为违章预警图片,0 违章停车事件1 预警事件(预警触发后一定时间,车辆还没有离开,才判定为违章)由于此字段会导致事件含义改变,必须和在平台识别预警事件后,才能有此字段, - public byte[] bReserved2 = new byte[3]; // 保留字节,留待扩展. + public byte byPreAlarm; // 是否为违章预警图片,0 违章停车事件1 预警事件(预警触发后一定时间,车辆还没有离开,才判定为违章)由于此字段会导致事件含义改变,必须和在平台识别预警事件后,才能有此字段, + public byte[] bReserved2 = new byte[3]; // 保留字节,留待扩展. public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 public byte[] bReserved = new byte[228];//保留字节,留待扩展. public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar;//交通车辆信息 public EVENT_COMM_INFO stCommInfo;//公共信息 } - + //停车场信息 - public static class DEV_TRAFFIC_PARKING_INFO extends Structure - { - public int nFeaturePicAreaPointNum; // 特征图片区点个数 - public NET_POINT[] stFeaturePicArea = (NET_POINT[])new NET_POINT().toArray(NET_MAX_POLYGON_NUM); // 特征图片区信息 - public byte[] bReserved = new byte[572]; // 保留字节 + public static class DEV_TRAFFIC_PARKING_INFO extends Structure { + public int nFeaturePicAreaPointNum; // 特征图片区点个数 + public NET_POINT[] stFeaturePicArea = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_POLYGON_NUM); // 特征图片区信息 + public byte[] bReserved = new byte[572]; // 保留字节 } - + //事件类型 EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING(车位有车事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[8]; // 字节对齐 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 + public static class DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[8]; // 字节对齐 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public int nParkingSpaceStatus; // 车位状态,0-占用,1-空闲,2-压线 + public int nParkingSpaceStatus; // 车位状态,0-占用,1-空闲,2-压线 public DEV_TRAFFIC_PARKING_INFO stTrafficParingInfo; // 停车场信息 - public byte byPlateTextSource; // 车牌识别来源, 0:本地算法识别,1:后端服务器算法识别 - public byte[] byReserved2 = new byte[3]; // 字节对齐 - public byte[] szParkingNum = new byte[32]; // 车位(地磁)编号,球机定制项目 - public int dwPresetNum; // 球机预置位编号,球机定制项目 - public int bParkingFault; // 车位是否有故障,球机定制项目 - public byte[] bReserved = new byte[364]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public byte byPlateTextSource; // 车牌识别来源, 0:本地算法识别,1:后端服务器算法识别 + public byte[] byReserved2 = new byte[3]; // 字节对齐 + public byte[] szParkingNum = new byte[32]; // 车位(地磁)编号,球机定制项目 + public int dwPresetNum; // 球机预置位编号,球机定制项目 + public int bParkingFault; // 车位是否有故障,球机定制项目 + public byte[] bReserved = new byte[364]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } // 事件类型 EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING(车位无车事件)对应的数据块描述信息 // 由于历史原因,如果要处理卡口事件,DEV_EVENT_TRAFFICJUNCTION_INFO和EVENT_IVS_TRAFFICGATE要一起处理,以防止有视频电警和线圈电警同时接入平台的情况发生 // 另外EVENT_IVS_TRAFFIC_TOLLGATE只支持新卡口事件的配置 - public static class DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[8]; // 字节对齐 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public static class DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[8]; // 字节对齐 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 public DEV_TRAFFIC_PARKING_INFO stTrafficParingInfo; // 停车场信息 - public byte byPlateTextSource; // 车牌识别来源, 0:本地算法识别,1:后端服务器算法识别 - public byte[] byReserved2 = new byte[3]; // 字节对齐 - public byte[] szParkingNum = new byte[32]; // 车位(地磁)编号,球机定制项目 - public int dwPresetNum; // 球机预置位编号,球机定制项目 - public int bParkingFault; // 车位是否有故障,球机定制项目 - public byte[] bReserved = new byte[368]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - } - + public byte byPlateTextSource; // 车牌识别来源, 0:本地算法识别,1:后端服务器算法识别 + public byte[] byReserved2 = new byte[3]; // 字节对齐 + public byte[] szParkingNum = new byte[32]; // 车位(地磁)编号,球机定制项目 + public int dwPresetNum; // 球机预置位编号,球机定制项目 + public int bParkingFault; // 车位是否有故障,球机定制项目 + public byte[] bReserved = new byte[368]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + } + //事件类型 EVENT_IVS_TRAFFIC_PEDESTRAIN(交通行人事件)对应数据块描述信息 public static class DEV_EVENT_TRAFFIC_PEDESTRAIN_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[8]; // 字节对齐 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[8]; // 字节对齐 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public int dwSnapFlagMask; // 抓图标志(按位),0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] bReserved2 = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] bReserved = new byte[892]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public int dwSnapFlagMask; // 抓图标志(按位),0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] bReserved2 = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] bReserved = new byte[892]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } //事件类型 EVENT_IVS_TRAFFIC_THROW(交通抛洒物品事件)对应数据块描述信息 public static class DEV_EVENT_TRAFFIC_THROW_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[8]; // 字节对齐 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[8]; // 字节对齐 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public int dwSnapFlagMask; // 抓图标志(按位),0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] bReserved2 = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public int dwSnapFlagMask; // 抓图标志(按位),0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] bReserved2 = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 public EVENT_TRAFFIC_CAR_PART_INFO stuTrafficCarPartInfo; // 交通车辆部分信息 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[340]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[340]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + // 交通车辆部分信息 - public class EVENT_TRAFFIC_CAR_PART_INFO extends Structure - { - public byte[] szMachineName = new byte[128]; // 本地或远程设备名称 来源于普通配置General.MachineName - public byte[] szRoadwayNo = new byte[32]; // 道路编号 - public byte[] bReserved = new byte[352]; // 保留字节 + public class EVENT_TRAFFIC_CAR_PART_INFO extends Structure { + public byte[] szMachineName = new byte[128]; // 本地或远程设备名称 来源于普通配置General.MachineName + public byte[] szRoadwayNo = new byte[32]; // 道路编号 + public byte[] bReserved = new byte[352]; // 保留字节 } - + // 事件上报携带卡片信息 - public static class EVENT_CARD_INFO extends Structure - { - public byte[] szCardNumber = new byte[NET_EVENT_CARD_LEN];// 卡片序号字符串 - public byte[] bReserved = new byte[32]; // 保留字节,留待扩展. + public static class EVENT_CARD_INFO extends Structure { + public byte[] szCardNumber = new byte[NET_EVENT_CARD_LEN];// 卡片序号字符串 + public byte[] bReserved = new byte[32]; // 保留字节,留待扩展. } - + // 车辆方向信息 - public static class EM_VEHICLE_DIRECTION extends Structure - { - public static final int NET_VEHICLE_DIRECTION_UNKOWN = 0; // 未知 - public static final int NET_VEHICLE_DIRECTION_HEAD = 1; // 车头 - public static final int NET_VEHICLE_DIRECTION_TAIL = 2; // 车尾 + public static class EM_VEHICLE_DIRECTION extends Structure { + public static final int NET_VEHICLE_DIRECTION_UNKOWN = 0; // 未知 + public static final int NET_VEHICLE_DIRECTION_HEAD = 1; // 车头 + public static final int NET_VEHICLE_DIRECTION_TAIL = 2; // 车尾 } - + // 开闸状态 - public static class EM_OPEN_STROBE_STATE extends Structure - { - public static final int NET_OPEN_STROBE_STATE_UNKOWN = 0; // 未知状态 - public static final int NET_OPEN_STROBE_STATE_CLOSE = 1; // 关闸 - public static final int NET_OPEN_STROBE_STATE_AUTO = 2; // 自动开闸 - public static final int NET_OPEN_STROBE_STATE_MANUAL = 3; // 手动开闸 - } - - public static class RESERVED_PARA extends Structure - { - public int dwType; //pData的数据类型 - //当[dwType]为 RESERVED_TYPE_FOR_INTEL_BOX 时,pData 对应为结构体 RESERVED_DATA_INTEL_BOX 的地址 - //当[dwType]为 RESERVED_TYPE_FOR_COMMON 时,[pData]对应为结构体 NET_RESERVED_COMMON 的结构体地址 - //当[dwType]为 RESERVED_TYPE_FOR_PATH 时,[pData]对应结构体NET_RESERVED_PATH的结构体地址 - public Pointer pData; //数据,由用户申请内存,大小参考对应的结构体 - } - - public static class NET_RESERVED_COMMON extends Structure - { - public int dwStructSize; - public Pointer pIntelBox; // 对应 结构体 RESERVED_DATA_INTEL_BOX*, 兼容 RESERVED_TYPE_FOR_INTEL_BOX - public int dwSnapFlagMask; // 抓图标志(按位),0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - + public static class EM_OPEN_STROBE_STATE extends Structure { + public static final int NET_OPEN_STROBE_STATE_UNKOWN = 0; // 未知状态 + public static final int NET_OPEN_STROBE_STATE_CLOSE = 1; // 关闸 + public static final int NET_OPEN_STROBE_STATE_AUTO = 2; // 自动开闸 + public static final int NET_OPEN_STROBE_STATE_MANUAL = 3; // 手动开闸 + } + + public static class RESERVED_PARA extends Structure { + public int dwType; //pData的数据类型 + //当[dwType]为 RESERVED_TYPE_FOR_INTEL_BOX 时,pData 对应为结构体 RESERVED_DATA_INTEL_BOX 的地址 + //当[dwType]为 RESERVED_TYPE_FOR_COMMON 时,[pData]对应为结构体 NET_RESERVED_COMMON 的结构体地址 + //当[dwType]为 RESERVED_TYPE_FOR_PATH 时,[pData]对应结构体NET_RESERVED_PATH的结构体地址 + public Pointer pData; //数据,由用户申请内存,大小参考对应的结构体 + } + + public static class NET_RESERVED_COMMON extends Structure { + public int dwStructSize; + public Pointer pIntelBox; // 对应 结构体 RESERVED_DATA_INTEL_BOX*, 兼容 RESERVED_TYPE_FOR_INTEL_BOX + public int dwSnapFlagMask; // 抓图标志(按位),0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESERVED_COMMON() { - this.dwStructSize = this.size(); + this.dwStructSize = this.size(); } } - + // 事件类型 EVENT_IVS_TRAFFICJUNCTION 交通路口老规则事件/视频电警上的交通卡口老规则事件对应的数据块描述信息 // 由于历史原因,如果要处理卡口事件,DEV_EVENT_TRAFFICJUNCTION_INFO 和 EVENT_IVS_TRAFFICGATE要一起处理 // 以防止有视频电警和线圈电警同时接入平台的情况发生, 另外EVENT_IVS_TRAFFIC_TOLLGATE只支持新卡口事件的配置 - public static class DEV_EVENT_TRAFFICJUNCTION_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte byMainSeatBelt; // 主驾驶座,系安全带状态,1-系安全带,2-未系安全带 - public byte bySlaveSeatBelt; // 副驾驶座,系安全带状态,1-系安全带,2-未系安全带 - public byte byVehicleDirection; // 当前被抓拍到的车辆是车头还是车尾,具体请见 EM_VEHICLE_DIRECTION - public byte byOpenStrobeState; // 开闸状态,具体请见 EM_OPEN_STROBE_STATE - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public int nLane; // 对应车道号 - public int dwBreakingRule; // 违反规则掩码,第一位:闯红灯; - // 第二位:不按规定车道行驶; - // 第三位:逆行; 第四位:违章掉头; - // 第五位:交通堵塞; 第六位:交通异常空闲 - // 第七位:压线行驶; 否则默认为:交通路口事件 - public NET_TIME_EX RedLightUTC; // 红灯开始UTC时间 + public static class DEV_EVENT_TRAFFICJUNCTION_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte byMainSeatBelt; // 主驾驶座,系安全带状态,1-系安全带,2-未系安全带 + public byte bySlaveSeatBelt; // 副驾驶座,系安全带状态,1-系安全带,2-未系安全带 + public byte byVehicleDirection; // 当前被抓拍到的车辆是车头还是车尾,具体请见 EM_VEHICLE_DIRECTION + public byte byOpenStrobeState; // 开闸状态,具体请见 EM_OPEN_STROBE_STATE + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public int nLane; // 对应车道号 + public int dwBreakingRule; // 违反规则掩码,第一位:闯红灯; + // 第二位:不按规定车道行驶; + // 第三位:逆行; 第四位:违章掉头; + // 第五位:交通堵塞; 第六位:交通异常空闲 + // 第七位:压线行驶; 否则默认为:交通路口事件 + public NET_TIME_EX RedLightUTC; // 红灯开始UTC时间 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public int nSpeed; // 车辆实际速度Km/h - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte byDirection; // 路口方向,1-表示正向,2-表示反向 - public byte byLightState; // LightState表示红绿灯状态:0 未知,1 绿灯,2 红灯,3 黄灯 - public byte byReserved; // 保留字节 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public int nSpeed; // 车辆实际速度Km/h + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte byDirection; // 路口方向,1-表示正向,2-表示反向 + public byte byLightState; // LightState表示红绿灯状态:0 未知,1 绿灯,2 红灯,3 黄灯 + public byte byReserved; // 保留字节 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte[] szRecordFile = new byte[NET_COMMON_STRING_128];// 报警对应的原始录像文件信息 - public EVENT_JUNCTION_CUSTOM_INFO stuCustomInfo; // 自定义信息 - public byte byPlateTextSource; // 车牌识别来源, 0:本地算法识别,1:后端服务器算法识别 - public byte[] bReserved1 = new byte[3]; // 保留字节,留待扩展. - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[196]; // 保留字节,留待扩展. - public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频 + public byte[] szRecordFile = new byte[NET_COMMON_STRING_128];// 报警对应的原始录像文件信息 + public EVENT_JUNCTION_CUSTOM_INFO stuCustomInfo; // 自定义信息 + public byte byPlateTextSource; // 车牌识别来源, 0:本地算法识别,1:后端服务器算法识别 + public byte[] bReserved1 = new byte[3]; // 保留字节,留待扩展. + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[196]; // 保留字节,留待扩展. + public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public int dwRetCardNumber; // 卡片个数 - public EVENT_CARD_INFO[] stuCardInfo = (EVENT_CARD_INFO[])new EVENT_CARD_INFO().toArray(NET_EVENT_MAX_CARD_NUM);// 卡片信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - - public int bNonMotorInfoEx; // 是否有非机动车信息, 1-true; 0-false - public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车信息 - public byte[] byReserved2 = new byte[2048]; // 保留字节,留待扩展 - } - + public int dwRetCardNumber; // 卡片个数 + public EVENT_CARD_INFO[] stuCardInfo = (EVENT_CARD_INFO[]) new EVENT_CARD_INFO().toArray(NET_EVENT_MAX_CARD_NUM);// 卡片信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + + public int bNonMotorInfoEx; // 是否有非机动车信息, 1-true; 0-false + public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车信息 + public byte[] byReserved2 = new byte[2048]; // 保留字节,留待扩展 + } + // 非机动车对象 - public static class VA_OBJECT_NONMOTOR extends Structure - { - public int nObjectID; // 物体ID,每个ID表示一个唯一的物体 - public int emCategory; // 非机动车子类型, 对应枚举 EM_CATEGORY_NONMOTOR_TYPE - public DH_RECT stuBoundingBox; // 包围盒, 非机动车矩形框,0~8191相对坐标 - public DH_RECT stuOriginalBoundingBox; // 包围盒, 非机动车矩形框,绝对坐标 - public NET_COLOR_RGBA stuMainColor; // 非机动车颜色, RGBA - public int emColor; // 非机动车颜色, 枚举 EM_OBJECT_COLOR_TYPE - public int bHasImage; // 是否有抠图, 1-true; 0-false - public NET_NONMOTOR_PIC_INFO stuImage; // 物体截图 - public int nNumOfCycling; // 骑车人数量 - public NET_RIDER_INFO[] stuRiderList = - (NET_RIDER_INFO[])new NET_RIDER_INFO().toArray(MAX_RIDER_NUM); // 骑车人特征,个数和nNumOfCycling关联 - public byte[] byReserved = new byte[4096]; // 保留 - } - + public static class VA_OBJECT_NONMOTOR extends Structure { + public int nObjectID; // 物体ID,每个ID表示一个唯一的物体 + public int emCategory; // 非机动车子类型, 对应枚举 EM_CATEGORY_NONMOTOR_TYPE + public DH_RECT stuBoundingBox; // 包围盒, 非机动车矩形框,0~8191相对坐标 + public DH_RECT stuOriginalBoundingBox; // 包围盒, 非机动车矩形框,绝对坐标 + public NET_COLOR_RGBA stuMainColor; // 非机动车颜色, RGBA + public int emColor; // 非机动车颜色, 枚举 EM_OBJECT_COLOR_TYPE + public int bHasImage; // 是否有抠图, 1-true; 0-false + public NET_NONMOTOR_PIC_INFO stuImage; // 物体截图 + public int nNumOfCycling; // 骑车人数量 + public NET_RIDER_INFO[] stuRiderList = + (NET_RIDER_INFO[]) new NET_RIDER_INFO().toArray(MAX_RIDER_NUM); // 骑车人特征,个数和nNumOfCycling关联 + public byte[] byReserved = new byte[4096]; // 保留 + } + // 非机动车抠图信息 - public static class NET_NONMOTOR_PIC_INFO extends Structure - { - public int uOffset; // 在二进制数据块中的偏移 - public int uLength; // 图片大小,单位:字节 - public int uWidth; // 图片宽度 - public int uHeight; // 图片高度 - public byte[] szFilePath = new byte[MAX_PATH_LEN]; // 文件路径 - public byte[] byReserved = new byte[512]; // 保留 - } - + public static class NET_NONMOTOR_PIC_INFO extends Structure { + public int uOffset; // 在二进制数据块中的偏移 + public int uLength; // 图片大小,单位:字节 + public int uWidth; // 图片宽度 + public int uHeight; // 图片高度 + public byte[] szFilePath = new byte[MAX_PATH_LEN]; // 文件路径 + public byte[] byReserved = new byte[512]; // 保留 + } + // 骑车人信息 - public static class NET_RIDER_INFO extends Structure - { - public int bFeatureValid; // 是否识别到特征信息, TRUE时下面数据才有效, 1-true; 0-false - public int emSex; // 性别, 对应枚举 EM_SEX_TYPE - public int nAge; // 年龄 - - public int emHelmet; // 头盔状态, 对应枚举 EM_NONMOTOR_OBJECT_STATUS - public int emCall; // 是否在打电话, 对应枚举 EM_NONMOTOR_OBJECT_STATUS - public int emBag; // 是否有背包, 对应枚举 EM_NONMOTOR_OBJECT_STATUS - public int emCarrierBag; // 有没有手提包, 对应枚举 EM_NONMOTOR_OBJECT_STATUS - public int emUmbrella; // 是否打伞, 对应枚举 EM_NONMOTOR_OBJECT_STATUS - public int emGlasses; // 是否有带眼镜, 对应枚举 EM_NONMOTOR_OBJECT_STATUS - public int emMask; // 是否带口罩, 对应枚举 EM_NONMOTOR_OBJECT_STATUS - - public int emEmotion; // 表情, 对应枚举 EM_EMOTION_TYPE - public int emUpClothes; // 上衣类型, 对应枚举 EM_CLOTHES_TYPE - public int emDownClothes; // 下衣类型, 对应枚举 EM_CLOTHES_TYPE - public int emUpperBodyColor; // 上衣颜色, 对应枚举 EM_OBJECT_COLOR_TYPE - public int emLowerBodyColor; // 下衣颜色, 对应枚举 EM_OBJECT_COLOR_TYPE - public byte[] byReserved = new byte[516]; // 保留 - } - + public static class NET_RIDER_INFO extends Structure { + public int bFeatureValid; // 是否识别到特征信息, TRUE时下面数据才有效, 1-true; 0-false + public int emSex; // 性别, 对应枚举 EM_SEX_TYPE + public int nAge; // 年龄 + + public int emHelmet; // 头盔状态, 对应枚举 EM_NONMOTOR_OBJECT_STATUS + public int emCall; // 是否在打电话, 对应枚举 EM_NONMOTOR_OBJECT_STATUS + public int emBag; // 是否有背包, 对应枚举 EM_NONMOTOR_OBJECT_STATUS + public int emCarrierBag; // 有没有手提包, 对应枚举 EM_NONMOTOR_OBJECT_STATUS + public int emUmbrella; // 是否打伞, 对应枚举 EM_NONMOTOR_OBJECT_STATUS + public int emGlasses; // 是否有带眼镜, 对应枚举 EM_NONMOTOR_OBJECT_STATUS + public int emMask; // 是否带口罩, 对应枚举 EM_NONMOTOR_OBJECT_STATUS + + public int emEmotion; // 表情, 对应枚举 EM_EMOTION_TYPE + public int emUpClothes; // 上衣类型, 对应枚举 EM_CLOTHES_TYPE + public int emDownClothes; // 下衣类型, 对应枚举 EM_CLOTHES_TYPE + public int emUpperBodyColor; // 上衣颜色, 对应枚举 EM_OBJECT_COLOR_TYPE + public int emLowerBodyColor; // 下衣颜色, 对应枚举 EM_OBJECT_COLOR_TYPE + public byte[] byReserved = new byte[516]; // 保留 + } + // 性别 - public static class EM_SEX_TYPE extends Structure - { - public static final int EM_SEX_TYPE_UNKNOWN = 0; //未知 - public static final int EM_SEX_TYPE_MALE = 1; //男性 - public static final int EM_SEX_TYPE_FEMALE = 2; //女性 + public static class EM_SEX_TYPE extends Structure { + public static final int EM_SEX_TYPE_UNKNOWN = 0; //未知 + public static final int EM_SEX_TYPE_MALE = 1; //男性 + public static final int EM_SEX_TYPE_FEMALE = 2; //女性 } // 事件/物体状态 - public static class EM_NONMOTOR_OBJECT_STATUS extends Structure - { - public static final int EM_NONMOTOR_OBJECT_STATUS_UNKNOWN = 0; // 未识别 - public static final int EM_NONMOTOR_OBJECT_STATUS_NO = 1; // 否 - public static final int EM_NONMOTOR_OBJECT_STATUS_YES = 2; // 是 + public static class EM_NONMOTOR_OBJECT_STATUS extends Structure { + public static final int EM_NONMOTOR_OBJECT_STATUS_UNKNOWN = 0; // 未识别 + public static final int EM_NONMOTOR_OBJECT_STATUS_NO = 1; // 否 + public static final int EM_NONMOTOR_OBJECT_STATUS_YES = 2; // 是 } // 表情 - public static class EM_EMOTION_TYPE extends Structure - { - public static final int EM_EMOTION_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_EMOTION_TYPE_NORMAL = 1; // 普通/正常 - public static final int EM_EMOTION_TYPE_SMILE = 2; // 微笑 - public static final int EM_EMOTION_TYPE_ANGER = 3; // 愤怒 - public static final int EM_EMOTION_TYPE_SADNESS = 4; // 悲伤 - public static final int EM_EMOTION_TYPE_DISGUST = 5; // 厌恶 - public static final int EM_EMOTION_TYPE_FEAR = 6; // 害怕 - public static final int EM_EMOTION_TYPE_SURPRISE = 7; // 惊讶 - public static final int EM_EMOTION_TYPE_NEUTRAL = 8; // 正常 - public static final int EM_EMOTION_TYPE_LAUGH = 9; // 大笑 - public static final int EM_EMOTION_TYPE_HAPPY = 10; // 高兴 - public static final int EM_EMOTION_TYPE_CONFUSED = 11; // 困惑 - public static final int EM_EMOTION_TYPE_SCREAM = 12; // 尖叫 - } - - public static class EM_CLOTHES_TYPE extends Structure - { - public static final int EM_CLOTHES_TYPE_UNKNOWN = 0; //未知 - public static final int EM_CLOTHES_TYPE_LONG_SLEEVE = 1; //长袖 - public static final int EM_CLOTHES_TYPE_SHORT_SLEEVE = 2; //短袖 - public static final int EM_CLOTHES_TYPE_TROUSERS = 3; //长裤 - public static final int EM_CLOTHES_TYPE_SHORTS = 4; //短裤 - public static final int EM_CLOTHES_TYPE_SKIRT = 5; //裙子 - public static final int EM_CLOTHES_TYPE_WAISTCOAT = 6; //背心 - public static final int EM_CLOTHES_TYPE_MINIPANTS = 7; //超短裤 - public static final int EM_CLOTHES_TYPE_MINISKIRT = 8; //超短裙 - } - + public static class EM_EMOTION_TYPE extends Structure { + public static final int EM_EMOTION_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_EMOTION_TYPE_NORMAL = 1; // 普通/正常 + public static final int EM_EMOTION_TYPE_SMILE = 2; // 微笑 + public static final int EM_EMOTION_TYPE_ANGER = 3; // 愤怒 + public static final int EM_EMOTION_TYPE_SADNESS = 4; // 悲伤 + public static final int EM_EMOTION_TYPE_DISGUST = 5; // 厌恶 + public static final int EM_EMOTION_TYPE_FEAR = 6; // 害怕 + public static final int EM_EMOTION_TYPE_SURPRISE = 7; // 惊讶 + public static final int EM_EMOTION_TYPE_NEUTRAL = 8; // 正常 + public static final int EM_EMOTION_TYPE_LAUGH = 9; // 大笑 + public static final int EM_EMOTION_TYPE_HAPPY = 10; // 高兴 + public static final int EM_EMOTION_TYPE_CONFUSED = 11; // 困惑 + public static final int EM_EMOTION_TYPE_SCREAM = 12; // 尖叫 + } + + public static class EM_CLOTHES_TYPE extends Structure { + public static final int EM_CLOTHES_TYPE_UNKNOWN = 0; //未知 + public static final int EM_CLOTHES_TYPE_LONG_SLEEVE = 1; //长袖 + public static final int EM_CLOTHES_TYPE_SHORT_SLEEVE = 2; //短袖 + public static final int EM_CLOTHES_TYPE_TROUSERS = 3; //长裤 + public static final int EM_CLOTHES_TYPE_SHORTS = 4; //短裤 + public static final int EM_CLOTHES_TYPE_SKIRT = 5; //裙子 + public static final int EM_CLOTHES_TYPE_WAISTCOAT = 6; //背心 + public static final int EM_CLOTHES_TYPE_MINIPANTS = 7; //超短裤 + public static final int EM_CLOTHES_TYPE_MINISKIRT = 8; //超短裙 + } + // 非机动车子类型 - public static class EM_CATEGORY_NONMOTOR_TYPE extends Structure - { - public static final int EM_CATEGORY_NONMOTOR_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_CATEGORY_NONMOTOR_TYPE_TRICYCLE = 1; // "Tricycle" 三轮车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_MOTORCYCLE = 2; // "Motorcycle" 摩托车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_NON_MOTOR = 3; // "Non-Motor"非机动车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_BICYCLE = 4; // "Bicycle" 自行车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_DUALTRIWHEELMOTORCYCLE = 5; // "DualTriWheelMotorcycle"两、三轮摩托车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_LIGHTMOTORCYCLE = 6; // "LightMotorcycle" 轻便摩托车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_EMBASSYMOTORCYCLE = 7; // "EmbassyMotorcycle "使馆摩托车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_MARGINALMOTORCYCLE = 8; // "MarginalMotorcycle "领馆摩托车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_AREAOUTMOTORCYCLE = 9; // "AreaoutMotorcycle "境外摩托车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_FOREIGNMOTORCYCLE = 10; // "ForeignMotorcycle "外籍摩托车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_TRIALMOTORCYCLE = 11; // "TrialMotorcycle "试验摩托车 - public static final int EM_CATEGORY_NONMOTOR_TYPE_COACHMOTORCYCLE = 12; // "CoachMotorcycle "教练摩托车 - } - + public static class EM_CATEGORY_NONMOTOR_TYPE extends Structure { + public static final int EM_CATEGORY_NONMOTOR_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_CATEGORY_NONMOTOR_TYPE_TRICYCLE = 1; // "Tricycle" 三轮车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_MOTORCYCLE = 2; // "Motorcycle" 摩托车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_NON_MOTOR = 3; // "Non-Motor"非机动车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_BICYCLE = 4; // "Bicycle" 自行车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_DUALTRIWHEELMOTORCYCLE = 5; // "DualTriWheelMotorcycle"两、三轮摩托车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_LIGHTMOTORCYCLE = 6; // "LightMotorcycle" 轻便摩托车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_EMBASSYMOTORCYCLE = 7; // "EmbassyMotorcycle "使馆摩托车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_MARGINALMOTORCYCLE = 8; // "MarginalMotorcycle "领馆摩托车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_AREAOUTMOTORCYCLE = 9; // "AreaoutMotorcycle "境外摩托车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_FOREIGNMOTORCYCLE = 10; // "ForeignMotorcycle "外籍摩托车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_TRIALMOTORCYCLE = 11; // "TrialMotorcycle "试验摩托车 + public static final int EM_CATEGORY_NONMOTOR_TYPE_COACHMOTORCYCLE = 12; // "CoachMotorcycle "教练摩托车 + } + // 颜色类型 - public static class EM_OBJECT_COLOR_TYPE extends Structure - { - public static final int EM_OBJECT_COLOR_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_OBJECT_COLOR_TYPE_WHITE = 1; // 白色 - public static final int EM_OBJECT_COLOR_TYPE_ORANGE = 2; // 橙色 - public static final int EM_OBJECT_COLOR_TYPE_PINK = 3; // 粉色 - public static final int EM_OBJECT_COLOR_TYPE_BLACK = 4; // 黑色 - public static final int EM_OBJECT_COLOR_TYPE_RED = 5; // 红色 - public static final int EM_OBJECT_COLOR_TYPE_YELLOW = 6; // 黄色 - public static final int EM_OBJECT_COLOR_TYPE_GRAY = 7; // 灰色 - public static final int EM_OBJECT_COLOR_TYPE_BLUE = 8; // 蓝色 - public static final int EM_OBJECT_COLOR_TYPE_GREEN = 9; // 绿色 - public static final int EM_OBJECT_COLOR_TYPE_PURPLE = 10; // 紫色 - public static final int EM_OBJECT_COLOR_TYPE_BROWN = 11; // 棕色 - public static final int EM_OBJECT_COLOR_TYPE_SLIVER = 12; // 银色 - public static final int EM_OBJECT_COLOR_TYPE_DARKVIOLET = 13; // 暗紫罗兰色 - public static final int EM_OBJECT_COLOR_TYPE_MAROON = 14; // 栗色 - public static final int EM_OBJECT_COLOR_TYPE_DIMGRAY = 15; // 暗灰色 - public static final int EM_OBJECT_COLOR_TYPE_WHITESMOKE = 16; // 白烟色 - public static final int EM_OBJECT_COLOR_TYPE_DARKORANGE = 17; // 深橙色 - public static final int EM_OBJECT_COLOR_TYPE_MISTYROSE = 18; // 浅玫瑰色 - public static final int EM_OBJECT_COLOR_TYPE_TOMATO = 19; // 番茄红色 - public static final int EM_OBJECT_COLOR_TYPE_OLIVE = 20; // 橄榄色 - public static final int EM_OBJECT_COLOR_TYPE_GOLD = 21; // 金色 - public static final int EM_OBJECT_COLOR_TYPE_DARKOLIVEGREEN = 22; // 暗橄榄绿色 - public static final int EM_OBJECT_COLOR_TYPE_CHARTREUSE = 23; // 黄绿色 - public static final int EM_OBJECT_COLOR_TYPE_GREENYELLOW = 24; // 绿黄色 - public static final int EM_OBJECT_COLOR_TYPE_FORESTGREEN = 25; // 森林绿色 - public static final int EM_OBJECT_COLOR_TYPE_SEAGREEN = 26; // 海洋绿色 - public static final int EM_OBJECT_COLOR_TYPE_DEEPSKYBLUE = 27; // 深天蓝色 - public static final int EM_OBJECT_COLOR_TYPE_CYAN = 28; // 青色 - public static final int EM_OBJECT_COLOR_TYPE_OTHER = 29; // 无法识别 - } - - public static class NET_SEAT_INFO extends Structure - { - public NET_RECT stuFaceRect; // 人脸矩形框信息(8192坐标系) - public byte bySunShade; // 遮阳板状态 0: 未知 1:无遮阳板 2:有遮阳板 - public byte byDriverCalling; // 打电话状态 0: 未知 1:未打电话 2:打电话 - public byte byDriverSmoking; // 抽烟状态 0: 未知 1:未吸烟 2:吸烟 - public byte bySafeBelt; // 安全带状态 0: 未知 1:未系安全带 2:系安全带 - public byte[] byReserved = new byte[32]; // 保留字节 - } - - public static class NET_VEHICLE_ATTACH extends Structure - { - public int nType; // 附件类型 0-未知 1-年检标志 2-挂件 3-纸巾盒 4-香水盒 - public NET_RECT stuBoundingBox; // 包围盒信息(8192坐标系) - public byte[] byReserved = new byte[32]; // 保留字节 - } - + public static class EM_OBJECT_COLOR_TYPE extends Structure { + public static final int EM_OBJECT_COLOR_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_OBJECT_COLOR_TYPE_WHITE = 1; // 白色 + public static final int EM_OBJECT_COLOR_TYPE_ORANGE = 2; // 橙色 + public static final int EM_OBJECT_COLOR_TYPE_PINK = 3; // 粉色 + public static final int EM_OBJECT_COLOR_TYPE_BLACK = 4; // 黑色 + public static final int EM_OBJECT_COLOR_TYPE_RED = 5; // 红色 + public static final int EM_OBJECT_COLOR_TYPE_YELLOW = 6; // 黄色 + public static final int EM_OBJECT_COLOR_TYPE_GRAY = 7; // 灰色 + public static final int EM_OBJECT_COLOR_TYPE_BLUE = 8; // 蓝色 + public static final int EM_OBJECT_COLOR_TYPE_GREEN = 9; // 绿色 + public static final int EM_OBJECT_COLOR_TYPE_PURPLE = 10; // 紫色 + public static final int EM_OBJECT_COLOR_TYPE_BROWN = 11; // 棕色 + public static final int EM_OBJECT_COLOR_TYPE_SLIVER = 12; // 银色 + public static final int EM_OBJECT_COLOR_TYPE_DARKVIOLET = 13; // 暗紫罗兰色 + public static final int EM_OBJECT_COLOR_TYPE_MAROON = 14; // 栗色 + public static final int EM_OBJECT_COLOR_TYPE_DIMGRAY = 15; // 暗灰色 + public static final int EM_OBJECT_COLOR_TYPE_WHITESMOKE = 16; // 白烟色 + public static final int EM_OBJECT_COLOR_TYPE_DARKORANGE = 17; // 深橙色 + public static final int EM_OBJECT_COLOR_TYPE_MISTYROSE = 18; // 浅玫瑰色 + public static final int EM_OBJECT_COLOR_TYPE_TOMATO = 19; // 番茄红色 + public static final int EM_OBJECT_COLOR_TYPE_OLIVE = 20; // 橄榄色 + public static final int EM_OBJECT_COLOR_TYPE_GOLD = 21; // 金色 + public static final int EM_OBJECT_COLOR_TYPE_DARKOLIVEGREEN = 22; // 暗橄榄绿色 + public static final int EM_OBJECT_COLOR_TYPE_CHARTREUSE = 23; // 黄绿色 + public static final int EM_OBJECT_COLOR_TYPE_GREENYELLOW = 24; // 绿黄色 + public static final int EM_OBJECT_COLOR_TYPE_FORESTGREEN = 25; // 森林绿色 + public static final int EM_OBJECT_COLOR_TYPE_SEAGREEN = 26; // 海洋绿色 + public static final int EM_OBJECT_COLOR_TYPE_DEEPSKYBLUE = 27; // 深天蓝色 + public static final int EM_OBJECT_COLOR_TYPE_CYAN = 28; // 青色 + public static final int EM_OBJECT_COLOR_TYPE_OTHER = 29; // 无法识别 + } + + public static class NET_SEAT_INFO extends Structure { + public NET_RECT stuFaceRect; // 人脸矩形框信息(8192坐标系) + public byte bySunShade; // 遮阳板状态 0: 未知 1:无遮阳板 2:有遮阳板 + public byte byDriverCalling; // 打电话状态 0: 未知 1:未打电话 2:打电话 + public byte byDriverSmoking; // 抽烟状态 0: 未知 1:未吸烟 2:吸烟 + public byte bySafeBelt; // 安全带状态 0: 未知 1:未系安全带 2:系安全带 + public byte[] byReserved = new byte[32]; // 保留字节 + } + + public static class NET_VEHICLE_ATTACH extends Structure { + public int nType; // 附件类型 0-未知 1-年检标志 2-挂件 3-纸巾盒 4-香水盒 + public NET_RECT stuBoundingBox; // 包围盒信息(8192坐标系) + public byte[] byReserved = new byte[32]; // 保留字节 + } + //卡口事件专用定制上报内容,定制需求增加到Custom下 - public static class EVENT_JUNCTION_CUSTOM_INFO extends Structure - { - public EVENT_CUSTOM_WEIGHT_INFO stuWeightInfo; // 原始图片信息 - public byte[] bReserved = new byte[60]; // 预留字节 + public static class EVENT_JUNCTION_CUSTOM_INFO extends Structure { + public EVENT_CUSTOM_WEIGHT_INFO stuWeightInfo; // 原始图片信息 + public byte[] bReserved = new byte[60]; // 预留字节 } - + //建委地磅定制称重信息 - public static class EVENT_CUSTOM_WEIGHT_INFO extends Structure - { - public int dwRoughWeight; // 毛重,车辆满载货物重量。单位KG - public int dwTareWeight; // 皮重,空车重量。单位KG - public int dwNetWeight; // 净重,载货重量。单位KG - public byte[] bReserved = new byte[28]; // 预留字节 - } - + public static class EVENT_CUSTOM_WEIGHT_INFO extends Structure { + public int dwRoughWeight; // 毛重,车辆满载货物重量。单位KG + public int dwTareWeight; // 皮重,空车重量。单位KG + public int dwNetWeight; // 净重,载货重量。单位KG + public byte[] bReserved = new byte[28]; // 预留字节 + } + // 事件类型 EVENT_IVS_TRAFFICGATE(交通卡口老规则事件/线圈电警上的交通卡口老规则事件)对应的数据块描述信息 // 由于历史原因,如果要处理卡口事件,DEV_EVENT_TRAFFICJUNCTION_INFO和EVENT_IVS_TRAFFICGATE要一起处理,以防止有视频电警和线圈电警同时接入平台的情况发生 // 另外 EVENT_IVS_TRAFFIC_TOLLGATE 只支持新卡口事件的配置 - public static class DEV_EVENT_TRAFFICGATE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte byOpenStrobeState; // 开闸状态,具体请见EM_OPEN_STROBE_STATE - public byte bReserved1[] = new byte[3]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public int nLane; // 对应车道号 - public int nSpeed; // 车辆实际速度Km/h - public int nSpeedUpperLimit; // 速度上限 单位:km/h - public int nSpeedLowerLimit; // 速度下限 单位:km/h - public int dwBreakingRule; // 违反规则掩码,第一位:逆行; - // 第二位:压线行驶; 第三位:超速行驶; - // 第四位:欠速行驶; 第五位:闯红灯;第六位:穿过路口(卡口事件) - // 第七位: 压黄线; 第八位: 有车占道; 第九位: 黄牌占道;否则默认为:交通卡口事件 + public static class DEV_EVENT_TRAFFICGATE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte byOpenStrobeState; // 开闸状态,具体请见EM_OPEN_STROBE_STATE + public byte bReserved1[] = new byte[3]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public int nLane; // 对应车道号 + public int nSpeed; // 车辆实际速度Km/h + public int nSpeedUpperLimit; // 速度上限 单位:km/h + public int nSpeedLowerLimit; // 速度下限 单位:km/h + public int dwBreakingRule; // 违反规则掩码,第一位:逆行; + // 第二位:压线行驶; 第三位:超速行驶; + // 第四位:欠速行驶; 第五位:闯红灯;第六位:穿过路口(卡口事件) + // 第七位: 压黄线; 第八位: 有车占道; 第九位: 黄牌占道;否则默认为:交通卡口事件 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public byte szManualSnapNo[] = new byte[64]; // 手动抓拍序号 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[3]; // 保留字节 - public byte[] szSnapFlag = new byte[16]; // 设备产生的抓拍标识 - public byte bySnapMode; // 抓拍方式,0-未分类 1-全景 2-近景 4-同向抓拍 8-反向抓拍 16-号牌图像 - public byte byOverSpeedPercentage; // 超速百分比 - public byte byUnderSpeedingPercentage; // 欠速百分比 - public byte byRedLightMargin; // 红灯容许间隔时间,单位:秒 - public byte byDriveDirection; // 行驶方向,0-上行(即车辆离设备部署点越来越近),1-下行(即车辆离设备部署点越来越远) - public byte[] szRoadwayNo = new byte[32]; // 道路编号 - public byte[] szViolationCode = new byte[16]; // 违章代码 - public byte[] szViolationDesc = new byte[128]; // 违章描述 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public byte szManualSnapNo[] = new byte[64]; // 手动抓拍序号 + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[3]; // 保留字节 + public byte[] szSnapFlag = new byte[16]; // 设备产生的抓拍标识 + public byte bySnapMode; // 抓拍方式,0-未分类 1-全景 2-近景 4-同向抓拍 8-反向抓拍 16-号牌图像 + public byte byOverSpeedPercentage; // 超速百分比 + public byte byUnderSpeedingPercentage; // 欠速百分比 + public byte byRedLightMargin; // 红灯容许间隔时间,单位:秒 + public byte byDriveDirection; // 行驶方向,0-上行(即车辆离设备部署点越来越近),1-下行(即车辆离设备部署点越来越远) + public byte[] szRoadwayNo = new byte[32]; // 道路编号 + public byte[] szViolationCode = new byte[16]; // 违章代码 + public byte[] szViolationDesc = new byte[128]; // 违章描述 public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte[] szVehicleType= new byte[32]; // 车辆大小类型 Minisize"微型车,"Light-duty"小型车,"Medium"中型车, - // "Oversize"大型车,"Huge"超大车,"Largesize"长车 "Unknown"未知 - public byte byVehicleLenth; // 车辆长度, 单位米 - public byte byLightState; // LightState表示红绿灯状态:0 未知,1 绿灯,2 红灯,3 黄灯 - public byte byReserved1; // 保留字节,留待扩展 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nOverSpeedMargin; // 限高速宽限值 单位:km/h - public int nUnderSpeedMargin; // 限低速宽限值 单位:km/h - public byte[] szDrivingDirection = new byte[3*NET_MAX_DRIVINGDIRECTION]; // - // "DrivingDirection" : ["Approach", "上海", "杭州"],行驶方向 - // "Approach"-上行,即车辆离设备部署点越来越近;"Leave"-下行, - // 即车辆离设备部署点越来越远,第二和第三个参数分别代表上行和 - // 下行的两个地点,UTF-8编码 - public byte[] szMachineName = new byte[256]; // 本地或远程设备名称 - public byte[] szMachineAddress = new byte[256]; // 机器部署地点、道路编码 - public byte[] szMachineGroup = new byte[256]; // 机器分组、设备所属单位 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public byte[] szVehicleType = new byte[32]; // 车辆大小类型 Minisize"微型车,"Light-duty"小型车,"Medium"中型车, + // "Oversize"大型车,"Huge"超大车,"Largesize"长车 "Unknown"未知 + public byte byVehicleLenth; // 车辆长度, 单位米 + public byte byLightState; // LightState表示红绿灯状态:0 未知,1 绿灯,2 红灯,3 黄灯 + public byte byReserved1; // 保留字节,留待扩展 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nOverSpeedMargin; // 限高速宽限值 单位:km/h + public int nUnderSpeedMargin; // 限低速宽限值 单位:km/h + public byte[] szDrivingDirection = new byte[3 * NET_MAX_DRIVINGDIRECTION]; // + // "DrivingDirection" : ["Approach", "上海", "杭州"],行驶方向 + // "Approach"-上行,即车辆离设备部署点越来越近;"Leave"-下行, + // 即车辆离设备部署点越来越远,第二和第三个参数分别代表上行和 + // 下行的两个地点,UTF-8编码 + public byte[] szMachineName = new byte[256]; // 本地或远程设备名称 + public byte[] szMachineAddress = new byte[256]; // 机器部署地点、道路编码 + public byte[] szMachineGroup = new byte[256]; // 机器分组、设备所属单位 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_SIG_CARWAY_INFO_EX stuSigInfo; // 由车检器产生抓拍信号冗余信息 - public byte[] szFilePath = new byte[MAX_PATH]; // 文件路径 - public NET_TIME_EX RedLightUTC; // 红灯开始UTC时间 - public Pointer szDeviceAddress; // 设备地址,OSD叠加到图片上的,来源于配置TrafficSnapshot.DeviceAddress,'\0'结束 - public float fActualShutter; // 当前图片曝光时间,单位为毫秒 - public byte byActualGain; // 当前图片增益,范围为0~100 - public byte byDirection; // 0-南向北 1-西南向东北 2-西向东 3-西北向东南 4-北向南 5-东北向西南 6-东向西 7-东南向西北 8-未知 - public byte bReserve; // 保留字节, 字节对齐 - public byte bRetCardNumber; // 卡片个数 - public EVENT_CARD_INFO[] stuCardInfo = (EVENT_CARD_INFO[])new EVENT_CARD_INFO().toArray(NET_EVENT_MAX_CARD_NUM);// 卡片信息 - public byte[] szDefendCode = new byte[NET_COMMON_STRING_64]; // 图片防伪码 - public int nTrafficBlackListID; // 关联黑名单数据库记录默认主键ID, 0,无效;> 0,黑名单数据记录 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - public byte[] bReserved = new byte[452]; // 保留字节,留待扩展. - } - + public byte[] szFilePath = new byte[MAX_PATH]; // 文件路径 + public NET_TIME_EX RedLightUTC; // 红灯开始UTC时间 + public Pointer szDeviceAddress; // 设备地址,OSD叠加到图片上的,来源于配置TrafficSnapshot.DeviceAddress,'\0'结束 + public float fActualShutter; // 当前图片曝光时间,单位为毫秒 + public byte byActualGain; // 当前图片增益,范围为0~100 + public byte byDirection; // 0-南向北 1-西南向东北 2-西向东 3-西北向东南 4-北向南 5-东北向西南 6-东向西 7-东南向西北 8-未知 + public byte bReserve; // 保留字节, 字节对齐 + public byte bRetCardNumber; // 卡片个数 + public EVENT_CARD_INFO[] stuCardInfo = (EVENT_CARD_INFO[]) new EVENT_CARD_INFO().toArray(NET_EVENT_MAX_CARD_NUM);// 卡片信息 + public byte[] szDefendCode = new byte[NET_COMMON_STRING_64]; // 图片防伪码 + public int nTrafficBlackListID; // 关联黑名单数据库记录默认主键ID, 0,无效;> 0,黑名单数据记录 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + public byte[] bReserved = new byte[452]; // 保留字节,留待扩展. + } + //事件类型EVENT_IVS_TRAFFIC_RUNREDLIGHT(交通-闯红灯事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 车牌信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 + public static class DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 车牌信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nLightState; // 红绿灯状态 0:未知 1:绿灯 2:红灯 3:黄灯 - public int nSpeed; // 车速,km/h - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_TIME_EX stRedLightUTC; // 红灯开始时间 + public int nLightState; // 红绿灯状态 0:未知 1:绿灯 2:红灯 3:黄灯 + public int nSpeed; // 车速,km/h + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_TIME_EX stRedLightUTC; // 红灯开始时间 public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte byRedLightMargin; // 红灯容许间隔时间,单位:秒 - public byte[] byAlignment = new byte[3]; // 字节对齐 - public int nRedLightPeriod; // 表示红灯周期时间,单位毫秒 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[928]; // 保留字节 + public byte byRedLightMargin; // 红灯容许间隔时间,单位:秒 + public byte[] byAlignment = new byte[3]; // 字节对齐 + public int nRedLightPeriod; // 表示红灯周期时间,单位毫秒 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[928]; // 保留字节 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + //事件类型EVENT_IVS_TRAFFIC_OVERLINE(交通-压线事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_OVERLINE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 车牌信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 + public static class DEV_EVENT_TRAFFIC_OVERLINE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 车牌信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public int nSpeed; // 车辆实际速度,Km/h - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public int nSpeed; // 车辆实际速度,Km/h + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[968]; // 保留字节 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[968]; // 保留字节 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - } - + public EVENT_COMM_INFO stCommInfo; // 公共信息 + } + // 事件类型EVENT_IVS_TRAFFIC_RETROGRADE(交通-逆行事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_RETROGRADE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 车牌信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public int nSpeed; // 车辆实际速度,Km/h - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public int bIsExistAlarmRecord; // rue:有对应的报警录像; false:无对应的报警录像 - public int dwAlarmRecordSize; // 录像大小 - public byte[] szAlarmRecordPath = new byte[NET_COMMON_STRING_256]; // 录像路径 - public EVENT_INTELLI_COMM_INFO intelliCommInfo; // 智能事件公共信息 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[484]; // 保留字节 + public static class DEV_EVENT_TRAFFIC_RETROGRADE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 车牌信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public int nSpeed; // 车辆实际速度,Km/h + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public int bIsExistAlarmRecord; // rue:有对应的报警录像; false:无对应的报警录像 + public int dwAlarmRecordSize; // 录像大小 + public byte[] szAlarmRecordPath = new byte[NET_COMMON_STRING_256]; // 录像路径 + public EVENT_INTELLI_COMM_INFO intelliCommInfo; // 智能事件公共信息 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[484]; // 保留字节 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public int nDetectNum; // 规则检测区域顶点数 - public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public int nDetectNum; // 规则检测区域顶点数 + public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + //事件类型EVENT_IVS_TRAFFIC_OVERSPEED(交通超速事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_OVERSPEED_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 + public static class DEV_EVENT_TRAFFIC_OVERSPEED_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSpeed; // 车辆实际速度Km/h - public int nSpeedUpperLimit; // 速度上限 单位:km/h - public int nSpeedLowerLimit; // 速度下限 单位:km/h - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public int nSpeed; // 车辆实际速度Km/h + public int nSpeedUpperLimit; // 速度上限 单位:km/h + public int nSpeedLowerLimit; // 速度下限 单位:km/h + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte[] szFilePath = new byte[MAX_PATH]; // 文件路径 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[576]; // 保留字节 + public byte[] szFilePath = new byte[MAX_PATH]; // 文件路径 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[576]; // 保留字节 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + //事件类型EVENT_IVS_TRAFFIC_UNDERSPEED(交通欠速事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_UNDERSPEED_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved2 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 + public static class DEV_EVENT_TRAFFIC_UNDERSPEED_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved2 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSpeed; // 车辆实际速度Km/h - public int nSpeedUpperLimit; // 速度上限 单位:km/h - public int nSpeedLowerLimit; // 速度下限 单位:km/h - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] bReserved1 = new byte[2]; // 对齐 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nUnderSpeedingPercentage; // 欠速百分比 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[832]; // 保留字节 + public int nSpeed; // 车辆实际速度Km/h + public int nSpeedUpperLimit; // 速度上限 单位:km/h + public int nSpeedLowerLimit; // 速度下限 单位:km/h + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] bReserved1 = new byte[2]; // 对齐 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nUnderSpeedingPercentage; // 欠速百分比 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[832]; // 保留字节 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + //事件类型EVENT_IVS_TRAFFIC_WRONGROUTE(交通违章-不按车道行驶)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_WRONGROUTE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public int nLane; // 对应车道号 + public static class DEV_EVENT_TRAFFIC_WRONGROUTE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public int nLane; // 对应车道号 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nSpeed; // 车辆实际速度,km/h - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nSpeed; // 车辆实际速度,km/h + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[972]; // 保留字节,留待扩展. + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[972]; // 保留字节,留待扩展. public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - } - - // 事件类型 EVENT_IVS_TRAFFIC_TURNLEFT(交通-违章左转)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_TURNLEFT_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC ; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 车牌信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public int nSpeed; // 车辆实际速度,Km/h - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[968]; // 保留字节 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - } - - // 事件类型 EVENT_IVS_TRAFFIC_TURNRIGHT (交通-违章右转)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_TURNRIGHT_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 车牌信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public int nSpeed; // 车辆实际速度,Km/h - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[968]; // 保留字节 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - } - - // 事件类型EVENT_IVS_TRAFFIC_UTURN(违章调头事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_UTURN_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 车牌信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public int nSpeed; // 车辆实际速度,Km/h - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[968]; // 保留字节 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - } - - //事件类型 EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT(交通违章-闯黄灯事件)对应数据块描述信息 - public static class DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 车牌信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nLightState; // 红绿灯状态 0:未知 1:绿灯 2:红灯 3:黄灯 - public int nSpeed; // 车速,km/h - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_TIME_EX stYellowLightUTC; // 黄灯开始时间 - public int nYellowLightPeriod; // 黄灯周期间隔时间,单位秒 - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte byRedLightMargin; // 黄灯容许间隔时间,单位:秒 - public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public byte[] bReserved = new byte[1024]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - - } - + public EVENT_COMM_INFO stCommInfo; // 公共信息 + } + + // 事件类型 EVENT_IVS_TRAFFIC_TURNLEFT(交通-违章左转)对应的数据块描述信息 + public static class DEV_EVENT_TRAFFIC_TURNLEFT_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 车牌信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public int nSpeed; // 车辆实际速度,Km/h + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[968]; // 保留字节 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + } + + // 事件类型 EVENT_IVS_TRAFFIC_TURNRIGHT (交通-违章右转)对应的数据块描述信息 + public static class DEV_EVENT_TRAFFIC_TURNRIGHT_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 车牌信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public int nSpeed; // 车辆实际速度,Km/h + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[968]; // 保留字节 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + } + + // 事件类型EVENT_IVS_TRAFFIC_UTURN(违章调头事件)对应的数据块描述信息 + public static class DEV_EVENT_TRAFFIC_UTURN_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 车牌信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public int nSpeed; // 车辆实际速度,Km/h + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[968]; // 保留字节 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + } + + //事件类型 EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT(交通违章-闯黄灯事件)对应数据块描述信息 + public static class DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 车牌信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nLightState; // 红绿灯状态 0:未知 1:绿灯 2:红灯 3:黄灯 + public int nSpeed; // 车速,km/h + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_TIME_EX stYellowLightUTC; // 黄灯开始时间 + public int nYellowLightPeriod; // 黄灯周期间隔时间,单位秒 + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public byte byRedLightMargin; // 黄灯容许间隔时间,单位:秒 + public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 + public byte[] bReserved = new byte[1024]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + + } + //事件类型EVENT_IVS_TRAFFIC_OVERYELLOWLINE(交通违章-压黄线)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public int nLane; // 对应车道号 + public static class DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public int nLane; // 对应车道号 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nSpeed; // 车辆实际速度,km/h - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nSpeed; // 车辆实际速度,km/h + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public int bIsExistAlarmRecord; // bool 类型: 1:有对应的报警录像; 0:无对应的报警录像 - public int dwAlarmRecordSize; // 录像大小 - public byte[] szAlarmRecordPath = new byte[NET_COMMON_STRING_256]; // 录像路径 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] bReserved = new byte[532]; // 保留字节,留待扩展. + public int bIsExistAlarmRecord; // bool 类型: 1:有对应的报警录像; 0:无对应的报警录像 + public int dwAlarmRecordSize; // 录像大小 + public byte[] szAlarmRecordPath = new byte[NET_COMMON_STRING_256]; // 录像路径 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] bReserved = new byte[532]; // 保留字节,留待扩展. public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public int nDetectNum; // 规则检测区域顶点数 - public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public int nDetectNum; // 规则检测区域顶点数 + public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + //事件类型EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE(交通违章-黄牌车占道事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public int nLane; // 对应车道号 + public static class DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public int nLane; // 对应车道号 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nSpeed; // 车辆实际速度,km/h - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nSpeed; // 车辆实际速度,km/h + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte[] bReserved = new byte[1016]; // 保留字节,留待扩展. + public byte[] bReserved = new byte[1016]; // 保留字节,留待扩展. public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } //事件类型 EVENT_IVS_TRAFFIC_VEHICLEINROUTE(有车占道事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public int nLane; // 对应车道号 - public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束 - public int nSpeed; // 车速 + public static class DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public int nLane; // 对应车道号 + public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束 + public int nSpeed; // 车速 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved0 = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] byReserved = new byte[884]; - public EVENT_COMM_INFO stCommInfo; // 公共信息 - } - + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved0 = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] byReserved = new byte[884]; + public EVENT_COMM_INFO stCommInfo; // 公共信息 + } + //事件类型EVENT_IVS_TRAFFIC_CROSSLANE(交通违章-违章变道)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_CROSSLANE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public int nLane; // 对应车道号 + public static class DEV_EVENT_TRAFFIC_CROSSLANE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public int nLane; // 对应车道号 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nSpeed; // 车辆实际速度,km/h - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[836]; // 保留字节,留待扩展.留待扩展. + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nSpeed; // 车辆实际速度,km/h + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[836]; // 保留字节,留待扩展.留待扩展. public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + // 事件类型EVENT_IVS_TRAFFIC_NOPASSING(交通违章-禁止通行事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_NOPASSING_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int UTCMS; // - public int nMark; // 底层产生的触发抓拍帧标记 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public static class DEV_EVENT_TRAFFIC_NOPASSING_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int UTCMS; // + public int nMark; // 底层产生的触发抓拍帧标记 + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public byte[] byReserved1 = new byte[3]; - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public int nFrameSequence; // 视频分析帧序号 - public int nSource; // 视频分析的数据源地址 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] byReserved = new byte[984]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - } - + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public byte[] byReserved1 = new byte[3]; + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public int nFrameSequence; // 视频分析帧序号 + public int nSource; // 视频分析的数据源地址 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] byReserved = new byte[984]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + } + //事件类型 EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY(斑马线行人优先事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nLane; // 对应车道号 - public double dInitialUTC; // 事件初始UTC时间 UTC为事件的UTC (1970-1-1 00:00:00)秒数。 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public static class DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nLane; // 对应车道号 + public double dInitialUTC; // 事件初始UTC时间 UTC为事件的UTC (1970-1-1 00:00:00)秒数。 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录 - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[984]; // 保留字节,留待扩展. - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[984]; // 保留字节,留待扩展. + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + //事件类型 EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE(占用公交车道事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nLane; // 对应车道号 - public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束 - public int nSpeed; // 车速,km/h - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public static class DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nLane; // 对应车道号 + public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束 + public int nSpeed; // 车速,km/h + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录 public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[980]; // 保留字节,留待扩展. - public EVENT_COMM_INFO stCommInfo; // 公共信息 - - } - - //事件类型 EVENT_IVS_TRAFFIC_BACKING(违章倒车事件)对应的数据块描述信息 - public static class DEV_EVENT_IVS_TRAFFIC_BACKING_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nLane; // 对应车道号 - public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束 - public int nSpeed; // 车速,km/h - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[980]; // 保留字节,留待扩展. + public EVENT_COMM_INFO stCommInfo; // 公共信息 + + } + + //事件类型 EVENT_IVS_TRAFFIC_BACKING(违章倒车事件)对应的数据块描述信息 + public static class DEV_EVENT_IVS_TRAFFIC_BACKING_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nLane; // 对应车道号 + public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束 + public int nSpeed; // 车速,km/h + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录 - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[848]; // 保留字节,留待扩展. - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[848]; // 保留字节,留待扩展. + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + // GPS信息 - public static class NET_GPS_INFO extends Structure - { - public int nLongitude; // 经度(单位是百万分之一度) - // 西经:0 - 180000000 实际值应为: 180*1000000 – dwLongitude - // 东经:180000000 - 360000000 实际值应为: dwLongitude – 180*1000000 - // 如: 300168866应为(300168866 - 180*1000000)/1000000 即东经120.168866度 - public int nLatidude; // 纬度(单位是百万分之一度) - // 南纬:0 - 90000000 实际值应为: 90*1000000 – dwLatidude - // 北纬:90000000 – 180000000 实际值应为: dwLatidude – 90*1000000 - // 如: 120186268应为 (120186268 - 90*1000000)/1000000 即北纬30. 186268度 - public double dbAltitude; // 高度,单位为米 - public double dbSpeed; // 速度,单位km/H - public double dbBearing; // 方向角,单位° - public byte[] bReserved = new byte[8]; // 保留字段 - - public NET_GPS_INFO() - { - if(Utils.getOsName().equals("win")) { + public static class NET_GPS_INFO extends Structure { + public int nLongitude; // 经度(单位是百万分之一度) + // 西经:0 - 180000000 实际值应为: 180*1000000 – dwLongitude + // 东经:180000000 - 360000000 实际值应为: dwLongitude – 180*1000000 + // 如: 300168866应为(300168866 - 180*1000000)/1000000 即东经120.168866度 + public int nLatidude; // 纬度(单位是百万分之一度) + // 南纬:0 - 90000000 实际值应为: 90*1000000 – dwLatidude + // 北纬:90000000 – 180000000 实际值应为: dwLatidude – 90*1000000 + // 如: 120186268应为 (120186268 - 90*1000000)/1000000 即北纬30. 186268度 + public double dbAltitude; // 高度,单位为米 + public double dbSpeed; // 速度,单位km/H + public double dbBearing; // 方向角,单位° + public byte[] bReserved = new byte[8]; // 保留字段 + + public NET_GPS_INFO() { + if (Utils.getOsName().equals("win")) { // 强制采用最大四字节对齐 setAlignType(ALIGN_GNUC); - } - } - } - - // 事件类型 EVENT_IVS_TRAFFIC_OVERSTOPLINE (压停车线事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_OVERSTOPLINE extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public byte[] byReserved1 = new byte[2]; - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nMark; // 底层产生的触发抓拍帧标记 - public int nFrameSequence; // 视频分析帧序号 - public int nSource; // 视频分析的数据源地址 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息 - public int nSpeed; // 车辆实际速度,Km/h - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] byReserved = new byte[984]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - - } - - //事件类型 EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX(黄网格线抓拍事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_PARKINGONYELLOWBOX_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[8]; // 字节对齐 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - - public int nInterval1; // 第二张和第一张的延时时间,单位秒 - public int nInterval2; // 第三张和第二张的延时时间,单位秒 - public int nFollowTime; // 跟随时间,如果一辆车与前一辆车进入黄网格的时间差小于此值,就认为是跟车进入,跟车进入情况下如果停车则不算违章 - - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[984]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - - } - - // 事件类型EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT(交通未系安全带事件事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; public byte byReserved1[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public byte[] byReserved1 = new byte[2]; - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nLane; // 对应车道号 - public int nMark; // 底层产生的触发抓拍帧标记 - public int nFrameSequence; // 视频分析帧序号 - public int nSource; // 视频分析的数据源地址 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息 - public int nSpeed; // 车辆实际速度,Km/h - public int emMainSeat; // 主驾驶座位安全带状态 参考 NET_SAFEBELT_STATE - public int emSlaveSeat; // 副驾驶座位安全带状态 参考 NET_SAFEBELT_STATE - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] byReserved = new byte[984]; // 保留字节 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - - } - - //事件类型EVENT_IVS_TRAFFIC_JAM_FORBID_INTO(交通拥堵禁入事件)对应的数据块描述信息 - public static class DEV_EVENT_ALARM_JAMFORBIDINTO_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public int PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEveID; // 事件ID - ///////////////////////////////以上为公共字段////////////////////////////// - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nMark; // 底层产生的触发抓拍帧标记 - public int nSource; // 视频分析的数据源地址 - public int nSequence; // 表示抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束 - public int nFrameSequence; // 帧序号 - public int nLane; // 车道号 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[984]; // 保留字节 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - } - - //事件类型EVENT_IVS_TRAFFIC_PASSNOTINORDER(交通-未按规定依次通过)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public NET_MSG_OBJECT stuObject; // 车牌信息 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 - public EVENT_COMM_INFO stCommInfo; // 公共信息 - public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 - public byte[] bReserved = new byte[984]; // 保留字节 - } - + } + } + } + + // 事件类型 EVENT_IVS_TRAFFIC_OVERSTOPLINE (压停车线事件)对应的数据块描述信息 + public static class DEV_EVENT_TRAFFIC_OVERSTOPLINE extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public byte[] byReserved1 = new byte[2]; + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nMark; // 底层产生的触发抓拍帧标记 + public int nFrameSequence; // 视频分析帧序号 + public int nSource; // 视频分析的数据源地址 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息 + public int nSpeed; // 车辆实际速度,Km/h + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] byReserved = new byte[984]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + + } + + //事件类型 EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX(黄网格线抓拍事件)对应的数据块描述信息 + public static class DEV_EVENT_TRAFFIC_PARKINGONYELLOWBOX_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[8]; // 字节对齐 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + + public int nInterval1; // 第二张和第一张的延时时间,单位秒 + public int nInterval2; // 第三张和第二张的延时时间,单位秒 + public int nFollowTime; // 跟随时间,如果一辆车与前一辆车进入黄网格的时间差小于此值,就认为是跟车进入,跟车进入情况下如果停车则不算违章 + + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[984]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + + } + + // 事件类型EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT(交通未系安全带事件事件)对应的数据块描述信息 + public static class DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; public byte byReserved1[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public byte[] byReserved1 = new byte[2]; + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nLane; // 对应车道号 + public int nMark; // 底层产生的触发抓拍帧标记 + public int nFrameSequence; // 视频分析帧序号 + public int nSource; // 视频分析的数据源地址 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息 + public int nSpeed; // 车辆实际速度,Km/h + public int emMainSeat; // 主驾驶座位安全带状态 参考 NET_SAFEBELT_STATE + public int emSlaveSeat; // 副驾驶座位安全带状态 参考 NET_SAFEBELT_STATE + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] byReserved = new byte[984]; // 保留字节 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + + } + + //事件类型EVENT_IVS_TRAFFIC_JAM_FORBID_INTO(交通拥堵禁入事件)对应的数据块描述信息 + public static class DEV_EVENT_ALARM_JAMFORBIDINTO_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public int PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEveID; // 事件ID + ///////////////////////////////以上为公共字段////////////////////////////// + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nMark; // 底层产生的触发抓拍帧标记 + public int nSource; // 视频分析的数据源地址 + public int nSequence; // 表示抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束 + public int nFrameSequence; // 帧序号 + public int nLane; // 车道号 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[984]; // 保留字节 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + } + + //事件类型EVENT_IVS_TRAFFIC_PASSNOTINORDER(交通-未按规定依次通过)对应的数据块描述信息 + public static class DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public NET_MSG_OBJECT stuObject; // 车牌信息 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 + public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息 + public EVENT_COMM_INFO stCommInfo; // 公共信息 + public NET_GPS_INFO stuGPSInfo; // GPS信息 车载定制 + public byte[] bReserved = new byte[984]; // 保留字节 + } + //事件类型EVENT_IVS_TRAFFIC_MANUALSNAP(交通手动抓拍事件)对应的数据块描述信息 - public static class DEV_EVENT_TRAFFIC_MANUALSNAP_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nLane; // 对应车道号 - public byte[] szManualSnapNo = new byte[64]; // 手动抓拍序号 - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 检测到的车身信息 + public static class DEV_EVENT_TRAFFIC_MANUALSNAP_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nLane; // 对应车道号 + public byte[] szManualSnapNo = new byte[64]; // 手动抓拍序号 + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 检测到的车身信息 public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte byOpenStrobeState; // 开闸状态, 具体请见 EM_OPEN_STROBE_STATE - public byte[] byReserved = new byte[1]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte byOpenStrobeState; // 开闸状态, 具体请见 EM_OPEN_STROBE_STATE + public byte[] byReserved = new byte[1]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte[] bReserved = new byte[1016]; // 保留字节,留待扩展. - public EVENT_COMM_INFO stCommInfo; // 公共信息 + public byte[] bReserved = new byte[1016]; // 保留字节,留待扩展. + public EVENT_COMM_INFO stCommInfo; // 公共信息 } - + // 事件类型 EVENT_IVS_CROSSLINEDETECTION(警戒线事件)对应的数据块描述信息 public static class DEV_EVENT_CROSSLINE_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public NET_POINT[] DetectLine = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_LINE_NUM);// 规则检测线 - public int nDetectLineNum; // 规则检测线顶点数 - public NET_POINT[] TrackLine = (NET_POINT[])new NET_POINT().toArray(NET_MAX_TRACK_LINE_NUM); // 物体运动轨迹 - public int nTrackLineNum; // 物体运动轨迹顶点数 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte bDirection; // 表示入侵方向, 0-由左至右, 1-由右至左 - public byte byReserved; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public int nSourceIndex; // 事件源设备上的index,-1表示数据无效,-1表示数据无效 - public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备 - public int nOccurrenceCount; // 事件触发累计次数, 类型为unsigned int - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] bReserved = new byte[476]; // 保留字节,留待扩展. - } - + public NET_POINT[] DetectLine = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_LINE_NUM);// 规则检测线 + public int nDetectLineNum; // 规则检测线顶点数 + public NET_POINT[] TrackLine = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_TRACK_LINE_NUM); // 物体运动轨迹 + public int nTrackLineNum; // 物体运动轨迹顶点数 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte bDirection; // 表示入侵方向, 0-由左至右, 1-由右至左 + public byte byReserved; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public int nSourceIndex; // 事件源设备上的index,-1表示数据无效,-1表示数据无效 + public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备 + public int nOccurrenceCount; // 事件触发累计次数, 类型为unsigned int + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] bReserved = new byte[476]; // 保留字节,留待扩展. + } + // 事件类型 EVENT_IVS_CROSSREGIONDETECTION(警戒区事件)对应的数据块描述信息 public static class DEV_EVENT_CROSSREGION_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 - public int nDetectRegionNum; // 规则检测区域顶点数 - public NET_POINT[] TrackLine = (NET_POINT[])new NET_POINT().toArray(NET_MAX_TRACK_LINE_NUM); // 物体运动轨迹 - public int nTrackLineNum; // 物体运动轨迹顶点数 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte bDirection; // 表示入侵方向, 0-进入, 1-离开,2-出现,3-消失 - public byte bActionType; // 表示检测动作类型,0-出现 1-消失 2-在区域内 3-穿越区域 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public int nSourceIndex; // 事件源设备上的index,-1表示数据无效 - public byte[] szSourceDevice = new byte[MAX_PATH];// 事件源设备唯一标识,字段不存在或者为空表示本地设备 - public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型 - public byte[] bReserved = new byte[536]; // 保留字节,留待扩展. - public int nObjectNum; // 检测到的物体个数 - public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体 - public int nTrackNum; // 轨迹数(与检测到的物体个数 nObjectNum 对应) - public NET_POLY_POINTS[] stuTrackInfo = (NET_POLY_POINTS[]) new NET_POLY_POINTS().toArray(NET_MAX_OBJECT_LIST); // 轨迹信息(与检测到的物体对应) - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - } - + public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 + public int nDetectRegionNum; // 规则检测区域顶点数 + public NET_POINT[] TrackLine = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_TRACK_LINE_NUM); // 物体运动轨迹 + public int nTrackLineNum; // 物体运动轨迹顶点数 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte bDirection; // 表示入侵方向, 0-进入, 1-离开,2-出现,3-消失 + public byte bActionType; // 表示检测动作类型,0-出现 1-消失 2-在区域内 3-穿越区域 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public int nSourceIndex; // 事件源设备上的index,-1表示数据无效 + public byte[] szSourceDevice = new byte[MAX_PATH];// 事件源设备唯一标识,字段不存在或者为空表示本地设备 + public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型 + public byte[] bReserved = new byte[536]; // 保留字节,留待扩展. + public int nObjectNum; // 检测到的物体个数 + public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体 + public int nTrackNum; // 轨迹数(与检测到的物体个数 nObjectNum 对应) + public NET_POLY_POINTS[] stuTrackInfo = (NET_POLY_POINTS[]) new NET_POLY_POINTS().toArray(NET_MAX_OBJECT_LIST); // 轨迹信息(与检测到的物体对应) + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + } + // 事件类型 EVENT_IVS_WANDERDETECTION(徘徊事件)对应的数据块描述信息 public static class DEV_EVENT_WANDER_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; // 保留字节 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nObjectNum; // 检测到的物体个数 - public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体 - public int nTrackNum; // 轨迹数(与检测到的物体个数对应) - public NET_POLY_POINTS[] stuTrackInfo = (NET_POLY_POINTS[]) new NET_POLY_POINTS().toArray(NET_MAX_OBJECT_LIST); // 轨迹信息(与检测到的物体对应) - public int nDetectRegionNum; // 规则检测区域顶点数 - public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public int nSourceIndex; // 事件源设备上的index,-1表示数据无效 - public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备 - public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] bReserved = new byte[624]; // 保留字节,留待扩展. - } - + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; // 保留字节 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nObjectNum; // 检测到的物体个数 + public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体 + public int nTrackNum; // 轨迹数(与检测到的物体个数对应) + public NET_POLY_POINTS[] stuTrackInfo = (NET_POLY_POINTS[]) new NET_POLY_POINTS().toArray(NET_MAX_OBJECT_LIST); // 轨迹信息(与检测到的物体对应) + public int nDetectRegionNum; // 规则检测区域顶点数 + public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public int nSourceIndex; // 事件源设备上的index,-1表示数据无效 + public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备 + public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] bReserved = new byte[624]; // 保留字节,留待扩展. + } + //事件类型 EVENT_IVS_LEAVEDETECTION(离岗检测事件)对应数据块描述信息 public static class DEV_EVENT_IVS_LEAVE_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public int nDetectRegionNum; // 规则检测区域顶点数 - public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);// 规则检测区域 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] bReserved = new byte[894]; // 保留字节 + public int nDetectRegionNum; // 规则检测区域顶点数 + public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);// 规则检测区域 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] bReserved = new byte[894]; // 保留字节 } //事件类型 EVENT_IVS_AUDIO_ABNORMALDETECTION(声音异常检测)对应数据块描述信息 public static class DEV_EVENT_IVS_AUDIO_ABNORMALDETECTION_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int nDecibel; // 声音强度 - public int nFrequency; // 声音频率 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int nDecibel; // 声音强度 + public int nFrequency; // 声音频率 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public byte[] bReserved = new byte[1024]; // 保留字节,留待扩展. + public byte[] bReserved = new byte[1024]; // 保留字节,留待扩展. } - + //事件类型 EVENT_IVS_CLIMBDETECTION(攀高检测事件)对应数据块描述信息 public static class DEV_EVENT_IVS_CLIMB_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率 - public int nDetectLineNum; // 规则检测线顶点数 - public NET_POINT[] DetectLine = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_LINE_NUM); // 规则检测线 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nOccurrenceCount; // 事件触发累计次数, unsigned int - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] bReserved = new byte[890]; // 保留字节 - } - + public int nDetectLineNum; // 规则检测线顶点数 + public NET_POINT[] DetectLine = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_LINE_NUM); // 规则检测线 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nOccurrenceCount; // 事件触发累计次数, unsigned int + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] bReserved = new byte[890]; // 保留字节 + } + // 事件类型 EVENT_IVS_FIGHTDETECTION(斗殴事件)对应的数据块描述信息 public static class DEV_EVENT_FIGHT_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[128]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nObjectNum; // 检测到的物体个数 - public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[])new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体列表 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public byte[] byReserved = new byte[2]; // 保留字节 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int nDetectRegionNum; // 规则检测区域顶点数 - public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 - - public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" - public int nSourceIndex; // 事件源设备上的index,-1表示数据无效 - public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备 - public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型 - public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 - public byte[] bReserved = new byte[492]; // 保留字节,留待扩展. - } - + public int nChannelID; // 通道号 + public byte[] szName = new byte[128]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nObjectNum; // 检测到的物体个数 + public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体列表 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public byte[] byReserved = new byte[2]; // 保留字节 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int nDetectRegionNum; // 规则检测区域顶点数 + public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域 + + public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout" + public int nSourceIndex; // 事件源设备上的index,-1表示数据无效 + public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备 + public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型 + public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息 + public byte[] bReserved = new byte[492]; // 保留字节,留待扩展. + } + // 加油类型 public static class EM_REFUEL_TYPE extends Structure { - public static final int EM_REFUEL_TYPE_UNKNOWN = 0; // unknown - public static final int EM_REFUEL_TYPE_NINETY_EIGHT = 1; // "98#" - public static final int EM_REFUEL_TYPE_NINETY_SEVEN = 2; // "97#" - public static final int EM_REFUEL_TYPE_NINETY_FIVE = 3; // "95#" - public static final int EM_REFUEL_TYPE_NINETY_THREE = 4; // "93#" - public static final int EM_REFUEL_TYPE_NINETY = 5; // "90#" - public static final int EM_REFUEL_TYPE_TEN = 6; // "10#" - public static final int EM_REFUEL_TYPE_FIVE = 7; // "5#" - public static final int EM_REFUEL_TYPE_ZERO = 8; // "0#" - public static final int EM_REFUEL_TYPE_NEGATIVE_TEN = 9; // "-10#" - public static final int EM_REFUEL_TYPE_NEGATIVE_TWENTY = 10; // "-20#" - public static final int EM_REFUEL_TYPE_NEGATIVE_THIRTY_FIVE = 11; // "-35#" - public static final int EM_REFUEL_TYPE_NEGATIVE_FIFTY = 12; // "-50#" + public static final int EM_REFUEL_TYPE_UNKNOWN = 0; // unknown + public static final int EM_REFUEL_TYPE_NINETY_EIGHT = 1; // "98#" + public static final int EM_REFUEL_TYPE_NINETY_SEVEN = 2; // "97#" + public static final int EM_REFUEL_TYPE_NINETY_FIVE = 3; // "95#" + public static final int EM_REFUEL_TYPE_NINETY_THREE = 4; // "93#" + public static final int EM_REFUEL_TYPE_NINETY = 5; // "90#" + public static final int EM_REFUEL_TYPE_TEN = 6; // "10#" + public static final int EM_REFUEL_TYPE_FIVE = 7; // "5#" + public static final int EM_REFUEL_TYPE_ZERO = 8; // "0#" + public static final int EM_REFUEL_TYPE_NEGATIVE_TEN = 9; // "-10#" + public static final int EM_REFUEL_TYPE_NEGATIVE_TWENTY = 10; // "-20#" + public static final int EM_REFUEL_TYPE_NEGATIVE_THIRTY_FIVE = 11; // "-35#" + public static final int EM_REFUEL_TYPE_NEGATIVE_FIFTY = 12; // "-50#" } // 车辆抓拍图片信息 public static class DEV_EVENT_TRAFFIC_FCC_IMAGE extends Structure { - public int dwOffSet; // 图片文件在二进制数据块中的偏移位置, 单位:字节 - public int dwLength; // 图片大小, 单位:字节 - public short wWidth; // 图片宽度, 单位:像素 - public short wHeight; // 图片高度, 单位:像素 + public int dwOffSet; // 图片文件在二进制数据块中的偏移位置, 单位:字节 + public int dwLength; // 图片大小, 单位:字节 + public short wWidth; // 图片宽度, 单位:像素 + public short wHeight; // 图片高度, 单位:像素 } // 车辆抓图信息 public static class DEV_EVENT_TRAFFIC_FCC_OBJECT extends Structure { - public DEV_EVENT_TRAFFIC_FCC_IMAGE stuImage; // 车辆抓拍图片信息 + public DEV_EVENT_TRAFFIC_FCC_IMAGE stuImage; // 车辆抓拍图片信息 } // 事件类型 EVENT_IVS_TRAFFIC_FCC 加油站提枪、挂枪事件 public static class DEV_EVENT_TRAFFIC_FCC_INFO extends Structure { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public int nTriggerID; // 触发类型: 1表示提枪, 2表示挂枪 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public int nTriggerID; // 触发类型: 1表示提枪, 2表示挂枪 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID ///////////////////////////////以上为公共字段////////////////////////////// - public int nNum; // 加油枪号 - public int nLitre; // 加油升数,单位 0.01升 - public int emType; // 加油类型: 取值范围{"90#","93#","10#","-20#"}, 具体参考 EM_REFUEL_TYPE - public int dwMoney; // 加油金额,单位 0.01元 - public byte[] szText = new byte[NET_COMMON_STRING_16]; // 车牌号 - public byte[] szTime = new byte[NET_COMMON_STRING_32]; // 事件发生时间: "2016-05-23 10:31:17" - public DEV_EVENT_TRAFFIC_FCC_OBJECT stuObject; // 车辆抓图信息 - public byte[] bReserved = new byte[1024]; // 保留字节,留待扩展 + public int nNum; // 加油枪号 + public int nLitre; // 加油升数,单位 0.01升 + public int emType; // 加油类型: 取值范围{"90#","93#","10#","-20#"}, 具体参考 EM_REFUEL_TYPE + public int dwMoney; // 加油金额,单位 0.01元 + public byte[] szText = new byte[NET_COMMON_STRING_16]; // 车牌号 + public byte[] szTime = new byte[NET_COMMON_STRING_32]; // 事件发生时间: "2016-05-23 10:31:17" + public DEV_EVENT_TRAFFIC_FCC_OBJECT stuObject; // 车辆抓图信息 + public byte[] bReserved = new byte[1024]; // 保留字节,留待扩展 } - + // 区域或曲线顶点信息 - public static class NET_POLY_POINTS extends Structure - { - public int nPointNum; // 顶点数 - public NET_POINT[] stuPoints = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 顶点信息 + public static class NET_POLY_POINTS extends Structure { + public int nPointNum; // 顶点数 + public NET_POINT[] stuPoints = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 顶点信息 } - + // 抓图类型 - public static class NET_CAPTURE_FORMATS extends Structure - { - public static final int NET_CAPTURE_BMP = 0; - public static final int NET_CAPTURE_JPEG = 1; // 100%质量的JPEG - public static final int NET_CAPTURE_JPEG_70 = 2; // 70%质量的JPEG - public static final int NET_CAPTURE_JPEG_50 = 3; - public static final int NET_CAPTURE_JPEG_30 = 4; - } - + public static class NET_CAPTURE_FORMATS extends Structure { + public static final int NET_CAPTURE_BMP = 0; + public static final int NET_CAPTURE_JPEG = 1; // 100%质量的JPEG + public static final int NET_CAPTURE_JPEG_70 = 2; // 70%质量的JPEG + public static final int NET_CAPTURE_JPEG_50 = 3; + public static final int NET_CAPTURE_JPEG_30 = 4; + } + // 抓图参数结构体 - public static class SNAP_PARAMS extends Structure - { - public int Channel; // 抓图的通道 - public int Quality; // 画质;1~6 - public int ImageSize; // 画面大小;0:QCIF,1:CIF,2:D1 - public int mode; // 抓图模式;-1:表示停止抓图, 0:表示请求一帧, 1:表示定时发送请求, 2:表示连续请求 - public int InterSnap; // 时间单位秒;若mode=1表示定时发送请求时 - // 只有部分特殊设备(如:车载设备)支持通过该字段实现定时抓图时间间隔的配置 - // 建议通过 CFG_CMD_ENCODE 配置的stuSnapFormat[nSnapMode].stuVideoFormat.nFrameRate字段实现相关功能 - public int CmdSerial; // 请求序列号,有效值范围 0~65535,超过范围会被截断为 unsigned short - public int[] Reserved = new int[4]; - } - + public static class SNAP_PARAMS extends Structure { + public int Channel; // 抓图的通道 + public int Quality; // 画质;1~6 + public int ImageSize; // 画面大小;0:QCIF,1:CIF,2:D1 + public int mode; // 抓图模式;-1:表示停止抓图, 0:表示请求一帧, 1:表示定时发送请求, 2:表示连续请求 + public int InterSnap; // 时间单位秒;若mode=1表示定时发送请求时 + // 只有部分特殊设备(如:车载设备)支持通过该字段实现定时抓图时间间隔的配置 + // 建议通过 CFG_CMD_ENCODE 配置的stuSnapFormat[nSnapMode].stuVideoFormat.nFrameRate字段实现相关功能 + public int CmdSerial; // 请求序列号,有效值范围 0~65535,超过范围会被截断为 unsigned short + public int[] Reserved = new int[4]; + } + // 对应CLIENT_StartSearchDevices接口 - public static class DEVICE_NET_INFO_EX extends Structure - { - public int iIPVersion; // 4 for IPV4, 6 for IPV6 - public byte[] szIP = new byte[64]; // IPIPV4形如"192.168.0.1" - public int nPort; // tcp端口 - public byte[] szSubmask = new byte[64]; // 子网掩码IPV6无子网掩码 - public byte[] szGateway = new byte[64]; // 网关 - public byte[] szMac = new byte[NET_MACADDR_LEN]; // MAC地址 - public byte[] szDeviceType = new byte[NET_DEV_TYPE_LEN]; // 设备类型 - public byte byManuFactory; // 目标设备的生产厂商,具体参考EM_IPC_TYPE类 - public byte byDefinition; // 1-标清2-高清 - public byte bDhcpEn; // Dhcp使能状态,true-开,false-关, 类型为bool, 取值0或者1 - public byte byReserved1; // 字节对齐 - public byte[] verifyData = new byte[88]; // 校验数据通过异步搜索回调获取(在修改设备IP时会用此信息进行校验) - public byte[] szSerialNo = new byte[NET_DEV_SERIALNO_LEN]; // 序列号 - public byte[] szDevSoftVersion = new byte[NET_MAX_URL_LEN]; // 设备软件版本号 - public byte[] szDetailType = new byte[NET_DEV_TYPE_LEN]; // 设备型号 - public byte[] szVendor = new byte[NET_MAX_STRING_LEN]; // OEM客户类型 - public byte[] szDevName = new byte[NET_MACHINE_NAME_NUM]; // 设备名称 - public byte[] szUserName = new byte[NET_USER_NAME_LENGTH_EX]; // 登陆设备用户名(在修改设备IP时需要填写) - public byte[] szPassWord = new byte[NET_USER_NAME_LENGTH_EX]; // 登陆设备密码(在修改设备IP时需要填写) - public short nHttpPort; // HTTP服务端口号, unsigned short类型 - public short wVideoInputCh; // 视频输入通道数 - public short wRemoteVideoInputCh; // 远程视频输入通道数 - public short wVideoOutputCh; // 视频输出通道数 - public short wAlarmInputCh; // 报警输入通道数 - public short wAlarmOutputCh; // 报警输出通道数 - public int bNewWordLen; // TRUE使用新密码字段szNewPassWord, BOOL类型 - public byte[] szNewPassWord = new byte[NET_COMMON_STRING_64]; // 登陆设备密码(在修改设备IP时需要填写) - - public byte byInitStatus; // 设备初始化状态,按位确定初始化状态 - // bit0~1:0-老设备,没有初始化功能 1-未初始化账号 2-已初始化账户 - // bit2~3:0-老设备,保留 1-公网接入未使能 2-公网接入已使能 - // bit4~5:0-老设备,保留 1-手机直连未使能 2-手机直连使能 - - public byte byPwdResetWay; // 支持密码重置方式:按位确定密码重置方式,只在设备有初始化账号时有意义 - // bit0-支持预置手机号 bit1-支持预置邮箱 bit2-支持文件导出 - public byte bySpecialAbility; // 设备初始化能力,按位确定初始化能力 - public byte[] szNewDetailType = new byte[NET_COMMON_STRING_64]; // 设备型号 - public int bNewUserName; // TRUE表示使用新用户名(szNewUserName)字段. BOOL类型 - public byte[] szNewUserName = new byte[NET_COMMON_STRING_64]; // 登陆设备用户名(在修改设备IP时需要填写) - public byte[] cReserved = new byte[41]; - } - + public static class DEVICE_NET_INFO_EX extends Structure { + public int iIPVersion; // 4 for IPV4, 6 for IPV6 + public byte[] szIP = new byte[64]; // IPIPV4形如"192.168.0.1" + public int nPort; // tcp端口 + public byte[] szSubmask = new byte[64]; // 子网掩码IPV6无子网掩码 + public byte[] szGateway = new byte[64]; // 网关 + public byte[] szMac = new byte[NET_MACADDR_LEN]; // MAC地址 + public byte[] szDeviceType = new byte[NET_DEV_TYPE_LEN]; // 设备类型 + public byte byManuFactory; // 目标设备的生产厂商,具体参考EM_IPC_TYPE类 + public byte byDefinition; // 1-标清2-高清 + public byte bDhcpEn; // Dhcp使能状态,true-开,false-关, 类型为bool, 取值0或者1 + public byte byReserved1; // 字节对齐 + public byte[] verifyData = new byte[88]; // 校验数据通过异步搜索回调获取(在修改设备IP时会用此信息进行校验) + public byte[] szSerialNo = new byte[NET_DEV_SERIALNO_LEN]; // 序列号 + public byte[] szDevSoftVersion = new byte[NET_MAX_URL_LEN]; // 设备软件版本号 + public byte[] szDetailType = new byte[NET_DEV_TYPE_LEN]; // 设备型号 + public byte[] szVendor = new byte[NET_MAX_STRING_LEN]; // OEM客户类型 + public byte[] szDevName = new byte[NET_MACHINE_NAME_NUM]; // 设备名称 + public byte[] szUserName = new byte[NET_USER_NAME_LENGTH_EX]; // 登陆设备用户名(在修改设备IP时需要填写) + public byte[] szPassWord = new byte[NET_USER_NAME_LENGTH_EX]; // 登陆设备密码(在修改设备IP时需要填写) + public short nHttpPort; // HTTP服务端口号, unsigned short类型 + public short wVideoInputCh; // 视频输入通道数 + public short wRemoteVideoInputCh; // 远程视频输入通道数 + public short wVideoOutputCh; // 视频输出通道数 + public short wAlarmInputCh; // 报警输入通道数 + public short wAlarmOutputCh; // 报警输出通道数 + public int bNewWordLen; // TRUE使用新密码字段szNewPassWord, BOOL类型 + public byte[] szNewPassWord = new byte[NET_COMMON_STRING_64]; // 登陆设备密码(在修改设备IP时需要填写) + + public byte byInitStatus; // 设备初始化状态,按位确定初始化状态 + // bit0~1:0-老设备,没有初始化功能 1-未初始化账号 2-已初始化账户 + // bit2~3:0-老设备,保留 1-公网接入未使能 2-公网接入已使能 + // bit4~5:0-老设备,保留 1-手机直连未使能 2-手机直连使能 + + public byte byPwdResetWay; // 支持密码重置方式:按位确定密码重置方式,只在设备有初始化账号时有意义 + // bit0-支持预置手机号 bit1-支持预置邮箱 bit2-支持文件导出 + public byte bySpecialAbility; // 设备初始化能力,按位确定初始化能力 + public byte[] szNewDetailType = new byte[NET_COMMON_STRING_64]; // 设备型号 + public int bNewUserName; // TRUE表示使用新用户名(szNewUserName)字段. BOOL类型 + public byte[] szNewUserName = new byte[NET_COMMON_STRING_64]; // 登陆设备用户名(在修改设备IP时需要填写) + public byte[] cReserved = new byte[41]; + } + // 视频输入通道信息 public static class NET_VIDEO_INPUTS extends Structure { - public int dwSize; - public byte[] szChnName = new byte[64]; // 通道名称 - public int bEnable; // 使能 - public byte[] szControlID = new byte[128]; // 控制ID - public byte[] szMainStreamUrl = new byte[MAX_PATH]; // 主码流url地址 - public byte[] szExtraStreamUrl = new byte[MAX_PATH]; // 辅码流url地址 - public int nOptionalMainUrlCount; // 备用主码流地址数量 - public byte[] szOptionalMainUrls = new byte[8*MAX_PATH]; // 备用主码流地址列表 - public int nOptionalExtraUrlCount; // 备用辅码流地址数量 - public byte[] szOptionalExtraUrls = new byte[8*MAX_PATH]; // 备用辅码流地址列表 - - public NET_VIDEO_INPUTS() - { - this.dwSize = this.size(); - } - } - + public int dwSize; + public byte[] szChnName = new byte[64]; // 通道名称 + public int bEnable; // 使能 + public byte[] szControlID = new byte[128]; // 控制ID + public byte[] szMainStreamUrl = new byte[MAX_PATH]; // 主码流url地址 + public byte[] szExtraStreamUrl = new byte[MAX_PATH]; // 辅码流url地址 + public int nOptionalMainUrlCount; // 备用主码流地址数量 + public byte[] szOptionalMainUrls = new byte[8 * MAX_PATH]; // 备用主码流地址列表 + public int nOptionalExtraUrlCount; // 备用辅码流地址数量 + public byte[] szOptionalExtraUrls = new byte[8 * MAX_PATH]; // 备用辅码流地址列表 + + public NET_VIDEO_INPUTS() { + this.dwSize = this.size(); + } + } + // 远程设备信息 public static class NET_REMOTE_DEVICE extends Structure { - public int dwSize; - public int bEnable; // 使能,1-true 0-false - public byte[] szIp = new byte[16]; // IP - public byte[] szUser = new byte[8]; // 用户名, 建议使用szUserEx - public byte[] szPwd = new byte[8]; // 密码, 建议使用szPwdEx - public int nPort; // 端口 - public int nDefinition; // 清晰度, 0-标清, 1-高清 - public int emProtocol; // 协议类型 NET_DEVICE_PROTOCOL - public byte[] szDevName = new byte[64]; // 设备名称 - public int nVideoInputChannels; // 视频输入通道数 - public int nAudioInputChannels; // 音频输入通道数 - public byte[] szDevClass = new byte[32]; // 设备类型, 如IPC, DVR, NVR等 - public byte[] szDevType = new byte[32]; // 设备具体型号, 如IPC-HF3300 - public int nHttpPort; // Http端口 - public int nMaxVideoInputCount; // 视频输入通道最大数 - public int nRetVideoInputCount; // 返回实际通道个数 - public Pointer pstuVideoInputs; // 视频输入通道信息 NET_VIDEO_INPUTS* - public byte[] szMachineAddress = new byte[256]; // 设备部署地 - public byte[] szSerialNo = new byte[48]; // 设备序列号 - public int nRtspPort; // Rtsp端口 + public int dwSize; + public int bEnable; // 使能,1-true 0-false + public byte[] szIp = new byte[16]; // IP + public byte[] szUser = new byte[8]; // 用户名, 建议使用szUserEx + public byte[] szPwd = new byte[8]; // 密码, 建议使用szPwdEx + public int nPort; // 端口 + public int nDefinition; // 清晰度, 0-标清, 1-高清 + public int emProtocol; // 协议类型 NET_DEVICE_PROTOCOL + public byte[] szDevName = new byte[64]; // 设备名称 + public int nVideoInputChannels; // 视频输入通道数 + public int nAudioInputChannels; // 音频输入通道数 + public byte[] szDevClass = new byte[32]; // 设备类型, 如IPC, DVR, NVR等 + public byte[] szDevType = new byte[32]; // 设备具体型号, 如IPC-HF3300 + public int nHttpPort; // Http端口 + public int nMaxVideoInputCount; // 视频输入通道最大数 + public int nRetVideoInputCount; // 返回实际通道个数 + public Pointer pstuVideoInputs; // 视频输入通道信息 NET_VIDEO_INPUTS* + public byte[] szMachineAddress = new byte[256]; // 设备部署地 + public byte[] szSerialNo = new byte[48]; // 设备序列号 + public int nRtspPort; // Rtsp端口 /*以下用于新平台扩展*/ - public byte[] szUserEx = new byte[32]; // 用户名 - public byte[] szPwdEx = new byte[32]; // 密码 - - public NET_REMOTE_DEVICE() - { + public byte[] szUserEx = new byte[32]; // 用户名 + public byte[] szPwdEx = new byte[32]; // 密码 + + public NET_REMOTE_DEVICE() { this.dwSize = this.size(); } } - + // 可用的显示源信息 - public static class NET_MATRIX_CAMERA_INFO extends Structure - { - public int dwSize; - public byte[] szName = new byte[128]; // 名称 - public byte[] szDevID = new byte[128]; // 设备ID - public byte[] szszControlID = new byte[128]; // 控制ID - public int nChannelID; // 通道号, DeviceID设备内唯一 - public int nUniqueChannel; // 设备内统一编号的唯一通道号 - public int bRemoteDevice; // 是否远程设备 - public NET_REMOTE_DEVICE stuRemoteDevice; // 远程设备信息 - public int emStreamType; // 视频码流类型 NET_STREAM_TYPE - public int emChannelType; // 通道类型应 NET_LOGIC_CHN_TYPE - + public static class NET_MATRIX_CAMERA_INFO extends Structure { + public int dwSize; + public byte[] szName = new byte[128]; // 名称 + public byte[] szDevID = new byte[128]; // 设备ID + public byte[] szszControlID = new byte[128]; // 控制ID + public int nChannelID; // 通道号, DeviceID设备内唯一 + public int nUniqueChannel; // 设备内统一编号的唯一通道号 + public int bRemoteDevice; // 是否远程设备 + public NET_REMOTE_DEVICE stuRemoteDevice; // 远程设备信息 + public int emStreamType; // 视频码流类型 NET_STREAM_TYPE + public int emChannelType; // 通道类型应 NET_LOGIC_CHN_TYPE + public NET_MATRIX_CAMERA_INFO() { this.dwSize = this.size(); stuRemoteDevice = new NET_REMOTE_DEVICE(); } } - + // CLIENT_MatrixGetCameras接口的输入参数 public static class NET_IN_MATRIX_GET_CAMERAS extends Structure { - public int dwSize; - + public int dwSize; + public NET_IN_MATRIX_GET_CAMERAS() { this.dwSize = this.size(); } } - + // CLIENT_MatrixGetCameras接口的输出参数 public static class NET_OUT_MATRIX_GET_CAMERAS extends Structure { - public int dwSize; - public Pointer pstuCameras; // 显示源信息数组, 用户分配内存 NET_MATRIX_CAMERA_INFO - public int nMaxCameraCount; // 显示源数组大小 - public int nRetCameraCount; // 返回的显示源数量 - + public int dwSize; + public Pointer pstuCameras; // 显示源信息数组, 用户分配内存 NET_MATRIX_CAMERA_INFO + public int nMaxCameraCount; // 显示源数组大小 + public int nRetCameraCount; // 返回的显示源数量 + public NET_OUT_MATRIX_GET_CAMERAS() { this.dwSize = this.size(); } } - + // CLIENT_SnapPictureToFile 接口输入参数 public static class NET_IN_SNAP_PIC_TO_FILE_PARAM extends Structure { - public int dwSize; // 结构体大小 - public SNAP_PARAMS stuParam; // 抓图参数, 其中mode字段仅一次性抓图, 不支持定时或持续抓图; 除了车载DVR, 其他设备仅支持每秒一张的抓图频率 + public int dwSize; // 结构体大小 + public SNAP_PARAMS stuParam; // 抓图参数, 其中mode字段仅一次性抓图, 不支持定时或持续抓图; 除了车载DVR, 其他设备仅支持每秒一张的抓图频率 + + public byte[] szFilePath = new byte[MAX_PATH];// 写入文件的地址 - public byte[] szFilePath = new byte[MAX_PATH];// 写入文件的地址 - public NET_IN_SNAP_PIC_TO_FILE_PARAM() { this.dwSize = this.size(); this.stuParam = new SNAP_PARAMS(); } } - + // CLIENT_SnapPictureToFile 接口输出参数 public static class NET_OUT_SNAP_PIC_TO_FILE_PARAM extends Structure { - public int dwSize; - public Pointer szPicBuf; // 图片内容,用户分配内存 - public int dwPicBufLen; // 图片内容内存大小, 单位:字节 - public int dwPicBufRetLen; // 返回的图片大小, 单位:字节 - + public int dwSize; + public Pointer szPicBuf; // 图片内容,用户分配内存 + public int dwPicBufLen; // 图片内容内存大小, 单位:字节 + public int dwPicBufRetLen; // 返回的图片大小, 单位:字节 + public NET_OUT_SNAP_PIC_TO_FILE_PARAM() { this.dwSize = this.size(); } - + public NET_OUT_SNAP_PIC_TO_FILE_PARAM(int nMaxBuf) { this.dwSize = this.size(); this.dwPicBufLen = nMaxBuf; @@ -5872,92 +5637,91 @@ public interface NetSDKLib extends Library { this.szPicBuf = mem; } } - + // 录像文件信息 public static class NET_RECORDFILE_INFO extends Structure { - public int ch; // 通道号 - public byte[] filename = new byte[124]; // 文件名 - public int framenum; // 文件总帧数 - public int size; // 文件长度 - public NET_TIME starttime = new NET_TIME(); // 开始时间 - public NET_TIME endtime = new NET_TIME(); // 结束时间 - public int driveno; // 磁盘号(区分网络录像和本地录像的类型,0-127表示本地录像,其中64表示光盘1,128表示网络录像) - public int startcluster; // 起始簇号 - public byte nRecordFileType; // 录象文件类型 0:普通录象;1:报警录象;2:移动检测;3:卡号录象;4:图片, 5: 智能录像,255:所有录像 - public byte bImportantRecID; // 0:普通录像 1:重要录像 - public byte bHint; // 文件定位索引(nRecordFileType==4<图片>时,bImportantRecID<<8 +bHint ,组成图片定位索引 ) - public byte bRecType; // 0-主码流录像 1-辅码1流录像 2-辅码流2 3-辅码流3录像 - - public static class ByValue extends NET_RECORDFILE_INFO implements Structure.ByValue { } - } - + public int ch; // 通道号 + public byte[] filename = new byte[124]; // 文件名 + public int framenum; // 文件总帧数 + public int size; // 文件长度 + public NET_TIME starttime = new NET_TIME(); // 开始时间 + public NET_TIME endtime = new NET_TIME(); // 结束时间 + public int driveno; // 磁盘号(区分网络录像和本地录像的类型,0-127表示本地录像,其中64表示光盘1,128表示网络录像) + public int startcluster; // 起始簇号 + public byte nRecordFileType; // 录象文件类型 0:普通录象;1:报警录象;2:移动检测;3:卡号录象;4:图片, 5: 智能录像,255:所有录像 + public byte bImportantRecID; // 0:普通录像 1:重要录像 + public byte bHint; // 文件定位索引(nRecordFileType==4<图片>时,bImportantRecID<<8 +bHint ,组成图片定位索引 ) + public byte bRecType; // 0-主码流录像 1-辅码1流录像 2-辅码流2 3-辅码流3录像 + + public static class ByValue extends NET_RECORDFILE_INFO implements Structure.ByValue { + } + } + // 录像查询类型 public static class EM_QUERY_RECORD_TYPE extends Structure { - public static final int EM_RECORD_TYPE_ALL = 0; // 所有录像 - public static final int EM_RECORD_TYPE_ALARM = 1; // 外部报警录像 - public static final int EM_RECORD_TYPE_MOTION_DETECT = 2; // 动态检测报警录像 - public static final int EM_RECORD_TYPE_ALARM_ALL = 3; // 所有报警录像 - public static final int EM_RECORD_TYPE_CARD = 4; // 卡号查询 - public static final int EM_RECORD_TYPE_CONDITION = 5; // 按条件查询 - public static final int EM_RECORD_TYPE_JOIN = 6; // 组合查询 - public static final int EM_RECORD_TYPE_CARD_PICTURE = 8; // 按卡号查询图片,HB-U、NVS等使用 - public static final int EM_RECORD_TYPE_PICTURE = 9; // 查询图片,HB-U、NVS等使用 - public static final int EM_RECORD_TYPE_FIELD = 10; // 按字段查询 - public static final int EM_RECORD_TYPE_INTELLI_VIDEO = 11; // 智能录像查询 - public static final int EM_RECORD_TYPE_NET_DATA = 15; // 查询网络数据,金桥网吧等使用 - public static final int EM_RECORD_TYPE_TRANS_DATA = 16; // 查询透明串口数据录像 - public static final int EM_RECORD_TYPE_IMPORTANT = 17; // 查询重要录像 - public static final int EM_RECORD_TYPE_TALK_DATA = 18; // 查询录音文件 - - public static final int EM_RECORD_TYPE_INVALID = 256; // 无效的查询类型 - } - + public static final int EM_RECORD_TYPE_ALL = 0; // 所有录像 + public static final int EM_RECORD_TYPE_ALARM = 1; // 外部报警录像 + public static final int EM_RECORD_TYPE_MOTION_DETECT = 2; // 动态检测报警录像 + public static final int EM_RECORD_TYPE_ALARM_ALL = 3; // 所有报警录像 + public static final int EM_RECORD_TYPE_CARD = 4; // 卡号查询 + public static final int EM_RECORD_TYPE_CONDITION = 5; // 按条件查询 + public static final int EM_RECORD_TYPE_JOIN = 6; // 组合查询 + public static final int EM_RECORD_TYPE_CARD_PICTURE = 8; // 按卡号查询图片,HB-U、NVS等使用 + public static final int EM_RECORD_TYPE_PICTURE = 9; // 查询图片,HB-U、NVS等使用 + public static final int EM_RECORD_TYPE_FIELD = 10; // 按字段查询 + public static final int EM_RECORD_TYPE_INTELLI_VIDEO = 11; // 智能录像查询 + public static final int EM_RECORD_TYPE_NET_DATA = 15; // 查询网络数据,金桥网吧等使用 + public static final int EM_RECORD_TYPE_TRANS_DATA = 16; // 查询透明串口数据录像 + public static final int EM_RECORD_TYPE_IMPORTANT = 17; // 查询重要录像 + public static final int EM_RECORD_TYPE_TALK_DATA = 18; // 查询录音文件 + + public static final int EM_RECORD_TYPE_INVALID = 256; // 无效的查询类型 + } + // 语言种类 - public static class NET_LANGUAGE_TYPE extends Structure - { + public static class NET_LANGUAGE_TYPE extends Structure { public static final int NET_LANGUAGE_ENGLISH = 0; //英文 - public static final int NET_LANGUAGE_CHINESE_SIMPLIFIED = NET_LANGUAGE_ENGLISH+1; //简体中文 - public static final int NET_LANGUAGE_CHINESE_TRADITIONAL = NET_LANGUAGE_CHINESE_SIMPLIFIED+1; //繁体中文 - public static final int NET_LANGUAGE_ITALIAN = NET_LANGUAGE_CHINESE_TRADITIONAL+1; //意大利文 - public static final int NET_LANGUAGE_SPANISH = NET_LANGUAGE_ITALIAN+1; //西班牙文 - public static final int NET_LANGUAGE_JAPANESE = NET_LANGUAGE_SPANISH+1; //日文版 - public static final int NET_LANGUAGE_RUSSIAN = NET_LANGUAGE_JAPANESE+1; //俄文版 - public static final int NET_LANGUAGE_FRENCH = NET_LANGUAGE_RUSSIAN+1; //法文版 - public static final int NET_LANGUAGE_GERMAN = NET_LANGUAGE_FRENCH+1; //德文版 - public static final int NET_LANGUAGE_PORTUGUESE = NET_LANGUAGE_GERMAN+1; //葡萄牙语 - public static final int NET_LANGUAGE_TURKEY = NET_LANGUAGE_PORTUGUESE+1; //土尔其语 - public static final int NET_LANGUAGE_POLISH = NET_LANGUAGE_TURKEY+1; //波兰语 - public static final int NET_LANGUAGE_ROMANIAN = NET_LANGUAGE_POLISH+1; //罗马尼亚 - public static final int NET_LANGUAGE_HUNGARIAN = NET_LANGUAGE_ROMANIAN+1; //匈牙利语 - public static final int NET_LANGUAGE_FINNISH = NET_LANGUAGE_HUNGARIAN+1; //芬兰语 - public static final int NET_LANGUAGE_ESTONIAN = NET_LANGUAGE_FINNISH+1; //爱沙尼亚语 - public static final int NET_LANGUAGE_KOREAN = NET_LANGUAGE_ESTONIAN+1; //韩语 - public static final int NET_LANGUAGE_FARSI = NET_LANGUAGE_KOREAN+1; //波斯语 - public static final int NET_LANGUAGE_DANSK = NET_LANGUAGE_FARSI+1; //丹麦语 - public static final int NET_LANGUAGE_CZECHISH = NET_LANGUAGE_DANSK+1; //捷克文 - public static final int NET_LANGUAGE_BULGARIA = NET_LANGUAGE_CZECHISH+1; //保加利亚文 - public static final int NET_LANGUAGE_SLOVAKIAN = NET_LANGUAGE_BULGARIA+1; //斯洛伐克语 - public static final int NET_LANGUAGE_SLOVENIA = NET_LANGUAGE_SLOVAKIAN+1; //斯洛文尼亚文 - public static final int NET_LANGUAGE_CROATIAN = NET_LANGUAGE_SLOVENIA+1; //克罗地亚语 - public static final int NET_LANGUAGE_DUTCH = NET_LANGUAGE_CROATIAN+1; //荷兰语 - public static final int NET_LANGUAGE_GREEK = NET_LANGUAGE_DUTCH+1; //希腊语 - public static final int NET_LANGUAGE_UKRAINIAN = NET_LANGUAGE_GREEK+1; //乌克兰语 - public static final int NET_LANGUAGE_SWEDISH = NET_LANGUAGE_UKRAINIAN+1; //瑞典语 - public static final int NET_LANGUAGE_SERBIAN = NET_LANGUAGE_SWEDISH+1; //塞尔维亚语 - public static final int NET_LANGUAGE_VIETNAMESE = NET_LANGUAGE_SERBIAN+1; //越南语 - public static final int NET_LANGUAGE_LITHUANIAN = NET_LANGUAGE_VIETNAMESE+1; //立陶宛语 - public static final int NET_LANGUAGE_FILIPINO = NET_LANGUAGE_LITHUANIAN+1; //菲律宾语 - public static final int NET_LANGUAGE_ARABIC = NET_LANGUAGE_FILIPINO+1; //阿拉伯语 - public static final int NET_LANGUAGE_CATALAN = NET_LANGUAGE_ARABIC+1; //加泰罗尼亚语 - public static final int NET_LANGUAGE_LATVIAN = NET_LANGUAGE_CATALAN+1; //拉脱维亚语 - public static final int NET_LANGUAGE_THAI = NET_LANGUAGE_LATVIAN+1; //泰语 - public static final int NET_LANGUAGE_HEBREW = NET_LANGUAGE_THAI+1; //希伯来语 - public static final int NET_LANGUAGE_Bosnian = NET_LANGUAGE_HEBREW+1; //波斯尼亚文 - } - + public static final int NET_LANGUAGE_CHINESE_SIMPLIFIED = NET_LANGUAGE_ENGLISH + 1; //简体中文 + public static final int NET_LANGUAGE_CHINESE_TRADITIONAL = NET_LANGUAGE_CHINESE_SIMPLIFIED + 1; //繁体中文 + public static final int NET_LANGUAGE_ITALIAN = NET_LANGUAGE_CHINESE_TRADITIONAL + 1; //意大利文 + public static final int NET_LANGUAGE_SPANISH = NET_LANGUAGE_ITALIAN + 1; //西班牙文 + public static final int NET_LANGUAGE_JAPANESE = NET_LANGUAGE_SPANISH + 1; //日文版 + public static final int NET_LANGUAGE_RUSSIAN = NET_LANGUAGE_JAPANESE + 1; //俄文版 + public static final int NET_LANGUAGE_FRENCH = NET_LANGUAGE_RUSSIAN + 1; //法文版 + public static final int NET_LANGUAGE_GERMAN = NET_LANGUAGE_FRENCH + 1; //德文版 + public static final int NET_LANGUAGE_PORTUGUESE = NET_LANGUAGE_GERMAN + 1; //葡萄牙语 + public static final int NET_LANGUAGE_TURKEY = NET_LANGUAGE_PORTUGUESE + 1; //土尔其语 + public static final int NET_LANGUAGE_POLISH = NET_LANGUAGE_TURKEY + 1; //波兰语 + public static final int NET_LANGUAGE_ROMANIAN = NET_LANGUAGE_POLISH + 1; //罗马尼亚 + public static final int NET_LANGUAGE_HUNGARIAN = NET_LANGUAGE_ROMANIAN + 1; //匈牙利语 + public static final int NET_LANGUAGE_FINNISH = NET_LANGUAGE_HUNGARIAN + 1; //芬兰语 + public static final int NET_LANGUAGE_ESTONIAN = NET_LANGUAGE_FINNISH + 1; //爱沙尼亚语 + public static final int NET_LANGUAGE_KOREAN = NET_LANGUAGE_ESTONIAN + 1; //韩语 + public static final int NET_LANGUAGE_FARSI = NET_LANGUAGE_KOREAN + 1; //波斯语 + public static final int NET_LANGUAGE_DANSK = NET_LANGUAGE_FARSI + 1; //丹麦语 + public static final int NET_LANGUAGE_CZECHISH = NET_LANGUAGE_DANSK + 1; //捷克文 + public static final int NET_LANGUAGE_BULGARIA = NET_LANGUAGE_CZECHISH + 1; //保加利亚文 + public static final int NET_LANGUAGE_SLOVAKIAN = NET_LANGUAGE_BULGARIA + 1; //斯洛伐克语 + public static final int NET_LANGUAGE_SLOVENIA = NET_LANGUAGE_SLOVAKIAN + 1; //斯洛文尼亚文 + public static final int NET_LANGUAGE_CROATIAN = NET_LANGUAGE_SLOVENIA + 1; //克罗地亚语 + public static final int NET_LANGUAGE_DUTCH = NET_LANGUAGE_CROATIAN + 1; //荷兰语 + public static final int NET_LANGUAGE_GREEK = NET_LANGUAGE_DUTCH + 1; //希腊语 + public static final int NET_LANGUAGE_UKRAINIAN = NET_LANGUAGE_GREEK + 1; //乌克兰语 + public static final int NET_LANGUAGE_SWEDISH = NET_LANGUAGE_UKRAINIAN + 1; //瑞典语 + public static final int NET_LANGUAGE_SERBIAN = NET_LANGUAGE_SWEDISH + 1; //塞尔维亚语 + public static final int NET_LANGUAGE_VIETNAMESE = NET_LANGUAGE_SERBIAN + 1; //越南语 + public static final int NET_LANGUAGE_LITHUANIAN = NET_LANGUAGE_VIETNAMESE + 1; //立陶宛语 + public static final int NET_LANGUAGE_FILIPINO = NET_LANGUAGE_LITHUANIAN + 1; //菲律宾语 + public static final int NET_LANGUAGE_ARABIC = NET_LANGUAGE_FILIPINO + 1; //阿拉伯语 + public static final int NET_LANGUAGE_CATALAN = NET_LANGUAGE_ARABIC + 1; //加泰罗尼亚语 + public static final int NET_LANGUAGE_LATVIAN = NET_LANGUAGE_CATALAN + 1; //拉脱维亚语 + public static final int NET_LANGUAGE_THAI = NET_LANGUAGE_LATVIAN + 1; //泰语 + public static final int NET_LANGUAGE_HEBREW = NET_LANGUAGE_THAI + 1; //希伯来语 + public static final int NET_LANGUAGE_Bosnian = NET_LANGUAGE_HEBREW + 1; //波斯尼亚文 + } + // 区域信息 - public static class CFG_RECT extends Structure - { + public static class CFG_RECT extends Structure { public int nLeft; public int nTop; public int nRight; @@ -5965,20 +5729,19 @@ public interface NetSDKLib extends Library { } // 视频输入夜晚特殊配置选项,在晚上光线较暗时自动切换到夜晚的配置参数 - public static class CFG_VIDEO_IN_NIGHT_OPTIONS extends Structure - { + public static class CFG_VIDEO_IN_NIGHT_OPTIONS extends Structure { public byte bySwitchMode;//已废弃,使用CFG_VIDEO_IN_OPTIONS里面的bySwitchMode //0-不切换,总是使用白天配置;1-根据亮度切换;2-根据时间切换;3-不切换,总是使用夜晚配置;4-使用普通配置 public byte byProfile;//当前使用的配置文件. - // 0-白天 - // 1-晚上 - // 2-Normal - // 0,1,2都为临时配置,使图像生效,便于查看图像调试效果,不点击确定,离开页面不保存至设备。 - ///3-非临时配置,点击确定后保存至设备,与SwitchMode结合使用,根据SwitchMode决定最终生效的配置。 - // SwitchMode=0,Profile=3,设置白天配置到设备; - // SwitchMode=1,Profile=3,则设置夜晚配置到设备 - // SwitchMode=2,Profile=3,根据日出日落时间段切换,白天时间段使用白天配置,夜晚时间段使用夜晚配置,保存至设备; - // SwitchMode=4,Profile=3;使用普通配置,保存至设备 + // 0-白天 + // 1-晚上 + // 2-Normal + // 0,1,2都为临时配置,使图像生效,便于查看图像调试效果,不点击确定,离开页面不保存至设备。 + ///3-非临时配置,点击确定后保存至设备,与SwitchMode结合使用,根据SwitchMode决定最终生效的配置。 + // SwitchMode=0,Profile=3,设置白天配置到设备; + // SwitchMode=1,Profile=3,则设置夜晚配置到设备 + // SwitchMode=2,Profile=3,根据日出日落时间段切换,白天时间段使用白天配置,夜晚时间段使用夜晚配置,保存至设备; + // SwitchMode=4,Profile=3;使用普通配置,保存至设备 public byte byBrightnessThreshold;//亮度阈值0~100 public byte bySunriseHour;//大致日出和日落时间,日落之后日出之前,将采用夜晚特殊的配置。 public byte bySunriseMinute;//00:00:00 ~ 23:59:59 @@ -6014,8 +5777,7 @@ public interface NetSDKLib extends Library { } // 闪光灯配置 - public static class CFG_FLASH_CONTROL extends Structure - { + public static class CFG_FLASH_CONTROL extends Structure { public byte byMode;//工作模式,0-禁止闪光,1-始终闪光,2-自动闪光 public byte byValue;//工作值,0-0us,1-64us, 2-128us, 3-192...15-960us public byte byPole;//触发模式,0-低电平1-高电平 2-上升沿 3-下降沿 @@ -6026,8 +5788,7 @@ public interface NetSDKLib extends Library { } // 抓拍参数特殊配置 - public static class CFG_VIDEO_IN_SNAPSHOT_OPTIONS extends Structure - { + public static class CFG_VIDEO_IN_SNAPSHOT_OPTIONS extends Structure { public byte byGainRed;//红色增益调节,白平衡为"Custom"模式下有效0~100 public byte byGainBlue;//绿色增益调节,白平衡为"Custom"模式下有效0~100 public byte byGainGreen;//蓝色增益调节,白平衡为"Custom"模式下有效0~100 @@ -6042,8 +5803,7 @@ public interface NetSDKLib extends Library { } // 鱼眼镜头配置 - public static class CFG_FISH_EYE extends Structure - { + public static class CFG_FISH_EYE extends Structure { public CFG_POLYGON stuCenterPoint;//鱼眼圆心坐标,范围[0,8192] public int nRadius;//鱼眼半径大小,范围[0,8192], 类型为unsigned int public float fDirection;//镜头旋转方向,旋转角度[0,360.0] @@ -6052,8 +5812,7 @@ public interface NetSDKLib extends Library { public byte[] reversed = new byte[31];//保留 } - public static class CFG_VIDEO_IN_NORMAL_OPTIONS extends Structure - { + public static class CFG_VIDEO_IN_NORMAL_OPTIONS extends Structure { public byte byGainRed;//红色增益调节,白平衡为"Custom"模式下有效0~100 public byte byGainBlue;//绿色增益调节,白平衡为"Custom"模式下有效0~100 public byte byGainGreen;//蓝色增益调节,白平衡为"Custom"模式下有效0~100 @@ -6082,8 +5841,7 @@ public interface NetSDKLib extends Library { } // 视频输入前端选项 - public static class CFG_VIDEO_IN_OPTIONS extends Structure - { + public static class CFG_VIDEO_IN_OPTIONS extends Structure { public byte byBacklight;//背光补偿:取值范围取决于设备能力集:0-关闭1-启用2-指定区域背光补偿 public byte byDayNightColor;//日/夜模式;0-总是彩色,1-根据亮度自动切换,2-总是黑白 public byte byWhiteBalance;//白平衡,0-"Disable", 1-"Auto", 2-"Custom", 3-"Sunny", 4-"Cloudy", 5-"Home", 6-"Office", 7-"Night", 8-"HighColorTemperature", 9-"LowColorTemperature", 10-"AutoColorTemperature", 11-"CustomColorTemperature" @@ -6121,68 +5879,66 @@ public interface NetSDKLib extends Library { public CFG_RECT stuBacklightRegion;//背光补偿区域 public CFG_VIDEO_IN_NORMAL_OPTIONS stuNormalOptions;//普通参数 } - + // 通用云台控制命令 - public static class NET_PTZ_ControlType extends Structure - { + public static class NET_PTZ_ControlType extends Structure { public static final int NET_PTZ_UP_CONTROL = 0;//上 - public static final int NET_PTZ_DOWN_CONTROL = NET_PTZ_UP_CONTROL+1; //下 - public static final int NET_PTZ_LEFT_CONTROL = NET_PTZ_DOWN_CONTROL+1; //左 - public static final int NET_PTZ_RIGHT_CONTROL = NET_PTZ_LEFT_CONTROL+1; //右 - public static final int NET_PTZ_ZOOM_ADD_CONTROL = NET_PTZ_RIGHT_CONTROL+1; //变倍+ - public static final int NET_PTZ_ZOOM_DEC_CONTROL = NET_PTZ_ZOOM_ADD_CONTROL+1; //变倍- - public static final int NET_PTZ_FOCUS_ADD_CONTROL = NET_PTZ_ZOOM_DEC_CONTROL+1; //调焦+ - public static final int NET_PTZ_FOCUS_DEC_CONTROL = NET_PTZ_FOCUS_ADD_CONTROL+1; //调焦- - public static final int NET_PTZ_APERTURE_ADD_CONTROL = NET_PTZ_FOCUS_DEC_CONTROL+1; //光圈+ - public static final int NET_PTZ_APERTURE_DEC_CONTROL = NET_PTZ_APERTURE_ADD_CONTROL+1; //光圈- - public static final int NET_PTZ_POINT_MOVE_CONTROL = NET_PTZ_APERTURE_DEC_CONTROL+1; //转至预置点 - public static final int NET_PTZ_POINT_SET_CONTROL = NET_PTZ_POINT_MOVE_CONTROL+1; //设置 - public static final int NET_PTZ_POINT_DEL_CONTROL = NET_PTZ_POINT_SET_CONTROL+1; //删除 - public static final int NET_PTZ_POINT_LOOP_CONTROL = NET_PTZ_POINT_DEL_CONTROL+1; //点间巡航 - public static final int NET_PTZ_LAMP_CONTROL = NET_PTZ_POINT_LOOP_CONTROL+1; //灯光雨刷 + public static final int NET_PTZ_DOWN_CONTROL = NET_PTZ_UP_CONTROL + 1; //下 + public static final int NET_PTZ_LEFT_CONTROL = NET_PTZ_DOWN_CONTROL + 1; //左 + public static final int NET_PTZ_RIGHT_CONTROL = NET_PTZ_LEFT_CONTROL + 1; //右 + public static final int NET_PTZ_ZOOM_ADD_CONTROL = NET_PTZ_RIGHT_CONTROL + 1; //变倍+ + public static final int NET_PTZ_ZOOM_DEC_CONTROL = NET_PTZ_ZOOM_ADD_CONTROL + 1; //变倍- + public static final int NET_PTZ_FOCUS_ADD_CONTROL = NET_PTZ_ZOOM_DEC_CONTROL + 1; //调焦+ + public static final int NET_PTZ_FOCUS_DEC_CONTROL = NET_PTZ_FOCUS_ADD_CONTROL + 1; //调焦- + public static final int NET_PTZ_APERTURE_ADD_CONTROL = NET_PTZ_FOCUS_DEC_CONTROL + 1; //光圈+ + public static final int NET_PTZ_APERTURE_DEC_CONTROL = NET_PTZ_APERTURE_ADD_CONTROL + 1; //光圈- + public static final int NET_PTZ_POINT_MOVE_CONTROL = NET_PTZ_APERTURE_DEC_CONTROL + 1; //转至预置点 + public static final int NET_PTZ_POINT_SET_CONTROL = NET_PTZ_POINT_MOVE_CONTROL + 1; //设置 + public static final int NET_PTZ_POINT_DEL_CONTROL = NET_PTZ_POINT_SET_CONTROL + 1; //删除 + public static final int NET_PTZ_POINT_LOOP_CONTROL = NET_PTZ_POINT_DEL_CONTROL + 1; //点间巡航 + public static final int NET_PTZ_LAMP_CONTROL = NET_PTZ_POINT_LOOP_CONTROL + 1; //灯光雨刷 } // 云台控制扩展命令 - public static class NET_EXTPTZ_ControlType extends Structure - { + public static class NET_EXTPTZ_ControlType extends Structure { public static final int NET_EXTPTZ_LEFTTOP = 0x20;//左上 - public static final int NET_EXTPTZ_RIGHTTOP = NET_EXTPTZ_LEFTTOP+1; //右上 - public static final int NET_EXTPTZ_LEFTDOWN = NET_EXTPTZ_RIGHTTOP+1; //左下 - public static final int NET_EXTPTZ_RIGHTDOWN = NET_EXTPTZ_LEFTDOWN+1; //右下 - public static final int NET_EXTPTZ_ADDTOLOOP = NET_EXTPTZ_RIGHTDOWN+1; //加入预置点到巡航巡航线路预置点值 - public static final int NET_EXTPTZ_DELFROMLOOP = NET_EXTPTZ_ADDTOLOOP+1; //删除巡航中预置点巡航线路预置点值 - public static final int NET_EXTPTZ_CLOSELOOP = NET_EXTPTZ_DELFROMLOOP+1; //清除巡航巡航线路 - public static final int NET_EXTPTZ_STARTPANCRUISE = NET_EXTPTZ_CLOSELOOP+1; //开始水平旋转 - public static final int NET_EXTPTZ_STOPPANCRUISE = NET_EXTPTZ_STARTPANCRUISE+1; //停止水平旋转 - public static final int NET_EXTPTZ_SETLEFTBORDER = NET_EXTPTZ_STOPPANCRUISE+1; //设置左边界 - public static final int NET_EXTPTZ_SETRIGHTBORDER = NET_EXTPTZ_SETLEFTBORDER+1; //设置右边界 - public static final int NET_EXTPTZ_STARTLINESCAN = NET_EXTPTZ_SETRIGHTBORDER+1; //开始线扫 - public static final int NET_EXTPTZ_CLOSELINESCAN = NET_EXTPTZ_STARTLINESCAN+1; //停止线扫 - public static final int NET_EXTPTZ_SETMODESTART = NET_EXTPTZ_CLOSELINESCAN+1; //设置模式开始模式线路 - public static final int NET_EXTPTZ_SETMODESTOP = NET_EXTPTZ_SETMODESTART+1; //设置模式结束模式线路 - public static final int NET_EXTPTZ_RUNMODE = NET_EXTPTZ_SETMODESTOP+1; //运行模式模式线路 - public static final int NET_EXTPTZ_STOPMODE = NET_EXTPTZ_RUNMODE+1; //停止模式模式线路 - public static final int NET_EXTPTZ_DELETEMODE = NET_EXTPTZ_STOPMODE+1; //清除模式模式线路 - public static final int NET_EXTPTZ_REVERSECOMM = NET_EXTPTZ_DELETEMODE+1; //翻转命令 - public static final int NET_EXTPTZ_FASTGOTO = NET_EXTPTZ_REVERSECOMM+1; //快速定位水平坐标(8192)垂直坐标(8192)变倍(4) - public static final int NET_EXTPTZ_AUXIOPEN = NET_EXTPTZ_FASTGOTO+1; //辅助开关开辅助点 - public static final int NET_EXTPTZ_AUXICLOSE = NET_EXTPTZ_AUXIOPEN+1; //辅助开关关辅助点 + public static final int NET_EXTPTZ_RIGHTTOP = NET_EXTPTZ_LEFTTOP + 1; //右上 + public static final int NET_EXTPTZ_LEFTDOWN = NET_EXTPTZ_RIGHTTOP + 1; //左下 + public static final int NET_EXTPTZ_RIGHTDOWN = NET_EXTPTZ_LEFTDOWN + 1; //右下 + public static final int NET_EXTPTZ_ADDTOLOOP = NET_EXTPTZ_RIGHTDOWN + 1; //加入预置点到巡航巡航线路预置点值 + public static final int NET_EXTPTZ_DELFROMLOOP = NET_EXTPTZ_ADDTOLOOP + 1; //删除巡航中预置点巡航线路预置点值 + public static final int NET_EXTPTZ_CLOSELOOP = NET_EXTPTZ_DELFROMLOOP + 1; //清除巡航巡航线路 + public static final int NET_EXTPTZ_STARTPANCRUISE = NET_EXTPTZ_CLOSELOOP + 1; //开始水平旋转 + public static final int NET_EXTPTZ_STOPPANCRUISE = NET_EXTPTZ_STARTPANCRUISE + 1; //停止水平旋转 + public static final int NET_EXTPTZ_SETLEFTBORDER = NET_EXTPTZ_STOPPANCRUISE + 1; //设置左边界 + public static final int NET_EXTPTZ_SETRIGHTBORDER = NET_EXTPTZ_SETLEFTBORDER + 1; //设置右边界 + public static final int NET_EXTPTZ_STARTLINESCAN = NET_EXTPTZ_SETRIGHTBORDER + 1; //开始线扫 + public static final int NET_EXTPTZ_CLOSELINESCAN = NET_EXTPTZ_STARTLINESCAN + 1; //停止线扫 + public static final int NET_EXTPTZ_SETMODESTART = NET_EXTPTZ_CLOSELINESCAN + 1; //设置模式开始模式线路 + public static final int NET_EXTPTZ_SETMODESTOP = NET_EXTPTZ_SETMODESTART + 1; //设置模式结束模式线路 + public static final int NET_EXTPTZ_RUNMODE = NET_EXTPTZ_SETMODESTOP + 1; //运行模式模式线路 + public static final int NET_EXTPTZ_STOPMODE = NET_EXTPTZ_RUNMODE + 1; //停止模式模式线路 + public static final int NET_EXTPTZ_DELETEMODE = NET_EXTPTZ_STOPMODE + 1; //清除模式模式线路 + public static final int NET_EXTPTZ_REVERSECOMM = NET_EXTPTZ_DELETEMODE + 1; //翻转命令 + public static final int NET_EXTPTZ_FASTGOTO = NET_EXTPTZ_REVERSECOMM + 1; //快速定位水平坐标(8192)垂直坐标(8192)变倍(4) + public static final int NET_EXTPTZ_AUXIOPEN = NET_EXTPTZ_FASTGOTO + 1; //辅助开关开辅助点 + public static final int NET_EXTPTZ_AUXICLOSE = NET_EXTPTZ_AUXIOPEN + 1; //辅助开关关辅助点 public static final int NET_EXTPTZ_OPENMENU = 0x36;//打开球机菜单 - public static final int NET_EXTPTZ_CLOSEMENU = NET_EXTPTZ_OPENMENU+1; //关闭菜单 - public static final int NET_EXTPTZ_MENUOK = NET_EXTPTZ_CLOSEMENU+1; //菜单确定 - public static final int NET_EXTPTZ_MENUCANCEL = NET_EXTPTZ_MENUOK+1; //菜单取消 - public static final int NET_EXTPTZ_MENUUP = NET_EXTPTZ_MENUCANCEL+1; //菜单上 - public static final int NET_EXTPTZ_MENUDOWN = NET_EXTPTZ_MENUUP+1; //菜单下 - public static final int NET_EXTPTZ_MENULEFT = NET_EXTPTZ_MENUDOWN+1; //菜单左 - public static final int NET_EXTPTZ_MENURIGHT = NET_EXTPTZ_MENULEFT+1; //菜单右 + public static final int NET_EXTPTZ_CLOSEMENU = NET_EXTPTZ_OPENMENU + 1; //关闭菜单 + public static final int NET_EXTPTZ_MENUOK = NET_EXTPTZ_CLOSEMENU + 1; //菜单确定 + public static final int NET_EXTPTZ_MENUCANCEL = NET_EXTPTZ_MENUOK + 1; //菜单取消 + public static final int NET_EXTPTZ_MENUUP = NET_EXTPTZ_MENUCANCEL + 1; //菜单上 + public static final int NET_EXTPTZ_MENUDOWN = NET_EXTPTZ_MENUUP + 1; //菜单下 + public static final int NET_EXTPTZ_MENULEFT = NET_EXTPTZ_MENUDOWN + 1; //菜单左 + public static final int NET_EXTPTZ_MENURIGHT = NET_EXTPTZ_MENULEFT + 1; //菜单右 public static final int NET_EXTPTZ_ALARMHANDLE = 0x40;//报警联动云台parm1:报警输入通道;parm2:报警联动类型1-预置点2-线扫3-巡航;parm3:联动值,如预置点号 public static final int NET_EXTPTZ_MATRIXSWITCH = 0x41;//矩阵切换parm1:监视器号(视频输出号);parm2:视频输入号;parm3:矩阵号 - public static final int NET_EXTPTZ_LIGHTCONTROL= NET_EXTPTZ_MATRIXSWITCH+1; //灯光控制器 - public static final int NET_EXTPTZ_EXACTGOTO = NET_EXTPTZ_LIGHTCONTROL+1; //三维精确定位parm1:水平角度(0~3600);parm2:垂直坐标(0~900);parm3:变倍(1~128) - public static final int NET_EXTPTZ_RESETZERO = NET_EXTPTZ_EXACTGOTO+1; //三维定位重设零位 - public static final int NET_EXTPTZ_MOVE_ABSOLUTELY = NET_EXTPTZ_RESETZERO+1; //绝对移动控制命令,param4对应结构PTZ_CONTROL_ABSOLUTELY - public static final int NET_EXTPTZ_MOVE_CONTINUOUSLY = NET_EXTPTZ_MOVE_ABSOLUTELY+1; //持续移动控制命令,param4对应结构PTZ_CONTROL_CONTINUOUSLY - public static final int NET_EXTPTZ_GOTOPRESET = NET_EXTPTZ_MOVE_CONTINUOUSLY+1; //云台控制命令,以一定速度转到预置位点,parm4对应结构PTZ_CONTROL_GOTOPRESET + public static final int NET_EXTPTZ_LIGHTCONTROL = NET_EXTPTZ_MATRIXSWITCH + 1; //灯光控制器 + public static final int NET_EXTPTZ_EXACTGOTO = NET_EXTPTZ_LIGHTCONTROL + 1; //三维精确定位parm1:水平角度(0~3600);parm2:垂直坐标(0~900);parm3:变倍(1~128) + public static final int NET_EXTPTZ_RESETZERO = NET_EXTPTZ_EXACTGOTO + 1; //三维定位重设零位 + public static final int NET_EXTPTZ_MOVE_ABSOLUTELY = NET_EXTPTZ_RESETZERO + 1; //绝对移动控制命令,param4对应结构PTZ_CONTROL_ABSOLUTELY + public static final int NET_EXTPTZ_MOVE_CONTINUOUSLY = NET_EXTPTZ_MOVE_ABSOLUTELY + 1; //持续移动控制命令,param4对应结构PTZ_CONTROL_CONTINUOUSLY + public static final int NET_EXTPTZ_GOTOPRESET = NET_EXTPTZ_MOVE_CONTINUOUSLY + 1; //云台控制命令,以一定速度转到预置位点,parm4对应结构PTZ_CONTROL_GOTOPRESET public static final int NET_EXTPTZ_SET_VIEW_RANGE = 0x49;//设置可视域(param4对应结构PTZ_VIEW_RANGE_INFO) public static final int NET_EXTPTZ_FOCUS_ABSOLUTELY = 0x4A;//绝对聚焦(param4对应结构PTZ_FOCUS_ABSOLUTELY) public static final int NET_EXTPTZ_HORSECTORSCAN = 0x4B;//水平扇扫(param4对应PTZ_CONTROL_SECTORSCAN,param1、param2、param3无效) @@ -6190,283 +5946,273 @@ public interface NetSDKLib extends Library { public static final int NET_EXTPTZ_SET_ABS_ZOOMFOCUS = 0x4D;//设定绝对焦距、聚焦值,param1为焦距,范围:0,255],param2为聚焦,范围:[0,255],param3、param4无效 public static final int NET_EXTPTZ_SET_FISHEYE_EPTZ = 0x4E;//控制鱼眼电子云台,param4对应结构PTZ_CONTROL_SET_FISHEYE_EPTZ public static final int NET_EXTPTZ_UP_TELE = 0x70; //上 + TELE param1=速度(1-8),下同 - public static final int NET_EXTPTZ_DOWN_TELE = NET_EXTPTZ_UP_TELE+1; //下 + TELE - public static final int NET_EXTPTZ_LEFT_TELE = NET_EXTPTZ_DOWN_TELE+1; //左 + TELE - public static final int NET_EXTPTZ_RIGHT_TELE = NET_EXTPTZ_LEFT_TELE+1; //右 + TELE - public static final int NET_EXTPTZ_LEFTUP_TELE = NET_EXTPTZ_RIGHT_TELE+1; //左上 + TELE - public static final int NET_EXTPTZ_LEFTDOWN_TELE = NET_EXTPTZ_LEFTUP_TELE+1; //左下 + TELE - public static final int NET_EXTPTZ_TIGHTUP_TELE = NET_EXTPTZ_LEFTDOWN_TELE+1; //右上 + TELE - public static final int NET_EXTPTZ_RIGHTDOWN_TELE = NET_EXTPTZ_TIGHTUP_TELE+1; //右下 + TELE - public static final int NET_EXTPTZ_UP_WIDE = NET_EXTPTZ_RIGHTDOWN_TELE+1; // 上 + WIDEparam1=速度(1-8),下同 - public static final int NET_EXTPTZ_DOWN_WIDE = NET_EXTPTZ_UP_WIDE+1; //下 + WIDE - public static final int NET_EXTPTZ_LEFT_WIDE = NET_EXTPTZ_DOWN_WIDE+1; //左 + WIDE - public static final int NET_EXTPTZ_RIGHT_WIDE = NET_EXTPTZ_LEFT_WIDE+1; //右 + WIDE - public static final int NET_EXTPTZ_LEFTUP_WIDE = NET_EXTPTZ_RIGHT_WIDE+1; //左上 + WIDE - public static final int NET_EXTPTZ_LEFTDOWN_WIDE = NET_EXTPTZ_LEFTUP_WIDE+1; //左下 + WIDE - public static final int NET_EXTPTZ_TIGHTUP_WIDE = NET_EXTPTZ_LEFTDOWN_WIDE+1; //右上 + WIDE - public static final int NET_EXTPTZ_RIGHTDOWN_WIDE = NET_EXTPTZ_TIGHTUP_WIDE+1; //右下 + WIDE - public static final int NET_EXTPTZ_TOTAL = NET_EXTPTZ_RIGHTDOWN_WIDE+1; //最大命令值 + public static final int NET_EXTPTZ_DOWN_TELE = NET_EXTPTZ_UP_TELE + 1; //下 + TELE + public static final int NET_EXTPTZ_LEFT_TELE = NET_EXTPTZ_DOWN_TELE + 1; //左 + TELE + public static final int NET_EXTPTZ_RIGHT_TELE = NET_EXTPTZ_LEFT_TELE + 1; //右 + TELE + public static final int NET_EXTPTZ_LEFTUP_TELE = NET_EXTPTZ_RIGHT_TELE + 1; //左上 + TELE + public static final int NET_EXTPTZ_LEFTDOWN_TELE = NET_EXTPTZ_LEFTUP_TELE + 1; //左下 + TELE + public static final int NET_EXTPTZ_TIGHTUP_TELE = NET_EXTPTZ_LEFTDOWN_TELE + 1; //右上 + TELE + public static final int NET_EXTPTZ_RIGHTDOWN_TELE = NET_EXTPTZ_TIGHTUP_TELE + 1; //右下 + TELE + public static final int NET_EXTPTZ_UP_WIDE = NET_EXTPTZ_RIGHTDOWN_TELE + 1; // 上 + WIDEparam1=速度(1-8),下同 + public static final int NET_EXTPTZ_DOWN_WIDE = NET_EXTPTZ_UP_WIDE + 1; //下 + WIDE + public static final int NET_EXTPTZ_LEFT_WIDE = NET_EXTPTZ_DOWN_WIDE + 1; //左 + WIDE + public static final int NET_EXTPTZ_RIGHT_WIDE = NET_EXTPTZ_LEFT_WIDE + 1; //右 + WIDE + public static final int NET_EXTPTZ_LEFTUP_WIDE = NET_EXTPTZ_RIGHT_WIDE + 1; //左上 + WIDE + public static final int NET_EXTPTZ_LEFTDOWN_WIDE = NET_EXTPTZ_LEFTUP_WIDE + 1; //左下 + WIDE + public static final int NET_EXTPTZ_TIGHTUP_WIDE = NET_EXTPTZ_LEFTDOWN_WIDE + 1; //右上 + WIDE + public static final int NET_EXTPTZ_RIGHTDOWN_WIDE = NET_EXTPTZ_TIGHTUP_WIDE + 1; //右下 + WIDE + public static final int NET_EXTPTZ_TOTAL = NET_EXTPTZ_RIGHTDOWN_WIDE + 1; //最大命令值 } // 雨刷工作模式 - public static class EM_CFG_RAINBRUSHMODE_MODE extends Structure - { + public static class EM_CFG_RAINBRUSHMODE_MODE extends Structure { public static final int EM_CFG_RAINBRUSHMODE_MODE_UNKNOWN = 0; //未知 - public static final int EM_CFG_RAINBRUSHMODE_MODE_MANUAL = EM_CFG_RAINBRUSHMODE_MODE_UNKNOWN+1; //手动模式 - public static final int EM_CFG_RAINBRUSHMODE_MODE_TIMING = EM_CFG_RAINBRUSHMODE_MODE_MANUAL+1; //定时模式 + public static final int EM_CFG_RAINBRUSHMODE_MODE_MANUAL = EM_CFG_RAINBRUSHMODE_MODE_UNKNOWN + 1; //手动模式 + public static final int EM_CFG_RAINBRUSHMODE_MODE_TIMING = EM_CFG_RAINBRUSHMODE_MODE_MANUAL + 1; //定时模式 } // 雨刷使能电平模式 - public static class EM_CFG_RAINBRUSHMODE_ENABLEMODE extends Structure - { + public static class EM_CFG_RAINBRUSHMODE_ENABLEMODE extends Structure { public static final int EM_CFG_RAINBRUSHMODE_ENABLEMODE_UNKNOWN = 0; //未知 - public static final int EM_CFG_RAINBRUSHMODE_ENABLEMODE_LOW = EM_CFG_RAINBRUSHMODE_ENABLEMODE_UNKNOWN+1; //低电平有效(常闭) - public static final int EM_CFG_RAINBRUSHMODE_ENABLEMODE_HIGH = EM_CFG_RAINBRUSHMODE_ENABLEMODE_LOW+1; //高电平有效(常开) + public static final int EM_CFG_RAINBRUSHMODE_ENABLEMODE_LOW = EM_CFG_RAINBRUSHMODE_ENABLEMODE_UNKNOWN + 1; //低电平有效(常闭) + public static final int EM_CFG_RAINBRUSHMODE_ENABLEMODE_HIGH = EM_CFG_RAINBRUSHMODE_ENABLEMODE_LOW + 1; //高电平有效(常开) } // 雨刷模式相关配置(对应 CFG_RAINBRUSHMODE_INFO 命令) - public static class CFG_RAINBRUSHMODE_INFO extends Structure - { + public static class CFG_RAINBRUSHMODE_INFO extends Structure { public int emMode;//雨刷工作模式, 取值为EM_CFG_RAINBRUSHMODE_MODE中的值 public int emEnableMode;//雨刷使能电平模式, 取值为EM_CFG_RAINBRUSHMODE_ENABLEMODE中的值 public int nPort;//雨刷使用的IO端口,-1表示未接入设备,-2表示该字段无效(设备未传送该字段) - public int nSensitivity; // 雨刷灵敏度, 只有当mode为Auto时有效, 范围[0, 10] + public int nSensitivity; // 雨刷灵敏度, 只有当mode为Auto时有效, 范围[0, 10] } - public static class CFG_RAINBRUSH_INFO extends Structure - { - public byte bEnable; // 雨刷使能, 类型为bool, 取值0或1 - public byte bSpeedRate; // 雨刷速度,1:快速;2:中速;3:慢速 - public byte[] bReserved = new byte[2]; // 保留对齐 - public TIME_SECTION_WEEK_DAY_6[] stuTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_6[])new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM);// 事件响应时间段 - public int nInterval; // 雨刷运动间隔事件, 单位: 秒 - public int bProtectEnable; // 雨刷保护使能: true 保护开启, false 保护关闭 - public int nProtectTime; // 保护时间, 单位: 秒 + public static class CFG_RAINBRUSH_INFO extends Structure { + public byte bEnable; // 雨刷使能, 类型为bool, 取值0或1 + public byte bSpeedRate; // 雨刷速度,1:快速;2:中速;3:慢速 + public byte[] bReserved = new byte[2]; // 保留对齐 + public TIME_SECTION_WEEK_DAY_6[] stuTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_6[]) new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM);// 事件响应时间段 + public int nInterval; // 雨刷运动间隔事件, 单位: 秒 + public int bProtectEnable; // 雨刷保护使能: true 保护开启, false 保护关闭 + public int nProtectTime; // 保护时间, 单位: 秒 } // 控制类型,对应CLIENT_ControlDevice接口 - public static class CtrlType extends Structure - { + public static class CtrlType extends Structure { public static final int CTRLTYPE_CTRL_REBOOT = 0;//重启设备 - public static final int CTRLTYPE_CTRL_SHUTDOWN = CTRLTYPE_CTRL_REBOOT+1; //关闭设备 - public static final int CTRLTYPE_CTRL_DISK = CTRLTYPE_CTRL_SHUTDOWN+1; //硬盘管理 - public static final int CTRLTYPE_KEYBOARD_POWER =3;//网络键盘 - public static final int CTRLTYPE_KEYBOARD_ENTER = CTRLTYPE_KEYBOARD_POWER+1; - public static final int CTRLTYPE_KEYBOARD_ESC = CTRLTYPE_KEYBOARD_ENTER+1; - public static final int CTRLTYPE_KEYBOARD_UP = CTRLTYPE_KEYBOARD_ESC+1; - public static final int CTRLTYPE_KEYBOARD_DOWN = CTRLTYPE_KEYBOARD_UP+1; - public static final int CTRLTYPE_KEYBOARD_LEFT = CTRLTYPE_KEYBOARD_DOWN+1; - public static final int CTRLTYPE_KEYBOARD_RIGHT = CTRLTYPE_KEYBOARD_LEFT+1; - public static final int CTRLTYPE_KEYBOARD_BTN0 = CTRLTYPE_KEYBOARD_RIGHT+1; - public static final int CTRLTYPE_KEYBOARD_BTN1 = CTRLTYPE_KEYBOARD_BTN0+1; - public static final int CTRLTYPE_KEYBOARD_BTN2 = CTRLTYPE_KEYBOARD_BTN1+1; - public static final int CTRLTYPE_KEYBOARD_BTN3 = CTRLTYPE_KEYBOARD_BTN2+1; - public static final int CTRLTYPE_KEYBOARD_BTN4 = CTRLTYPE_KEYBOARD_BTN3+1; - public static final int CTRLTYPE_KEYBOARD_BTN5 = CTRLTYPE_KEYBOARD_BTN4+1; - public static final int CTRLTYPE_KEYBOARD_BTN6 = CTRLTYPE_KEYBOARD_BTN5+1; - public static final int CTRLTYPE_KEYBOARD_BTN7 = CTRLTYPE_KEYBOARD_BTN6+1; - public static final int CTRLTYPE_KEYBOARD_BTN8 = CTRLTYPE_KEYBOARD_BTN7+1; - public static final int CTRLTYPE_KEYBOARD_BTN9 = CTRLTYPE_KEYBOARD_BTN8+1; - public static final int CTRLTYPE_KEYBOARD_BTN10 = CTRLTYPE_KEYBOARD_BTN9+1; - public static final int CTRLTYPE_KEYBOARD_BTN11 = CTRLTYPE_KEYBOARD_BTN10+1; - public static final int CTRLTYPE_KEYBOARD_BTN12 = CTRLTYPE_KEYBOARD_BTN11+1; - public static final int CTRLTYPE_KEYBOARD_BTN13 = CTRLTYPE_KEYBOARD_BTN12+1; - public static final int CTRLTYPE_KEYBOARD_BTN14 = CTRLTYPE_KEYBOARD_BTN13+1; - public static final int CTRLTYPE_KEYBOARD_BTN15 = CTRLTYPE_KEYBOARD_BTN14+1; - public static final int CTRLTYPE_KEYBOARD_BTN16 = CTRLTYPE_KEYBOARD_BTN15+1; - public static final int CTRLTYPE_KEYBOARD_SPLIT = CTRLTYPE_KEYBOARD_BTN16+1; - public static final int CTRLTYPE_KEYBOARD_ONE = CTRLTYPE_KEYBOARD_SPLIT+1; - public static final int CTRLTYPE_KEYBOARD_NINE = CTRLTYPE_KEYBOARD_ONE+1; - public static final int CTRLTYPE_KEYBOARD_ADDR = CTRLTYPE_KEYBOARD_NINE+1; - public static final int CTRLTYPE_KEYBOARD_INFO = CTRLTYPE_KEYBOARD_ADDR+1; - public static final int CTRLTYPE_KEYBOARD_REC = CTRLTYPE_KEYBOARD_INFO+1; - public static final int CTRLTYPE_KEYBOARD_FN1 = CTRLTYPE_KEYBOARD_REC+1; - public static final int CTRLTYPE_KEYBOARD_FN2 = CTRLTYPE_KEYBOARD_FN1+1; - public static final int CTRLTYPE_KEYBOARD_PLAY = CTRLTYPE_KEYBOARD_FN2+1; - public static final int CTRLTYPE_KEYBOARD_STOP = CTRLTYPE_KEYBOARD_PLAY+1; - public static final int CTRLTYPE_KEYBOARD_SLOW = CTRLTYPE_KEYBOARD_STOP+1; - public static final int CTRLTYPE_KEYBOARD_FAST = CTRLTYPE_KEYBOARD_SLOW+1; - public static final int CTRLTYPE_KEYBOARD_PREW = CTRLTYPE_KEYBOARD_FAST+1; - public static final int CTRLTYPE_KEYBOARD_NEXT = CTRLTYPE_KEYBOARD_PREW+1; - public static final int CTRLTYPE_KEYBOARD_JMPDOWN = CTRLTYPE_KEYBOARD_NEXT+1; - public static final int CTRLTYPE_KEYBOARD_JMPUP = CTRLTYPE_KEYBOARD_JMPDOWN+1; - public static final int CTRLTYPE_KEYBOARD_10PLUS = CTRLTYPE_KEYBOARD_JMPUP+1; - public static final int CTRLTYPE_KEYBOARD_SHIFT = CTRLTYPE_KEYBOARD_10PLUS+1; - public static final int CTRLTYPE_KEYBOARD_BACK = CTRLTYPE_KEYBOARD_SHIFT+1; - public static final int CTRLTYPE_KEYBOARD_LOGIN = CTRLTYPE_KEYBOARD_BACK+1;//新网络键盘功能 - public static final int CTRLTYPE_KEYBOARD_CHNNEL = CTRLTYPE_KEYBOARD_LOGIN+1;//切换视频通道 - public static final int CTRLTYPE_TRIGGER_ALARM_IN =100;//触发报警输入 - public static final int CTRLTYPE_TRIGGER_ALARM_OUT = CTRLTYPE_TRIGGER_ALARM_IN+1; //触发报警输出 - public static final int CTRLTYPE_CTRL_MATRIX = CTRLTYPE_TRIGGER_ALARM_OUT+1; //矩阵控制 - public static final int CTRLTYPE_CTRL_SDCARD = CTRLTYPE_CTRL_MATRIX+1; //SD卡控制(IPC产品)参数同硬盘控制 - public static final int CTRLTYPE_BURNING_START = CTRLTYPE_CTRL_SDCARD+1; //刻录机控制,开始刻录 - public static final int CTRLTYPE_BURNING_STOP = CTRLTYPE_BURNING_START+1; //刻录机控制,结束刻录 - public static final int CTRLTYPE_BURNING_ADDPWD = CTRLTYPE_BURNING_STOP+1; //刻录机控制,叠加密码(以'\0'为结尾的字符串,最大长度8位) - public static final int CTRLTYPE_BURNING_ADDHEAD = CTRLTYPE_BURNING_ADDPWD+1; //刻录机控制,叠加片头(以'\0'为结尾的字符串,最大长度1024字节,支持分行,行分隔符'\n') - public static final int CTRLTYPE_BURNING_ADDSIGN = CTRLTYPE_BURNING_ADDHEAD+1; //刻录机控制,叠加打点到刻录信息(参数无) - public static final int CTRLTYPE_BURNING_ADDCURSTOMINFO = CTRLTYPE_BURNING_ADDSIGN+1; //刻录机控制,自定义叠加(以'\0'为结尾的字符串,最大长度1024字节,支持分行,行分隔符'\n') - public static final int CTRLTYPE_CTRL_RESTOREDEFAULT = CTRLTYPE_BURNING_ADDCURSTOMINFO+1; //恢复设备的默认设置 - public static final int CTRLTYPE_CTRL_CAPTURE_START = CTRLTYPE_CTRL_RESTOREDEFAULT+1; //触发设备抓图 - public static final int CTRLTYPE_CTRL_CLEARLOG = CTRLTYPE_CTRL_CAPTURE_START+1; //清除日志 - public static final int CTRLTYPE_TRIGGER_ALARM_WIRELESS =200;//触发无线报警(IPC产品) - public static final int CTRLTYPE_MARK_IMPORTANT_RECORD = CTRLTYPE_TRIGGER_ALARM_WIRELESS+1; //标识重要录像文件 - public static final int CTRLTYPE_CTRL_DISK_SUBAREA = CTRLTYPE_MARK_IMPORTANT_RECORD+1; //网络硬盘分区 - public static final int CTRLTYPE_BURNING_ATTACH = CTRLTYPE_CTRL_DISK_SUBAREA+1; //刻录机控制,附件刻录. - public static final int CTRLTYPE_BURNING_PAUSE = CTRLTYPE_BURNING_ATTACH+1; //刻录暂停 - public static final int CTRLTYPE_BURNING_CONTINUE = CTRLTYPE_BURNING_PAUSE+1; //刻录继续 - public static final int CTRLTYPE_BURNING_POSTPONE = CTRLTYPE_BURNING_CONTINUE+1; //刻录顺延 - public static final int CTRLTYPE_CTRL_OEMCTRL = CTRLTYPE_BURNING_POSTPONE+1; //报停控制 - public static final int CTRLTYPE_BACKUP_START = CTRLTYPE_CTRL_OEMCTRL+1; //设备备份开始 - public static final int CTRLTYPE_BACKUP_STOP = CTRLTYPE_BACKUP_START+1; //设备备份停止 - public static final int CTRLTYPE_VIHICLE_WIFI_ADD = CTRLTYPE_BACKUP_STOP+1; //车载手动增加WIFI配置 - public static final int CTRLTYPE_VIHICLE_WIFI_DEC = CTRLTYPE_VIHICLE_WIFI_ADD+1; //车载手动删除WIFI配置 - public static final int CTRLTYPE_BUZZER_START = CTRLTYPE_VIHICLE_WIFI_DEC+1; //蜂鸣器控制开始 - public static final int CTRLTYPE_BUZZER_STOP = CTRLTYPE_BUZZER_START+1; //蜂鸣器控制结束 - public static final int CTRLTYPE_REJECT_USER = CTRLTYPE_BUZZER_STOP+1; //剔除用户 - public static final int CTRLTYPE_SHIELD_USER = CTRLTYPE_REJECT_USER+1; //屏蔽用户 - public static final int CTRLTYPE_RAINBRUSH = CTRLTYPE_SHIELD_USER+1; //智能交通,雨刷控制 - public static final int CTRLTYPE_MANUAL_SNAP = CTRLTYPE_RAINBRUSH+1; //智能交通,手动抓拍(对应结构体MANUAL_SNAP_PARAMETER) - public static final int CTRLTYPE_MANUAL_NTP_TIMEADJUST = CTRLTYPE_MANUAL_SNAP+1; //手动NTP校时 - public static final int CTRLTYPE_NAVIGATION_SMS = CTRLTYPE_MANUAL_NTP_TIMEADJUST+1; //导航信息和短消息 - public static final int CTRLTYPE_CTRL_ROUTE_CROSSING = CTRLTYPE_NAVIGATION_SMS+1; //路线点位信息 - public static final int CTRLTYPE_BACKUP_FORMAT = CTRLTYPE_CTRL_ROUTE_CROSSING+1; //格式化备份设备 - public static final int CTRLTYPE_DEVICE_LOCALPREVIEW_SLIPT = CTRLTYPE_BACKUP_FORMAT+1; //控制设备端本地预览分割(对应结构体DEVICE_LOCALPREVIEW_SLIPT_PARAMETER) - public static final int CTRLTYPE_CTRL_INIT_RAID = CTRLTYPE_DEVICE_LOCALPREVIEW_SLIPT+1; //RAID初始化 - public static final int CTRLTYPE_CTRL_RAID = CTRLTYPE_CTRL_INIT_RAID+1; //RAID操作 - public static final int CTRLTYPE_CTRL_SAPREDISK = CTRLTYPE_CTRL_RAID+1; //热备盘操作 - public static final int CTRLTYPE_WIFI_CONNECT = CTRLTYPE_CTRL_SAPREDISK+1; //手动发起WIFI连接(对应结构体WIFI_CONNECT) - public static final int CTRLTYPE_WIFI_DISCONNECT = CTRLTYPE_WIFI_CONNECT+1; //手动断开WIFI连接(对应结构体WIFI_CONNECT) - public static final int CTRLTYPE_CTRL_ARMED = CTRLTYPE_WIFI_DISCONNECT+1; //布撤防操作 - public static final int CTRLTYPE_CTRL_IP_MODIFY = CTRLTYPE_CTRL_ARMED+1; //修改前端IP(对应结构体 NET_CTRL_IPMODIFY_PARAM) - public static final int CTRLTYPE_CTRL_WIFI_BY_WPS = CTRLTYPE_CTRL_IP_MODIFY+1; //wps连接wifi(对应结构体NET_CTRL_CONNECT_WIFI_BYWPS) - public static final int CTRLTYPE_CTRL_FORMAT_PATITION = CTRLTYPE_CTRL_WIFI_BY_WPS+1; //格式化分区(对应结构体NET_FORMAT_PATITION) - public static final int CTRLTYPE_CTRL_EJECT_STORAGE = CTRLTYPE_CTRL_FORMAT_PATITION+1; //手动卸载设备(对应结构体NET_EJECT_STORAGE_DEVICE) - public static final int CTRLTYPE_CTRL_LOAD_STORAGE = CTRLTYPE_CTRL_EJECT_STORAGE+1; //手动装载设备(对应结构体NET_LOAD_STORAGE_DEVICE) - public static final int CTRLTYPE_CTRL_CLOSE_BURNER = CTRLTYPE_CTRL_LOAD_STORAGE+1; //关闭刻录机光驱门(对应结构体NET_CTRL_BURNERDOOR)一般需要等6 - public static final int CTRLTYPE_CTRL_EJECT_BURNER = CTRLTYPE_CTRL_CLOSE_BURNER+1; //弹出刻录机光驱门(对应结构体NET_CTRL_BURNERDOOR)一般需要等4秒 - public static final int CTRLTYPE_CTRL_CLEAR_ALARM = CTRLTYPE_CTRL_EJECT_BURNER+1; //消警(对应结构体NET_CTRL_CLEAR_ALARM) - public static final int CTRLTYPE_CTRL_MONITORWALL_TVINFO = CTRLTYPE_CTRL_CLEAR_ALARM+1; //电视墙信息显示(对应结构体NET_CTRL_MONITORWALL_TVINFO) - public static final int CTRLTYPE_CTRL_START_VIDEO_ANALYSE = CTRLTYPE_CTRL_MONITORWALL_TVINFO+1; //开始视频智能分析(对应结构体NET_CTRL_START_VIDEO_ANALYSE) - public static final int CTRLTYPE_CTRL_STOP_VIDEO_ANALYSE = CTRLTYPE_CTRL_START_VIDEO_ANALYSE+1; //停止视频智能分析(对应结构体NET_CTRL_STOP_VIDEO_ANALYSE) - public static final int CTRLTYPE_CTRL_UPGRADE_DEVICE = CTRLTYPE_CTRL_STOP_VIDEO_ANALYSE+1; //控制启动设备升级,由设备独立完成升级过程,不需要传输升级文件 - public static final int CTRLTYPE_CTRL_MULTIPLAYBACK_CHANNALES = CTRLTYPE_CTRL_UPGRADE_DEVICE+1; //切换多通道预览回放的通道(对应结构体NET_CTRL_MULTIPLAYBACK_CHANNALES) - public static final int CTRLTYPE_CTRL_SEQPOWER_OPEN = CTRLTYPE_CTRL_MULTIPLAYBACK_CHANNALES+1; //电源时序器打开开关量输出口(对应NET_CTRL_SEQPOWER_PARAM) - public static final int CTRLTYPE_CTRL_SEQPOWER_CLOSE = CTRLTYPE_CTRL_SEQPOWER_OPEN+1; //电源时序器关闭开关量输出口(对应NET_CTRL_SEQPOWER_PARAM) - public static final int CTRLTYPE_CTRL_SEQPOWER_OPEN_ALL = CTRLTYPE_CTRL_SEQPOWER_CLOSE+1; //电源时序器打开开关量输出口组(对应NET_CTRL_SEQPOWER_PARAM) - public static final int CTRLTYPE_CTRL_SEQPOWER_CLOSE_ALL = CTRLTYPE_CTRL_SEQPOWER_OPEN_ALL+1; //电源时序器关闭开关量输出口组(对应NET_CTRL_SEQPOWER_PARAM) - public static final int CTRLTYPE_CTRL_PROJECTOR_RISE = CTRLTYPE_CTRL_SEQPOWER_CLOSE_ALL+1; //投影仪上升(对应NET_CTRL_PROJECTOR_PARAM) - public static final int CTRLTYPE_CTRL_PROJECTOR_FALL = CTRLTYPE_CTRL_PROJECTOR_RISE+1; //投影仪下降(对应NET_CTRL_PROJECTOR_PARAM) - public static final int CTRLTYPE_CTRL_PROJECTOR_STOP = CTRLTYPE_CTRL_PROJECTOR_FALL+1; //投影仪停止(对应NET_CTRL_PROJECTOR_PARAM) - public static final int CTRLTYPE_CTRL_INFRARED_KEY = CTRLTYPE_CTRL_PROJECTOR_STOP+1; //红外按键(对应NET_CTRL_INFRARED_KEY_PARAM) - public static final int CTRLTYPE_CTRL_START_PLAYAUDIO = CTRLTYPE_CTRL_INFRARED_KEY+1; //设备开始播放音频文件(对应结构体NET_CTRL_START_PLAYAUDIO) - public static final int CTRLTYPE_CTRL_STOP_PLAYAUDIO = CTRLTYPE_CTRL_START_PLAYAUDIO+1; //设备停止播放音频文件 - public static final int CTRLTYPE_CTRL_START_ALARMBELL = CTRLTYPE_CTRL_STOP_PLAYAUDIO+1; //开启警号(对应结构体 NET_CTRL_ALARMBELL ) - public static final int CTRLTYPE_CTRL_STOP_ALARMBELL = CTRLTYPE_CTRL_START_ALARMBELL+1; //关闭警号(对应结构体 NET_CTRL_ALARMBELL ) - public static final int CTRLTYPE_CTRL_ACCESS_OPEN = CTRLTYPE_CTRL_STOP_ALARMBELL+1; //门禁控制-开门(对应结构体 NET_CTRL_ACCESS_OPEN) - public static final int CTRLTYPE_CTRL_SET_BYPASS = CTRLTYPE_CTRL_ACCESS_OPEN+1; //设置旁路功能(对应结构体NET_CTRL_SET_BYPASS) - public static final int CTRLTYPE_CTRL_RECORDSET_INSERT = CTRLTYPE_CTRL_SET_BYPASS+1; //添加记录,获得记录集编号(对应NET_CTRL_RECORDSET_INSERT_PARAM) - public static final int CTRLTYPE_CTRL_RECORDSET_UPDATE = CTRLTYPE_CTRL_RECORDSET_INSERT+1; //更新某记录集编号的记录(对应 NET_CTRL_RECORDSET_PARAM) - public static final int CTRLTYPE_CTRL_RECORDSET_REMOVE = CTRLTYPE_CTRL_RECORDSET_UPDATE+1; //根据记录集编号删除某记录(对应 NET_CTRL_RECORDSET_PARAM) - public static final int CTRLTYPE_CTRL_RECORDSET_CLEAR = CTRLTYPE_CTRL_RECORDSET_REMOVE+1; //清除所有记录集信息(对应NET_CTRL_RECORDSET_PARAM) - public static final int CTRLTYPE_CTRL_ACCESS_CLOSE = CTRLTYPE_CTRL_RECORDSET_CLEAR+1; //门禁控制-关门(对应结构体NET_CTRL_ACCESS_CLOSE) - public static final int CTRLTYPE_CTRL_ALARM_SUBSYSTEM_ACTIVE_SET = CTRLTYPE_CTRL_ACCESS_CLOSE+1; //报警子系统激活设置(对应结构体NET_CTRL_ALARM_SUBSYSTEM_SETACTIVE) - public static final int CTRLTYPE_CTRL_FORBID_OPEN_STROBE = CTRLTYPE_CTRL_ALARM_SUBSYSTEM_ACTIVE_SET+1; //禁止设备端开闸(对应结构体NET_CTRL_FORBID_OPEN_STROBE) - public static final int CTRLTYPE_CTRL_OPEN_STROBE = CTRLTYPE_CTRL_FORBID_OPEN_STROBE+1; //开启道闸(对应结构体 NET_CTRL_OPEN_STROBE) - public static final int CTRLTYPE_CTRL_TALKING_REFUSE = CTRLTYPE_CTRL_OPEN_STROBE+1; //对讲拒绝接听(对应结构体NET_CTRL_TALKING_REFUSE) - public static final int CTRLTYPE_CTRL_ARMED_EX = CTRLTYPE_CTRL_TALKING_REFUSE+1; //布撤防操作(对应结构体CTRL_ARM_DISARM_PARAM_EX),对CTRL_ARM_DISARM_PARAM升级,建议用这个 - public static final int CTRLTYPE_CTRL_NET_KEYBOARD =400;//网络键盘控制(对应结构体NET_CTRL_NET_KEYBOARD) - public static final int CTRLTYPE_CTRL_AIRCONDITION_OPEN = CTRLTYPE_CTRL_NET_KEYBOARD+1; //打开空调(对应结构体NET_CTRL_OPEN_AIRCONDITION) - public static final int CTRLTYPE_CTRL_AIRCONDITION_CLOSE = CTRLTYPE_CTRL_AIRCONDITION_OPEN+1; //关闭空调(对应结构体NET_CTRL_CLOSE_AIRCONDITION) - public static final int CTRLTYPE_CTRL_AIRCONDITION_SET_TEMPERATURE = CTRLTYPE_CTRL_AIRCONDITION_CLOSE+1; //设定空调温度(对应结构体NET_CTRL_SET_TEMPERATURE) - public static final int CTRLTYPE_CTRL_AIRCONDITION_ADJUST_TEMPERATURE = CTRLTYPE_CTRL_AIRCONDITION_SET_TEMPERATURE+1; //调节空调温度(对应结构体NET_CTRL_ADJUST_TEMPERATURE) - public static final int CTRLTYPE_CTRL_AIRCONDITION_SETMODE = CTRLTYPE_CTRL_AIRCONDITION_ADJUST_TEMPERATURE+1; //设置空调工作模式(对应结构体NET_CTRL_ADJUST_TEMPERATURE) - public static final int CTRLTYPE_CTRL_AIRCONDITION_SETWINDMODE = CTRLTYPE_CTRL_AIRCONDITION_SETMODE+1; //设置空调送风模式(对应结构体NET_CTRL_AIRCONDITION_SETMODE) - public static final int CTRLTYPE_CTRL_RESTOREDEFAULT_EX = CTRLTYPE_CTRL_AIRCONDITION_SETWINDMODE+1;//恢复设备的默认设置新协议(对应结构体 NET_CTRL_RESTORE_DEFAULT ) - // 恢复配置优先使用该枚举,如果接口失败, - // 且CLIENT_GetLastError返回NET_UNSUPPORTED,再尝试使用NET_CTRL_RESTOREDEFAULT恢复配置 - public static final int CTRLTYPE_CTRL_NOTIFY_EVENT = CTRLTYPE_CTRL_RESTOREDEFAULT_EX+1; //向设备发送事件(对应结构体NET_NOTIFY_EVENT_DATA) - public static final int CTRLTYPE_CTRL_SILENT_ALARM_SET = CTRLTYPE_CTRL_NOTIFY_EVENT+1; //无声报警设置 - public static final int CTRLTYPE_CTRL_START_PLAYAUDIOEX = CTRLTYPE_CTRL_SILENT_ALARM_SET+1; //设备开始语音播报(对应结构体NET_CTRL_START_PLAYAUDIOEX) - public static final int CTRLTYPE_CTRL_STOP_PLAYAUDIOEX = CTRLTYPE_CTRL_START_PLAYAUDIOEX+1; //设备停止语音播报 - public static final int CTRLTYPE_CTRL_CLOSE_STROBE = CTRLTYPE_CTRL_STOP_PLAYAUDIOEX+1; //关闭道闸(对应结构体 NET_CTRL_CLOSE_STROBE) - public static final int CTRLTYPE_CTRL_SET_ORDER_STATE = CTRLTYPE_CTRL_CLOSE_STROBE+1; //设置车位预定状态(对应结构体NET_CTRL_SET_ORDER_STATE) - public static final int CTRLTYPE_CTRL_RECORDSET_INSERTEX = CTRLTYPE_CTRL_SET_ORDER_STATE+1; //添加记录,获得记录集编号(对应 NET_CTRL_RECORDSET_INSERT_PARAM ) - public static final int CTRLTYPE_CTRL_RECORDSET_UPDATEEX = CTRLTYPE_CTRL_RECORDSET_INSERTEX+1; //更新某记录集编号的记录(对应NET_CTRL_RECORDSET_PARAM) - public static final int CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT = CTRLTYPE_CTRL_RECORDSET_UPDATEEX+1; // 指纹采集(对应结构体NET_CTRL_CAPTURE_FINGER_PRINT) - public static final int CTRLTYPE_CTRL_ECK_LED_SET = CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT+1; //停车场出入口控制器LED设置(对应结构体NET_CTRL_ECK_LED_SET_PARAM) - public static final int CTRLTYPE_CTRL_ECK_IC_CARD_IMPORT = CTRLTYPE_CTRL_ECK_LED_SET+1; //智能停车系统出入口机IC卡信息导入(对应结构体NET_CTRL_ECK_IC_CARD_IMPORT_PARAM) - public static final int CTRLTYPE_CTRL_ECK_SYNC_IC_CARD = CTRLTYPE_CTRL_ECK_IC_CARD_IMPORT+1; //智能停车系统出入口机IC卡信息同步指令,收到此指令后,设备删除原有IC卡信息(对应结构体NET_CTRL_ECK_SYNC_IC_CARD_PARAM) - public static final int CTRLTYPE_CTRL_LOWRATEWPAN_REMOVE = CTRLTYPE_CTRL_ECK_SYNC_IC_CARD+1; //删除指定无线设备(对应结构体NET_CTRL_LOWRATEWPAN_REMOVE) - public static final int CTRLTYPE_CTRL_LOWRATEWPAN_MODIFY = CTRLTYPE_CTRL_LOWRATEWPAN_REMOVE+1; //修改无线设备信息(对应结构体NET_CTRL_LOWRATEWPAN_MODIFY) - public static final int CTRLTYPE_CTRL_ECK_SET_PARK_INFO = CTRLTYPE_CTRL_LOWRATEWPAN_MODIFY+1; //智能停车系统出入口机设置车位信息(对应结构体NET_CTRL_ECK_SET_PARK_INFO_PARAM) - public static final int CTRLTYPE_CTRL_VTP_DISCONNECT = CTRLTYPE_CTRL_ECK_SET_PARK_INFO+1; //挂断视频电话(对应结构体NET_CTRL_VTP_DISCONNECT) - public static final int CTRLTYPE_CTRL_UPDATE_FILES = CTRLTYPE_CTRL_VTP_DISCONNECT+1; //远程投放多媒体文件更新(对应结构体NET_CTRL_UPDATE_FILES) - public static final int CTRLTYPE_CTRL_MATRIX_SAVE_SWITCH = CTRLTYPE_CTRL_UPDATE_FILES+1; //保存上下位矩阵输出关系(对应结构体NET_CTRL_MATRIX_SAVE_SWITCH) - public static final int CTRLTYPE_CTRL_MATRIX_RESTORE_SWITCH = CTRLTYPE_CTRL_MATRIX_SAVE_SWITCH+1; //恢复上下位矩阵输出关系(对应结构体NET_CTRL_MATRIX_RESTORE_SWITCH) - public static final int CTRLTYPE_CTRL_VTP_DIVERTACK = CTRLTYPE_CTRL_MATRIX_RESTORE_SWITCH+1; //呼叫转发响应(对应结构体NET_CTRL_VTP_DIVERTACK) - public static final int CTRLTYPE_CTRL_RAINBRUSH_MOVEONCE = CTRLTYPE_CTRL_VTP_DIVERTACK+1; //雨刷来回刷一次,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_MOVEONCE) - public static final int CTRLTYPE_CTRL_RAINBRUSH_MOVECONTINUOUSLY = CTRLTYPE_CTRL_RAINBRUSH_MOVEONCE+1; //雨刷来回循环刷,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY) - public static final int CTRLTYPE_CTRL_RAINBRUSH_STOPMOVE = CTRLTYPE_CTRL_RAINBRUSH_MOVECONTINUOUSLY+1; //雨刷停止刷,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_STOPMOVE) - public static final int CTRLTYPE_CTRL_ALARM_ACK = CTRLTYPE_CTRL_RAINBRUSH_STOPMOVE+1; //报警事件确认(对应结构体NET_CTRL_ALARM_ACK) - // NET_CTRL_ALARM_ACK 该操作切勿在报警回调接口中调用 + public static final int CTRLTYPE_CTRL_SHUTDOWN = CTRLTYPE_CTRL_REBOOT + 1; //关闭设备 + public static final int CTRLTYPE_CTRL_DISK = CTRLTYPE_CTRL_SHUTDOWN + 1; //硬盘管理 + public static final int CTRLTYPE_KEYBOARD_POWER = 3;//网络键盘 + public static final int CTRLTYPE_KEYBOARD_ENTER = CTRLTYPE_KEYBOARD_POWER + 1; + public static final int CTRLTYPE_KEYBOARD_ESC = CTRLTYPE_KEYBOARD_ENTER + 1; + public static final int CTRLTYPE_KEYBOARD_UP = CTRLTYPE_KEYBOARD_ESC + 1; + public static final int CTRLTYPE_KEYBOARD_DOWN = CTRLTYPE_KEYBOARD_UP + 1; + public static final int CTRLTYPE_KEYBOARD_LEFT = CTRLTYPE_KEYBOARD_DOWN + 1; + public static final int CTRLTYPE_KEYBOARD_RIGHT = CTRLTYPE_KEYBOARD_LEFT + 1; + public static final int CTRLTYPE_KEYBOARD_BTN0 = CTRLTYPE_KEYBOARD_RIGHT + 1; + public static final int CTRLTYPE_KEYBOARD_BTN1 = CTRLTYPE_KEYBOARD_BTN0 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN2 = CTRLTYPE_KEYBOARD_BTN1 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN3 = CTRLTYPE_KEYBOARD_BTN2 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN4 = CTRLTYPE_KEYBOARD_BTN3 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN5 = CTRLTYPE_KEYBOARD_BTN4 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN6 = CTRLTYPE_KEYBOARD_BTN5 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN7 = CTRLTYPE_KEYBOARD_BTN6 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN8 = CTRLTYPE_KEYBOARD_BTN7 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN9 = CTRLTYPE_KEYBOARD_BTN8 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN10 = CTRLTYPE_KEYBOARD_BTN9 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN11 = CTRLTYPE_KEYBOARD_BTN10 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN12 = CTRLTYPE_KEYBOARD_BTN11 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN13 = CTRLTYPE_KEYBOARD_BTN12 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN14 = CTRLTYPE_KEYBOARD_BTN13 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN15 = CTRLTYPE_KEYBOARD_BTN14 + 1; + public static final int CTRLTYPE_KEYBOARD_BTN16 = CTRLTYPE_KEYBOARD_BTN15 + 1; + public static final int CTRLTYPE_KEYBOARD_SPLIT = CTRLTYPE_KEYBOARD_BTN16 + 1; + public static final int CTRLTYPE_KEYBOARD_ONE = CTRLTYPE_KEYBOARD_SPLIT + 1; + public static final int CTRLTYPE_KEYBOARD_NINE = CTRLTYPE_KEYBOARD_ONE + 1; + public static final int CTRLTYPE_KEYBOARD_ADDR = CTRLTYPE_KEYBOARD_NINE + 1; + public static final int CTRLTYPE_KEYBOARD_INFO = CTRLTYPE_KEYBOARD_ADDR + 1; + public static final int CTRLTYPE_KEYBOARD_REC = CTRLTYPE_KEYBOARD_INFO + 1; + public static final int CTRLTYPE_KEYBOARD_FN1 = CTRLTYPE_KEYBOARD_REC + 1; + public static final int CTRLTYPE_KEYBOARD_FN2 = CTRLTYPE_KEYBOARD_FN1 + 1; + public static final int CTRLTYPE_KEYBOARD_PLAY = CTRLTYPE_KEYBOARD_FN2 + 1; + public static final int CTRLTYPE_KEYBOARD_STOP = CTRLTYPE_KEYBOARD_PLAY + 1; + public static final int CTRLTYPE_KEYBOARD_SLOW = CTRLTYPE_KEYBOARD_STOP + 1; + public static final int CTRLTYPE_KEYBOARD_FAST = CTRLTYPE_KEYBOARD_SLOW + 1; + public static final int CTRLTYPE_KEYBOARD_PREW = CTRLTYPE_KEYBOARD_FAST + 1; + public static final int CTRLTYPE_KEYBOARD_NEXT = CTRLTYPE_KEYBOARD_PREW + 1; + public static final int CTRLTYPE_KEYBOARD_JMPDOWN = CTRLTYPE_KEYBOARD_NEXT + 1; + public static final int CTRLTYPE_KEYBOARD_JMPUP = CTRLTYPE_KEYBOARD_JMPDOWN + 1; + public static final int CTRLTYPE_KEYBOARD_10PLUS = CTRLTYPE_KEYBOARD_JMPUP + 1; + public static final int CTRLTYPE_KEYBOARD_SHIFT = CTRLTYPE_KEYBOARD_10PLUS + 1; + public static final int CTRLTYPE_KEYBOARD_BACK = CTRLTYPE_KEYBOARD_SHIFT + 1; + public static final int CTRLTYPE_KEYBOARD_LOGIN = CTRLTYPE_KEYBOARD_BACK + 1;//新网络键盘功能 + public static final int CTRLTYPE_KEYBOARD_CHNNEL = CTRLTYPE_KEYBOARD_LOGIN + 1;//切换视频通道 + public static final int CTRLTYPE_TRIGGER_ALARM_IN = 100;//触发报警输入 + public static final int CTRLTYPE_TRIGGER_ALARM_OUT = CTRLTYPE_TRIGGER_ALARM_IN + 1; //触发报警输出 + public static final int CTRLTYPE_CTRL_MATRIX = CTRLTYPE_TRIGGER_ALARM_OUT + 1; //矩阵控制 + public static final int CTRLTYPE_CTRL_SDCARD = CTRLTYPE_CTRL_MATRIX + 1; //SD卡控制(IPC产品)参数同硬盘控制 + public static final int CTRLTYPE_BURNING_START = CTRLTYPE_CTRL_SDCARD + 1; //刻录机控制,开始刻录 + public static final int CTRLTYPE_BURNING_STOP = CTRLTYPE_BURNING_START + 1; //刻录机控制,结束刻录 + public static final int CTRLTYPE_BURNING_ADDPWD = CTRLTYPE_BURNING_STOP + 1; //刻录机控制,叠加密码(以'\0'为结尾的字符串,最大长度8位) + public static final int CTRLTYPE_BURNING_ADDHEAD = CTRLTYPE_BURNING_ADDPWD + 1; //刻录机控制,叠加片头(以'\0'为结尾的字符串,最大长度1024字节,支持分行,行分隔符'\n') + public static final int CTRLTYPE_BURNING_ADDSIGN = CTRLTYPE_BURNING_ADDHEAD + 1; //刻录机控制,叠加打点到刻录信息(参数无) + public static final int CTRLTYPE_BURNING_ADDCURSTOMINFO = CTRLTYPE_BURNING_ADDSIGN + 1; //刻录机控制,自定义叠加(以'\0'为结尾的字符串,最大长度1024字节,支持分行,行分隔符'\n') + public static final int CTRLTYPE_CTRL_RESTOREDEFAULT = CTRLTYPE_BURNING_ADDCURSTOMINFO + 1; //恢复设备的默认设置 + public static final int CTRLTYPE_CTRL_CAPTURE_START = CTRLTYPE_CTRL_RESTOREDEFAULT + 1; //触发设备抓图 + public static final int CTRLTYPE_CTRL_CLEARLOG = CTRLTYPE_CTRL_CAPTURE_START + 1; //清除日志 + public static final int CTRLTYPE_TRIGGER_ALARM_WIRELESS = 200;//触发无线报警(IPC产品) + public static final int CTRLTYPE_MARK_IMPORTANT_RECORD = CTRLTYPE_TRIGGER_ALARM_WIRELESS + 1; //标识重要录像文件 + public static final int CTRLTYPE_CTRL_DISK_SUBAREA = CTRLTYPE_MARK_IMPORTANT_RECORD + 1; //网络硬盘分区 + public static final int CTRLTYPE_BURNING_ATTACH = CTRLTYPE_CTRL_DISK_SUBAREA + 1; //刻录机控制,附件刻录. + public static final int CTRLTYPE_BURNING_PAUSE = CTRLTYPE_BURNING_ATTACH + 1; //刻录暂停 + public static final int CTRLTYPE_BURNING_CONTINUE = CTRLTYPE_BURNING_PAUSE + 1; //刻录继续 + public static final int CTRLTYPE_BURNING_POSTPONE = CTRLTYPE_BURNING_CONTINUE + 1; //刻录顺延 + public static final int CTRLTYPE_CTRL_OEMCTRL = CTRLTYPE_BURNING_POSTPONE + 1; //报停控制 + public static final int CTRLTYPE_BACKUP_START = CTRLTYPE_CTRL_OEMCTRL + 1; //设备备份开始 + public static final int CTRLTYPE_BACKUP_STOP = CTRLTYPE_BACKUP_START + 1; //设备备份停止 + public static final int CTRLTYPE_VIHICLE_WIFI_ADD = CTRLTYPE_BACKUP_STOP + 1; //车载手动增加WIFI配置 + public static final int CTRLTYPE_VIHICLE_WIFI_DEC = CTRLTYPE_VIHICLE_WIFI_ADD + 1; //车载手动删除WIFI配置 + public static final int CTRLTYPE_BUZZER_START = CTRLTYPE_VIHICLE_WIFI_DEC + 1; //蜂鸣器控制开始 + public static final int CTRLTYPE_BUZZER_STOP = CTRLTYPE_BUZZER_START + 1; //蜂鸣器控制结束 + public static final int CTRLTYPE_REJECT_USER = CTRLTYPE_BUZZER_STOP + 1; //剔除用户 + public static final int CTRLTYPE_SHIELD_USER = CTRLTYPE_REJECT_USER + 1; //屏蔽用户 + public static final int CTRLTYPE_RAINBRUSH = CTRLTYPE_SHIELD_USER + 1; //智能交通,雨刷控制 + public static final int CTRLTYPE_MANUAL_SNAP = CTRLTYPE_RAINBRUSH + 1; //智能交通,手动抓拍(对应结构体MANUAL_SNAP_PARAMETER) + public static final int CTRLTYPE_MANUAL_NTP_TIMEADJUST = CTRLTYPE_MANUAL_SNAP + 1; //手动NTP校时 + public static final int CTRLTYPE_NAVIGATION_SMS = CTRLTYPE_MANUAL_NTP_TIMEADJUST + 1; //导航信息和短消息 + public static final int CTRLTYPE_CTRL_ROUTE_CROSSING = CTRLTYPE_NAVIGATION_SMS + 1; //路线点位信息 + public static final int CTRLTYPE_BACKUP_FORMAT = CTRLTYPE_CTRL_ROUTE_CROSSING + 1; //格式化备份设备 + public static final int CTRLTYPE_DEVICE_LOCALPREVIEW_SLIPT = CTRLTYPE_BACKUP_FORMAT + 1; //控制设备端本地预览分割(对应结构体DEVICE_LOCALPREVIEW_SLIPT_PARAMETER) + public static final int CTRLTYPE_CTRL_INIT_RAID = CTRLTYPE_DEVICE_LOCALPREVIEW_SLIPT + 1; //RAID初始化 + public static final int CTRLTYPE_CTRL_RAID = CTRLTYPE_CTRL_INIT_RAID + 1; //RAID操作 + public static final int CTRLTYPE_CTRL_SAPREDISK = CTRLTYPE_CTRL_RAID + 1; //热备盘操作 + public static final int CTRLTYPE_WIFI_CONNECT = CTRLTYPE_CTRL_SAPREDISK + 1; //手动发起WIFI连接(对应结构体WIFI_CONNECT) + public static final int CTRLTYPE_WIFI_DISCONNECT = CTRLTYPE_WIFI_CONNECT + 1; //手动断开WIFI连接(对应结构体WIFI_CONNECT) + public static final int CTRLTYPE_CTRL_ARMED = CTRLTYPE_WIFI_DISCONNECT + 1; //布撤防操作 + public static final int CTRLTYPE_CTRL_IP_MODIFY = CTRLTYPE_CTRL_ARMED + 1; //修改前端IP(对应结构体 NET_CTRL_IPMODIFY_PARAM) + public static final int CTRLTYPE_CTRL_WIFI_BY_WPS = CTRLTYPE_CTRL_IP_MODIFY + 1; //wps连接wifi(对应结构体NET_CTRL_CONNECT_WIFI_BYWPS) + public static final int CTRLTYPE_CTRL_FORMAT_PATITION = CTRLTYPE_CTRL_WIFI_BY_WPS + 1; //格式化分区(对应结构体NET_FORMAT_PATITION) + public static final int CTRLTYPE_CTRL_EJECT_STORAGE = CTRLTYPE_CTRL_FORMAT_PATITION + 1; //手动卸载设备(对应结构体NET_EJECT_STORAGE_DEVICE) + public static final int CTRLTYPE_CTRL_LOAD_STORAGE = CTRLTYPE_CTRL_EJECT_STORAGE + 1; //手动装载设备(对应结构体NET_LOAD_STORAGE_DEVICE) + public static final int CTRLTYPE_CTRL_CLOSE_BURNER = CTRLTYPE_CTRL_LOAD_STORAGE + 1; //关闭刻录机光驱门(对应结构体NET_CTRL_BURNERDOOR)一般需要等6 + public static final int CTRLTYPE_CTRL_EJECT_BURNER = CTRLTYPE_CTRL_CLOSE_BURNER + 1; //弹出刻录机光驱门(对应结构体NET_CTRL_BURNERDOOR)一般需要等4秒 + public static final int CTRLTYPE_CTRL_CLEAR_ALARM = CTRLTYPE_CTRL_EJECT_BURNER + 1; //消警(对应结构体NET_CTRL_CLEAR_ALARM) + public static final int CTRLTYPE_CTRL_MONITORWALL_TVINFO = CTRLTYPE_CTRL_CLEAR_ALARM + 1; //电视墙信息显示(对应结构体NET_CTRL_MONITORWALL_TVINFO) + public static final int CTRLTYPE_CTRL_START_VIDEO_ANALYSE = CTRLTYPE_CTRL_MONITORWALL_TVINFO + 1; //开始视频智能分析(对应结构体NET_CTRL_START_VIDEO_ANALYSE) + public static final int CTRLTYPE_CTRL_STOP_VIDEO_ANALYSE = CTRLTYPE_CTRL_START_VIDEO_ANALYSE + 1; //停止视频智能分析(对应结构体NET_CTRL_STOP_VIDEO_ANALYSE) + public static final int CTRLTYPE_CTRL_UPGRADE_DEVICE = CTRLTYPE_CTRL_STOP_VIDEO_ANALYSE + 1; //控制启动设备升级,由设备独立完成升级过程,不需要传输升级文件 + public static final int CTRLTYPE_CTRL_MULTIPLAYBACK_CHANNALES = CTRLTYPE_CTRL_UPGRADE_DEVICE + 1; //切换多通道预览回放的通道(对应结构体NET_CTRL_MULTIPLAYBACK_CHANNALES) + public static final int CTRLTYPE_CTRL_SEQPOWER_OPEN = CTRLTYPE_CTRL_MULTIPLAYBACK_CHANNALES + 1; //电源时序器打开开关量输出口(对应NET_CTRL_SEQPOWER_PARAM) + public static final int CTRLTYPE_CTRL_SEQPOWER_CLOSE = CTRLTYPE_CTRL_SEQPOWER_OPEN + 1; //电源时序器关闭开关量输出口(对应NET_CTRL_SEQPOWER_PARAM) + public static final int CTRLTYPE_CTRL_SEQPOWER_OPEN_ALL = CTRLTYPE_CTRL_SEQPOWER_CLOSE + 1; //电源时序器打开开关量输出口组(对应NET_CTRL_SEQPOWER_PARAM) + public static final int CTRLTYPE_CTRL_SEQPOWER_CLOSE_ALL = CTRLTYPE_CTRL_SEQPOWER_OPEN_ALL + 1; //电源时序器关闭开关量输出口组(对应NET_CTRL_SEQPOWER_PARAM) + public static final int CTRLTYPE_CTRL_PROJECTOR_RISE = CTRLTYPE_CTRL_SEQPOWER_CLOSE_ALL + 1; //投影仪上升(对应NET_CTRL_PROJECTOR_PARAM) + public static final int CTRLTYPE_CTRL_PROJECTOR_FALL = CTRLTYPE_CTRL_PROJECTOR_RISE + 1; //投影仪下降(对应NET_CTRL_PROJECTOR_PARAM) + public static final int CTRLTYPE_CTRL_PROJECTOR_STOP = CTRLTYPE_CTRL_PROJECTOR_FALL + 1; //投影仪停止(对应NET_CTRL_PROJECTOR_PARAM) + public static final int CTRLTYPE_CTRL_INFRARED_KEY = CTRLTYPE_CTRL_PROJECTOR_STOP + 1; //红外按键(对应NET_CTRL_INFRARED_KEY_PARAM) + public static final int CTRLTYPE_CTRL_START_PLAYAUDIO = CTRLTYPE_CTRL_INFRARED_KEY + 1; //设备开始播放音频文件(对应结构体NET_CTRL_START_PLAYAUDIO) + public static final int CTRLTYPE_CTRL_STOP_PLAYAUDIO = CTRLTYPE_CTRL_START_PLAYAUDIO + 1; //设备停止播放音频文件 + public static final int CTRLTYPE_CTRL_START_ALARMBELL = CTRLTYPE_CTRL_STOP_PLAYAUDIO + 1; //开启警号(对应结构体 NET_CTRL_ALARMBELL ) + public static final int CTRLTYPE_CTRL_STOP_ALARMBELL = CTRLTYPE_CTRL_START_ALARMBELL + 1; //关闭警号(对应结构体 NET_CTRL_ALARMBELL ) + public static final int CTRLTYPE_CTRL_ACCESS_OPEN = CTRLTYPE_CTRL_STOP_ALARMBELL + 1; //门禁控制-开门(对应结构体 NET_CTRL_ACCESS_OPEN) + public static final int CTRLTYPE_CTRL_SET_BYPASS = CTRLTYPE_CTRL_ACCESS_OPEN + 1; //设置旁路功能(对应结构体NET_CTRL_SET_BYPASS) + public static final int CTRLTYPE_CTRL_RECORDSET_INSERT = CTRLTYPE_CTRL_SET_BYPASS + 1; //添加记录,获得记录集编号(对应NET_CTRL_RECORDSET_INSERT_PARAM) + public static final int CTRLTYPE_CTRL_RECORDSET_UPDATE = CTRLTYPE_CTRL_RECORDSET_INSERT + 1; //更新某记录集编号的记录(对应 NET_CTRL_RECORDSET_PARAM) + public static final int CTRLTYPE_CTRL_RECORDSET_REMOVE = CTRLTYPE_CTRL_RECORDSET_UPDATE + 1; //根据记录集编号删除某记录(对应 NET_CTRL_RECORDSET_PARAM) + public static final int CTRLTYPE_CTRL_RECORDSET_CLEAR = CTRLTYPE_CTRL_RECORDSET_REMOVE + 1; //清除所有记录集信息(对应NET_CTRL_RECORDSET_PARAM) + public static final int CTRLTYPE_CTRL_ACCESS_CLOSE = CTRLTYPE_CTRL_RECORDSET_CLEAR + 1; //门禁控制-关门(对应结构体NET_CTRL_ACCESS_CLOSE) + public static final int CTRLTYPE_CTRL_ALARM_SUBSYSTEM_ACTIVE_SET = CTRLTYPE_CTRL_ACCESS_CLOSE + 1; //报警子系统激活设置(对应结构体NET_CTRL_ALARM_SUBSYSTEM_SETACTIVE) + public static final int CTRLTYPE_CTRL_FORBID_OPEN_STROBE = CTRLTYPE_CTRL_ALARM_SUBSYSTEM_ACTIVE_SET + 1; //禁止设备端开闸(对应结构体NET_CTRL_FORBID_OPEN_STROBE) + public static final int CTRLTYPE_CTRL_OPEN_STROBE = CTRLTYPE_CTRL_FORBID_OPEN_STROBE + 1; //开启道闸(对应结构体 NET_CTRL_OPEN_STROBE) + public static final int CTRLTYPE_CTRL_TALKING_REFUSE = CTRLTYPE_CTRL_OPEN_STROBE + 1; //对讲拒绝接听(对应结构体NET_CTRL_TALKING_REFUSE) + public static final int CTRLTYPE_CTRL_ARMED_EX = CTRLTYPE_CTRL_TALKING_REFUSE + 1; //布撤防操作(对应结构体CTRL_ARM_DISARM_PARAM_EX),对CTRL_ARM_DISARM_PARAM升级,建议用这个 + public static final int CTRLTYPE_CTRL_NET_KEYBOARD = 400;//网络键盘控制(对应结构体NET_CTRL_NET_KEYBOARD) + public static final int CTRLTYPE_CTRL_AIRCONDITION_OPEN = CTRLTYPE_CTRL_NET_KEYBOARD + 1; //打开空调(对应结构体NET_CTRL_OPEN_AIRCONDITION) + public static final int CTRLTYPE_CTRL_AIRCONDITION_CLOSE = CTRLTYPE_CTRL_AIRCONDITION_OPEN + 1; //关闭空调(对应结构体NET_CTRL_CLOSE_AIRCONDITION) + public static final int CTRLTYPE_CTRL_AIRCONDITION_SET_TEMPERATURE = CTRLTYPE_CTRL_AIRCONDITION_CLOSE + 1; //设定空调温度(对应结构体NET_CTRL_SET_TEMPERATURE) + public static final int CTRLTYPE_CTRL_AIRCONDITION_ADJUST_TEMPERATURE = CTRLTYPE_CTRL_AIRCONDITION_SET_TEMPERATURE + 1; //调节空调温度(对应结构体NET_CTRL_ADJUST_TEMPERATURE) + public static final int CTRLTYPE_CTRL_AIRCONDITION_SETMODE = CTRLTYPE_CTRL_AIRCONDITION_ADJUST_TEMPERATURE + 1; //设置空调工作模式(对应结构体NET_CTRL_ADJUST_TEMPERATURE) + public static final int CTRLTYPE_CTRL_AIRCONDITION_SETWINDMODE = CTRLTYPE_CTRL_AIRCONDITION_SETMODE + 1; //设置空调送风模式(对应结构体NET_CTRL_AIRCONDITION_SETMODE) + public static final int CTRLTYPE_CTRL_RESTOREDEFAULT_EX = CTRLTYPE_CTRL_AIRCONDITION_SETWINDMODE + 1;//恢复设备的默认设置新协议(对应结构体 NET_CTRL_RESTORE_DEFAULT ) + // 恢复配置优先使用该枚举,如果接口失败, + // 且CLIENT_GetLastError返回NET_UNSUPPORTED,再尝试使用NET_CTRL_RESTOREDEFAULT恢复配置 + public static final int CTRLTYPE_CTRL_NOTIFY_EVENT = CTRLTYPE_CTRL_RESTOREDEFAULT_EX + 1; //向设备发送事件(对应结构体NET_NOTIFY_EVENT_DATA) + public static final int CTRLTYPE_CTRL_SILENT_ALARM_SET = CTRLTYPE_CTRL_NOTIFY_EVENT + 1; //无声报警设置 + public static final int CTRLTYPE_CTRL_START_PLAYAUDIOEX = CTRLTYPE_CTRL_SILENT_ALARM_SET + 1; //设备开始语音播报(对应结构体NET_CTRL_START_PLAYAUDIOEX) + public static final int CTRLTYPE_CTRL_STOP_PLAYAUDIOEX = CTRLTYPE_CTRL_START_PLAYAUDIOEX + 1; //设备停止语音播报 + public static final int CTRLTYPE_CTRL_CLOSE_STROBE = CTRLTYPE_CTRL_STOP_PLAYAUDIOEX + 1; //关闭道闸(对应结构体 NET_CTRL_CLOSE_STROBE) + public static final int CTRLTYPE_CTRL_SET_ORDER_STATE = CTRLTYPE_CTRL_CLOSE_STROBE + 1; //设置车位预定状态(对应结构体NET_CTRL_SET_ORDER_STATE) + public static final int CTRLTYPE_CTRL_RECORDSET_INSERTEX = CTRLTYPE_CTRL_SET_ORDER_STATE + 1; //添加记录,获得记录集编号(对应 NET_CTRL_RECORDSET_INSERT_PARAM ) + public static final int CTRLTYPE_CTRL_RECORDSET_UPDATEEX = CTRLTYPE_CTRL_RECORDSET_INSERTEX + 1; //更新某记录集编号的记录(对应NET_CTRL_RECORDSET_PARAM) + public static final int CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT = CTRLTYPE_CTRL_RECORDSET_UPDATEEX + 1; // 指纹采集(对应结构体NET_CTRL_CAPTURE_FINGER_PRINT) + public static final int CTRLTYPE_CTRL_ECK_LED_SET = CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT + 1; //停车场出入口控制器LED设置(对应结构体NET_CTRL_ECK_LED_SET_PARAM) + public static final int CTRLTYPE_CTRL_ECK_IC_CARD_IMPORT = CTRLTYPE_CTRL_ECK_LED_SET + 1; //智能停车系统出入口机IC卡信息导入(对应结构体NET_CTRL_ECK_IC_CARD_IMPORT_PARAM) + public static final int CTRLTYPE_CTRL_ECK_SYNC_IC_CARD = CTRLTYPE_CTRL_ECK_IC_CARD_IMPORT + 1; //智能停车系统出入口机IC卡信息同步指令,收到此指令后,设备删除原有IC卡信息(对应结构体NET_CTRL_ECK_SYNC_IC_CARD_PARAM) + public static final int CTRLTYPE_CTRL_LOWRATEWPAN_REMOVE = CTRLTYPE_CTRL_ECK_SYNC_IC_CARD + 1; //删除指定无线设备(对应结构体NET_CTRL_LOWRATEWPAN_REMOVE) + public static final int CTRLTYPE_CTRL_LOWRATEWPAN_MODIFY = CTRLTYPE_CTRL_LOWRATEWPAN_REMOVE + 1; //修改无线设备信息(对应结构体NET_CTRL_LOWRATEWPAN_MODIFY) + public static final int CTRLTYPE_CTRL_ECK_SET_PARK_INFO = CTRLTYPE_CTRL_LOWRATEWPAN_MODIFY + 1; //智能停车系统出入口机设置车位信息(对应结构体NET_CTRL_ECK_SET_PARK_INFO_PARAM) + public static final int CTRLTYPE_CTRL_VTP_DISCONNECT = CTRLTYPE_CTRL_ECK_SET_PARK_INFO + 1; //挂断视频电话(对应结构体NET_CTRL_VTP_DISCONNECT) + public static final int CTRLTYPE_CTRL_UPDATE_FILES = CTRLTYPE_CTRL_VTP_DISCONNECT + 1; //远程投放多媒体文件更新(对应结构体NET_CTRL_UPDATE_FILES) + public static final int CTRLTYPE_CTRL_MATRIX_SAVE_SWITCH = CTRLTYPE_CTRL_UPDATE_FILES + 1; //保存上下位矩阵输出关系(对应结构体NET_CTRL_MATRIX_SAVE_SWITCH) + public static final int CTRLTYPE_CTRL_MATRIX_RESTORE_SWITCH = CTRLTYPE_CTRL_MATRIX_SAVE_SWITCH + 1; //恢复上下位矩阵输出关系(对应结构体NET_CTRL_MATRIX_RESTORE_SWITCH) + public static final int CTRLTYPE_CTRL_VTP_DIVERTACK = CTRLTYPE_CTRL_MATRIX_RESTORE_SWITCH + 1; //呼叫转发响应(对应结构体NET_CTRL_VTP_DIVERTACK) + public static final int CTRLTYPE_CTRL_RAINBRUSH_MOVEONCE = CTRLTYPE_CTRL_VTP_DIVERTACK + 1; //雨刷来回刷一次,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_MOVEONCE) + public static final int CTRLTYPE_CTRL_RAINBRUSH_MOVECONTINUOUSLY = CTRLTYPE_CTRL_RAINBRUSH_MOVEONCE + 1; //雨刷来回循环刷,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY) + public static final int CTRLTYPE_CTRL_RAINBRUSH_STOPMOVE = CTRLTYPE_CTRL_RAINBRUSH_MOVECONTINUOUSLY + 1; //雨刷停止刷,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_STOPMOVE) + public static final int CTRLTYPE_CTRL_ALARM_ACK = CTRLTYPE_CTRL_RAINBRUSH_STOPMOVE + 1; //报警事件确认(对应结构体NET_CTRL_ALARM_ACK) + // NET_CTRL_ALARM_ACK 该操作切勿在报警回调接口中调用 public static final int CTRLTYPE_CTRL_RECORDSET_IMPORT = CTRLTYPE_CTRL_ALARM_ACK + 1; // 批量导入记录集信息(对应 NET_CTRL_RECORDSET_PARAM ) public static final int CTRLTYPE_CTRL_DELIVERY_FILE = CTRLTYPE_CTRL_RECORDSET_IMPORT + 1; // 向视频输出口投放视频和图片文件, 楼宇对讲使用,同一时间投放(对应 NET_CTRL_DELIVERY_FILE ) - // 以下命令只在 CLIENT_ControlDeviceEx 上有效 + // 以下命令只在 CLIENT_ControlDeviceEx 上有效 public static final int CTRLTYPE_CTRL_THERMO_GRAPHY_ENSHUTTER = 0x10000;//设置热成像快门启用/禁用,pInBuf= NET_IN_THERMO_EN_SHUTTER*, pOutBuf= NET_OUT_THERMO_EN_SHUTTER * - public static final int CTRLTYPE_CTRL_RADIOMETRY_SETOSDMARK = CTRLTYPE_CTRL_THERMO_GRAPHY_ENSHUTTER+1; // 设置测温项的osd为高亮,pInBuf=NET_IN_RADIOMETRY_SETOSDMARK*,pOutBuf= NET_OUT_RADIOMETRY_SETOSDMARK * - public static final int CTRLTYPE_CTRL_AUDIO_REC_START_NAME = CTRLTYPE_CTRL_RADIOMETRY_SETOSDMARK+1; // 开启音频录音并得到录音名,pInBuf = NET_IN_AUDIO_REC_MNG_NAME *, pOutBuf = NET_OUT_AUDIO_REC_MNG_NAME * - public static final int CTRLTYPE_CTRL_AUDIO_REC_STOP_NAME = CTRLTYPE_CTRL_AUDIO_REC_START_NAME+1; // 关闭音频录音并返回文件名称,pInBuf = NET_IN_AUDIO_REC_MNG_NAME *, pOutBuf = NET_OUT_AUDIO_REC_MNG_NAME * - public static final int CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT = CTRLTYPE_CTRL_AUDIO_REC_STOP_NAME+1; // 即时抓图(又名手动抓图),pInBuf =NET_IN_SNAP_MNG_SHOT *, pOutBuf = NET_OUT_SNAP_MNG_SHOT * - public static final int CTRLTYPE_CTRL_LOG_STOP = CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT+1; // 强制同步缓存数据到数据库并关闭数据库,pInBuf = NET_IN_LOG_MNG_CTRL *, pOutBuf = NET_OUT_LOG_MNG_CTRL * - public static final int CTRLTYPE_CTRL_LOG_RESUME = CTRLTYPE_CTRL_LOG_STOP+1; // 恢复数据库,pInBuf = NET_IN_LOG_MNG_CTRL *, pOutBuf = NET_OUT_LOG_MNG_CTRL * + public static final int CTRLTYPE_CTRL_RADIOMETRY_SETOSDMARK = CTRLTYPE_CTRL_THERMO_GRAPHY_ENSHUTTER + 1; // 设置测温项的osd为高亮,pInBuf=NET_IN_RADIOMETRY_SETOSDMARK*,pOutBuf= NET_OUT_RADIOMETRY_SETOSDMARK * + public static final int CTRLTYPE_CTRL_AUDIO_REC_START_NAME = CTRLTYPE_CTRL_RADIOMETRY_SETOSDMARK + 1; // 开启音频录音并得到录音名,pInBuf = NET_IN_AUDIO_REC_MNG_NAME *, pOutBuf = NET_OUT_AUDIO_REC_MNG_NAME * + public static final int CTRLTYPE_CTRL_AUDIO_REC_STOP_NAME = CTRLTYPE_CTRL_AUDIO_REC_START_NAME + 1; // 关闭音频录音并返回文件名称,pInBuf = NET_IN_AUDIO_REC_MNG_NAME *, pOutBuf = NET_OUT_AUDIO_REC_MNG_NAME * + public static final int CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT = CTRLTYPE_CTRL_AUDIO_REC_STOP_NAME + 1; // 即时抓图(又名手动抓图),pInBuf =NET_IN_SNAP_MNG_SHOT *, pOutBuf = NET_OUT_SNAP_MNG_SHOT * + public static final int CTRLTYPE_CTRL_LOG_STOP = CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT + 1; // 强制同步缓存数据到数据库并关闭数据库,pInBuf = NET_IN_LOG_MNG_CTRL *, pOutBuf = NET_OUT_LOG_MNG_CTRL * + public static final int CTRLTYPE_CTRL_LOG_RESUME = CTRLTYPE_CTRL_LOG_STOP + 1; // 恢复数据库,pInBuf = NET_IN_LOG_MNG_CTRL *, pOutBuf = NET_OUT_LOG_MNG_CTRL * } // 视频压缩格式 - public static class CFG_VIDEO_COMPRESSION extends Structure - { + public static class CFG_VIDEO_COMPRESSION extends Structure { public static final int VIDEO_FORMAT_MPEG4 = 0; //MPEG4 - public static final int VIDEO_FORMAT_MS_MPEG4 = VIDEO_FORMAT_MPEG4+1; //MS-MPEG4 - public static final int VIDEO_FORMAT_MPEG2 = VIDEO_FORMAT_MS_MPEG4+1; //MPEG2 - public static final int VIDEO_FORMAT_MPEG1 = VIDEO_FORMAT_MPEG2+1; //MPEG1 - public static final int VIDEO_FORMAT_H263 = VIDEO_FORMAT_MPEG1+1; //H.263 - public static final int VIDEO_FORMAT_MJPG = VIDEO_FORMAT_H263+1; //MJPG - public static final int VIDEO_FORMAT_FCC_MPEG4 = VIDEO_FORMAT_MJPG+1; //FCC-MPEG4 - public static final int VIDEO_FORMAT_H264 = VIDEO_FORMAT_FCC_MPEG4+1; //H.264 - public static final int VIDEO_FORMAT_H265 = VIDEO_FORMAT_H264+1; //H.265 + public static final int VIDEO_FORMAT_MS_MPEG4 = VIDEO_FORMAT_MPEG4 + 1; //MS-MPEG4 + public static final int VIDEO_FORMAT_MPEG2 = VIDEO_FORMAT_MS_MPEG4 + 1; //MPEG2 + public static final int VIDEO_FORMAT_MPEG1 = VIDEO_FORMAT_MPEG2 + 1; //MPEG1 + public static final int VIDEO_FORMAT_H263 = VIDEO_FORMAT_MPEG1 + 1; //H.263 + public static final int VIDEO_FORMAT_MJPG = VIDEO_FORMAT_H263 + 1; //MJPG + public static final int VIDEO_FORMAT_FCC_MPEG4 = VIDEO_FORMAT_MJPG + 1; //FCC-MPEG4 + public static final int VIDEO_FORMAT_H264 = VIDEO_FORMAT_FCC_MPEG4 + 1; //H.264 + public static final int VIDEO_FORMAT_H265 = VIDEO_FORMAT_H264 + 1; //H.265 } // 码流控制模式 - public static class CFG_BITRATE_CONTROL extends Structure - { + public static class CFG_BITRATE_CONTROL extends Structure { public static final int BITRATE_CBR = 0; //固定码流 - public static final int BITRATE_VBR = BITRATE_CBR+1; //可变码流 + public static final int BITRATE_VBR = BITRATE_CBR + 1; //可变码流 } // H264 编码级别 - public static class CFG_H264_PROFILE_RANK extends Structure - { + public static class CFG_H264_PROFILE_RANK extends Structure { public static final int PROFILE_BASELINE = 1;//提供I/P帧,仅支持progressive(逐行扫描)和CAVLC - public static final int PROFILE_MAIN = PROFILE_BASELINE+1; //提供I/P/B帧,支持progressiv和interlaced,提供CAVLC或CABAC - public static final int PROFILE_EXTENDED = PROFILE_MAIN+1; //提供I/P/B/SP/SI帧,仅支持progressive(逐行扫描)和CAVLC - public static final int PROFILE_HIGH = PROFILE_EXTENDED+1; //即FRExt,Main_Profile基础上新增:8x8intraprediction(8x8帧内预测), custom - // quant(自定义量化), lossless video coding(无损视频编码), 更多的yuv格式 + public static final int PROFILE_MAIN = PROFILE_BASELINE + 1; //提供I/P/B帧,支持progressiv和interlaced,提供CAVLC或CABAC + public static final int PROFILE_EXTENDED = PROFILE_MAIN + 1; //提供I/P/B/SP/SI帧,仅支持progressive(逐行扫描)和CAVLC + public static final int PROFILE_HIGH = PROFILE_EXTENDED + 1; //即FRExt,Main_Profile基础上新增:8x8intraprediction(8x8帧内预测), custom + // quant(自定义量化), lossless video coding(无损视频编码), 更多的yuv格式 } // 画质 - public static class CFG_IMAGE_QUALITY extends Structure - { + public static class CFG_IMAGE_QUALITY extends Structure { public static final int IMAGE_QUALITY_Q10 = 1;//图像质量10% - public static final int IMAGE_QUALITY_Q30 = IMAGE_QUALITY_Q10+1; //图像质量30% - public static final int IMAGE_QUALITY_Q50 = IMAGE_QUALITY_Q30+1; //图像质量50% - public static final int IMAGE_QUALITY_Q60 = IMAGE_QUALITY_Q50+1; //图像质量60% - public static final int IMAGE_QUALITY_Q80 = IMAGE_QUALITY_Q60+1; //图像质量80% - public static final int IMAGE_QUALITY_Q100 = IMAGE_QUALITY_Q80+1; //图像质量100% + public static final int IMAGE_QUALITY_Q30 = IMAGE_QUALITY_Q10 + 1; //图像质量30% + public static final int IMAGE_QUALITY_Q50 = IMAGE_QUALITY_Q30 + 1; //图像质量50% + public static final int IMAGE_QUALITY_Q60 = IMAGE_QUALITY_Q50 + 1; //图像质量60% + public static final int IMAGE_QUALITY_Q80 = IMAGE_QUALITY_Q60 + 1; //图像质量80% + public static final int IMAGE_QUALITY_Q100 = IMAGE_QUALITY_Q80 + 1; //图像质量100% } // 视频格式 - public static class CFG_VIDEO_FORMAT extends Structure - { + public static class CFG_VIDEO_FORMAT extends Structure { // 能力 public byte abCompression;// 类型为bool, 取值0或1 public byte abWidth;// 类型为bool, 取值0或1 @@ -6492,18 +6238,16 @@ public interface NetSDKLib extends Library { } // 音频编码模式 - public static class CFG_AUDIO_FORMAT extends Structure - { - public static final int AUDIO_FORMAT_G711A = 0; //G711a - public static final int AUDIO_FORMAT_PCM = AUDIO_FORMAT_G711A+1; //PCM - public static final int AUDIO_FORMAT_G711U = AUDIO_FORMAT_PCM+1; //G711u - public static final int AUDIO_FORMAT_AMR = AUDIO_FORMAT_G711U+1; //AMR - public static final int AUDIO_FORMAT_AAC = AUDIO_FORMAT_AMR+1; //AAC + public static class CFG_AUDIO_FORMAT extends Structure { + public static final int AUDIO_FORMAT_G711A = 0; //G711a + public static final int AUDIO_FORMAT_PCM = AUDIO_FORMAT_G711A + 1; //PCM + public static final int AUDIO_FORMAT_G711U = AUDIO_FORMAT_PCM + 1; //G711u + public static final int AUDIO_FORMAT_AMR = AUDIO_FORMAT_G711U + 1; //AMR + public static final int AUDIO_FORMAT_AAC = AUDIO_FORMAT_AMR + 1; //AAC } // 音频格式 - public static class CFG_AUDIO_ENCODE_FORMAT extends Structure - { + public static class CFG_AUDIO_ENCODE_FORMAT extends Structure { // 能力 public byte abCompression;// 类型为bool, 取值0或1 public byte abDepth;// 类型为bool, 取值0或1 @@ -6521,8 +6265,7 @@ public interface NetSDKLib extends Library { } // 视频编码参数 - public static class CFG_VIDEOENC_OPT extends Structure - { + public static class CFG_VIDEOENC_OPT extends Structure { // 能力 public byte abVideoEnable;// 类型为bool, 取值0或1 public byte abAudioEnable;// 类型为bool, 取值0或1 @@ -6539,8 +6282,7 @@ public interface NetSDKLib extends Library { } // 遮挡信息 - public static class CFG_COVER_INFO extends Structure - { + public static class CFG_COVER_INFO extends Structure { // 能力 public byte abBlockType;// 类型为bool, 取值0或1 public byte abEncodeBlend;// 类型为bool, 取值0或1 @@ -6554,16 +6296,14 @@ public interface NetSDKLib extends Library { } // 多区域遮挡配置 - public static class CFG_VIDEO_COVER extends Structure - { + public static class CFG_VIDEO_COVER extends Structure { public int nTotalBlocks;//支持的遮挡块数 public int nCurBlocks;//已设置的块数 - public CFG_COVER_INFO[] stuCoverBlock = (CFG_COVER_INFO[])new CFG_COVER_INFO().toArray(MAX_VIDEO_COVER_NUM);// 覆盖的区域 + public CFG_COVER_INFO[] stuCoverBlock = (CFG_COVER_INFO[]) new CFG_COVER_INFO().toArray(MAX_VIDEO_COVER_NUM);// 覆盖的区域 } // OSD信息 - public static class CFG_OSD_INFO extends Structure - { + public static class CFG_OSD_INFO extends Structure { // 能力 public byte abShowEnable;// 类型为bool, 取值0或1 // 信息 @@ -6574,8 +6314,7 @@ public interface NetSDKLib extends Library { } // 画面颜色属性 - public static class CFG_COLOR_INFO extends Structure - { + public static class CFG_COLOR_INFO extends Structure { public int nBrightness;//亮度(0-100) public int nContrast;//对比度(0-100) public int nSaturation;//饱和度(0-100) @@ -6585,16 +6324,15 @@ public interface NetSDKLib extends Library { } // 图像通道属性信息 - public static class CFG_ENCODE_INFO extends Structure - { + public static class CFG_ENCODE_INFO extends Structure { public int nChannelID;//通道号(0开始),获取时,该字段有效;设置时,该字段无效 public byte[] szChnName = new byte[MAX_CHANNELNAME_LEN];//无效字段 - public CFG_VIDEOENC_OPT[] stuMainStream = (CFG_VIDEOENC_OPT[])new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 主码流,0-普通录像,1-动检录像,2-报警录像 - public int nValidCountMainStream; // 主码流数组中有效的个数 - public CFG_VIDEOENC_OPT[] stuExtraStream = (CFG_VIDEOENC_OPT[])new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 辅码流,0-辅码流1,1-辅码流2,2-辅码流3 - public int nValidCountExtraStream; // 辅码流数组中有效的个数 - public CFG_VIDEOENC_OPT[] stuSnapFormat = (CFG_VIDEOENC_OPT[])new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 抓图,0-普通抓图,1-动检抓图,2-报警抓图 - public int nValidCountSnapFormat; // 抓图数组中有效的个数 + public CFG_VIDEOENC_OPT[] stuMainStream = (CFG_VIDEOENC_OPT[]) new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 主码流,0-普通录像,1-动检录像,2-报警录像 + public int nValidCountMainStream; // 主码流数组中有效的个数 + public CFG_VIDEOENC_OPT[] stuExtraStream = (CFG_VIDEOENC_OPT[]) new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 辅码流,0-辅码流1,1-辅码流2,2-辅码流3 + public int nValidCountExtraStream; // 辅码流数组中有效的个数 + public CFG_VIDEOENC_OPT[] stuSnapFormat = (CFG_VIDEOENC_OPT[]) new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 抓图,0-普通抓图,1-动检抓图,2-报警抓图 + public int nValidCountSnapFormat; // 抓图数组中有效的个数 public int dwCoverAbilityMask;//无效字段 public int dwCoverEnableMask;//无效字段 public CFG_VIDEO_COVER stuVideoCover;//无效字段 @@ -6606,8 +6344,7 @@ public interface NetSDKLib extends Library { } // 设备软件版本信息,高16位表示主版本号,低16位表示次版本号 - public static class NET_VERSION_INFO extends Structure - { + public static class NET_VERSION_INFO extends Structure { public int dwSoftwareVersion; public int dwSoftwareBuildDate; public int dwDspSoftwareVersion; @@ -6619,33 +6356,31 @@ public interface NetSDKLib extends Library { public int dwWebVersion; public int dwWebBuildDate; } - + // 设备软件版本信息,对应CLIENT_QueryDevState接口 - public static class NETDEV_VERSION_INFO extends Structure - { - public byte[] szDevSerialNo = new byte[NET_DEV_SERIALNO_LEN]; // 序列号 - public int byDevType; // 设备类型,见枚举 NET_DEVICE_TYPE - public byte[] szDevType = new byte[NET_DEV_TYPE_LEN]; // 设备详细型号,字符串格式,可能为空 - public int nProtocalVer; // 协议版本号 - public byte[] szSoftWareVersion = new byte[NET_MAX_URL_LEN]; - public int dwSoftwareBuildDate; - public byte[] szPeripheralSoftwareVersion = new byte[NET_MAX_URL_LEN];// 从片版本信息,字符串格式,可能为空 - public int dwPeripheralSoftwareBuildDate; - public byte[] szGeographySoftwareVersion = new byte[NET_MAX_URL_LEN]; // 地理信息定位芯片版本信息,字符串格式,可能为空 - public int dwGeographySoftwareBuildDate; - public byte[] szHardwareVersion = new byte[NET_MAX_URL_LEN]; - public int dwHardwareDate; - public byte[] szWebVersion = new byte[NET_MAX_URL_LEN]; - public int dwWebBuildDate; - public byte[] reserved = new byte[256]; - } - + public static class NETDEV_VERSION_INFO extends Structure { + public byte[] szDevSerialNo = new byte[NET_DEV_SERIALNO_LEN]; // 序列号 + public int byDevType; // 设备类型,见枚举 NET_DEVICE_TYPE + public byte[] szDevType = new byte[NET_DEV_TYPE_LEN]; // 设备详细型号,字符串格式,可能为空 + public int nProtocalVer; // 协议版本号 + public byte[] szSoftWareVersion = new byte[NET_MAX_URL_LEN]; + public int dwSoftwareBuildDate; + public byte[] szPeripheralSoftwareVersion = new byte[NET_MAX_URL_LEN];// 从片版本信息,字符串格式,可能为空 + public int dwPeripheralSoftwareBuildDate; + public byte[] szGeographySoftwareVersion = new byte[NET_MAX_URL_LEN]; // 地理信息定位芯片版本信息,字符串格式,可能为空 + public int dwGeographySoftwareBuildDate; + public byte[] szHardwareVersion = new byte[NET_MAX_URL_LEN]; + public int dwHardwareDate; + public byte[] szWebVersion = new byte[NET_MAX_URL_LEN]; + public int dwWebBuildDate; + public byte[] reserved = new byte[256]; + } + // 设备类型 - public static class NET_DEVICE_TYPE extends Structure - { + public static class NET_DEVICE_TYPE extends Structure { public static final int NET_PRODUCT_NONE = 0; public static final int NET_DVR_NONREALTIME_MACE = 1; // 非实时MACE - public static final int NET_DVR_NONREALTIME = 2; // 非实时 + public static final int NET_DVR_NONREALTIME = 2; // 非实时 public static final int NET_NVS_MPEG1 = 3; // 网络视频服务器 public static final int NET_DVR_MPEG1_2 = 4; // MPEG1二路录像机 public static final int NET_DVR_MPEG1_8 = 5; // MPEG1八路录像机 @@ -6709,16 +6444,15 @@ public interface NetSDKLib extends Library { } // DSP能力描述,对应CLIENT_GetDevConfig接口 - public static class NET_DSP_ENCODECAP extends Structure - { + public static class NET_DSP_ENCODECAP extends Structure { public int dwVideoStandardMask;//视频制式掩码,按位表示设备能够支持的视频制式 public int dwImageSizeMask;//分辨率掩码,按位表示设备能够支持的分辨率设置 public int dwEncodeModeMask;//编码模式掩码,按位表示设备能够支持的编码模式设置 public int dwStreamCap; // 按位表示设备支持的多媒体功能, - // 第一位表示支持主码流 - // 第二位表示支持辅码流1 - // 第三位表示支持辅码流2 - // 第五位表示支持jpg抓图 + // 第一位表示支持主码流 + // 第二位表示支持辅码流1 + // 第三位表示支持辅码流2 + // 第五位表示支持jpg抓图 public int[] dwImageSizeMask_Assi = new int[8];//表示主码流为各分辨率时,支持的辅码流分辨率掩码。 public int dwMaxEncodePower;//DSP支持的最高编码能力 public short wMaxSupportChannel;//每块DSP支持最多输入视频通道数 @@ -6726,8 +6460,7 @@ public interface NetSDKLib extends Library { } // 系统信息 - public static class NET_DEV_SYSTEM_ATTR_CFG extends Structure - { + public static class NET_DEV_SYSTEM_ATTR_CFG extends Structure { public int dwSize; /* 下面是设备的只读部分 */ public NET_VERSION_INFO stVersion; @@ -6763,23 +6496,20 @@ public interface NetSDKLib extends Library { public byte byTimeFmt;//时间格式(0-24小时,1-12小时) public byte byLanguage;//枚举值详见NET_LANGUAGE_TYPE - public NET_DEV_SYSTEM_ATTR_CFG() - { + public NET_DEV_SYSTEM_ATTR_CFG() { this.dwSize = this.size(); } } // 入侵方向 - public static class EM_MSG_OBJ_PERSON_DIRECTION extends Structure - { + public static class EM_MSG_OBJ_PERSON_DIRECTION extends Structure { public static final int EM_MSG_OBJ_PERSON_DIRECTION_UNKOWN = 0; //未知方向 - public static final int EM_MSG_OBJ_PERSON_DIRECTION_LEFT_TO_RIGHT = EM_MSG_OBJ_PERSON_DIRECTION_UNKOWN+1; //从左向右 - public static final int EM_MSG_OBJ_PERSON_DIRECTION_RIGHT_TO_LEFT = EM_MSG_OBJ_PERSON_DIRECTION_LEFT_TO_RIGHT+1; //从右向左 + public static final int EM_MSG_OBJ_PERSON_DIRECTION_LEFT_TO_RIGHT = EM_MSG_OBJ_PERSON_DIRECTION_UNKOWN + 1; //从左向右 + public static final int EM_MSG_OBJ_PERSON_DIRECTION_RIGHT_TO_LEFT = EM_MSG_OBJ_PERSON_DIRECTION_LEFT_TO_RIGHT + 1; //从右向左 } // 视频分析物体信息扩展结构体 - public static class NET_MSG_OBJECT_EX extends Structure - { + public static class NET_MSG_OBJECT_EX extends Structure { public int dwSize; public int nObjectID;//物体ID,每个ID表示一个唯一的物体 public byte[] szObjectType = new byte[128];//物体类型 @@ -6788,7 +6518,7 @@ public interface NetSDKLib extends Library { public DH_RECT BoundingBox;//包围盒 public NET_POINT Center;//物体型心 public int nPolygonNum;//多边形顶点个数 - public NET_POINT[] Contour = (NET_POINT[])new NET_POINT().toArray(NET_MAX_POLYGON_NUM);// 较精确的轮廓多边形 + public NET_POINT[] Contour = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_POLYGON_NUM);// 较精确的轮廓多边形 public int rgbaMainColor;//表示车牌、车身等物体主要颜色;按字节表示,分别为红、绿、蓝和透明度,例如:RGB值为(0,255,0),透明度为0时,其值为0x00ff0000. public byte[] szText = new byte[128];//同NET_MSG_OBJECT相应字段 public byte[] szObjectSubType = new byte[64];//物体子类别,根据不同的物体类型,可以取以下子类型: @@ -6819,20 +6549,18 @@ public interface NetSDKLib extends Library { public int emPersonDirection;//人员入侵方向, 取值为EM_MSG_OBJ_PERSON_DIRECTION中的值 public int rgbaLowerBodyColor;//使用方法同rgbaMainColor,物体类型为人时有效 - public NET_MSG_OBJECT_EX() - { + public NET_MSG_OBJECT_EX() { this.dwSize = this.size(); - - if(Utils.getOsName().equals("win")) { + + if (Utils.getOsName().equals("win")) { // 强制采用最大四字节对其 setAlignType(ALIGN_GNUC); - } + } } } - + // 视频分析物体信息扩展结构体,扩展版本2 - public static class NET_MSG_OBJECT_EX2 extends Structure - { + public static class NET_MSG_OBJECT_EX2 extends Structure { public int dwSize; public int nObjectID;//物体ID,每个ID表示一个唯一的物体 public byte[] szObjectType = new byte[128];//物体类型 @@ -6841,7 +6569,7 @@ public interface NetSDKLib extends Library { public DH_RECT BoundingBox;//包围盒 public NET_POINT Center;//物体型心 public int nPolygonNum;//多边形顶点个数 - public NET_POINT[] Contour = (NET_POINT[])new NET_POINT().toArray(NET_MAX_POLYGON_NUM);//较精确的轮廓多边形 + public NET_POINT[] Contour = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_POLYGON_NUM);//较精确的轮廓多边形 public int rgbaMainColor;//表示车牌、车身等物体主要颜色;按字节表示,分别为红、绿、蓝和透明度,例如:RGB值为(0,255,0),透明度为0时,其值为0x00ff0000. public byte[] szText = new byte[128];//同NET_MSG_OBJECT相应字段 public byte[] szObjectSubType = new byte[64];//物体子类别,根据不同的物体类型,可以取以下子类型: @@ -6881,145 +6609,135 @@ public interface NetSDKLib extends Library { public NET_POINT stuSynopsisStartLocation;//浓缩运动方向,起始坐标点,点的坐标归一化到[0,8192)区间,bEnableDirection为True时有效 public NET_POINT stuSynopsisEndLocation;//浓缩运动方向,终止坐标点,点的坐标归一化到[0,8192)区间,bEnableDirection为True时有效 public byte[] byReserved = new byte[2048];//扩展字节 - - public NET_MSG_OBJECT_EX2() - { + + public NET_MSG_OBJECT_EX2() { this.dwSize = this.size(); - - if(Utils.getOsName().equals("win")) { + + if (Utils.getOsName().equals("win")) { // 强制采用最大四字节对其 setAlignType(ALIGN_GNUC); - } + } } } - + // 设备协议类型 - public static class NET_DEVICE_PROTOCOL extends Structure - { + public static class NET_DEVICE_PROTOCOL extends Structure { public static final int NET_PROTOCOL_PRIVATE2 = 0; //私有2代协议 - public static final int NET_PROTOCOL_PRIVATE3 = NET_PROTOCOL_PRIVATE2+1; //私有3代协议 - public static final int NET_PROTOCOL_ONVIF = NET_PROTOCOL_PRIVATE3+1; //Onvif - public static final int NET_PROTOCOL_VNC = NET_PROTOCOL_ONVIF+1; //虚拟网络计算机 - public static final int NET_PROTOCOL_TS = NET_PROTOCOL_VNC+1; //标准TS + public static final int NET_PROTOCOL_PRIVATE3 = NET_PROTOCOL_PRIVATE2 + 1; //私有3代协议 + public static final int NET_PROTOCOL_ONVIF = NET_PROTOCOL_PRIVATE3 + 1; //Onvif + public static final int NET_PROTOCOL_VNC = NET_PROTOCOL_ONVIF + 1; //虚拟网络计算机 + public static final int NET_PROTOCOL_TS = NET_PROTOCOL_VNC + 1; //标准TS public static final int NET_PROTOCOL_PRIVATE = 100;//私有协议 - public static final int NET_PROTOCOL_AEBELL = NET_PROTOCOL_PRIVATE+1; //美电贝尔 - public static final int NET_PROTOCOL_PANASONIC = NET_PROTOCOL_AEBELL+1; //松下 - public static final int NET_PROTOCOL_SONY = NET_PROTOCOL_PANASONIC+1; //索尼 - public static final int NET_PROTOCOL_DYNACOLOR = NET_PROTOCOL_SONY+1; //Dynacolor - public static final int NET_PROTOCOL_TCWS = NET_PROTOCOL_DYNACOLOR+1; //天城威视 - public static final int NET_PROTOCOL_SAMSUNG = NET_PROTOCOL_TCWS+1; //三星 - public static final int NET_PROTOCOL_YOKO = NET_PROTOCOL_SAMSUNG+1; //YOKO - public static final int NET_PROTOCOL_AXIS = NET_PROTOCOL_YOKO+1; //安讯视 - public static final int NET_PROTOCOL_SANYO = NET_PROTOCOL_AXIS+1; //三洋 - public static final int NET_PROTOCOL_BOSH = NET_PROTOCOL_SANYO+1; //Bosch - public static final int NET_PROTOCOL_PECLO = NET_PROTOCOL_BOSH+1; //Peclo - public static final int NET_PROTOCOL_PROVIDEO = NET_PROTOCOL_PECLO+1; //Provideo - public static final int NET_PROTOCOL_ACTI = NET_PROTOCOL_PROVIDEO+1; //ACTi - public static final int NET_PROTOCOL_VIVOTEK = NET_PROTOCOL_ACTI+1; //Vivotek - public static final int NET_PROTOCOL_ARECONT = NET_PROTOCOL_VIVOTEK+1; //Arecont - public static final int NET_PROTOCOL_PRIVATEEH = NET_PROTOCOL_ARECONT+1; //PrivateEH - public static final int NET_PROTOCOL_IMATEK = NET_PROTOCOL_PRIVATEEH+1; //IMatek - public static final int NET_PROTOCOL_SHANY = NET_PROTOCOL_IMATEK+1; //Shany - public static final int NET_PROTOCOL_VIDEOTREC = NET_PROTOCOL_SHANY+1; //动力盈科 - public static final int NET_PROTOCOL_URA = NET_PROTOCOL_VIDEOTREC+1; //Ura - public static final int NET_PROTOCOL_BITICINO = NET_PROTOCOL_URA+1; //Bticino - public static final int NET_PROTOCOL_ONVIF2 = NET_PROTOCOL_BITICINO+1; //Onvif协议类型,同NET_PROTOCOL_ONVIF - public static final int NET_PROTOCOL_SHEPHERD = NET_PROTOCOL_ONVIF2+1; //视霸 - public static final int NET_PROTOCOL_YAAN = NET_PROTOCOL_SHEPHERD+1; //亚安 - public static final int NET_PROTOCOL_AIRPOINT = NET_PROTOCOL_YAAN+1; //Airpop - public static final int NET_PROTOCOL_TYCO = NET_PROTOCOL_AIRPOINT+1; //TYCO - public static final int NET_PROTOCOL_XUNMEI = NET_PROTOCOL_TYCO+1; //讯美 - public static final int NET_PROTOCOL_HIKVISION = NET_PROTOCOL_XUNMEI+1; //海康 - public static final int NET_PROTOCOL_LG = NET_PROTOCOL_HIKVISION+1; //LG - public static final int NET_PROTOCOL_AOQIMAN = NET_PROTOCOL_LG+1; //奥奇曼 - public static final int NET_PROTOCOL_BAOKANG = NET_PROTOCOL_AOQIMAN+1; //宝康 - public static final int NET_PROTOCOL_WATCHNET = NET_PROTOCOL_BAOKANG+1; //Watchnet - public static final int NET_PROTOCOL_XVISION = NET_PROTOCOL_WATCHNET+1; //Xvision - public static final int NET_PROTOCOL_FUSITSU = NET_PROTOCOL_XVISION+1; //富士通 - public static final int NET_PROTOCOL_CANON = NET_PROTOCOL_FUSITSU+1; //Canon - public static final int NET_PROTOCOL_GE = NET_PROTOCOL_CANON+1; //GE - public static final int NET_PROTOCOL_Basler = NET_PROTOCOL_GE+1; //巴斯勒 - public static final int NET_PROTOCOL_Patro = NET_PROTOCOL_Basler+1; //帕特罗 - public static final int NET_PROTOCOL_CPKNC = NET_PROTOCOL_Patro+1; //CPPLUSK系列 - public static final int NET_PROTOCOL_CPRNC = NET_PROTOCOL_CPKNC+1; //CPPLUSR系列 - public static final int NET_PROTOCOL_CPUNC = NET_PROTOCOL_CPRNC+1; //CPPLUSU系列 - public static final int NET_PROTOCOL_CPPLUS = NET_PROTOCOL_CPUNC+1; //CPPLUSIPC - public static final int NET_PROTOCOL_XunmeiS = NET_PROTOCOL_CPPLUS+1; //讯美s,实际协议为Onvif - public static final int NET_PROTOCOL_GDDW = NET_PROTOCOL_XunmeiS+1; //广东电网 - public static final int NET_PROTOCOL_PSIA = NET_PROTOCOL_GDDW+1; //PSIA - public static final int NET_PROTOCOL_GB2818 = NET_PROTOCOL_PSIA+1; //GB2818 - public static final int NET_PROTOCOL_GDYX = NET_PROTOCOL_GB2818+1; //GDYX - public static final int NET_PROTOCOL_OTHER = NET_PROTOCOL_GDYX+1; //由用户自定义 - } - + public static final int NET_PROTOCOL_AEBELL = NET_PROTOCOL_PRIVATE + 1; //美电贝尔 + public static final int NET_PROTOCOL_PANASONIC = NET_PROTOCOL_AEBELL + 1; //松下 + public static final int NET_PROTOCOL_SONY = NET_PROTOCOL_PANASONIC + 1; //索尼 + public static final int NET_PROTOCOL_DYNACOLOR = NET_PROTOCOL_SONY + 1; //Dynacolor + public static final int NET_PROTOCOL_TCWS = NET_PROTOCOL_DYNACOLOR + 1; //天城威视 + public static final int NET_PROTOCOL_SAMSUNG = NET_PROTOCOL_TCWS + 1; //三星 + public static final int NET_PROTOCOL_YOKO = NET_PROTOCOL_SAMSUNG + 1; //YOKO + public static final int NET_PROTOCOL_AXIS = NET_PROTOCOL_YOKO + 1; //安讯视 + public static final int NET_PROTOCOL_SANYO = NET_PROTOCOL_AXIS + 1; //三洋 + public static final int NET_PROTOCOL_BOSH = NET_PROTOCOL_SANYO + 1; //Bosch + public static final int NET_PROTOCOL_PECLO = NET_PROTOCOL_BOSH + 1; //Peclo + public static final int NET_PROTOCOL_PROVIDEO = NET_PROTOCOL_PECLO + 1; //Provideo + public static final int NET_PROTOCOL_ACTI = NET_PROTOCOL_PROVIDEO + 1; //ACTi + public static final int NET_PROTOCOL_VIVOTEK = NET_PROTOCOL_ACTI + 1; //Vivotek + public static final int NET_PROTOCOL_ARECONT = NET_PROTOCOL_VIVOTEK + 1; //Arecont + public static final int NET_PROTOCOL_PRIVATEEH = NET_PROTOCOL_ARECONT + 1; //PrivateEH + public static final int NET_PROTOCOL_IMATEK = NET_PROTOCOL_PRIVATEEH + 1; //IMatek + public static final int NET_PROTOCOL_SHANY = NET_PROTOCOL_IMATEK + 1; //Shany + public static final int NET_PROTOCOL_VIDEOTREC = NET_PROTOCOL_SHANY + 1; //动力盈科 + public static final int NET_PROTOCOL_URA = NET_PROTOCOL_VIDEOTREC + 1; //Ura + public static final int NET_PROTOCOL_BITICINO = NET_PROTOCOL_URA + 1; //Bticino + public static final int NET_PROTOCOL_ONVIF2 = NET_PROTOCOL_BITICINO + 1; //Onvif协议类型,同NET_PROTOCOL_ONVIF + public static final int NET_PROTOCOL_SHEPHERD = NET_PROTOCOL_ONVIF2 + 1; //视霸 + public static final int NET_PROTOCOL_YAAN = NET_PROTOCOL_SHEPHERD + 1; //亚安 + public static final int NET_PROTOCOL_AIRPOINT = NET_PROTOCOL_YAAN + 1; //Airpop + public static final int NET_PROTOCOL_TYCO = NET_PROTOCOL_AIRPOINT + 1; //TYCO + public static final int NET_PROTOCOL_XUNMEI = NET_PROTOCOL_TYCO + 1; //讯美 + public static final int NET_PROTOCOL_HIKVISION = NET_PROTOCOL_XUNMEI + 1; //海康 + public static final int NET_PROTOCOL_LG = NET_PROTOCOL_HIKVISION + 1; //LG + public static final int NET_PROTOCOL_AOQIMAN = NET_PROTOCOL_LG + 1; //奥奇曼 + public static final int NET_PROTOCOL_BAOKANG = NET_PROTOCOL_AOQIMAN + 1; //宝康 + public static final int NET_PROTOCOL_WATCHNET = NET_PROTOCOL_BAOKANG + 1; //Watchnet + public static final int NET_PROTOCOL_XVISION = NET_PROTOCOL_WATCHNET + 1; //Xvision + public static final int NET_PROTOCOL_FUSITSU = NET_PROTOCOL_XVISION + 1; //富士通 + public static final int NET_PROTOCOL_CANON = NET_PROTOCOL_FUSITSU + 1; //Canon + public static final int NET_PROTOCOL_GE = NET_PROTOCOL_CANON + 1; //GE + public static final int NET_PROTOCOL_Basler = NET_PROTOCOL_GE + 1; //巴斯勒 + public static final int NET_PROTOCOL_Patro = NET_PROTOCOL_Basler + 1; //帕特罗 + public static final int NET_PROTOCOL_CPKNC = NET_PROTOCOL_Patro + 1; //CPPLUSK系列 + public static final int NET_PROTOCOL_CPRNC = NET_PROTOCOL_CPKNC + 1; //CPPLUSR系列 + public static final int NET_PROTOCOL_CPUNC = NET_PROTOCOL_CPRNC + 1; //CPPLUSU系列 + public static final int NET_PROTOCOL_CPPLUS = NET_PROTOCOL_CPUNC + 1; //CPPLUSIPC + public static final int NET_PROTOCOL_XunmeiS = NET_PROTOCOL_CPPLUS + 1; //讯美s,实际协议为Onvif + public static final int NET_PROTOCOL_GDDW = NET_PROTOCOL_XunmeiS + 1; //广东电网 + public static final int NET_PROTOCOL_PSIA = NET_PROTOCOL_GDDW + 1; //PSIA + public static final int NET_PROTOCOL_GB2818 = NET_PROTOCOL_PSIA + 1; //GB2818 + public static final int NET_PROTOCOL_GDYX = NET_PROTOCOL_GB2818 + 1; //GDYX + public static final int NET_PROTOCOL_OTHER = NET_PROTOCOL_GDYX + 1; //由用户自定义 + } + // 雨刷来回循环刷,雨刷模式配置为手动模式时有效(对应命令 CTRLTYPE_CTRL_RAINBRUSH_MOVECONTINUOUSLY) - public static class NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY extends Structure - { + public static class NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY extends Structure { public int dwSize; public int nChannel;//表示雨刷的索引 public int nInterval;//雨刷间隔 - - public NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY() - { + + public NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY() { this.dwSize = this.size(); } } // 雨刷停止刷,雨刷模式配置为手动模式时有效(对应命令 CTRLTYPE_CTRL_RAINBRUSH_STOPMOVE) - public static class NET_CTRL_RAINBRUSH_STOPMOVE extends Structure - { + public static class NET_CTRL_RAINBRUSH_STOPMOVE extends Structure { public int dwSize; public int nChannel;//表示雨刷的索引 - - public NET_CTRL_RAINBRUSH_STOPMOVE() - { + + public NET_CTRL_RAINBRUSH_STOPMOVE() { this.dwSize = this.size(); } } // 雨刷来回刷一次,雨刷模式配置为手动模式时有效(对应命令 CTRLTYPE_CTRL_RAINBRUSH_MOVEONCE) - public static class NET_CTRL_RAINBRUSH_MOVEONCE extends Structure - { + public static class NET_CTRL_RAINBRUSH_MOVEONCE extends Structure { public int dwSize; public int nChannel;//表示雨刷的索引 - - public NET_CTRL_RAINBRUSH_MOVEONCE() - { + + public NET_CTRL_RAINBRUSH_MOVEONCE() { this.dwSize = this.size(); } } - + // DSP能力描述,扩展类型,对应CLIENT_QueryDevState接口 - public static class NET_DEV_DSP_ENCODECAP extends Structure - { + public static class NET_DEV_DSP_ENCODECAP extends Structure { public int dwVideoStandardMask; //视频制式掩码,按位表示设备能够支持的视频制式 - public int dwImageSizeMask; //分辨率掩码,按位表示设备能够支持的分辨率 - public int dwEncodeModeMask; //编码模式掩码,按位表示设备能够支持的编码模式 - public int dwStreamCap; //按位表示设备支持的多媒体功能, - // 第一位表示支持主码流 - // 第二位表示支持辅码流1 - // 第三位表示支持辅码流2 - // 第五位表示支持jpg抓图 + public int dwImageSizeMask; //分辨率掩码,按位表示设备能够支持的分辨率 + public int dwEncodeModeMask; //编码模式掩码,按位表示设备能够支持的编码模式 + public int dwStreamCap; //按位表示设备支持的多媒体功能, + // 第一位表示支持主码流 + // 第二位表示支持辅码流1 + // 第三位表示支持辅码流2 + // 第五位表示支持jpg抓图 public int[] dwImageSizeMask_Assi = new int[32];//表示主码流为各分辨率时,支持的辅码流分辨率掩码。 - public int dwMaxEncodePower; //DSP支持的最高编码能力 + public int dwMaxEncodePower; //DSP支持的最高编码能力 public short wMaxSupportChannel;//每块DSP支持最多输入视频通道数 public short wChannelMaxSetSync;//DSP每通道的最大编码设置是否同步;0:不同步,1:同步 public byte[] bMaxFrameOfImageSize = new byte[32];//不同分辨率下的最大采集帧率,与dwVideoStandardMask按位对应 - public byte bEncodeCap; //标志,配置时要求符合下面条件,否则配置不能生效; - // 0:主码流的编码能力+辅码流的编码能力 <= 设备的编码能力, - // 1:主码流的编码能力+辅码流的编码能力 <= 设备的编码能力, - // 辅码流的编码能力 <= 主码流的编码能力, - // 辅码流的分辨率 <= 主码流的分辨率, - // 主码流和辅码流的帧率 <= 前端视频采集帧率 - // 2:N5的计算方法 - // 辅码流的分辨率 <= 主码流的分辨率 - // 查询支持的分辨率和相应最大帧率 + public byte bEncodeCap; //标志,配置时要求符合下面条件,否则配置不能生效; + // 0:主码流的编码能力+辅码流的编码能力 <= 设备的编码能力, + // 1:主码流的编码能力+辅码流的编码能力 <= 设备的编码能力, + // 辅码流的编码能力 <= 主码流的编码能力, + // 辅码流的分辨率 <= 主码流的分辨率, + // 主码流和辅码流的帧率 <= 前端视频采集帧率 + // 2:N5的计算方法 + // 辅码流的分辨率 <= 主码流的分辨率 + // 查询支持的分辨率和相应最大帧率 public byte[] reserved = new byte[95]; } - + //云台控制坐标单元 - public static class PTZ_SPACE_UNIT extends Structure - { + public static class PTZ_SPACE_UNIT extends Structure { public int nPositionX;//云台水平运动位置,有效范围:0,3600] public int nPositionY;//云台垂直运动位置,有效范围:-1800,1800] public int nZoom;//云台光圈变动位置,有效范围:0,128] @@ -7027,8 +6745,7 @@ public interface NetSDKLib extends Library { } //云台控制速度单元 - public static class PTZ_SPEED_UNIT extends Structure - { + public static class PTZ_SPEED_UNIT extends Structure { public float fPositionX;//云台水平方向速率,归一化到-1~1 public float fPositionY;//云台垂直方向速率,归一化到-1~1 public float fZoom;//云台光圈放大倍率,归一化到0~1 @@ -7036,1228 +6753,1197 @@ public interface NetSDKLib extends Library { } //持续控制云台对应结构 - public static class PTZ_CONTROL_CONTINUOUSLY extends Structure - { - public PTZ_SPEED_UNIT stuSpeed; //云台运行速度 - public int nTimeOut; //连续移动超时时间,单位为秒 - public byte[] szReserve = new byte[64]; //预留64字节 + public static class PTZ_CONTROL_CONTINUOUSLY extends Structure { + public PTZ_SPEED_UNIT stuSpeed; //云台运行速度 + public int nTimeOut; //连续移动超时时间,单位为秒 + public byte[] szReserve = new byte[64]; //预留64字节 } //绝对控制云台对应结构 - public static class PTZ_CONTROL_ABSOLUTELY extends Structure - { - public PTZ_SPACE_UNIT stuPosition; //云台绝对移动位置 - public PTZ_SPEED_UNIT stuSpeed; //云台运行速度 - public byte[] szReserve = new byte[64]; //预留64字节 + public static class PTZ_CONTROL_ABSOLUTELY extends Structure { + public PTZ_SPACE_UNIT stuPosition; //云台绝对移动位置 + public PTZ_SPEED_UNIT stuSpeed; //云台运行速度 + public byte[] szReserve = new byte[64]; //预留64字节 } //带速度转动到预置位点云台控制对应结构 - public static class PTZ_CONTROL_GOTOPRESET extends Structure - { - public int nPresetIndex; //预置位索引 - public PTZ_SPEED_UNIT stuSpeed; //云台运行速度 - public byte[] szReserve = new byte[64]; //预留64字节 + public static class PTZ_CONTROL_GOTOPRESET extends Structure { + public int nPresetIndex; //预置位索引 + public PTZ_SPEED_UNIT stuSpeed; //云台运行速度 + public byte[] szReserve = new byte[64]; //预留64字节 } //设置云台可视域信息 - public static class PTZ_VIEW_RANGE_INFO extends Structure - { - public int nStructSize; - public int nAzimuthH; //水平方位角度,0~3600,单位:度 - - public PTZ_VIEW_RANGE_INFO() - { + public static class PTZ_VIEW_RANGE_INFO extends Structure { + public int nStructSize; + public int nAzimuthH; //水平方位角度,0~3600,单位:度 + + public PTZ_VIEW_RANGE_INFO() { this.nStructSize = this.size(); } } //云台绝对聚焦对应结构 - public static class PTZ_FOCUS_ABSOLUTELY extends Structure - { - public int dwValue; //云台聚焦位置,取值范围(0~8191) - public int dwSpeed; //云台聚焦速度,取值范围(0~7) - public byte[] szReserve = new byte[64]; //预留64字节 + public static class PTZ_FOCUS_ABSOLUTELY extends Structure { + public int dwValue; //云台聚焦位置,取值范围(0~8191) + public int dwSpeed; //云台聚焦速度,取值范围(0~7) + public byte[] szReserve = new byte[64]; //预留64字节 } // 云台控制-扇扫对应结构 - public static class PTZ_CONTROL_SECTORSCAN extends Structure - { - public int nBeginAngle; //起始角度,范围:-180,180] - public int nEndAngle; //结束角度,范围:-180,180] - public int nSpeed; //速度,范围:0,255] - public byte[] szReserve = new byte[64]; //预留64字节 + public static class PTZ_CONTROL_SECTORSCAN extends Structure { + public int nBeginAngle; //起始角度,范围:-180,180] + public int nEndAngle; //结束角度,范围:-180,180] + public int nSpeed; //速度,范围:0,255] + public byte[] szReserve = new byte[64]; //预留64字节 } // 控制鱼眼电子云台信息 - public static class PTZ_CONTROL_SET_FISHEYE_EPTZ extends Structure - { - public int dwSize; //结构体大小 - public int dwWindowID; //进行EPtz控制的窗口编号 - public int dwCommand; //电子云台命令 - public int dwParam1; //命令对应参数1 - public int dwParam2; //命令对应参数2 - public int dwParam3; //命令对应参数3 - public int dwParam4; //命令对应参数4 - } - + public static class PTZ_CONTROL_SET_FISHEYE_EPTZ extends Structure { + public int dwSize; //结构体大小 + public int dwWindowID; //进行EPtz控制的窗口编号 + public int dwCommand; //电子云台命令 + public int dwParam1; //命令对应参数1 + public int dwParam2; //命令对应参数2 + public int dwParam3; //命令对应参数3 + public int dwParam4; //命令对应参数4 + } + // 变倍设置基本信息单元 - public static class CFG_VIDEO_IN_ZOOM_UNIT extends Structure - { + public static class CFG_VIDEO_IN_ZOOM_UNIT extends Structure { public int nSpeed;//变倍速率(0~7) public int bDigitalZoom;//是否数字变倍, 类型为BOOL, 取值0或者1 public int nZoomLimit;//当前速率下最大变倍上限(0~13)。 } // 单通道变倍设置基本信息 - public static class CFG_VIDEO_IN_ZOOM extends Structure - { + public static class CFG_VIDEO_IN_ZOOM extends Structure { public int nChannelIndex;//通道号 public int nVideoInZoomRealNum;//配置使用个数 - public CFG_VIDEO_IN_ZOOM_UNIT[] stVideoInZoomUnit = (CFG_VIDEO_IN_ZOOM_UNIT[])new CFG_VIDEO_IN_ZOOM_UNIT().toArray(MAX_VIDEO_IN_ZOOM);//通道变速配置单元信息 + public CFG_VIDEO_IN_ZOOM_UNIT[] stVideoInZoomUnit = (CFG_VIDEO_IN_ZOOM_UNIT[]) new CFG_VIDEO_IN_ZOOM_UNIT().toArray(MAX_VIDEO_IN_ZOOM);//通道变速配置单元信息 } // 设备状态 - public static class CFG_TRAFFIC_DEVICE_STATUS extends Structure - { - public byte[] szType = new byte[MAX_PATH]; // 设备类型 支持:"Radar","Detector","SigDetector","StroboscopicLamp"," FlashLamp" - public byte[] szSerialNo = new byte[MAX_PATH]; // 设备编号 - public byte[] szVendor = new byte[MAX_PATH]; // 生产厂商 - public int nWokingState; // 工作状态 0-故障,1-正常工作 - public byte byLightState; // RS485灯的亮灭状态,Type 为"DhrsStroboscopicLamp"或者"DhrsSteadyLamp"时有效 - // 0-未知, 1-灯亮, 2-灯灭 - public byte[] byReserved = new byte[3]; // 预留字节 - } - + public static class CFG_TRAFFIC_DEVICE_STATUS extends Structure { + public byte[] szType = new byte[MAX_PATH]; // 设备类型 支持:"Radar","Detector","SigDetector","StroboscopicLamp"," FlashLamp" + public byte[] szSerialNo = new byte[MAX_PATH]; // 设备编号 + public byte[] szVendor = new byte[MAX_PATH]; // 生产厂商 + public int nWokingState; // 工作状态 0-故障,1-正常工作 + public byte byLightState; // RS485灯的亮灭状态,Type 为"DhrsStroboscopicLamp"或者"DhrsSteadyLamp"时有效 + // 0-未知, 1-灯亮, 2-灯灭 + public byte[] byReserved = new byte[3]; // 预留字节 + } + // 获取设备工作状态是否正常 (对应命令 CFG_CAP_CMD_DEVICE_STATE ) - public static class CFG_CAP_TRAFFIC_DEVICE_STATUS extends Structure - { - public int nStatus; // stuStatus 实际个数 - public CFG_TRAFFIC_DEVICE_STATUS[] stuStatus = (CFG_TRAFFIC_DEVICE_STATUS[]) new CFG_TRAFFIC_DEVICE_STATUS().toArray(MAX_STATUS_NUM); + public static class CFG_CAP_TRAFFIC_DEVICE_STATUS extends Structure { + public int nStatus; // stuStatus 实际个数 + public CFG_TRAFFIC_DEVICE_STATUS[] stuStatus = (CFG_TRAFFIC_DEVICE_STATUS[]) new CFG_TRAFFIC_DEVICE_STATUS().toArray(MAX_STATUS_NUM); } - + // 视频输入通道 - public static class CFG_RemoteDeviceVideoInput extends Structure - { - public int bEnable; - public byte[] szName = new byte[MAX_DEVICE_NAME_LEN]; - public byte[] szControlID = new byte[MAX_DEV_ID_LEN_EX]; - public byte[] szMainUrl = new byte[MAX_PATH]; // 主码流url地址 - public byte[] szExtraUrl = new byte[MAX_PATH]; // 辅码流url地址 - public int nServiceType; // 服务类型, 0-TCP, 1-UDP, 2-MCAST, -1-AUTO - } - + public static class CFG_RemoteDeviceVideoInput extends Structure { + public int bEnable; + public byte[] szName = new byte[MAX_DEVICE_NAME_LEN]; + public byte[] szControlID = new byte[MAX_DEV_ID_LEN_EX]; + public byte[] szMainUrl = new byte[MAX_PATH]; // 主码流url地址 + public byte[] szExtraUrl = new byte[MAX_PATH]; // 辅码流url地址 + public int nServiceType; // 服务类型, 0-TCP, 1-UDP, 2-MCAST, -1-AUTO + } + // 远程设备 - public static class AV_CFG_RemoteDevice extends Structure - { - public int nStructSize; - public int bEnable; // 使能 - public byte[] szID = new byte[AV_CFG_Device_ID_Len]; // 设备ID - public byte[] szIP = new byte[AV_CFG_IP_Address_Len]; // 设备IP - public int nPort; // 端口 - public byte[] szProtocol = new byte[AV_CFG_Protocol_Len]; // 协议类型 - public byte[] szUser = new byte[AV_CFG_User_Name_Len]; // 用户名 - public byte[] szPassword = new byte[AV_CFG_Password_Len]; // 密码 - public byte[] szSerial = new byte[AV_CFG_Serial_Len]; // 设备序列号 - public byte[] szDevClass = new byte[AV_CFG_Device_Class_Len]; // 设备类型 - public byte[] szDevType = new byte[AV_CFG_Device_Type_Len]; // 设备型号 - public byte[] szName = new byte[AV_CFG_Device_Name_Len]; // 机器名称 - public byte[] szAddress = new byte[AV_CFG_Address_Len]; // 机器部署地点 - public byte[] szGroup = new byte[AV_CFG_Group_Name_Len]; // 机器分组 - public int nDefinition; // 清晰度, 0-标清, 1-高清 - public int nVideoChannel; // 视频输入通道数 - public int nAudioChannel; // 音频输入通道数 - public int nRtspPort; // Rtsp端口号 - public byte[] szVendor = new byte[MAX_PATH]; // 设备接入类型 - public Pointer pVideoInput; // 视频输入通道,用户申请nMaxVideoInputs个CFG_RemoteDeviceVideoInput空间 - public int nMaxVideoInputs; - public int nRetVideoInputs; - public int nHttpPort; // http端口号 - - /* 以下3项为国际接入方式相关 */ - public int bGB28181; // 是否有国际接入方式 - public int nDevLocalPort; // 设备本地端口 - public byte[] szDeviceNo = new byte[AV_CFG_DeviceNo_Len]; // 设备编号 - - public AV_CFG_RemoteDevice() { - this.nStructSize = this.size(); - } - } - + public static class AV_CFG_RemoteDevice extends Structure { + public int nStructSize; + public int bEnable; // 使能 + public byte[] szID = new byte[AV_CFG_Device_ID_Len]; // 设备ID + public byte[] szIP = new byte[AV_CFG_IP_Address_Len]; // 设备IP + public int nPort; // 端口 + public byte[] szProtocol = new byte[AV_CFG_Protocol_Len]; // 协议类型 + public byte[] szUser = new byte[AV_CFG_User_Name_Len]; // 用户名 + public byte[] szPassword = new byte[AV_CFG_Password_Len]; // 密码 + public byte[] szSerial = new byte[AV_CFG_Serial_Len]; // 设备序列号 + public byte[] szDevClass = new byte[AV_CFG_Device_Class_Len]; // 设备类型 + public byte[] szDevType = new byte[AV_CFG_Device_Type_Len]; // 设备型号 + public byte[] szName = new byte[AV_CFG_Device_Name_Len]; // 机器名称 + public byte[] szAddress = new byte[AV_CFG_Address_Len]; // 机器部署地点 + public byte[] szGroup = new byte[AV_CFG_Group_Name_Len]; // 机器分组 + public int nDefinition; // 清晰度, 0-标清, 1-高清 + public int nVideoChannel; // 视频输入通道数 + public int nAudioChannel; // 音频输入通道数 + public int nRtspPort; // Rtsp端口号 + public byte[] szVendor = new byte[MAX_PATH]; // 设备接入类型 + public Pointer pVideoInput; // 视频输入通道,用户申请nMaxVideoInputs个CFG_RemoteDeviceVideoInput空间 + public int nMaxVideoInputs; + public int nRetVideoInputs; + public int nHttpPort; // http端口号 + + /* 以下3项为国际接入方式相关 */ + public int bGB28181; // 是否有国际接入方式 + public int nDevLocalPort; // 设备本地端口 + public byte[] szDeviceNo = new byte[AV_CFG_DeviceNo_Len]; // 设备编号 + + public AV_CFG_RemoteDevice() { + this.nStructSize = this.size(); + } + } + // 录像模式 - public static class AV_CFG_RecordMode extends Structure - { - public int nStructSize; - public int nMode; // 录像模式, 0-自动录像,1-手动录像,2-关闭录像 - public int nModeExtra1; // 辅码流录像模式, 0-自动录像,1-手动录像,2-关闭录像 - public int nModeExtra2; // 辅码流2录像模式, 0-自动录像,1-手动录像,2-关闭录像 - + public static class AV_CFG_RecordMode extends Structure { + public int nStructSize; + public int nMode; // 录像模式, 0-自动录像,1-手动录像,2-关闭录像 + public int nModeExtra1; // 辅码流录像模式, 0-自动录像,1-手动录像,2-关闭录像 + public int nModeExtra2; // 辅码流2录像模式, 0-自动录像,1-手动录像,2-关闭录像 + public AV_CFG_RecordMode() { - this.nStructSize = this.size(); + this.nStructSize = this.size(); } } - + // 视频分析资源类型 public static class CFG_VIDEO_SOURCE_TYPE extends Structure { - public static final int CFG_VIDEO_SOURCE_REALSTREAM = 0; // 实时流 - public static final int CFG_VIDEO_SOURCE_FILESTREAM = 1; // 文件流 + public static final int CFG_VIDEO_SOURCE_REALSTREAM = 0; // 实时流 + public static final int CFG_VIDEO_SOURCE_FILESTREAM = 1; // 文件流 } - + // 分析源文件类型 public static class CFG_SOURCE_FILE_TYPE extends Structure { - public static final int CFG_SOURCE_FILE_UNKNOWN = 0; // 未知类型 - public static final int CFG_SOURCE_FILE_RECORD = 1; // 录像文件 - public static final int CFG_SOURCE_FILE_PICTURE = 2; // 图片文件 + public static final int CFG_SOURCE_FILE_UNKNOWN = 0; // 未知类型 + public static final int CFG_SOURCE_FILE_RECORD = 1; // 录像文件 + public static final int CFG_SOURCE_FILE_PICTURE = 2; // 图片文件 } - + // 视频分析源文件信息 public static class CFG_SOURCE_FILE_INFO extends Structure { - public byte[] szFilePath = new byte[MAX_PATH];// 文件路径 - public int emFileType; // 文件类型,详见 CFG_SOURCE_FILE_TYPE + public byte[] szFilePath = new byte[MAX_PATH];// 文件路径 + public int emFileType; // 文件类型,详见 CFG_SOURCE_FILE_TYPE } - + // 每个视频输入通道对应的视频分析资源配置信息 public static class CFG_ANALYSESOURCE_INFO extends Structure { - public byte bEnable; // 视频分析使能 1-使能, 0-禁用 - public int nChannelID; // 智能分析的前端视频通道号 - public int nStreamType; // 智能分析的前端视频码流类型,0:抓图码流; 1:主码流; 2:子码流1; 3:子码流2; 4:子码流3; 5:物体流 - public byte[] szRemoteDevice = new byte[MAX_NAME_LEN];// 设备名 - public byte abDeviceInfo; // 设备信息是否有效 ; 1-有效,0-无效 - public AV_CFG_RemoteDevice stuDeviceInfo; // 设备信息 - public int emSourceType; // 视频分析源类型,详见 CFG_VIDEO_SOURCE_TYPE - public CFG_SOURCE_FILE_INFO stuSourceFile; // 当视频分析源类型为 CFG_VIDEO_SOURCE_FILESTREAM 时,有效 - } - + public byte bEnable; // 视频分析使能 1-使能, 0-禁用 + public int nChannelID; // 智能分析的前端视频通道号 + public int nStreamType; // 智能分析的前端视频码流类型,0:抓图码流; 1:主码流; 2:子码流1; 3:子码流2; 4:子码流3; 5:物体流 + public byte[] szRemoteDevice = new byte[MAX_NAME_LEN];// 设备名 + public byte abDeviceInfo; // 设备信息是否有效 ; 1-有效,0-无效 + public AV_CFG_RemoteDevice stuDeviceInfo; // 设备信息 + public int emSourceType; // 视频分析源类型,详见 CFG_VIDEO_SOURCE_TYPE + public CFG_SOURCE_FILE_INFO stuSourceFile; // 当视频分析源类型为 CFG_VIDEO_SOURCE_FILESTREAM 时,有效 + } + public static class CFG_OVERSPEED_INFO extends Structure { - public int[] nSpeedingPercentage = new int[2]; // 超速百分比区间要求区间不能重叠。有效值为0,正数,-1,-1表示无穷大值 + public int[] nSpeedingPercentage = new int[2]; // 超速百分比区间要求区间不能重叠。有效值为0,正数,-1,-1表示无穷大值 // 如果是欠速:要求区间不能重叠。有效值为0,正数,-1,-1表示无穷大值,欠速百分比的计算方式:限低速-实际车速/限低速 - public byte[] szCode = new byte[MAX_VIOLATIONCODE]; // 违章代码 - public byte[] szDescription = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述 + public byte[] szCode = new byte[MAX_VIOLATIONCODE]; // 违章代码 + public byte[] szDescription = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述 } - + // 违章代码配置表 public static class VIOLATIONCODE_INFO extends Structure { - public byte[] szRetrograde = new byte[MAX_VIOLATIONCODE]; // 逆行 - public byte[] szRetrogradeDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - public byte[] szRetrogradeShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 显示名称 + public byte[] szRetrograde = new byte[MAX_VIOLATIONCODE]; // 逆行 + public byte[] szRetrogradeDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + public byte[] szRetrogradeShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 显示名称 + + public byte[] szRetrogradeHighway = new byte[MAX_VIOLATIONCODE]; // 逆行-高速公路 + public byte[] szRetrogradeHighwayDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + + public byte[] szRunRedLight = new byte[MAX_VIOLATIONCODE]; // 闯红灯 + public byte[] szRunRedLightDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + + public byte[] szCrossLane = new byte[MAX_VIOLATIONCODE]; // 违章变道 + public byte[] szCrossLaneDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + public byte[] szCrossLaneShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章变道显示名称 + + public byte[] szTurnLeft = new byte[MAX_VIOLATIONCODE]; // 违章左转 + public byte[] szTurnLeftDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + + public byte[] szTurnRight = new byte[MAX_VIOLATIONCODE]; // 违章右转 + public byte[] szTurnRightDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + + public byte[] szU_Turn = new byte[MAX_VIOLATIONCODE]; // 违章掉头 + public byte[] szU_TurnDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + public byte[] szU_TurnShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 显示信息 + + public byte[] szJam = new byte[MAX_VIOLATIONCODE]; // 交通拥堵 + public byte[] szJamDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + + public byte[] szParking = new byte[MAX_VIOLATIONCODE]; // 违章停车 + public byte[] szParkingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + public byte[] szParkingShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章停车显示名称 + + // 超速 和 超速比例 只需且必须有一个配置 + public byte[] szOverSpeed = new byte[MAX_VIOLATIONCODE]; // 超速 + public byte[] szOverSpeedDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + public CFG_OVERSPEED_INFO[] stOverSpeedConfig = (CFG_OVERSPEED_INFO[]) new CFG_OVERSPEED_INFO().toArray(5); // 超速比例代码 + + // 超速(高速公路) 和 超速比例(高速公路) 只需且必须有一个配置 + public byte[] szOverSpeedHighway = new byte[MAX_VIOLATIONCODE]; // 超速-高速公路 + public byte[] szOverSpeedHighwayDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 超速-违章描述信息 + public CFG_OVERSPEED_INFO[] stOverSpeedHighwayConfig = (CFG_OVERSPEED_INFO[]) new CFG_OVERSPEED_INFO().toArray(5); // 超速比例代码 + + // 欠速 和 欠速比例 只需且必须有一个配置 + public byte[] szUnderSpeed = new byte[MAX_VIOLATIONCODE]; // 欠速 + public byte[] szUnderSpeedDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + public CFG_OVERSPEED_INFO[] stUnderSpeedConfig = (CFG_OVERSPEED_INFO[]) new CFG_OVERSPEED_INFO().toArray(5); // 欠速配置信息是一个数组,不同的欠速比违章代码不同,为空表示违章代码不区分超速比 + + public byte[] szOverLine = new byte[MAX_VIOLATIONCODE]; // 压线 + public byte[] szOverLineDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + public byte[] szOverLineShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 压线显示名称 + + public byte[] szOverYellowLine = new byte[MAX_VIOLATIONCODE]; // 压黄线 + public byte[] szOverYellowLineDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + + public byte[] szYellowInRoute = new byte[MAX_VIOLATIONCODE]; // 黄牌占道 + public byte[] szYellowInRouteDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 黄牌占道违章描述信息 + + public byte[] szWrongRoute = new byte[MAX_VIOLATIONCODE]; // 不按车道行驶 + public byte[] szWrongRouteDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 不按车道行驶违章描述信息 + + public byte[] szDrivingOnShoulder = new byte[MAX_VIOLATIONCODE]; // 路肩行驶 + public byte[] szDrivingOnShoulderDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 路肩行驶违章描述信息 + + public byte[] szPassing = new byte[MAX_VIOLATIONCODE]; // 正常行驶 + public byte[] szPassingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 正常行驶违章描述信息 + + public byte[] szNoPassing = new byte[MAX_VIOLATIONCODE]; // 禁止行驶 + public byte[] szNoPassingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 禁止行驶违章描述信息 + + public byte[] szFakePlate = new byte[MAX_VIOLATIONCODE]; // 套牌 + public byte[] szFakePlateDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 套牌违章描述信息 + + public byte[] szParkingSpaceParking = new byte[MAX_VIOLATIONCODE]; // 车位有车 + public byte[] szParkingSpaceParkingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 车位有车违章描述信息、 + + public byte[] szParkingSpaceNoParking = new byte[MAX_VIOLATIONCODE]; // 车位无车 + public byte[] szParkingSpaceNoParkingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 车位无车违章描述信息 + + public byte[] szWithoutSafeBelt = new byte[MAX_VIOLATIONCODE]; // 不系安全带 + public byte[] szWithoutSafeBeltShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 不系安全带显示名称 + public byte[] szWithoutSafeBeltDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 不系安全带违章描述信息 - public byte[] szRetrogradeHighway = new byte[MAX_VIOLATIONCODE]; // 逆行-高速公路 - public byte[] szRetrogradeHighwayDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 + public byte[] szDriverSmoking = new byte[MAX_VIOLATIONCODE]; // 驾驶员抽烟 + public byte[] szDriverSmokingShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 驾驶员抽烟显示名称 + public byte[] szDriverSmokingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 驾驶员抽烟带违章描述信息 + + public byte[] szDriverCalling = new byte[MAX_VIOLATIONCODE]; // 驾驶员打电话 + public byte[] szDriverCallingShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 驾驶员打电话显示名称 + public byte[] szDriverCallingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 驾驶员打电话违章描述信息 + + public byte[] szBacking = new byte[MAX_VIOLATIONCODE]; // 违章倒车 + public byte[] szBackingShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章倒车显示名称 + public byte[] szBackingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章倒车描述信息 + + public byte[] szVehicleInBusRoute = new byte[MAX_VIOLATIONCODE]; // 违章占道 + public byte[] szVehicleInBusRouteShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章占道显示名称 + public byte[] szVehicleInBusRouteDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章占道描述信息 + + public byte[] szPedestrianRunRedLight = new byte[MAX_VIOLATIONCODE]; // 行人闯红灯 + public byte[] szPedestrianRunRedLightShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT];// 行人闯红灯显示名称 + public byte[] szPedestrianRunRedLightDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 行人闯红灯描述信息 + + public byte[] szPassNotInOrder = new byte[MAX_VIOLATIONCODE]; // 未按规定依次通行 + public byte[] szPassNotInOrderShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 未按规定依次通行显示名称 + public byte[] szPassNotInOrderDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 未按规定依次通行描述信息 + + public byte[] szTrafficBan = new byte[MAX_VIOLATIONCODE]; // 机动车违法禁令标识 + public byte[] szTrafficBanShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 机动车违法禁令标识显示名称 + public byte[] szTrafficBanDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 描述信息 + + public byte[] szParkingB = new byte[MAX_VIOLATIONCODE]; // B类违章停车 + public byte[] szParkingBDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // B类违章描述信息 + public byte[] szParkingBShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // B类违章停车显示名称 + + public byte[] szParkingC = new byte[MAX_VIOLATIONCODE]; // C类违章停车 + public byte[] szParkingCDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // C类违章描述信息 + public byte[] szParkingCShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // C类违章停车显示名称 + + public byte[] szParkingD = new byte[MAX_VIOLATIONCODE]; // D类违章停车 + public byte[] szParkingDDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // D类违章描述信息 + public byte[] szParkingDShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // D类违章停车显示名称 + } - public byte[] szRunRedLight = new byte[MAX_VIOLATIONCODE]; // 闯红灯 - public byte[] szRunRedLightDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - - public byte[] szCrossLane = new byte[MAX_VIOLATIONCODE]; // 违章变道 - public byte[] szCrossLaneDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - public byte[] szCrossLaneShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章变道显示名称 - - public byte[] szTurnLeft = new byte[MAX_VIOLATIONCODE]; // 违章左转 - public byte[] szTurnLeftDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - - public byte[] szTurnRight = new byte[MAX_VIOLATIONCODE]; // 违章右转 - public byte[] szTurnRightDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - - public byte[] szU_Turn = new byte[MAX_VIOLATIONCODE]; // 违章掉头 - public byte[] szU_TurnDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - public byte[] szU_TurnShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 显示信息 - - public byte[] szJam = new byte[MAX_VIOLATIONCODE]; // 交通拥堵 - public byte[] szJamDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - - public byte[] szParking = new byte[MAX_VIOLATIONCODE]; // 违章停车 - public byte[] szParkingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - public byte[] szParkingShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章停车显示名称 - - // 超速 和 超速比例 只需且必须有一个配置 - public byte[] szOverSpeed = new byte[MAX_VIOLATIONCODE]; // 超速 - public byte[] szOverSpeedDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - public CFG_OVERSPEED_INFO[] stOverSpeedConfig = (CFG_OVERSPEED_INFO[])new CFG_OVERSPEED_INFO().toArray(5); // 超速比例代码 - - // 超速(高速公路) 和 超速比例(高速公路) 只需且必须有一个配置 - public byte[] szOverSpeedHighway = new byte[MAX_VIOLATIONCODE]; // 超速-高速公路 - public byte[] szOverSpeedHighwayDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 超速-违章描述信息 - public CFG_OVERSPEED_INFO[] stOverSpeedHighwayConfig = (CFG_OVERSPEED_INFO[])new CFG_OVERSPEED_INFO().toArray(5); // 超速比例代码 - - // 欠速 和 欠速比例 只需且必须有一个配置 - public byte[] szUnderSpeed = new byte[MAX_VIOLATIONCODE]; // 欠速 - public byte[] szUnderSpeedDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - public CFG_OVERSPEED_INFO[] stUnderSpeedConfig = (CFG_OVERSPEED_INFO[]) new CFG_OVERSPEED_INFO().toArray(5); // 欠速配置信息是一个数组,不同的欠速比违章代码不同,为空表示违章代码不区分超速比 - - public byte[] szOverLine = new byte[MAX_VIOLATIONCODE]; // 压线 - public byte[] szOverLineDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - public byte[] szOverLineShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 压线显示名称 - - public byte[] szOverYellowLine = new byte[MAX_VIOLATIONCODE]; // 压黄线 - public byte[] szOverYellowLineDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章描述信息 - - public byte[] szYellowInRoute = new byte[MAX_VIOLATIONCODE]; // 黄牌占道 - public byte[] szYellowInRouteDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 黄牌占道违章描述信息 - - public byte[] szWrongRoute = new byte[MAX_VIOLATIONCODE]; // 不按车道行驶 - public byte[] szWrongRouteDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 不按车道行驶违章描述信息 - - public byte[] szDrivingOnShoulder = new byte[MAX_VIOLATIONCODE]; // 路肩行驶 - public byte[] szDrivingOnShoulderDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 路肩行驶违章描述信息 - - public byte[] szPassing = new byte[MAX_VIOLATIONCODE]; // 正常行驶 - public byte[] szPassingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 正常行驶违章描述信息 - - public byte[] szNoPassing = new byte[MAX_VIOLATIONCODE]; // 禁止行驶 - public byte[] szNoPassingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 禁止行驶违章描述信息 - - public byte[] szFakePlate = new byte[MAX_VIOLATIONCODE]; // 套牌 - public byte[] szFakePlateDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 套牌违章描述信息 - - public byte[] szParkingSpaceParking = new byte[MAX_VIOLATIONCODE]; // 车位有车 - public byte[] szParkingSpaceParkingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 车位有车违章描述信息、 - - public byte[] szParkingSpaceNoParking = new byte[MAX_VIOLATIONCODE]; // 车位无车 - public byte[] szParkingSpaceNoParkingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 车位无车违章描述信息 - - public byte[] szWithoutSafeBelt = new byte[MAX_VIOLATIONCODE]; // 不系安全带 - public byte[] szWithoutSafeBeltShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 不系安全带显示名称 - public byte[] szWithoutSafeBeltDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 不系安全带违章描述信息 - - public byte[] szDriverSmoking = new byte[MAX_VIOLATIONCODE]; // 驾驶员抽烟 - public byte[] szDriverSmokingShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 驾驶员抽烟显示名称 - public byte[] szDriverSmokingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 驾驶员抽烟带违章描述信息 - - public byte[] szDriverCalling = new byte[MAX_VIOLATIONCODE]; // 驾驶员打电话 - public byte[] szDriverCallingShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 驾驶员打电话显示名称 - public byte[] szDriverCallingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 驾驶员打电话违章描述信息 - - public byte[] szBacking = new byte[MAX_VIOLATIONCODE]; // 违章倒车 - public byte[] szBackingShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章倒车显示名称 - public byte[] szBackingDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章倒车描述信息 - - public byte[] szVehicleInBusRoute = new byte[MAX_VIOLATIONCODE]; // 违章占道 - public byte[] szVehicleInBusRouteShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章占道显示名称 - public byte[] szVehicleInBusRouteDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 违章占道描述信息 - - public byte[] szPedestrianRunRedLight = new byte[MAX_VIOLATIONCODE]; // 行人闯红灯 - public byte[] szPedestrianRunRedLightShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT];// 行人闯红灯显示名称 - public byte[] szPedestrianRunRedLightDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 行人闯红灯描述信息 - - public byte[] szPassNotInOrder = new byte[MAX_VIOLATIONCODE]; // 未按规定依次通行 - public byte[] szPassNotInOrderShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 未按规定依次通行显示名称 - public byte[] szPassNotInOrderDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 未按规定依次通行描述信息 - - public byte[] szTrafficBan = new byte[MAX_VIOLATIONCODE]; // 机动车违法禁令标识 - public byte[] szTrafficBanShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 机动车违法禁令标识显示名称 - public byte[] szTrafficBanDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // 描述信息 - - public byte[] szParkingB = new byte[MAX_VIOLATIONCODE]; // B类违章停车 - public byte[] szParkingBDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // B类违章描述信息 - public byte[] szParkingBShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // B类违章停车显示名称 - - public byte[] szParkingC = new byte[MAX_VIOLATIONCODE]; // C类违章停车 - public byte[] szParkingCDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // C类违章描述信息 - public byte[] szParkingCShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // C类违章停车显示名称 - - public byte[] szParkingD = new byte[MAX_VIOLATIONCODE]; // D类违章停车 - public byte[] szParkingDDesc = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // D类违章描述信息 - public byte[] szParkingDShowName = new byte[MAX_VIOLATIONCODE_DESCRIPT]; // D类违章停车显示名称 - } - // 违章抓拍时间配置表 public static class TIME_SCHEDULE_INFO extends Structure { - public int bEnable; // 是否启用时间表 - public TIME_SECTION_WEEK_DAY_6[] stuTimeScheduleWeekDay = - (TIME_SECTION_WEEK_DAY_6[])new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM); // 时间表 + public int bEnable; // 是否启用时间表 + public TIME_SECTION_WEEK_DAY_6[] stuTimeScheduleWeekDay = + (TIME_SECTION_WEEK_DAY_6[]) new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM); // 时间表 } - + // 违章抓拍自定义时间配置 - public static class VIOLATION_TIME_SCHEDULE extends Structure - { - public int abTrafficGate; // 是否携带交通卡口信息 - public TIME_SCHEDULE_INFO stTrafficGate; // 交通卡口时间配置 + public static class VIOLATION_TIME_SCHEDULE extends Structure { + public int abTrafficGate; // 是否携带交通卡口信息 + public TIME_SCHEDULE_INFO stTrafficGate; // 交通卡口时间配置 + + public int abTrafficJunction; // 是否携带交通路口信息 + public TIME_SCHEDULE_INFO stTrafficJunction; // 交通路口时间配置 - public int abTrafficJunction; // 是否携带交通路口信息 - public TIME_SCHEDULE_INFO stTrafficJunction; // 交通路口时间配置 + public int abTrafficTollGate; // 是否携带新交通卡口信息 + public TIME_SCHEDULE_INFO stTrafficTollGate; // 新交通卡口时间配置 - public int abTrafficTollGate; // 是否携带新交通卡口信息 - public TIME_SCHEDULE_INFO stTrafficTollGate; // 新交通卡口时间配置 + public int abTrafficRunRedLight; // 是否携带交通闯红灯信息 + public TIME_SCHEDULE_INFO stTrafficRunRedLight; // 交通闯红灯时间配置 - public int abTrafficRunRedLight; // 是否携带交通闯红灯信息 - public TIME_SCHEDULE_INFO stTrafficRunRedLight; // 交通闯红灯时间配置 - - public int abTrafficRunYellowLight; // 是否携带交通闯黄灯信息 - public TIME_SCHEDULE_INFO stTrafficRunYellowLight; // 交通闯黄灯时间配置 + public int abTrafficRunYellowLight; // 是否携带交通闯黄灯信息 + public TIME_SCHEDULE_INFO stTrafficRunYellowLight; // 交通闯黄灯时间配置 - public int abTrafficOverLine; // 是否携带交通压线信息 - public TIME_SCHEDULE_INFO stTrafficOverLine; // 交通压线时间配置 + public int abTrafficOverLine; // 是否携带交通压线信息 + public TIME_SCHEDULE_INFO stTrafficOverLine; // 交通压线时间配置 - public int abTrafficOverYellowLine; // 是否携带交通压黄线信息 - public TIME_SCHEDULE_INFO stTrafficOverYellowLine; // 交通压黄线时间配置 + public int abTrafficOverYellowLine; // 是否携带交通压黄线信息 + public TIME_SCHEDULE_INFO stTrafficOverYellowLine; // 交通压黄线时间配置 - public int abTrafficRetrograde; // 是否携带交通逆行信息 - public TIME_SCHEDULE_INFO stTrafficRetrograde; // 交通逆行时间配置 + public int abTrafficRetrograde; // 是否携带交通逆行信息 + public TIME_SCHEDULE_INFO stTrafficRetrograde; // 交通逆行时间配置 - public int abTrafficTurnLeft; // 是否携带交通违章左转信息 - public TIME_SCHEDULE_INFO stTrafficTurnLeft; // 交通违章左转时间配置 + public int abTrafficTurnLeft; // 是否携带交通违章左转信息 + public TIME_SCHEDULE_INFO stTrafficTurnLeft; // 交通违章左转时间配置 - public int abTrafficTurnRight; // 是否携带交通违章右转信息 - public TIME_SCHEDULE_INFO stTrafficTurnRight; // 交通路口违章右转类型 + public int abTrafficTurnRight; // 是否携带交通违章右转信息 + public TIME_SCHEDULE_INFO stTrafficTurnRight; // 交通路口违章右转类型 - public int abTrafficU_Turn; // 是否携带交通违章掉头信息 - public TIME_SCHEDULE_INFO stTrafficU_Turn; // 交通违章掉头时间配置 + public int abTrafficU_Turn; // 是否携带交通违章掉头信息 + public TIME_SCHEDULE_INFO stTrafficU_Turn; // 交通违章掉头时间配置 - public int abTrafficCrossLane; // 是否携带交通违章变道信息 - public TIME_SCHEDULE_INFO stTrafficCrossLane; // 交通违章变道时间配置 + public int abTrafficCrossLane; // 是否携带交通违章变道信息 + public TIME_SCHEDULE_INFO stTrafficCrossLane; // 交通违章变道时间配置 - public int abTrafficParking; // 是否携带交通违章停车信息 - public TIME_SCHEDULE_INFO stTrafficParking; // 交通违章停车时间配置 + public int abTrafficParking; // 是否携带交通违章停车信息 + public TIME_SCHEDULE_INFO stTrafficParking; // 交通违章停车时间配置 - public int abTrafficJam; // 是否携带交通拥堵信息 - public TIME_SCHEDULE_INFO stTrafficJam; // 交通拥堵时间配置 + public int abTrafficJam; // 是否携带交通拥堵信息 + public TIME_SCHEDULE_INFO stTrafficJam; // 交通拥堵时间配置 - public int abTrafficIdle; // 是否携带交通交通空闲信息 - public TIME_SCHEDULE_INFO stTrafficIdle; // 交通交通空闲时间配置 + public int abTrafficIdle; // 是否携带交通交通空闲信息 + public TIME_SCHEDULE_INFO stTrafficIdle; // 交通交通空闲时间配置 - public int abTrafficWaitingArea; // 是否携带交通违章驶入待行区信息 - public TIME_SCHEDULE_INFO stTrafficWaitingArea; // 交通违章驶入待行区时间配置 + public int abTrafficWaitingArea; // 是否携带交通违章驶入待行区信息 + public TIME_SCHEDULE_INFO stTrafficWaitingArea; // 交通违章驶入待行区时间配置 - public int abTrafficUnderSpeed; // 是否携带交通欠速信息 - public TIME_SCHEDULE_INFO stTrafficUnderSpeed; // 交通欠速时间配置 + public int abTrafficUnderSpeed; // 是否携带交通欠速信息 + public TIME_SCHEDULE_INFO stTrafficUnderSpeed; // 交通欠速时间配置 - public int abTrafficOverSpeed; // 是否携带交通超速信息 - public TIME_SCHEDULE_INFO stTrafficOverSpeed; // 交通超速时间配置 + public int abTrafficOverSpeed; // 是否携带交通超速信息 + public TIME_SCHEDULE_INFO stTrafficOverSpeed; // 交通超速时间配置 - public int abTrafficWrongRoute; // 是否携带交通不按车道行驶信息 - public TIME_SCHEDULE_INFO stTrafficWrongRoute; // 交通不按车道行驶时间配置 + public int abTrafficWrongRoute; // 是否携带交通不按车道行驶信息 + public TIME_SCHEDULE_INFO stTrafficWrongRoute; // 交通不按车道行驶时间配置 - public int abTrafficYellowInRoute; // 是否携带交通黄牌占道信息 - public TIME_SCHEDULE_INFO stTrafficYellowInRoute; // 交通黄牌占道时间配置 + public int abTrafficYellowInRoute; // 是否携带交通黄牌占道信息 + public TIME_SCHEDULE_INFO stTrafficYellowInRoute; // 交通黄牌占道时间配置 - public int abTrafficVehicleInRoute; // 是否携带交通有车占道信息 - public TIME_SCHEDULE_INFO stTrafficVehicleInRoute; // 交通有车占道时间配置 + public int abTrafficVehicleInRoute; // 是否携带交通有车占道信息 + public TIME_SCHEDULE_INFO stTrafficVehicleInRoute; // 交通有车占道时间配置 - public int abTrafficControl; // 是否携带交通交通管制信息 - public TIME_SCHEDULE_INFO stTrafficControl; // 交通交通管制时间配置 + public int abTrafficControl; // 是否携带交通交通管制信息 + public TIME_SCHEDULE_INFO stTrafficControl; // 交通交通管制时间配置 - public int abTrafficObjectAlarm; // 是否携带交通指定类型抓拍信息 - public TIME_SCHEDULE_INFO stTrafficObjectAlarm; // 交通指定类型抓拍时间配置 + public int abTrafficObjectAlarm; // 是否携带交通指定类型抓拍信息 + public TIME_SCHEDULE_INFO stTrafficObjectAlarm; // 交通指定类型抓拍时间配置 - public int abTrafficAccident; // 是否携带交通交通事故信息 - public TIME_SCHEDULE_INFO stTrafficAccident; // 交通交通事故时间配置 + public int abTrafficAccident; // 是否携带交通交通事故信息 + public TIME_SCHEDULE_INFO stTrafficAccident; // 交通交通事故时间配置 - public int abTrafficStay; // 是否携带交通交通停留/滞留信息 - public TIME_SCHEDULE_INFO stTrafficStay; // 交通交通停留/滞留时间配置 + public int abTrafficStay; // 是否携带交通交通停留/滞留信息 + public TIME_SCHEDULE_INFO stTrafficStay; // 交通交通停留/滞留时间配置 - public int abTrafficPedestrainPriority; // 是否携带交通斑马线行人优先信息 - public TIME_SCHEDULE_INFO stTrafficPedestrainPriority; // 交通斑马线行人优先时间配置 + public int abTrafficPedestrainPriority; // 是否携带交通斑马线行人优先信息 + public TIME_SCHEDULE_INFO stTrafficPedestrainPriority; // 交通斑马线行人优先时间配置 - public int abTrafficPedestrain; // 是否携带交通交通行人事件信息 - public TIME_SCHEDULE_INFO stTrafficPedestrain; // 交通交通行人事件时间配置 + public int abTrafficPedestrain; // 是否携带交通交通行人事件信息 + public TIME_SCHEDULE_INFO stTrafficPedestrain; // 交通交通行人事件时间配置 - public int abTrafficThrow; // 是否携带交通交通抛洒物品事件信息 - public TIME_SCHEDULE_INFO stTrafficThrow; // 交通交通抛洒物品事件时间配置 + public int abTrafficThrow; // 是否携带交通交通抛洒物品事件信息 + public TIME_SCHEDULE_INFO stTrafficThrow; // 交通交通抛洒物品事件时间配置 - public int abTrafficVehicleInBusRoute; // 是否携带交通违章占道信息 - public TIME_SCHEDULE_INFO stTrafficVehicleInBusRoute; // 交通违章占道时间配置 + public int abTrafficVehicleInBusRoute; // 是否携带交通违章占道信息 + public TIME_SCHEDULE_INFO stTrafficVehicleInBusRoute; // 交通违章占道时间配置 - public int abTrafficBacking; // 是否携带交通违章倒车信息 - public TIME_SCHEDULE_INFO stTrafficBacking; // 交通违章倒车时间配置 + public int abTrafficBacking; // 是否携带交通违章倒车信息 + public TIME_SCHEDULE_INFO stTrafficBacking; // 交通违章倒车时间配置 - public int abTrafficOverStopLine; // 是否携带交通压停止线信息 - public TIME_SCHEDULE_INFO stTrafficOverStopLine; // 交通压停止线时间配置 + public int abTrafficOverStopLine; // 是否携带交通压停止线信息 + public TIME_SCHEDULE_INFO stTrafficOverStopLine; // 交通压停止线时间配置 - public int abTrafficParkingOnYellowBox; // 是否携带交通黄网格线抓拍信息 - public TIME_SCHEDULE_INFO stTrafficParkingOnYellowBox; // 交通黄网格线抓拍时间配置 + public int abTrafficParkingOnYellowBox; // 是否携带交通黄网格线抓拍信息 + public TIME_SCHEDULE_INFO stTrafficParkingOnYellowBox; // 交通黄网格线抓拍时间配置 - public int abTrafficParkingSpaceParking; // 是否携带交通车位有车信息 - public TIME_SCHEDULE_INFO stTrafficParkingSpaceParking; // 交通车位有车时间配置 + public int abTrafficParkingSpaceParking; // 是否携带交通车位有车信息 + public TIME_SCHEDULE_INFO stTrafficParkingSpaceParking; // 交通车位有车时间配置 - public int abTrafficParkingSpaceNoParking; // 是否携带交通车位无车信息 - public TIME_SCHEDULE_INFO stTrafficParkingSpaceNoParking; // 交通车位无车时间配置 + public int abTrafficParkingSpaceNoParking; // 是否携带交通车位无车信息 + public TIME_SCHEDULE_INFO stTrafficParkingSpaceNoParking; // 交通车位无车时间配置 - public int abTrafficParkingSpaceOverLine; // 是否携带交通车位有车压线信息 - public TIME_SCHEDULE_INFO stTrafficParkingSpaceOverLine; // 交通车位有车压线时间配置 + public int abTrafficParkingSpaceOverLine; // 是否携带交通车位有车压线信息 + public TIME_SCHEDULE_INFO stTrafficParkingSpaceOverLine; // 交通车位有车压线时间配置 - public int abParkingSpaceDetection; // 是否携带交通多停车位状态检测信息 - public TIME_SCHEDULE_INFO stParkingSpaceDetection; // 交通多停车位状态检测时间配置 + public int abParkingSpaceDetection; // 是否携带交通多停车位状态检测信息 + public TIME_SCHEDULE_INFO stParkingSpaceDetection; // 交通多停车位状态检测时间配置 - public int abTrafficRestrictedPlate; // 是否携带交通受限车牌信息 - public TIME_SCHEDULE_INFO stTrafficRestrictedPlate; // 交通受限车牌时间配置 + public int abTrafficRestrictedPlate; // 是否携带交通受限车牌信息 + public TIME_SCHEDULE_INFO stTrafficRestrictedPlate; // 交通受限车牌时间配置 - public int abTrafficWithoutSafeBelt; // 是否携带交通不系安全带信息 - public TIME_SCHEDULE_INFO stTrafficWithoutSafeBelt; // 交通不系安全带时间配置 + public int abTrafficWithoutSafeBelt; // 是否携带交通不系安全带信息 + public TIME_SCHEDULE_INFO stTrafficWithoutSafeBelt; // 交通不系安全带时间配置 - public int abTrafficNoPassing; // 是否携带交通禁行信息 - public TIME_SCHEDULE_INFO stTrafficNoPassing; // 交通禁行时间配置 + public int abTrafficNoPassing; // 是否携带交通禁行信息 + public TIME_SCHEDULE_INFO stTrafficNoPassing; // 交通禁行时间配置 - public int abVehicleAnalyse; // 是否携带交通车辆特征检测分析信息 - public TIME_SCHEDULE_INFO stVehicleAnalyse; // 交通车辆特征时间配置 + public int abVehicleAnalyse; // 是否携带交通车辆特征检测分析信息 + public TIME_SCHEDULE_INFO stVehicleAnalyse; // 交通车辆特征时间配置 - public int abCrossLineDetection; // 是否携带交通警戒线信息 - public TIME_SCHEDULE_INFO stCrossLineDetection; // 交通警戒线时间配置 + public int abCrossLineDetection; // 是否携带交通警戒线信息 + public TIME_SCHEDULE_INFO stCrossLineDetection; // 交通警戒线时间配置 - public int abCrossFenceDetection; // 是否携带交通穿越围栏信息 - public TIME_SCHEDULE_INFO stCrossFenceDetection; // 交通穿越围栏时间配置 + public int abCrossFenceDetection; // 是否携带交通穿越围栏信息 + public TIME_SCHEDULE_INFO stCrossFenceDetection; // 交通穿越围栏时间配置 - public int abCrossRegionDetection; // 是否携带交通警戒区信息 - public TIME_SCHEDULE_INFO stCrossRegionDetection; // 交通警戒区时间配置 + public int abCrossRegionDetection; // 是否携带交通警戒区信息 + public TIME_SCHEDULE_INFO stCrossRegionDetection; // 交通警戒区时间配置 - public int abPasteDetection; // 是否携带交通ATM贴条信息 - public TIME_SCHEDULE_INFO stPasteDetection; // 交通ATM贴条时间配置 + public int abPasteDetection; // 是否携带交通ATM贴条信息 + public TIME_SCHEDULE_INFO stPasteDetection; // 交通ATM贴条时间配置 - public int abLeftDetection; // 是否携带交通物品遗留信息 - public TIME_SCHEDULE_INFO stLeftDetection; // 交通物品遗留时间配置 + public int abLeftDetection; // 是否携带交通物品遗留信息 + public TIME_SCHEDULE_INFO stLeftDetection; // 交通物品遗留时间配置 - public int abPreservation; // 是否携带交通物品保全信息 - public TIME_SCHEDULE_INFO stPreservation; // 交通物品保全时间配置 + public int abPreservation; // 是否携带交通物品保全信息 + public TIME_SCHEDULE_INFO stPreservation; // 交通物品保全时间配置 - public int abTakenAwayDetection; // 是否携带交通物品搬移信息 - public TIME_SCHEDULE_INFO stTakenAwayDetection; // 交通物品搬移时间配置 + public int abTakenAwayDetection; // 是否携带交通物品搬移信息 + public TIME_SCHEDULE_INFO stTakenAwayDetection; // 交通物品搬移时间配置 - public int abStayDetection; // 是否携带交通停留/滞留信息 - public TIME_SCHEDULE_INFO stStayDetection; // 交通停留/滞留时间配置 + public int abStayDetection; // 是否携带交通停留/滞留信息 + public TIME_SCHEDULE_INFO stStayDetection; // 交通停留/滞留时间配置 - public int abParkingDetection; // 是否携带交通非法停车信息 - public TIME_SCHEDULE_INFO stParkingDetection; // 交通非法停车时间配置 + public int abParkingDetection; // 是否携带交通非法停车信息 + public TIME_SCHEDULE_INFO stParkingDetection; // 交通非法停车时间配置 - public int abWanderDetection; // 是否携带交通徘徊信息 - public TIME_SCHEDULE_INFO stWanderDetection; // 交通徘徊时间配置 + public int abWanderDetection; // 是否携带交通徘徊信息 + public TIME_SCHEDULE_INFO stWanderDetection; // 交通徘徊时间配置 - public int abMoveDetection; // 是否携带交通运动信息 - public TIME_SCHEDULE_INFO stMoveDetection; // 交通运动时间配置 + public int abMoveDetection; // 是否携带交通运动信息 + public TIME_SCHEDULE_INFO stMoveDetection; // 交通运动时间配置 - public int abTailDetection; // 是否携带交通尾随信息 - public TIME_SCHEDULE_INFO stTailDetection; // 交通尾随时间配置 + public int abTailDetection; // 是否携带交通尾随信息 + public TIME_SCHEDULE_INFO stTailDetection; // 交通尾随时间配置 - public int abRioterDetection; // 是否携带交通聚集信息 - public TIME_SCHEDULE_INFO stRioterDetection; // 交通聚集时间配置 + public int abRioterDetection; // 是否携带交通聚集信息 + public TIME_SCHEDULE_INFO stRioterDetection; // 交通聚集时间配置 - public int abFightDetection; // 是否携带交通打架信息 - public TIME_SCHEDULE_INFO stFightDetection; // 交通打架时间配置 + public int abFightDetection; // 是否携带交通打架信息 + public TIME_SCHEDULE_INFO stFightDetection; // 交通打架时间配置 - public int abRetrogradeDetection; // 是否携带交通逆行信息 - public TIME_SCHEDULE_INFO stRetrogradeDetection; // 交通逆行时间配置 + public int abRetrogradeDetection; // 是否携带交通逆行信息 + public TIME_SCHEDULE_INFO stRetrogradeDetection; // 交通逆行时间配置 - public int abFireDetection; // 是否携带交通火焰信息 - public TIME_SCHEDULE_INFO stFireDetection; // 交通火焰时间配置 + public int abFireDetection; // 是否携带交通火焰信息 + public TIME_SCHEDULE_INFO stFireDetection; // 交通火焰时间配置 - public int abSmokeDetection; // 是否携带交通烟雾信息 - public TIME_SCHEDULE_INFO stSmokeDetection; // 交通烟雾时间配置 + public int abSmokeDetection; // 是否携带交通烟雾信息 + public TIME_SCHEDULE_INFO stSmokeDetection; // 交通烟雾时间配置 - public int abNumberStat; // 是否携带交通数量统计信息 - public TIME_SCHEDULE_INFO stNumberStat; // 交通数量统计时间配置 + public int abNumberStat; // 是否携带交通数量统计信息 + public TIME_SCHEDULE_INFO stNumberStat; // 交通数量统计时间配置 - public int abVideoAbnormalDetection; // 是否携带交通视频异常信息 - public TIME_SCHEDULE_INFO stVideoAbnormalDetection; // 交通视频异常时间配置 + public int abVideoAbnormalDetection; // 是否携带交通视频异常信息 + public TIME_SCHEDULE_INFO stVideoAbnormalDetection; // 交通视频异常时间配置 - public int abPrisonerRiseDetection; // 是否携带看守所囚犯起身检测信息 - public TIME_SCHEDULE_INFO stPrisonerRiseDetection; // 看守所囚犯起身检测时间配置 + public int abPrisonerRiseDetection; // 是否携带看守所囚犯起身检测信息 + public TIME_SCHEDULE_INFO stPrisonerRiseDetection; // 看守所囚犯起身检测时间配置 - public int abFaceDetection; // 是否携带人脸检测信息 - public TIME_SCHEDULE_INFO stFaceDetection; // 人脸检测时间配置 + public int abFaceDetection; // 是否携带人脸检测信息 + public TIME_SCHEDULE_INFO stFaceDetection; // 人脸检测时间配置 - public int abFaceRecognition; // 是否携带人脸识别信息 - public TIME_SCHEDULE_INFO stFaceRecognition; // 人脸识别时间配置 + public int abFaceRecognition; // 是否携带人脸识别信息 + public TIME_SCHEDULE_INFO stFaceRecognition; // 人脸识别时间配置 - public int abDensityDetection; // 是否携带密集度检测信息 - public TIME_SCHEDULE_INFO stDensityDetection; // 密集度检测时间配置 + public int abDensityDetection; // 是否携带密集度检测信息 + public TIME_SCHEDULE_INFO stDensityDetection; // 密集度检测时间配置 - public int abQueueDetection; // 是否携带排队检测信息 - public TIME_SCHEDULE_INFO stQueueDetection; // 排队检测时间配置 + public int abQueueDetection; // 是否携带排队检测信息 + public TIME_SCHEDULE_INFO stQueueDetection; // 排队检测时间配置 - public int abClimbDetection; // 是否携带攀高检测信息 - public TIME_SCHEDULE_INFO stClimbDetection; // 攀高时间配置 + public int abClimbDetection; // 是否携带攀高检测信息 + public TIME_SCHEDULE_INFO stClimbDetection; // 攀高时间配置 - public int abLeaveDetection; // 是否携带离岗检测信息 - public TIME_SCHEDULE_INFO stLeaveDetection; // 离岗时间配置 + public int abLeaveDetection; // 是否携带离岗检测信息 + public TIME_SCHEDULE_INFO stLeaveDetection; // 离岗时间配置 - public int abVehicleOnPoliceCar; // 是否携带车载警车信息 - public TIME_SCHEDULE_INFO stVehicleOnPoliceCar; // 车载警车时间配置 + public int abVehicleOnPoliceCar; // 是否携带车载警车信息 + public TIME_SCHEDULE_INFO stVehicleOnPoliceCar; // 车载警车时间配置 - public int abVehicleOnBus; // 是否携带车载公交信息 - public TIME_SCHEDULE_INFO stVehicleOnBus; // 车载公交时间配置 + public int abVehicleOnBus; // 是否携带车载公交信息 + public TIME_SCHEDULE_INFO stVehicleOnBus; // 车载公交时间配置 - public int abVehicleOnSchoolBus; // 是否携带车载校车信息 - public TIME_SCHEDULE_INFO stVehicleOnSchoolBus; // 车载校车时间配置 + public int abVehicleOnSchoolBus; // 是否携带车载校车信息 + public TIME_SCHEDULE_INFO stVehicleOnSchoolBus; // 车载校车时间配置 } - + // 交通全局配置对应图片命名格式参数配置 public static class TRAFFIC_NAMING_FORMAT extends Structure { - public byte[] szFormat = new byte[CFG_COMMON_STRING_256]; // 图片格式 + public byte[] szFormat = new byte[CFG_COMMON_STRING_256]; // 图片格式 } - + // CFG_NET_TIME 时间 public static class CFG_NET_TIME extends Structure { - public int nStructSize; - public int dwYear; // 年 - public int dwMonth; // 月 - public int dwDay; // 日 - public int dwHour; // 时 - public int dwMinute; // 分 - public int dwSecond; // 秒 - + public int nStructSize; + public int dwYear; // 年 + public int dwMonth; // 月 + public int dwDay; // 日 + public int dwHour; // 时 + public int dwMinute; // 分 + public int dwSecond; // 秒 + public CFG_NET_TIME() { - this.nStructSize = this.size(); + this.nStructSize = this.size(); } } - + // PERIOD_OF_VALIDITY public static class PERIOD_OF_VALIDITY extends Structure { - public CFG_NET_TIME stBeginTime; // 标定开始时间 - public CFG_NET_TIME stEndTime; // 标定到期时间 + public CFG_NET_TIME stBeginTime; // 标定开始时间 + public CFG_NET_TIME stEndTime; // 标定到期时间 } - + // 交通全局配置对应标定相关配置 public static class TRAFFIC_CALIBRATION_INFO extends Structure { - public byte[] szUnit = new byte[CFG_COMMON_STRING_256]; // 标定单位 - public byte[] szCertificate = new byte[CFG_COMMON_STRING_256]; // 标定证书 - public PERIOD_OF_VALIDITY stPeriodOfValidity; // 标定有效期 + public byte[] szUnit = new byte[CFG_COMMON_STRING_256]; // 标定单位 + public byte[] szCertificate = new byte[CFG_COMMON_STRING_256]; // 标定证书 + public PERIOD_OF_VALIDITY stPeriodOfValidity; // 标定有效期 } - + // TRAFFIC_EVENT_CHECK_MASK public static class TRAFFIC_EVENT_CHECK_MASK extends Structure { - public int abTrafficGate; // 是否携带交通卡口信息 - public int nTrafficGate; // 交通卡口检测模式掩码 + public int abTrafficGate; // 是否携带交通卡口信息 + public int nTrafficGate; // 交通卡口检测模式掩码 + + public int abTrafficJunction; // 是否携带交通路口信息 + public int nTrafficJunction; // 交通路口检测模式掩码 - public int abTrafficJunction; // 是否携带交通路口信息 - public int nTrafficJunction; // 交通路口检测模式掩码 + public int abTrafficTollGate; // 是否携带新交通卡口信息 + public int nTrafficTollGate; // 新交通卡口检测模式掩码 - public int abTrafficTollGate; // 是否携带新交通卡口信息 - public int nTrafficTollGate; // 新交通卡口检测模式掩码 + public int abTrafficRunRedLight; // 是否携带交通闯红灯信息 + public int nTrafficRunRedLight; // 交通闯红灯检测模式掩码 - public int abTrafficRunRedLight; // 是否携带交通闯红灯信息 - public int nTrafficRunRedLight; // 交通闯红灯检测模式掩码 - - public int abTrafficRunYellowLight; // 是否携带交通闯黄灯信息 - public int nTrafficRunYellowLight; // 交通闯黄灯检测模式掩码 + public int abTrafficRunYellowLight; // 是否携带交通闯黄灯信息 + public int nTrafficRunYellowLight; // 交通闯黄灯检测模式掩码 - public int abTrafficOverLine; // 是否携带交通压线信息 - public int nTrafficOverLine; // 交通压线检测模式掩码 + public int abTrafficOverLine; // 是否携带交通压线信息 + public int nTrafficOverLine; // 交通压线检测模式掩码 - public int abTrafficOverYellowLine; // 是否携带交通压黄线信息 - public int nTrafficOverYellowLine; // 交通压黄线检测模式掩码 + public int abTrafficOverYellowLine; // 是否携带交通压黄线信息 + public int nTrafficOverYellowLine; // 交通压黄线检测模式掩码 - public int abTrafficRetrograde; // 是否携带交通逆行信息 - public int nTrafficRetrograde; // 交通逆行检测模式掩码 + public int abTrafficRetrograde; // 是否携带交通逆行信息 + public int nTrafficRetrograde; // 交通逆行检测模式掩码 - public int abTrafficTurnLeft; // 是否携带交通违章左转信息 - public int nTrafficTurnLeft; // 交通违章左转检测模式掩码 + public int abTrafficTurnLeft; // 是否携带交通违章左转信息 + public int nTrafficTurnLeft; // 交通违章左转检测模式掩码 - public int abTrafficTurnRight; // 是否携带交通违章右转信息 - public int nTrafficTurnRight; // 交通路口违章右转类型 + public int abTrafficTurnRight; // 是否携带交通违章右转信息 + public int nTrafficTurnRight; // 交通路口违章右转类型 - public int abTrafficU_Turn; // 是否携带交通违章掉头信息 - public int nTrafficU_Turn; // 交通违章掉头检测模式掩码 + public int abTrafficU_Turn; // 是否携带交通违章掉头信息 + public int nTrafficU_Turn; // 交通违章掉头检测模式掩码 - public int abTrafficCrossLane; // 是否携带交通违章变道信息 - public int nTrafficCrossLane; // 交通违章变道检测模式掩码 + public int abTrafficCrossLane; // 是否携带交通违章变道信息 + public int nTrafficCrossLane; // 交通违章变道检测模式掩码 - public int abTrafficParking; // 是否携带交通违章停车信息 - public int nTrafficParking; // 交通违章停车检测模式掩码 + public int abTrafficParking; // 是否携带交通违章停车信息 + public int nTrafficParking; // 交通违章停车检测模式掩码 - public int abTrafficJam; // 是否携带交通拥堵信息 - public int nTrafficJam; // 交通拥堵检测模式掩码 + public int abTrafficJam; // 是否携带交通拥堵信息 + public int nTrafficJam; // 交通拥堵检测模式掩码 - public int abTrafficIdle; // 是否携带交通交通空闲信息 - public int nTrafficIdle; // 交通交通空闲检测模式掩码 + public int abTrafficIdle; // 是否携带交通交通空闲信息 + public int nTrafficIdle; // 交通交通空闲检测模式掩码 - public int abTrafficWaitingArea; // 是否携带交通违章驶入待行区信息 - public int nTrafficWaitingArea; // 交通违章驶入待行区检测模式掩码 + public int abTrafficWaitingArea; // 是否携带交通违章驶入待行区信息 + public int nTrafficWaitingArea; // 交通违章驶入待行区检测模式掩码 - public int abTrafficUnderSpeed; // 是否携带交通欠速信息 - public int nTrafficUnderSpeed; // 交通欠速检测模式掩码 + public int abTrafficUnderSpeed; // 是否携带交通欠速信息 + public int nTrafficUnderSpeed; // 交通欠速检测模式掩码 - public int abTrafficOverSpeed; // 是否携带交通超速信息 - public int nTrafficOverSpeed; // 交通超速检测模式掩码 + public int abTrafficOverSpeed; // 是否携带交通超速信息 + public int nTrafficOverSpeed; // 交通超速检测模式掩码 - public int abTrafficWrongRoute; // 是否携带交通不按车道行驶信息 - public int nTrafficWrongRoute; // 交通不按车道行驶检测模式掩码 + public int abTrafficWrongRoute; // 是否携带交通不按车道行驶信息 + public int nTrafficWrongRoute; // 交通不按车道行驶检测模式掩码 - public int abTrafficYellowInRoute; // 是否携带交通黄牌占道信息 - public int nTrafficYellowInRoute; // 交通黄牌占道检测模式掩码 + public int abTrafficYellowInRoute; // 是否携带交通黄牌占道信息 + public int nTrafficYellowInRoute; // 交通黄牌占道检测模式掩码 - public int abTrafficVehicleInRoute; // 是否携带交通有车占道信息 - public int nTrafficVehicleInRoute; // 交通有车占道检测模式掩码 + public int abTrafficVehicleInRoute; // 是否携带交通有车占道信息 + public int nTrafficVehicleInRoute; // 交通有车占道检测模式掩码 - public int abTrafficControl; // 是否携带交通交通管制信息 - public int nTrafficControl; // 交通交通管制检测模式掩码 + public int abTrafficControl; // 是否携带交通交通管制信息 + public int nTrafficControl; // 交通交通管制检测模式掩码 - public int abTrafficObjectAlarm; // 是否携带交通指定类型抓拍信息 - public int nTrafficObjectAlarm; // 交通指定类型抓拍检测模式掩码 + public int abTrafficObjectAlarm; // 是否携带交通指定类型抓拍信息 + public int nTrafficObjectAlarm; // 交通指定类型抓拍检测模式掩码 - public int abTrafficAccident; // 是否携带交通交通事故信息 - public int nTrafficAccident; // 交通交通事故检测模式掩码 + public int abTrafficAccident; // 是否携带交通交通事故信息 + public int nTrafficAccident; // 交通交通事故检测模式掩码 - public int abTrafficStay; // 是否携带交通交通停留/滞留信息 - public int nTrafficStay; // 交通交通停留/滞留检测模式掩码 + public int abTrafficStay; // 是否携带交通交通停留/滞留信息 + public int nTrafficStay; // 交通交通停留/滞留检测模式掩码 - public int abTrafficPedestrainPriority; // 是否携带交通斑马线行人优先信息 - public int nTrafficPedestrainPriority; // 交通斑马线行人优先检测模式掩码 + public int abTrafficPedestrainPriority; // 是否携带交通斑马线行人优先信息 + public int nTrafficPedestrainPriority; // 交通斑马线行人优先检测模式掩码 - public int abTrafficPedestrain; // 是否携带交通交通行人事件信息 - public int nTrafficPedestrain; // 交通交通行人事件检测模式掩码 + public int abTrafficPedestrain; // 是否携带交通交通行人事件信息 + public int nTrafficPedestrain; // 交通交通行人事件检测模式掩码 - public int abTrafficThrow; // 是否携带交通交通抛洒物品事件信息 - public int nTrafficThrow; // 交通交通抛洒物品事件检测模式掩码 + public int abTrafficThrow; // 是否携带交通交通抛洒物品事件信息 + public int nTrafficThrow; // 交通交通抛洒物品事件检测模式掩码 - public int abTrafficVehicleInBusRoute; // 是否携带交通违章占道信息 - public int nTrafficVehicleInBusRoute; // 交通违章占道检测模式掩码 + public int abTrafficVehicleInBusRoute; // 是否携带交通违章占道信息 + public int nTrafficVehicleInBusRoute; // 交通违章占道检测模式掩码 - public int abTrafficBacking; // 是否携带交通违章倒车信息 - public int nTrafficBacking; // 交通违章倒车检测模式掩码 + public int abTrafficBacking; // 是否携带交通违章倒车信息 + public int nTrafficBacking; // 交通违章倒车检测模式掩码 - public int abTrafficOverStopLine; // 是否携带交通压停止线信息 - public int nTrafficOverStopLine; // 交通压停止线检测模式掩码 + public int abTrafficOverStopLine; // 是否携带交通压停止线信息 + public int nTrafficOverStopLine; // 交通压停止线检测模式掩码 - public int abTrafficParkingOnYellowBox; // 是否携带交通黄网格线抓拍信息 - public int nTrafficParkingOnYellowBox; // 交通黄网格线抓拍检测模式掩码 + public int abTrafficParkingOnYellowBox; // 是否携带交通黄网格线抓拍信息 + public int nTrafficParkingOnYellowBox; // 交通黄网格线抓拍检测模式掩码 - public int abTrafficParkingSpaceParking; // 是否携带交通车位有车信息 - public int nTrafficParkingSpaceParking; // 交通车位有车检测模式掩码 + public int abTrafficParkingSpaceParking; // 是否携带交通车位有车信息 + public int nTrafficParkingSpaceParking; // 交通车位有车检测模式掩码 - public int abTrafficParkingSpaceNoParking; // 是否携带交通车位无车信息 - public int nTrafficParkingSpaceNoParking; // 交通车位无车检测模式掩码 + public int abTrafficParkingSpaceNoParking; // 是否携带交通车位无车信息 + public int nTrafficParkingSpaceNoParking; // 交通车位无车检测模式掩码 - public int abTrafficParkingSpaceOverLine; // 是否携带交通车位有车压线信息 - public int nTrafficParkingSpaceOverLine; // 交通车位有车压线检测模式掩码 + public int abTrafficParkingSpaceOverLine; // 是否携带交通车位有车压线信息 + public int nTrafficParkingSpaceOverLine; // 交通车位有车压线检测模式掩码 - public int abParkingSpaceDetection; // 是否携带交通多停车位状态检测信息 - public int nParkingSpaceDetection; // 交通多停车位状态检测检测模式掩码 + public int abParkingSpaceDetection; // 是否携带交通多停车位状态检测信息 + public int nParkingSpaceDetection; // 交通多停车位状态检测检测模式掩码 - public int abTrafficRestrictedPlate; // 是否携带交通受限车牌信息 - public int nTrafficRestrictedPlate; // 交通受限车牌检测模式掩码 + public int abTrafficRestrictedPlate; // 是否携带交通受限车牌信息 + public int nTrafficRestrictedPlate; // 交通受限车牌检测模式掩码 - public int abTrafficWithoutSafeBelt; // 是否携带交通不系安全带信息 - public int nTrafficWithoutSafeBelt; // 交通不系安全带检测模式掩码 + public int abTrafficWithoutSafeBelt; // 是否携带交通不系安全带信息 + public int nTrafficWithoutSafeBelt; // 交通不系安全带检测模式掩码 - public int abTrafficNoPassing; // 是否携带交通禁行信息 - public int nTrafficNoPassing; // 交通禁行检测模式掩码 + public int abTrafficNoPassing; // 是否携带交通禁行信息 + public int nTrafficNoPassing; // 交通禁行检测模式掩码 - public int abVehicleAnalyse; // 是否携带交通车辆特征检测分析信息 - public int nVehicleAnalyse; // 交通车辆特征检测模式掩码 + public int abVehicleAnalyse; // 是否携带交通车辆特征检测分析信息 + public int nVehicleAnalyse; // 交通车辆特征检测模式掩码 - public int abCrossLineDetection; // 是否携带交通警戒线信息 - public int nCrossLineDetection; // 交通警戒线检测模式掩码 + public int abCrossLineDetection; // 是否携带交通警戒线信息 + public int nCrossLineDetection; // 交通警戒线检测模式掩码 - public int abCrossFenceDetection; // 是否携带交通穿越围栏信息 - public int nCrossFenceDetection; // 交通穿越围栏检测模式掩码 + public int abCrossFenceDetection; // 是否携带交通穿越围栏信息 + public int nCrossFenceDetection; // 交通穿越围栏检测模式掩码 - public int abCrossRegionDetection; // 是否携带交通警戒区信息 - public int nCrossRegionDetection; // 交通警戒区检测模式掩码 + public int abCrossRegionDetection; // 是否携带交通警戒区信息 + public int nCrossRegionDetection; // 交通警戒区检测模式掩码 - public int abPasteDetection; // 是否携带交通ATM贴条信息 - public int nPasteDetection; // 交通ATM贴条检测模式掩码 + public int abPasteDetection; // 是否携带交通ATM贴条信息 + public int nPasteDetection; // 交通ATM贴条检测模式掩码 - public int abLeftDetection; // 是否携带交通物品遗留信息 - public int nLeftDetection; // 交通物品遗留检测模式掩码 + public int abLeftDetection; // 是否携带交通物品遗留信息 + public int nLeftDetection; // 交通物品遗留检测模式掩码 - public int abPreservation; // 是否携带交通物品保全信息 - public int nPreservation; // 交通物品保全检测模式掩码 + public int abPreservation; // 是否携带交通物品保全信息 + public int nPreservation; // 交通物品保全检测模式掩码 - public int abTakenAwayDetection; // 是否携带交通物品搬移信息 - public int nTakenAwayDetection; // 交通物品搬移检测模式掩码 + public int abTakenAwayDetection; // 是否携带交通物品搬移信息 + public int nTakenAwayDetection; // 交通物品搬移检测模式掩码 - public int abStayDetection; // 是否携带交通停留/滞留信息 - public int nStayDetection; // 交通停留/滞留检测模式掩码 + public int abStayDetection; // 是否携带交通停留/滞留信息 + public int nStayDetection; // 交通停留/滞留检测模式掩码 - public int abParkingDetection; // 是否携带交通非法停车信息 - public int nParkingDetection; // 交通非法停车检测模式掩码 + public int abParkingDetection; // 是否携带交通非法停车信息 + public int nParkingDetection; // 交通非法停车检测模式掩码 - public int abWanderDetection; // 是否携带交通徘徊信息 - public int nWanderDetection; // 交通徘徊检测模式掩码 + public int abWanderDetection; // 是否携带交通徘徊信息 + public int nWanderDetection; // 交通徘徊检测模式掩码 - public int abMoveDetection; // 是否携带交通运动信息 - public int nMoveDetection; // 交通运动检测模式掩码 + public int abMoveDetection; // 是否携带交通运动信息 + public int nMoveDetection; // 交通运动检测模式掩码 - public int abTailDetection; // 是否携带交通尾随信息 - public int nTailDetection; // 交通尾随检测模式掩码 + public int abTailDetection; // 是否携带交通尾随信息 + public int nTailDetection; // 交通尾随检测模式掩码 - public int abRioterDetection; // 是否携带交通聚集信息 - public int nRioterDetection; // 交通聚集检测模式掩码 + public int abRioterDetection; // 是否携带交通聚集信息 + public int nRioterDetection; // 交通聚集检测模式掩码 - public int abFightDetection; // 是否携带交通打架信息 - public int nFightDetection; // 交通打架检测模式掩码 + public int abFightDetection; // 是否携带交通打架信息 + public int nFightDetection; // 交通打架检测模式掩码 - public int abRetrogradeDetection; // 是否携带交通逆行信息 - public int nRetrogradeDetection; // 交通逆行检测模式掩码 + public int abRetrogradeDetection; // 是否携带交通逆行信息 + public int nRetrogradeDetection; // 交通逆行检测模式掩码 - public int abFireDetection; // 是否携带交通火焰信息 - public int nFireDetection; // 交通火焰检测模式掩码 + public int abFireDetection; // 是否携带交通火焰信息 + public int nFireDetection; // 交通火焰检测模式掩码 - public int abSmokeDetection; // 是否携带交通烟雾信息 - public int nSmokeDetection; // 交通烟雾检测模式掩码 + public int abSmokeDetection; // 是否携带交通烟雾信息 + public int nSmokeDetection; // 交通烟雾检测模式掩码 - public int abNumberStat; // 是否携带交通数量统计信息 - public int nNumberStat; // 交通数量统计检测模式掩码 + public int abNumberStat; // 是否携带交通数量统计信息 + public int nNumberStat; // 交通数量统计检测模式掩码 - public int abVideoAbnormalDetection; // 是否携带交通视频异常信息 - public int nVideoAbnormalDetection; // 交通视频异常检测模式掩码 + public int abVideoAbnormalDetection; // 是否携带交通视频异常信息 + public int nVideoAbnormalDetection; // 交通视频异常检测模式掩码 - public int abPrisonerRiseDetection; // 是否携带看守所囚犯起身检测信息 - public int nPrisonerRiseDetection; // 看守所囚犯起身检测检测模式掩码 + public int abPrisonerRiseDetection; // 是否携带看守所囚犯起身检测信息 + public int nPrisonerRiseDetection; // 看守所囚犯起身检测检测模式掩码 - public int abFaceDetection; // 是否携带人脸检测信息 - public int nFaceDetection; // 人脸检测检测模式掩码 + public int abFaceDetection; // 是否携带人脸检测信息 + public int nFaceDetection; // 人脸检测检测模式掩码 - public int abFaceRecognition; // 是否携带人脸识别信息 - public int nFaceRecognition; // 人脸识别检测模式掩码 + public int abFaceRecognition; // 是否携带人脸识别信息 + public int nFaceRecognition; // 人脸识别检测模式掩码 - public int abDensityDetection; // 是否携带密集度检测信息 - public int nDensityDetection; // 密集度检测检测模式掩码 + public int abDensityDetection; // 是否携带密集度检测信息 + public int nDensityDetection; // 密集度检测检测模式掩码 - public int abQueueDetection; // 是否携带排队检测信息 - public int nQueueDetection; // 排队检测检测模式掩码 + public int abQueueDetection; // 是否携带排队检测信息 + public int nQueueDetection; // 排队检测检测模式掩码 - public int abClimbDetection; // 是否携带攀高检测信息 - public int nClimbDetection; // 攀高检测模式掩码 + public int abClimbDetection; // 是否携带攀高检测信息 + public int nClimbDetection; // 攀高检测模式掩码 - public int abLeaveDetection; // 是否携带离岗检测信息 - public int nLeaveDetection; // 离岗检测模式掩码 + public int abLeaveDetection; // 是否携带离岗检测信息 + public int nLeaveDetection; // 离岗检测模式掩码 - public int abVehicleOnPoliceCar; // 是否携带车载警车信息 - public int nVehicleOnPoliceCar; // 车载警车检测模式掩码 + public int abVehicleOnPoliceCar; // 是否携带车载警车信息 + public int nVehicleOnPoliceCar; // 车载警车检测模式掩码 - public int abVehicleOnBus; // 是否携带车载公交信息 - public int nVehicleOnBus; // 车载公交检测模式掩码 + public int abVehicleOnBus; // 是否携带车载公交信息 + public int nVehicleOnBus; // 车载公交检测模式掩码 + + public int abVehicleOnSchoolBus; // 是否携带车载校车信息 + public int nVehicleOnSchoolBus; // 车载校车检测模式掩码 - public int abVehicleOnSchoolBus; // 是否携带车载校车信息 - public int nVehicleOnSchoolBus; // 车载校车检测模式掩码 - } - + // 交通全局配置对应灯组状态配置 public static class ENABLE_LIGHT_STATE_INFO extends Structure { - public int bEnable; // 是否启动应用层收到的灯组状态给底层 + public int bEnable; // 是否启动应用层收到的灯组状态给底层 } - + // 车道检测类型 public static class EM_CHECK_TYPE extends Structure { - public int EM_CHECK_TYPE_UNKNOWN = 0; // 不识别的检测类型 - public int EM_CHECK_TYPE_PHYSICAL = 1; // 物理检测 - public int EM_CHECK_TYPE_VIDEO = 2; // 视频检测 + public int EM_CHECK_TYPE_UNKNOWN = 0; // 不识别的检测类型 + public int EM_CHECK_TYPE_PHYSICAL = 1; // 物理检测 + public int EM_CHECK_TYPE_VIDEO = 2; // 视频检测 } - + // TRAFFIC_EVENT_CHECK_INFO public static class TRAFFIC_EVENT_CHECK_INFO extends Structure { - public int abTrafficGate; // 是否携带交通卡口信息 - public int emTrafficGate; // 交通卡口检测类型 EM_CHECK_TYPE + public int abTrafficGate; // 是否携带交通卡口信息 + public int emTrafficGate; // 交通卡口检测类型 EM_CHECK_TYPE - public int abTrafficJunction; // 是否携带交通路口信息 - public int emTrafficJunction; // 交通路口检测类型 + public int abTrafficJunction; // 是否携带交通路口信息 + public int emTrafficJunction; // 交通路口检测类型 - public int abTrafficTollGate; // 是否携带新交通卡口信息 - public int emTrafficTollGate; // 新交通卡口检测类型 + public int abTrafficTollGate; // 是否携带新交通卡口信息 + public int emTrafficTollGate; // 新交通卡口检测类型 - public int abTrafficRunRedLight; // 是否携带交通闯红灯信息 - public int emTrafficRunRedLight; // 交通闯红灯检测类型 - - public int abTrafficRunYellowLight; // 是否携带交通闯黄灯信息 - public int emTrafficRunYellowLight; // 交通闯黄灯检测类型 + public int abTrafficRunRedLight; // 是否携带交通闯红灯信息 + public int emTrafficRunRedLight; // 交通闯红灯检测类型 - public int abTrafficOverLine; // 是否携带交通压线信息 - public int emTrafficOverLine; // 交通压线检测类型 + public int abTrafficRunYellowLight; // 是否携带交通闯黄灯信息 + public int emTrafficRunYellowLight; // 交通闯黄灯检测类型 - public int abTrafficOverYellowLine; // 是否携带交通压黄线信息 - public int emTrafficOverYellowLine; // 交通压黄线检测类型 + public int abTrafficOverLine; // 是否携带交通压线信息 + public int emTrafficOverLine; // 交通压线检测类型 - public int abTrafficRetrograde; // 是否携带交通逆行信息 - public int emTrafficRetrograde; // 交通逆行检测类型 + public int abTrafficOverYellowLine; // 是否携带交通压黄线信息 + public int emTrafficOverYellowLine; // 交通压黄线检测类型 - public int abTrafficTurnLeft; // 是否携带交通违章左转信息 - public int emTrafficTurnLeft; // 交通违章左转检测类型 + public int abTrafficRetrograde; // 是否携带交通逆行信息 + public int emTrafficRetrograde; // 交通逆行检测类型 - public int abTrafficTurnRight; // 是否携带交通违章右转信息 - public int emTrafficTurnRight; // 交通路口违章右转类型 + public int abTrafficTurnLeft; // 是否携带交通违章左转信息 + public int emTrafficTurnLeft; // 交通违章左转检测类型 - public int abTrafficU_Turn; // 是否携带交通违章掉头信息 - public int emTrafficU_Turn; // 交通违章掉头检测类型 + public int abTrafficTurnRight; // 是否携带交通违章右转信息 + public int emTrafficTurnRight; // 交通路口违章右转类型 - public int abTrafficCrossLane; // 是否携带交通违章变道信息 - public int emTrafficCrossLane; // 交通违章变道检测类型 + public int abTrafficU_Turn; // 是否携带交通违章掉头信息 + public int emTrafficU_Turn; // 交通违章掉头检测类型 - public int abTrafficParking; // 是否携带交通违章停车信息 - public int emTrafficParking; // 交通违章停车检测类型 + public int abTrafficCrossLane; // 是否携带交通违章变道信息 + public int emTrafficCrossLane; // 交通违章变道检测类型 - public int abTrafficJam; // 是否携带交通拥堵信息 - public int emTrafficJam; // 交通拥堵检测类型 + public int abTrafficParking; // 是否携带交通违章停车信息 + public int emTrafficParking; // 交通违章停车检测类型 - public int abTrafficIdle; // 是否携带交通交通空闲信息 - public int emTrafficIdle; // 交通交通空闲检测类型 + public int abTrafficJam; // 是否携带交通拥堵信息 + public int emTrafficJam; // 交通拥堵检测类型 - public int abTrafficWaitingArea; // 是否携带交通违章驶入待行区信息 - public int emTrafficWaitingArea; // 交通违章驶入待行区检测类型 + public int abTrafficIdle; // 是否携带交通交通空闲信息 + public int emTrafficIdle; // 交通交通空闲检测类型 - public int abTrafficUnderSpeed; // 是否携带交通欠速信息 - public int emTrafficUnderSpeed; // 交通欠速检测类型 + public int abTrafficWaitingArea; // 是否携带交通违章驶入待行区信息 + public int emTrafficWaitingArea; // 交通违章驶入待行区检测类型 - public int abTrafficOverSpeed; // 是否携带交通超速信息 - public int emTrafficOverSpeed; // 交通超速检测类型 + public int abTrafficUnderSpeed; // 是否携带交通欠速信息 + public int emTrafficUnderSpeed; // 交通欠速检测类型 - public int abTrafficWrongRoute; // 是否携带交通不按车道行驶信息 - public int emTrafficWrongRoute; // 交通不按车道行驶检测类型 + public int abTrafficOverSpeed; // 是否携带交通超速信息 + public int emTrafficOverSpeed; // 交通超速检测类型 - public int abTrafficYellowInRoute; // 是否携带交通黄牌占道信息 - public int emTrafficYellowInRoute; // 交通黄牌占道检测类型 + public int abTrafficWrongRoute; // 是否携带交通不按车道行驶信息 + public int emTrafficWrongRoute; // 交通不按车道行驶检测类型 - public int abTrafficVehicleInRoute; // 是否携带交通有车占道信息 - public int emTrafficVehicleInRoute; // 交通有车占道检测类型 + public int abTrafficYellowInRoute; // 是否携带交通黄牌占道信息 + public int emTrafficYellowInRoute; // 交通黄牌占道检测类型 - public int abTrafficControl; // 是否携带交通交通管制信息 - public int emTrafficControl; // 交通交通管制检测类型 + public int abTrafficVehicleInRoute; // 是否携带交通有车占道信息 + public int emTrafficVehicleInRoute; // 交通有车占道检测类型 - public int abTrafficObjectAlarm; // 是否携带交通指定类型抓拍信息 - public int emTrafficObjectAlarm; // 交通指定类型抓拍检测类型 + public int abTrafficControl; // 是否携带交通交通管制信息 + public int emTrafficControl; // 交通交通管制检测类型 - public int abTrafficAccident; // 是否携带交通交通事故信息 - public int emTrafficAccident; // 交通交通事故检测类型 + public int abTrafficObjectAlarm; // 是否携带交通指定类型抓拍信息 + public int emTrafficObjectAlarm; // 交通指定类型抓拍检测类型 - public int abTrafficStay; // 是否携带交通交通停留/滞留信息 - public int emTrafficStay; // 交通交通停留/滞留检测类型 + public int abTrafficAccident; // 是否携带交通交通事故信息 + public int emTrafficAccident; // 交通交通事故检测类型 - public int abTrafficPedestrainPriority; // 是否携带交通斑马线行人优先信息 - public int emTrafficPedestrainPriority; // 交通斑马线行人优先检测类型 + public int abTrafficStay; // 是否携带交通交通停留/滞留信息 + public int emTrafficStay; // 交通交通停留/滞留检测类型 - public int abTrafficPedestrain; // 是否携带交通交通行人事件信息 - public int emTrafficPedestrain; // 交通交通行人事件检测类型 + public int abTrafficPedestrainPriority; // 是否携带交通斑马线行人优先信息 + public int emTrafficPedestrainPriority; // 交通斑马线行人优先检测类型 - public int abTrafficThrow; // 是否携带交通交通抛洒物品事件信息 - public int emTrafficThrow; // 交通交通抛洒物品事件检测类型 + public int abTrafficPedestrain; // 是否携带交通交通行人事件信息 + public int emTrafficPedestrain; // 交通交通行人事件检测类型 - public int abTrafficVehicleInBusRoute; // 是否携带交通违章占道信息 - public int emTrafficVehicleInBusRoute; // 交通违章占道检测类型 + public int abTrafficThrow; // 是否携带交通交通抛洒物品事件信息 + public int emTrafficThrow; // 交通交通抛洒物品事件检测类型 - public int abTrafficBacking; // 是否携带交通违章倒车信息 - public int emTrafficBacking; // 交通违章倒车检测类型 + public int abTrafficVehicleInBusRoute; // 是否携带交通违章占道信息 + public int emTrafficVehicleInBusRoute; // 交通违章占道检测类型 - public int abTrafficOverStopLine; // 是否携带交通压停止线信息 - public int emTrafficOverStopLine; // 交通压停止线检测类型 + public int abTrafficBacking; // 是否携带交通违章倒车信息 + public int emTrafficBacking; // 交通违章倒车检测类型 - public int abTrafficParkingOnYellowBox; // 是否携带交通黄网格线抓拍信息 - public int emTrafficParkingOnYellowBox; // 交通黄网格线抓拍检测类型 + public int abTrafficOverStopLine; // 是否携带交通压停止线信息 + public int emTrafficOverStopLine; // 交通压停止线检测类型 - public int abTrafficParkingSpaceParking; // 是否携带交通车位有车信息 - public int emTrafficParkingSpaceParking; // 交通车位有车检测类型 + public int abTrafficParkingOnYellowBox; // 是否携带交通黄网格线抓拍信息 + public int emTrafficParkingOnYellowBox; // 交通黄网格线抓拍检测类型 - public int abTrafficParkingSpaceNoParking; // 是否携带交通车位无车信息 - public int emTrafficParkingSpaceNoParking; // 交通车位无车检测类型 + public int abTrafficParkingSpaceParking; // 是否携带交通车位有车信息 + public int emTrafficParkingSpaceParking; // 交通车位有车检测类型 - public int abTrafficParkingSpaceOverLine; // 是否携带交通车位有车压线信息 - public int emTrafficParkingSpaceOverLine; // 交通车位有车压线检测类型 + public int abTrafficParkingSpaceNoParking; // 是否携带交通车位无车信息 + public int emTrafficParkingSpaceNoParking; // 交通车位无车检测类型 - public int abParkingSpaceDetection; // 是否携带交通多停车位状态检测信息 - public int emParkingSpaceDetection; // 交通多停车位状态检测检测类型 + public int abTrafficParkingSpaceOverLine; // 是否携带交通车位有车压线信息 + public int emTrafficParkingSpaceOverLine; // 交通车位有车压线检测类型 - public int abTrafficRestrictedPlate; // 是否携带交通受限车牌信息 - public int emTrafficRestrictedPlate; // 交通受限车牌检测类型 + public int abParkingSpaceDetection; // 是否携带交通多停车位状态检测信息 + public int emParkingSpaceDetection; // 交通多停车位状态检测检测类型 - public int abTrafficWithoutSafeBelt; // 是否携带交通不系安全带信息 - public int emTrafficWithoutSafeBelt; // 交通不系安全带检测类型 + public int abTrafficRestrictedPlate; // 是否携带交通受限车牌信息 + public int emTrafficRestrictedPlate; // 交通受限车牌检测类型 - public int abTrafficNoPassing; // 是否携带交通禁行信息 - public int emTrafficNoPassing; // 交通禁行检测类型 + public int abTrafficWithoutSafeBelt; // 是否携带交通不系安全带信息 + public int emTrafficWithoutSafeBelt; // 交通不系安全带检测类型 - public int abVehicleAnalyse; // 是否携带交通车辆特征检测分析信息 - public int emVehicleAnalyse; // 交通车辆特征检测类型 + public int abTrafficNoPassing; // 是否携带交通禁行信息 + public int emTrafficNoPassing; // 交通禁行检测类型 - public int abCrossLineDetection; // 是否携带交通警戒线信息 - public int emCrossLineDetection; // 交通警戒线检测类型 + public int abVehicleAnalyse; // 是否携带交通车辆特征检测分析信息 + public int emVehicleAnalyse; // 交通车辆特征检测类型 - public int abCrossFenceDetection; // 是否携带交通穿越围栏信息 - public int emCrossFenceDetection; // 交通穿越围栏检测类型 + public int abCrossLineDetection; // 是否携带交通警戒线信息 + public int emCrossLineDetection; // 交通警戒线检测类型 - public int abCrossRegionDetection; // 是否携带交通警戒区信息 - public int emCrossRegionDetection; // 交通警戒区检测类型 + public int abCrossFenceDetection; // 是否携带交通穿越围栏信息 + public int emCrossFenceDetection; // 交通穿越围栏检测类型 - public int abPasteDetection; // 是否携带交通ATM贴条信息 - public int emPasteDetection; // 交通ATM贴条检测类型 + public int abCrossRegionDetection; // 是否携带交通警戒区信息 + public int emCrossRegionDetection; // 交通警戒区检测类型 - public int abLeftDetection; // 是否携带交通物品遗留信息 - public int emLeftDetection; // 交通物品遗留检测类型 + public int abPasteDetection; // 是否携带交通ATM贴条信息 + public int emPasteDetection; // 交通ATM贴条检测类型 - public int abPreservation; // 是否携带交通物品保全信息 - public int emPreservation; // 交通物品保全检测类型 + public int abLeftDetection; // 是否携带交通物品遗留信息 + public int emLeftDetection; // 交通物品遗留检测类型 - public int abTakenAwayDetection; // 是否携带交通物品搬移信息 - public int emTakenAwayDetection; // 交通物品搬移检测类型 + public int abPreservation; // 是否携带交通物品保全信息 + public int emPreservation; // 交通物品保全检测类型 - public int abStayDetection; // 是否携带交通停留/滞留信息 - public int emStayDetection; // 交通停留/滞留检测类型 + public int abTakenAwayDetection; // 是否携带交通物品搬移信息 + public int emTakenAwayDetection; // 交通物品搬移检测类型 - public int abParkingDetection; // 是否携带交通非法停车信息 - public int emParkingDetection; // 交通非法停车检测类型 + public int abStayDetection; // 是否携带交通停留/滞留信息 + public int emStayDetection; // 交通停留/滞留检测类型 - public int abWanderDetection; // 是否携带交通徘徊信息 - public int emWanderDetection; // 交通徘徊检测类型 + public int abParkingDetection; // 是否携带交通非法停车信息 + public int emParkingDetection; // 交通非法停车检测类型 - public int abMoveDetection; // 是否携带交通运动信息 - public int emMoveDetection; // 交通运动检测类型 + public int abWanderDetection; // 是否携带交通徘徊信息 + public int emWanderDetection; // 交通徘徊检测类型 - public int abTailDetection; // 是否携带交通尾随信息 - public int emTailDetection; // 交通尾随检测类型 + public int abMoveDetection; // 是否携带交通运动信息 + public int emMoveDetection; // 交通运动检测类型 - public int abRioterDetection; // 是否携带交通聚集信息 - public int emRioterDetection; // 交通聚集检测类型 + public int abTailDetection; // 是否携带交通尾随信息 + public int emTailDetection; // 交通尾随检测类型 - public int abFightDetection; // 是否携带交通打架信息 - public int emFightDetection; // 交通打架检测类型 + public int abRioterDetection; // 是否携带交通聚集信息 + public int emRioterDetection; // 交通聚集检测类型 - public int abRetrogradeDetection; // 是否携带交通逆行信息 - public int emRetrogradeDetection; // 交通逆行检测类型 + public int abFightDetection; // 是否携带交通打架信息 + public int emFightDetection; // 交通打架检测类型 - public int abFireDetection; // 是否携带交通火焰信息 - public int emFireDetection; // 交通火焰检测类型 + public int abRetrogradeDetection; // 是否携带交通逆行信息 + public int emRetrogradeDetection; // 交通逆行检测类型 - public int abSmokeDetection; // 是否携带交通烟雾信息 - public int emSmokeDetection; // 交通烟雾检测类型 + public int abFireDetection; // 是否携带交通火焰信息 + public int emFireDetection; // 交通火焰检测类型 - public int abNumberStat; // 是否携带交通数量统计信息 - public int emNumberStat; // 交通数量统计检测类型 + public int abSmokeDetection; // 是否携带交通烟雾信息 + public int emSmokeDetection; // 交通烟雾检测类型 - public int abVideoAbnormalDetection; // 是否携带交通视频异常信息 - public int emVideoAbnormalDetection; // 交通视频异常检测类型 + public int abNumberStat; // 是否携带交通数量统计信息 + public int emNumberStat; // 交通数量统计检测类型 - public int abPrisonerRiseDetection; // 是否携带看守所囚犯起身检测信息 - public int emPrisonerRiseDetection; // 看守所囚犯起身检测检测类型 + public int abVideoAbnormalDetection; // 是否携带交通视频异常信息 + public int emVideoAbnormalDetection; // 交通视频异常检测类型 - public int abFaceDetection; // 是否携带人脸检测信息 - public int emFaceDetection; // 人脸检测检测类型 + public int abPrisonerRiseDetection; // 是否携带看守所囚犯起身检测信息 + public int emPrisonerRiseDetection; // 看守所囚犯起身检测检测类型 - public int abFaceRecognition; // 是否携带人脸识别信息 - public int emFaceRecognition; // 人脸识别检测类型 + public int abFaceDetection; // 是否携带人脸检测信息 + public int emFaceDetection; // 人脸检测检测类型 - public int abDensityDetection; // 是否携带密集度检测信息 - public int emDensityDetection; // 密集度检测检测类型 + public int abFaceRecognition; // 是否携带人脸识别信息 + public int emFaceRecognition; // 人脸识别检测类型 - public int abQueueDetection; // 是否携带排队检测信息 - public int emQueueDetection; // 排队检测检测类型 + public int abDensityDetection; // 是否携带密集度检测信息 + public int emDensityDetection; // 密集度检测检测类型 - public int abClimbDetection; // 是否携带攀高检测信息 - public int emClimbDetection; // 攀高检测类型 + public int abQueueDetection; // 是否携带排队检测信息 + public int emQueueDetection; // 排队检测检测类型 - public int abLeaveDetection; // 是否携带离岗检测信息 - public int emLeaveDetection; // 离岗检测类型 + public int abClimbDetection; // 是否携带攀高检测信息 + public int emClimbDetection; // 攀高检测类型 - public int abVehicleOnPoliceCar; // 是否携带车载警车信息 - public int emVehicleOnPoliceCar; // 车载警车检测类型 + public int abLeaveDetection; // 是否携带离岗检测信息 + public int emLeaveDetection; // 离岗检测类型 - public int abVehicleOnBus; // 是否携带车载公交信息 - public int emVehicleOnBus; // 车载公交检测类型 + public int abVehicleOnPoliceCar; // 是否携带车载警车信息 + public int emVehicleOnPoliceCar; // 车载警车检测类型 - public int abVehicleOnSchoolBus; // 是否携带车载校车信息 - public int emVehicleOnSchoolBus; // 车载校车检测类型 + public int abVehicleOnBus; // 是否携带车载公交信息 + public int emVehicleOnBus; // 车载公交检测类型 - public int abStandUpDetection; // 是否携带学生起立信息 - public int emStandUpDetection; // 学生起立检测类型 + public int abVehicleOnSchoolBus; // 是否携带车载校车信息 + public int emVehicleOnSchoolBus; // 车载校车检测类型 + + public int abStandUpDetection; // 是否携带学生起立信息 + public int emStandUpDetection; // 学生起立检测类型 } - + // MixModeConfig中关于车道配置信息 public static class MIX_MODE_LANE_INFO extends Structure { - public int nLaneNum; // 车道配置个数 - public TRAFFIC_EVENT_CHECK_INFO[] stCheckInfo = (TRAFFIC_EVENT_CHECK_INFO[]) new TRAFFIC_EVENT_CHECK_INFO().toArray(MAX_LANE_CONFIG_NUMBER); // 车道配置对应事件检测信息 + public int nLaneNum; // 车道配置个数 + public TRAFFIC_EVENT_CHECK_INFO[] stCheckInfo = (TRAFFIC_EVENT_CHECK_INFO[]) new TRAFFIC_EVENT_CHECK_INFO().toArray(MAX_LANE_CONFIG_NUMBER); // 车道配置对应事件检测信息 } - + // MixModeConfig 混合模式违章配置 public static class MIX_MODE_CONFIG extends Structure { - public int bLaneDiffEnable; // 是否按车道区分 - public MIX_MODE_LANE_INFO stLaneInfo; - public TRAFFIC_EVENT_CHECK_INFO stCheckInfo; - + public int bLaneDiffEnable; // 是否按车道区分 + public MIX_MODE_LANE_INFO stLaneInfo; + public TRAFFIC_EVENT_CHECK_INFO stCheckInfo; + } - + // CFG_CMD_TRAFFICGLOBAL 交通全局配置配置表 - public static class CFG_TRAFFICGLOBAL_INFO extends Structure - { - public VIOLATIONCODE_INFO stViolationCode; // 违章代码配置表 - public int bEnableRedList; // 使能红名单检测,使能后,名单内车辆违章不上报 + public static class CFG_TRAFFICGLOBAL_INFO extends Structure { + public VIOLATIONCODE_INFO stViolationCode; // 违章代码配置表 + public int bEnableRedList; // 使能红名单检测,使能后,名单内车辆违章不上报 - public int abViolationTimeSchedule; // 是否携带违章抓拍自定义时间配置 + public int abViolationTimeSchedule; // 是否携带违章抓拍自定义时间配置 public VIOLATION_TIME_SCHEDULE stViolationTimeSchedule; // 违章抓拍自定义时间配置 - - public int abEnableBlackList; // 是否携带使能黑名单检测信息 - public int bEnableBlackList; // 使能黑名单检测 - public int abPriority; // 是否携带违章优先级参数 - public int nPriority; // 违章优先级个数 - public byte[] szPriority = new byte[MAX_PRIORITY_NUMBER*CFG_COMMON_STRING_256]; // 违章优先级, 0为最高优先级 + public int abEnableBlackList; // 是否携带使能黑名单检测信息 + public int bEnableBlackList; // 使能黑名单检测 + + public int abPriority; // 是否携带违章优先级参数 + public int nPriority; // 违章优先级个数 + public byte[] szPriority = new byte[MAX_PRIORITY_NUMBER * CFG_COMMON_STRING_256]; // 违章优先级, 0为最高优先级 - public int abNamingFormat; // 是否携带图片命名格式参数 - public TRAFFIC_NAMING_FORMAT stNamingFormat; // 图片命名格式参数配置 + public int abNamingFormat; // 是否携带图片命名格式参数 + public TRAFFIC_NAMING_FORMAT stNamingFormat; // 图片命名格式参数配置 - public int abVideoNamingFormat; // 是否携带录像命名格式参数 - public TRAFFIC_NAMING_FORMAT stVideoNamingFormat; // 录像命名格式参数配置 + public int abVideoNamingFormat; // 是否携带录像命名格式参数 + public TRAFFIC_NAMING_FORMAT stVideoNamingFormat; // 录像命名格式参数配置 - public int abCalibration; // 是否携带标定信息 + public int abCalibration; // 是否携带标定信息 public TRAFFIC_CALIBRATION_INFO stCalibration; // 标定信息 - - public int abAddress; // 是否携带查询地址参数 - public byte[] szAddress = new byte[CFG_COMMON_STRING_256]; // 查询地址,UTF-8编码 - public int abTransferPolicy; // 是否携带传输策略参数 - public int emTransferPolicy; // 传输策略, EM_TRANSFER_POLICY + public int abAddress; // 是否携带查询地址参数 + public byte[] szAddress = new byte[CFG_COMMON_STRING_256]; // 查询地址,UTF-8编码 - public int abSupportModeMaskConfig; // 是否携带违章掩码 + public int abTransferPolicy; // 是否携带传输策略参数 + public int emTransferPolicy; // 传输策略, EM_TRANSFER_POLICY + + public int abSupportModeMaskConfig; // 是否携带违章掩码 public TRAFFIC_EVENT_CHECK_MASK stSupportModeMaskConfig; // 违章类型支持的检测模式掩码配置 - public int abIsEnableLightState; // 是否携带灯组状态 + public int abIsEnableLightState; // 是否携带灯组状态 public ENABLE_LIGHT_STATE_INFO stIsEnableLightState; // 交通全局配置对应图片命名格式参数配置 - - public int abMixModeInfo; // 是否含有混合模式配置 - public MIX_MODE_CONFIG stMixModeInfo; // 混合模式配置 + + public int abMixModeInfo; // 是否含有混合模式配置 + public MIX_MODE_CONFIG stMixModeInfo; // 混合模式配置 } - + // 手动抓拍参数 - public static class MANUAL_SNAP_PARAMETER extends Structure - { - public int nChannel; // 抓图通道,从0开始 - public byte[] bySequence = new byte[64]; // 抓图序列号字符串 - public byte[] byReserved = new byte[60]; // 保留字段 + public static class MANUAL_SNAP_PARAMETER extends Structure { + public int nChannel; // 抓图通道,从0开始 + public byte[] bySequence = new byte[64]; // 抓图序列号字符串 + public byte[] byReserved = new byte[60]; // 保留字段 } - + // 视频统计小计信息 - public static class NET_VIDEOSTAT_SUBTOTAL extends Structure - { - public int nTotal; // 设备运行后人数统计总数 - public int nHour; // 小时内的总人数 - public int nToday; // 当天的总人数 - public int nOSD; // 统计人数,用于OSD显示, 可手动清除 - public byte[] reserved = new byte[252]; + public static class NET_VIDEOSTAT_SUBTOTAL extends Structure { + public int nTotal; // 设备运行后人数统计总数 + public int nHour; // 小时内的总人数 + public int nToday; // 当天的总人数 + public int nOSD; // 统计人数,用于OSD显示, 可手动清除 + public byte[] reserved = new byte[252]; } // 视频统计摘要信息 - public static class NET_VIDEOSTAT_SUMMARY extends Structure - { - public int nChannelID; // 通道号 - public byte[] szRuleName = new byte[32]; // 规则名称 - public NET_TIME_EX stuTime; // 统计时间 - public NET_VIDEOSTAT_SUBTOTAL stuEnteredSubtotal; // 进入小计 - public NET_VIDEOSTAT_SUBTOTAL stuExitedSubtotal; // 出去小计 - public int nInsidePeopleNum; // 区域内人数 - public int emRuleType; // 规则类型, 参考枚举 EM_RULE_TYPE - public int nRetExitManNum; // 离开的人数个数 - public NET_EXITMAN_STAY_STAT[] stuExitManStayInfo - = (NET_EXITMAN_STAY_STAT[])new NET_EXITMAN_STAY_STAT().toArray(MAX_EXIT_MAN_NUM); // 离开人员的滞留时间信息 - public byte[] reserved = new byte[1024]; // 保留字节 - } - + public static class NET_VIDEOSTAT_SUMMARY extends Structure { + public int nChannelID; // 通道号 + public byte[] szRuleName = new byte[32]; // 规则名称 + public NET_TIME_EX stuTime; // 统计时间 + public NET_VIDEOSTAT_SUBTOTAL stuEnteredSubtotal; // 进入小计 + public NET_VIDEOSTAT_SUBTOTAL stuExitedSubtotal; // 出去小计 + public int nInsidePeopleNum; // 区域内人数 + public int emRuleType; // 规则类型, 参考枚举 EM_RULE_TYPE + public int nRetExitManNum; // 离开的人数个数 + public NET_EXITMAN_STAY_STAT[] stuExitManStayInfo + = (NET_EXITMAN_STAY_STAT[]) new NET_EXITMAN_STAY_STAT().toArray(MAX_EXIT_MAN_NUM); // 离开人员的滞留时间信息 + public byte[] reserved = new byte[1024]; // 保留字节 + } + // 离开人员的滞留时间信息 - public static class NET_EXITMAN_STAY_STAT extends Structure - { - public NET_TIME stuEnterTime; // 人员进入区域时间 - public NET_TIME stuExitTime; // 人员离开区域时间 - public byte[] reserved = new byte[128]; // 保留字节 - } + public static class NET_EXITMAN_STAY_STAT extends Structure { + public NET_TIME stuEnterTime; // 人员进入区域时间 + public NET_TIME stuExitTime; // 人员离开区域时间 + public byte[] reserved = new byte[128]; // 保留字节 + } // CLIENT_AttachVideoStatSummary 入参 - public static class NET_IN_ATTACH_VIDEOSTAT_SUM extends Structure - { - public int dwSize; - public int nChannel; // 视频通道号 - public StdCallCallback cbVideoStatSum; // 视频统计摘要信息回调, fVideoStatSumCallBack 回调 - public Pointer dwUser; // 用户数据 - - public NET_IN_ATTACH_VIDEOSTAT_SUM() - { - this.dwSize = this.size(); - } + public static class NET_IN_ATTACH_VIDEOSTAT_SUM extends Structure { + public int dwSize; + public int nChannel; // 视频通道号 + public StdCallCallback cbVideoStatSum; // 视频统计摘要信息回调, fVideoStatSumCallBack 回调 + public Pointer dwUser; // 用户数据 + + public NET_IN_ATTACH_VIDEOSTAT_SUM() { + this.dwSize = this.size(); + } } + // CLIENT_AttachVideoStatSummary 出参 - public static class NET_OUT_ATTACH_VIDEOSTAT_SUM extends Structure - { - public int dwSize; - - public NET_OUT_ATTACH_VIDEOSTAT_SUM() - { - this.dwSize = this.size(); - } - + public static class NET_OUT_ATTACH_VIDEOSTAT_SUM extends Structure { + public int dwSize; + + public NET_OUT_ATTACH_VIDEOSTAT_SUM() { + this.dwSize = this.size(); + } + } // 接口(CLIENT_StartFindNumberStat)输入参数 - public static class NET_IN_FINDNUMBERSTAT extends Structure - { - public int dwSize; // 此结构体大小 - public int nChannelID; // 要进行查询的通道号 - public NET_TIME stStartTime; // 开始时间 暂时精确到小时 - public NET_TIME stEndTime; // 结束时间 暂时精确到小时 - public int nGranularityType; // 查询粒度0:分钟,1:小时,2:日,3:周,4:月,5:季,6:年 - // 7:即时, 8:人员 (7和8只在emRuleType为EM_RULE_MAN_NUM_DETECTION时有效) - public int nWaittime; // 等待接收数据的超时时间 - public int nPlanID; // 计划ID,仅球机有效,从1开始 - public int emRuleType; // 规则类型 - public int nMinStayTime; // 参考枚举 EM_RULE_TYPE, 区域人数查询最小滞留时间,不填默认为0,返回滞留时长大于等于该时间的人数信息 - // NumberStat时不需要此参数 - + public static class NET_IN_FINDNUMBERSTAT extends Structure { + public int dwSize; // 此结构体大小 + public int nChannelID; // 要进行查询的通道号 + public NET_TIME stStartTime; // 开始时间 暂时精确到小时 + public NET_TIME stEndTime; // 结束时间 暂时精确到小时 + public int nGranularityType; // 查询粒度0:分钟,1:小时,2:日,3:周,4:月,5:季,6:年 + // 7:即时, 8:人员 (7和8只在emRuleType为EM_RULE_MAN_NUM_DETECTION时有效) + public int nWaittime; // 等待接收数据的超时时间 + public int nPlanID; // 计划ID,仅球机有效,从1开始 + public int emRuleType; // 规则类型 + public int nMinStayTime; // 参考枚举 EM_RULE_TYPE, 区域人数查询最小滞留时间,不填默认为0,返回滞留时长大于等于该时间的人数信息 + // NumberStat时不需要此参数 + public NET_IN_FINDNUMBERSTAT() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 规则类型 - public static class EM_RULE_TYPE extends Structure - { - public static final int EM_RULE_UNKNOWN = 0; // 未知 - public static final int EM_RULE_NUMBER_STAT = 1; // 人数统计 - public static final int EM_RULE_MAN_NUM_DETECTION = 2; // 区域内人数统计 - } + public static class EM_RULE_TYPE extends Structure { + public static final int EM_RULE_UNKNOWN = 0; // 未知 + public static final int EM_RULE_NUMBER_STAT = 1; // 人数统计 + public static final int EM_RULE_MAN_NUM_DETECTION = 2; // 区域内人数统计 + } // 接口(CLIENT_StartFindNumberStat)输出参数 - public static class NET_OUT_FINDNUMBERSTAT extends Structure - { - public int dwSize; // 此结构体大小 - public int dwTotalCount; // 符合此次查询条件的结果总条数 - + public static class NET_OUT_FINDNUMBERSTAT extends Structure { + public int dwSize; // 此结构体大小 + public int dwTotalCount; // 符合此次查询条件的结果总条数 + public NET_OUT_FINDNUMBERSTAT() { - this.dwSize = this.size(); - } + this.dwSize = this.size(); + } } // 接口(CLIENT_DoFindNumberStat)输入参数 - public static class NET_IN_DOFINDNUMBERSTAT extends Structure - { - public int dwSize; // 此结构体大小 - public int nBeginNumber; // [0, totalCount-1], 查询起始序号,表示从beginNumber条记录开始,取count条记录返回; - public int nCount; // 每次查询的流量统计条数 - public int nWaittime; // 等待接收数据的超时时间 - + public static class NET_IN_DOFINDNUMBERSTAT extends Structure { + public int dwSize; // 此结构体大小 + public int nBeginNumber; // [0, totalCount-1], 查询起始序号,表示从beginNumber条记录开始,取count条记录返回; + public int nCount; // 每次查询的流量统计条数 + public int nWaittime; // 等待接收数据的超时时间 + public NET_IN_DOFINDNUMBERSTAT() { - this.dwSize = this.size(); - } - } - - public static class NET_NUMBERSTAT extends Structure - { - public int dwSize; - public int nChannelID; // 统计通道号 - public byte[] szRuleName = new byte[NET_CHAN_NAME_LEN]; // 规则名称 - public NET_TIME stuStartTime; // 开始时间 - public NET_TIME stuEndTime; // 结束时间 - public int nEnteredSubTotal; // 进入人数小计 - public int nExitedSubtotal; // 出去人数小计 - public int nAvgInside; // 平均保有人数(除去零值) - public int nMaxInside; // 最大保有人数 - public int nEnteredWithHelmet; // 戴安全帽进入人数小计 - public int nEnteredWithoutHelmet; // 不戴安全帽进入人数小计 - public int nExitedWithHelmet; // 戴安全帽出去人数小计 - public int nExitedWithoutHelmet; // 不戴安全帽出去人数小计 - public int nInsideSubtotal; // 在区域内人数小计 - + this.dwSize = this.size(); + } + } + + public static class NET_NUMBERSTAT extends Structure { + public int dwSize; + public int nChannelID; // 统计通道号 + public byte[] szRuleName = new byte[NET_CHAN_NAME_LEN]; // 规则名称 + public NET_TIME stuStartTime; // 开始时间 + public NET_TIME stuEndTime; // 结束时间 + public int nEnteredSubTotal; // 进入人数小计 + public int nExitedSubtotal; // 出去人数小计 + public int nAvgInside; // 平均保有人数(除去零值) + public int nMaxInside; // 最大保有人数 + public int nEnteredWithHelmet; // 戴安全帽进入人数小计 + public int nEnteredWithoutHelmet; // 不戴安全帽进入人数小计 + public int nExitedWithHelmet; // 戴安全帽出去人数小计 + public int nExitedWithoutHelmet; // 不戴安全帽出去人数小计 + public int nInsideSubtotal; // 在区域内人数小计 + public NET_NUMBERSTAT() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } // 接口(CLIENT_DoFindNumberStat)输出参数 - public static class NET_OUT_DOFINDNUMBERSTAT extends Structure - { - public int dwSize; // 此结构体大小 - public int nCount; // 查询返回人数统计信息个数 - public Pointer pstuNumberStat; // 返回人数统计信息数组, NET_NUMBERSTAT 类型 - public int nBufferLen; // 用户申请的内存大小,以NET_NUMBERSTAT中的dwsize大小为单位 - public int nMinStayTime; // 区域人数查询时指定的最小滞留时间 - + public static class NET_OUT_DOFINDNUMBERSTAT extends Structure { + public int dwSize; // 此结构体大小 + public int nCount; // 查询返回人数统计信息个数 + public Pointer pstuNumberStat; // 返回人数统计信息数组, NET_NUMBERSTAT 类型 + public int nBufferLen; // 用户申请的内存大小,以NET_NUMBERSTAT中的dwsize大小为单位 + public int nMinStayTime; // 区域人数查询时指定的最小滞留时间 + public NET_OUT_DOFINDNUMBERSTAT() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - - public static class CONNECT_STATE extends Structure - { + + public static class CONNECT_STATE extends Structure { public static final int CONNECT_STATE_UNCONNECT = 0; public static final int CONNECT_STATE_CONNECTING = 1; public static final int CONNECT_STATE_CONNECTED = 2; @@ -8265,785 +7951,719 @@ public interface NetSDKLib extends Library { } // 虚拟摄像头状态查询 - public static class NET_DEV_VIRTUALCAMERA_STATE_INFO extends Structure - { - public int nStructSize; //结构体大小 - public int nChannelID; //通道号 - public int emConnectState; //连接状态, 取值范围为CONNECT_STATE中的值 - public int uiPOEPort; //此虚拟摄像头所连接的POE端口号,0表示不是POE连接, 类型为unsigned int - public byte[] szDeviceName = new byte[64]; //设备名称 - public byte[] szDeviceType = new byte[128]; //设备类型 - public byte[] szSystemType = new byte[128]; //系统版本 - public byte[] szSerialNo = new byte[NET_SERIALNO_LEN];//序列号 - public int nVideoInput; //视频输入 - public int nAudioInput; //音频输入 - public int nAlarmOutput; //外部报警 - - public NET_DEV_VIRTUALCAMERA_STATE_INFO() - { - this.nStructSize = this.size(); - } - } - + public static class NET_DEV_VIRTUALCAMERA_STATE_INFO extends Structure { + public int nStructSize; //结构体大小 + public int nChannelID; //通道号 + public int emConnectState; //连接状态, 取值范围为CONNECT_STATE中的值 + public int uiPOEPort; //此虚拟摄像头所连接的POE端口号,0表示不是POE连接, 类型为unsigned int + public byte[] szDeviceName = new byte[64]; //设备名称 + public byte[] szDeviceType = new byte[128]; //设备类型 + public byte[] szSystemType = new byte[128]; //系统版本 + public byte[] szSerialNo = new byte[NET_SERIALNO_LEN];//序列号 + public int nVideoInput; //视频输入 + public int nAudioInput; //音频输入 + public int nAlarmOutput; //外部报警 + + public NET_DEV_VIRTUALCAMERA_STATE_INFO() { + this.nStructSize = this.size(); + } + } + // 录像文件类型 - public static class NET_RECORD_TYPE extends Structure - { - public final static int NET_RECORD_TYPE_ALL = 0; // 所有录像 - public final static int NET_RECORD_TYPE_NORMAL = 1; // 普通录像 - public final static int NET_RECORD_TYPE_ALARM = 2; // 外部报警录像 - public final static int NET_RECORD_TYPE_MOTION = 3; // 动检报警录像 - } - + public static class NET_RECORD_TYPE extends Structure { + public final static int NET_RECORD_TYPE_ALL = 0; // 所有录像 + public final static int NET_RECORD_TYPE_NORMAL = 1; // 普通录像 + public final static int NET_RECORD_TYPE_ALARM = 2; // 外部报警录像 + public final static int NET_RECORD_TYPE_MOTION = 3; // 动检报警录像 + } + // 对讲方式 - public static class EM_USEDEV_MODE extends Structure - { - public static final int NET_TALK_CLIENT_MODE = 0; // 设置客户端方式进行语音对讲 - public static final int NET_TALK_SERVER_MODE = 1; // 设置服务器方式进行语音对讲 - public static final int NET_TALK_ENCODE_TYPE = 2; // 设置语音对讲编码格式(对应 NETDEV_TALKDECODE_INFO) - public static final int NET_ALARM_LISTEN_MODE = 3; // 设置报警订阅方式 - public static final int NET_CONFIG_AUTHORITY_MODE = 4; // 设置通过权限进行配置管理 - public static final int NET_TALK_TALK_CHANNEL = 5; // 设置对讲通道(0~MaxChannel-1) - public static final int NET_RECORD_STREAM_TYPE = 6; // 设置待查询及按时间回放的录像码流类型(0-主辅码流,1-主码流,2-辅码流) - public static final int NET_TALK_SPEAK_PARAM = 7; // 设置语音对讲喊话参数,对应结构体 NET_SPEAK_PARAM - public static final int NET_RECORD_TYPE = 8; // 设置按时间录像回放及下载的录像文件类型(详见 NET_RECORD_TYPE) - public static final int NET_TALK_MODE3 = 9; // 设置三代设备的语音对讲参数, 对应结构体 NET_TALK_EX - public static final int NET_PLAYBACK_REALTIME_MODE = 10; // 设置实时回放功能(0-关闭,1开启) - public static final int NET_TALK_TRANSFER_MODE = 11; // 设置语音对讲是否为转发模式, 对应结构体 NET_TALK_TRANSFER_PARAM - public static final int NET_TALK_VT_PARAM = 12; // 设置VT对讲参数, 对应结构体 NET_VT_TALK_PARAM - public static final int NET_TARGET_DEV_ID = 13; // 设置目标设备标示符, 用以查询新系统能力(非0-转发系统能力消息) - } - + public static class EM_USEDEV_MODE extends Structure { + public static final int NET_TALK_CLIENT_MODE = 0; // 设置客户端方式进行语音对讲 + public static final int NET_TALK_SERVER_MODE = 1; // 设置服务器方式进行语音对讲 + public static final int NET_TALK_ENCODE_TYPE = 2; // 设置语音对讲编码格式(对应 NETDEV_TALKDECODE_INFO) + public static final int NET_ALARM_LISTEN_MODE = 3; // 设置报警订阅方式 + public static final int NET_CONFIG_AUTHORITY_MODE = 4; // 设置通过权限进行配置管理 + public static final int NET_TALK_TALK_CHANNEL = 5; // 设置对讲通道(0~MaxChannel-1) + public static final int NET_RECORD_STREAM_TYPE = 6; // 设置待查询及按时间回放的录像码流类型(0-主辅码流,1-主码流,2-辅码流) + public static final int NET_TALK_SPEAK_PARAM = 7; // 设置语音对讲喊话参数,对应结构体 NET_SPEAK_PARAM + public static final int NET_RECORD_TYPE = 8; // 设置按时间录像回放及下载的录像文件类型(详见 NET_RECORD_TYPE) + public static final int NET_TALK_MODE3 = 9; // 设置三代设备的语音对讲参数, 对应结构体 NET_TALK_EX + public static final int NET_PLAYBACK_REALTIME_MODE = 10; // 设置实时回放功能(0-关闭,1开启) + public static final int NET_TALK_TRANSFER_MODE = 11; // 设置语音对讲是否为转发模式, 对应结构体 NET_TALK_TRANSFER_PARAM + public static final int NET_TALK_VT_PARAM = 12; // 设置VT对讲参数, 对应结构体 NET_VT_TALK_PARAM + public static final int NET_TARGET_DEV_ID = 13; // 设置目标设备标示符, 用以查询新系统能力(非0-转发系统能力消息) + } + // 语音编码类型 - public static class NET_TALK_CODING_TYPE extends Structure - { - public static final int NET_TALK_DEFAULT = 0; // 无头PCM - public static final int NET_TALK_PCM = 1; // 带头PCM - public static final int NET_TALK_G711a = 2; // G711a - public static final int NET_TALK_AMR = 3; // AMR - public static final int NET_TALK_G711u = 4; // G711u - public static final int NET_TALK_G726 = 5; // G726 - public static final int NET_TALK_G723_53 = 6; // G723_53 - public static final int NET_TALK_G723_63 = 7; // G723_63 - public static final int NET_TALK_AAC = 8; // AAC - public static final int NET_TALK_OGG = 9; // OGG - public static final int NET_TALK_G729 = 10; // G729 - public static final int NET_TALK_MPEG2 = 11; // MPEG2 - public static final int NET_TALK_MPEG2_Layer2 = 12; // MPEG2-Layer2 - public static final int NET_TALK_G722_1 = 13; // G.722.1 - public static final int NET_TALK_ADPCM = 21; // ADPCM - public static final int NET_TALK_MP3 = 22; // MP3 - } - + public static class NET_TALK_CODING_TYPE extends Structure { + public static final int NET_TALK_DEFAULT = 0; // 无头PCM + public static final int NET_TALK_PCM = 1; // 带头PCM + public static final int NET_TALK_G711a = 2; // G711a + public static final int NET_TALK_AMR = 3; // AMR + public static final int NET_TALK_G711u = 4; // G711u + public static final int NET_TALK_G726 = 5; // G726 + public static final int NET_TALK_G723_53 = 6; // G723_53 + public static final int NET_TALK_G723_63 = 7; // G723_63 + public static final int NET_TALK_AAC = 8; // AAC + public static final int NET_TALK_OGG = 9; // OGG + public static final int NET_TALK_G729 = 10; // G729 + public static final int NET_TALK_MPEG2 = 11; // MPEG2 + public static final int NET_TALK_MPEG2_Layer2 = 12; // MPEG2-Layer2 + public static final int NET_TALK_G722_1 = 13; // G.722.1 + public static final int NET_TALK_ADPCM = 21; // ADPCM + public static final int NET_TALK_MP3 = 22; // MP3 + } + // 设备支持的语音对讲类型 - public static class NETDEV_TALKFORMAT_LIST extends Structure - { - public int nSupportNum; // 个数 - public NETDEV_TALKDECODE_INFO[] type = (NETDEV_TALKDECODE_INFO[])new NETDEV_TALKDECODE_INFO().toArray(64); // 编码类型 - + public static class NETDEV_TALKFORMAT_LIST extends Structure { + public int nSupportNum; // 个数 + public NETDEV_TALKDECODE_INFO[] type = (NETDEV_TALKDECODE_INFO[]) new NETDEV_TALKDECODE_INFO().toArray(64); // 编码类型 + public byte[] reserved = new byte[64]; } - + // 语音编码信息 - public static class NETDEV_TALKDECODE_INFO extends Structure - { - public int encodeType; // 编码类型, encodeType对应NET_TALK_CODING_TYPE - public int nAudioBit; // 位数,如8或16, 目前只能是16 - public int dwSampleRate; // 采样率,如8000或16000, 目前只能是16000 - public int nPacketPeriod; // 打包周期, 单位ms, 目前只能是25 - public byte[] reserved = new byte[60]; - } - + public static class NETDEV_TALKDECODE_INFO extends Structure { + public int encodeType; // 编码类型, encodeType对应NET_TALK_CODING_TYPE + public int nAudioBit; // 位数,如8或16, 目前只能是16 + public int dwSampleRate; // 采样率,如8000或16000, 目前只能是16000 + public int nPacketPeriod; // 打包周期, 单位ms, 目前只能是25 + public byte[] reserved = new byte[60]; + } + // 语音对讲喊话参数 - public static class NET_SPEAK_PARAM extends Structure - { - public int dwSize; // 结构体大小 - public int nMode; // 0:对讲(默认模式),1:喊话;从喊话切换到对讲要重新设置 - public int nSpeakerChannel; // 扬声器通道号,喊话时有效 - public boolean bEnableWait; // 开启对讲时是否等待设备的响应,默认不等待.TRUE:等待;FALSE:不等待 - // 超时时间由CLIENT_SetNetworkParam设置,对应NET_PARAM的nWaittime字段 - public NET_SPEAK_PARAM() - { - this.dwSize = this.size(); - } - } - + public static class NET_SPEAK_PARAM extends Structure { + public int dwSize; // 结构体大小 + public int nMode; // 0:对讲(默认模式),1:喊话;从喊话切换到对讲要重新设置 + public int nSpeakerChannel; // 扬声器通道号,喊话时有效 + public boolean bEnableWait; // 开启对讲时是否等待设备的响应,默认不等待.TRUE:等待;FALSE:不等待 + + // 超时时间由CLIENT_SetNetworkParam设置,对应NET_PARAM的nWaittime字段 + public NET_SPEAK_PARAM() { + this.dwSize = this.size(); + } + } + // 是否开启语音对讲的转发模式 - public static class NET_TALK_TRANSFER_PARAM extends Structure - { - public int dwSize; - public int bTransfer; // 是否开启语音对讲转发模式, TRUE: 开启转发 - - public NET_TALK_TRANSFER_PARAM() - { - this.dwSize = this.size(); - } - } - + public static class NET_TALK_TRANSFER_PARAM extends Structure { + public int dwSize; + public int bTransfer; // 是否开启语音对讲转发模式, TRUE: 开启转发 + + public NET_TALK_TRANSFER_PARAM() { + this.dwSize = this.size(); + } + } + // 预览类型,对应CLIENT_RealPlayEx接口 - public static class NET_RealPlayType extends Structure - { - public static final int NET_RType_Realplay = 0; // 实时预览 - public static final int NET_RType_Multiplay = 1; // 多画面预览 - public static final int NET_RType_Realplay_0 = 2; // 实时监视-主码流 ,等同于NET_RType_Realplay - public static final int NET_RType_Realplay_1 = 3; // 实时监视-从码流1 - public static final int NET_RType_Realplay_2 = 4; // 实时监视-从码流2 - public static final int NET_RType_Realplay_3 = 5; // 实时监视-从码流3 - public static final int NET_RType_Multiplay_1 = 6; // 多画面预览-1画面 - public static final int NET_RType_Multiplay_4 = 7; // 多画面预览-4画面 - public static final int NET_RType_Multiplay_8 = 8; // 多画面预览-8画面 - public static final int NET_RType_Multiplay_9 = 9; // 多画面预览-9画面 - public static final int NET_RType_Multiplay_16 = 10; // 多画面预览-16画面 - public static final int NET_RType_Multiplay_6 = 11; // 多画面预览-6画面 - public static final int NET_RType_Multiplay_12 = 12; // 多画面预览-12画面 - public static final int NET_RType_Multiplay_25 = 13; // 多画面预览-25画面 - public static final int NET_RType_Multiplay_36 = 14; // 多画面预览-36画面 - public static final int NET_RType_Realplay_Test = 255; // 带宽测试码流 - } - + public static class NET_RealPlayType extends Structure { + public static final int NET_RType_Realplay = 0; // 实时预览 + public static final int NET_RType_Multiplay = 1; // 多画面预览 + public static final int NET_RType_Realplay_0 = 2; // 实时监视-主码流 ,等同于NET_RType_Realplay + public static final int NET_RType_Realplay_1 = 3; // 实时监视-从码流1 + public static final int NET_RType_Realplay_2 = 4; // 实时监视-从码流2 + public static final int NET_RType_Realplay_3 = 5; // 实时监视-从码流3 + public static final int NET_RType_Multiplay_1 = 6; // 多画面预览-1画面 + public static final int NET_RType_Multiplay_4 = 7; // 多画面预览-4画面 + public static final int NET_RType_Multiplay_8 = 8; // 多画面预览-8画面 + public static final int NET_RType_Multiplay_9 = 9; // 多画面预览-9画面 + public static final int NET_RType_Multiplay_16 = 10; // 多画面预览-16画面 + public static final int NET_RType_Multiplay_6 = 11; // 多画面预览-6画面 + public static final int NET_RType_Multiplay_12 = 12; // 多画面预览-12画面 + public static final int NET_RType_Multiplay_25 = 13; // 多画面预览-25画面 + public static final int NET_RType_Multiplay_36 = 14; // 多画面预览-36画面 + public static final int NET_RType_Realplay_Test = 255; // 带宽测试码流 + } + // 回调视频数据帧的帧参数结构体 - public static class tagVideoFrameParam extends Structure - { - public byte encode; // 编码类型 - public byte frametype; // I = 0, P = 1, B = 2... - public byte format; // PAL - 0, NTSC - 1 - public byte size; // CIF - 0, HD1 - 1, 2CIF - 2, D1 - 3, VGA - 4, QCIF - 5, QVGA - 6 , - // SVCD - 7,QQVGA - 8, SVGA - 9, XVGA - 10,WXGA - 11,SXGA - 12,WSXGA - 13,UXGA - 14,WUXGA - 15, LFT - 16, 720 - 17, 1080 - 18 ,1_3M-19 - // 2M-20, 5M-21;当size=255时,成员变量width,height 有效 - public int fourcc; // 如果是H264编码则总为0,否则值为*( DWORD*)"DIVX",即0x58564944 - public short width; // 宽,单位是像素,当size=255时有效 - public short height; // 高,单位是像素,当size=255时有效 - public NET_TIME struTime; // 时间信息 - } - + public static class tagVideoFrameParam extends Structure { + public byte encode; // 编码类型 + public byte frametype; // I = 0, P = 1, B = 2... + public byte format; // PAL - 0, NTSC - 1 + public byte size; // CIF - 0, HD1 - 1, 2CIF - 2, D1 - 3, VGA - 4, QCIF - 5, QVGA - 6 , + // SVCD - 7,QQVGA - 8, SVGA - 9, XVGA - 10,WXGA - 11,SXGA - 12,WSXGA - 13,UXGA - 14,WUXGA - 15, LFT - 16, 720 - 17, 1080 - 18 ,1_3M-19 + // 2M-20, 5M-21;当size=255时,成员变量width,height 有效 + public int fourcc; // 如果是H264编码则总为0,否则值为*( DWORD*)"DIVX",即0x58564944 + public short width; // 宽,单位是像素,当size=255时有效 + public short height; // 高,单位是像素,当size=255时有效 + public NET_TIME struTime; // 时间信息 + } + // 回调音频数据帧的帧参数结构体 - public static class tagCBPCMDataParam extends Structure - { - public byte channels; // 声道数 - public byte samples; // 采样 0 - 8000, 1 - 11025, 2 - 16000, 3 - 22050, 4 - 32000, 5 - 44100, 6 - 48000 - public byte depth; // 采样深度 取值8或者16等。直接表示 - public byte param1; // 0 - 指示无符号,1-指示有符号 - public int reserved; // 保留 - } - + public static class tagCBPCMDataParam extends Structure { + public byte channels; // 声道数 + public byte samples; // 采样 0 - 8000, 1 - 11025, 2 - 16000, 3 - 22050, 4 - 32000, 5 - 44100, 6 - 48000 + public byte depth; // 采样深度 取值8或者16等。直接表示 + public byte param1; // 0 - 指示无符号,1-指示有符号 + public int reserved; // 保留 + } + // 视频监视断开事件类型 - public static class EM_REALPLAY_DISCONNECT_EVENT_TYPE extends Structure - { - public static final int DISCONNECT_EVENT_REAVE = 0; // 表示高级用户抢占低级用户资源 - public static final int DISCONNECT_EVENT_NETFORBID = 1; // 禁止入网 + public static class EM_REALPLAY_DISCONNECT_EVENT_TYPE extends Structure { + public static final int DISCONNECT_EVENT_REAVE = 0; // 表示高级用户抢占低级用户资源 + public static final int DISCONNECT_EVENT_NETFORBID = 1; // 禁止入网 public static final int DISCONNECT_EVENT_SUBCONNECT = 2; // 动态子链接断开 } - + // 电池电压过低报警 - public static class ALARM_BATTERYLOWPOWER_INFO extends Structure - { - public int dwSize; //结构体大小 - public int nAction; //0:开始1:停止 - public int nBatteryLeft; //剩余电量百分比,单位% - public NET_TIME stTime; //事件发生时间 - public int nChannelID; //通道号,标识子设备电池,从0开始 - - public ALARM_BATTERYLOWPOWER_INFO() - { - this.dwSize = this.size(); - } - } - + public static class ALARM_BATTERYLOWPOWER_INFO extends Structure { + public int dwSize; //结构体大小 + public int nAction; //0:开始1:停止 + public int nBatteryLeft; //剩余电量百分比,单位% + public NET_TIME stTime; //事件发生时间 + public int nChannelID; //通道号,标识子设备电池,从0开始 + + public ALARM_BATTERYLOWPOWER_INFO() { + this.dwSize = this.size(); + } + } + // 温度过高报警 - public static class ALARM_TEMPERATURE_INFO extends Structure - { - public int dwSize; //结构体大小 - public byte[] szSensorName = new byte[NET_MACHINE_NAME_NUM];//温度传感器名称 - public int nChannelID; //通道号 - public int nAction; //0:开始1:停止 - public float fTemperature; //当前温度值,单位摄氏度 - public NET_TIME stTime; //事件发生时间 - - public ALARM_TEMPERATURE_INFO() - { - this.dwSize = this.size(); - } - } - + public static class ALARM_TEMPERATURE_INFO extends Structure { + public int dwSize; //结构体大小 + public byte[] szSensorName = new byte[NET_MACHINE_NAME_NUM];//温度传感器名称 + public int nChannelID; //通道号 + public int nAction; //0:开始1:停止 + public float fTemperature; //当前温度值,单位摄氏度 + public NET_TIME stTime; //事件发生时间 + + public ALARM_TEMPERATURE_INFO() { + this.dwSize = this.size(); + } + } + // 普通报警信息 - public static class NET_CLIENT_STATE_EX extends Structure - { - public int channelcount; - public int alarminputcount; - public byte[] alarm = new byte[32]; // 外部报警 - public byte[] motiondection = new byte[32]; // 动态检测 - public byte[] videolost = new byte[32]; // 视频丢失 - public byte[] bReserved = new byte[32]; - } - + public static class NET_CLIENT_STATE_EX extends Structure { + public int channelcount; + public int alarminputcount; + public byte[] alarm = new byte[32]; // 外部报警 + public byte[] motiondection = new byte[32]; // 动态检测 + public byte[] videolost = new byte[32]; // 视频丢失 + public byte[] bReserved = new byte[32]; + } + // 视频遮挡报警状态信息对应结构体 - public static class NET_CLIENT_VIDEOBLIND_STATE extends Structure - { - public int dwSize; - public int channelcount; - public int[] dwAlarmState = new int[NET_MAX_CHANMASK];//每一个int按位表示32通道的报警状态,0-表示无报警,1-表示有报警 - - public NET_CLIENT_VIDEOBLIND_STATE() - { - this.dwSize = this.size(); - } - } - + public static class NET_CLIENT_VIDEOBLIND_STATE extends Structure { + public int dwSize; + public int channelcount; + public int[] dwAlarmState = new int[NET_MAX_CHANMASK];//每一个int按位表示32通道的报警状态,0-表示无报警,1-表示有报警 + + public NET_CLIENT_VIDEOBLIND_STATE() { + this.dwSize = this.size(); + } + } + // 视频丢失报警状态信息对应结构体 - public static class NET_CLIENT_VIDEOLOST_STATE extends Structure - { - public int dwSize; - public int channelcount; - public int[] dwAlarmState = new int[NET_MAX_CHANMASK];//每一个int按位表示32通道的报警状态(只有dwAlarmState[0]有效),0-表示无报警,1-表示有报警 - - public NET_CLIENT_VIDEOLOST_STATE() - { - this.dwSize = this.size(); - } - } - + public static class NET_CLIENT_VIDEOLOST_STATE extends Structure { + public int dwSize; + public int channelcount; + public int[] dwAlarmState = new int[NET_MAX_CHANMASK];//每一个int按位表示32通道的报警状态(只有dwAlarmState[0]有效),0-表示无报警,1-表示有报警 + + public NET_CLIENT_VIDEOLOST_STATE() { + this.dwSize = this.size(); + } + } + // 门禁开门 CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_ACCESS_OPEN 命令参数 public static class NET_CTRL_ACCESS_OPEN extends Structure { - public int dwSize; - public int nChannelID; // 通道号(0开始) - public Pointer szTargetID; // 转发目标设备ID,为NULL表示不转发 - public byte[] szUserID = new byte[MAX_COMMON_STRING_32];//远程用户ID - public int emOpenDoorType; // 开门方式, 参考 EM_OPEN_DOOR_TYPE - + public int dwSize; + public int nChannelID; // 通道号(0开始) + public Pointer szTargetID; // 转发目标设备ID,为NULL表示不转发 + public byte[] szUserID = new byte[MAX_COMMON_STRING_32];//远程用户ID + public int emOpenDoorType; // 开门方式, 参考 EM_OPEN_DOOR_TYPE + public NET_CTRL_ACCESS_OPEN() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // 门禁控制--开门方式 - public static class EM_OPEN_DOOR_TYPE extends Structure - { - public static final int EM_OPEN_DOOR_TYPE_UNKNOWN = 0; - public static final int EM_OPEN_DOOR_TYPE_REMOTE = 1; // 远程开门 - public static final int EM_OPEN_DOOR_TYPE_LOCAL_PASSWORD = 2; // 本地密码开门 - public static final int EM_OPEN_DOOR_TYPE_LOCAL_CARD = 3; // 本地刷卡开门 - public static final int EM_OPEN_DOOR_TYPE_LOCAL_BUTTON = 4; // 本地按钮开门 - } - + public static class EM_OPEN_DOOR_TYPE extends Structure { + public static final int EM_OPEN_DOOR_TYPE_UNKNOWN = 0; + public static final int EM_OPEN_DOOR_TYPE_REMOTE = 1; // 远程开门 + public static final int EM_OPEN_DOOR_TYPE_LOCAL_PASSWORD = 2; // 本地密码开门 + public static final int EM_OPEN_DOOR_TYPE_LOCAL_CARD = 3; // 本地刷卡开门 + public static final int EM_OPEN_DOOR_TYPE_LOCAL_BUTTON = 4; // 本地按钮开门 + } + // 门禁关门CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_ACCESS_CLOSE 命令参数 - public static class NET_CTRL_ACCESS_CLOSE extends Structure - { - public int dwSize; - public int nChannelID;//通道号(0开始) - + public static class NET_CTRL_ACCESS_CLOSE extends Structure { + public int dwSize; + public int nChannelID;//通道号(0开始) + public NET_CTRL_ACCESS_CLOSE() { - this.dwSize = this.size(); - } - } - - // 门禁状态类型 - public static class EM_NET_DOOR_STATUS_TYPE extends Structure - { - public static final int EM_NET_DOOR_STATUS_UNKNOWN=0; - public static final int EM_NET_DOOR_STATUS_OPEN=EM_NET_DOOR_STATUS_UNKNOWN+1; //门打开 - public static final int EM_NET_DOOR_STATUS_CLOSE=EM_NET_DOOR_STATUS_OPEN+1; //门关闭 - public static final int EM_NET_DOOR_STATUS_BREAK=EM_NET_DOOR_STATUS_CLOSE+1; //门异常打开 - } - - // 门禁状态信息(CLIENT_QueryDevState 接口输入参数) - public static class NET_DOOR_STATUS_INFO extends Structure - { - public int dwSize; - public int nChannel;//门禁通道号 - public int emStateType;//门禁状态信息, 对应枚举EM_NET_DOOR_STATUS_TYPE - - public NET_DOOR_STATUS_INFO() { - this.dwSize = this.size(); - } - } + this.dwSize = this.size(); + } + } + + // 门禁状态类型 + public static class EM_NET_DOOR_STATUS_TYPE extends Structure { + public static final int EM_NET_DOOR_STATUS_UNKNOWN = 0; + public static final int EM_NET_DOOR_STATUS_OPEN = EM_NET_DOOR_STATUS_UNKNOWN + 1; //门打开 + public static final int EM_NET_DOOR_STATUS_CLOSE = EM_NET_DOOR_STATUS_OPEN + 1; //门关闭 + public static final int EM_NET_DOOR_STATUS_BREAK = EM_NET_DOOR_STATUS_CLOSE + 1; //门异常打开 + } + + // 门禁状态信息(CLIENT_QueryDevState 接口输入参数) + public static class NET_DOOR_STATUS_INFO extends Structure { + public int dwSize; + public int nChannel;//门禁通道号 + public int emStateType;//门禁状态信息, 对应枚举EM_NET_DOOR_STATUS_TYPE + + public NET_DOOR_STATUS_INFO() { + this.dwSize = this.size(); + } + } // 开启道闸参数(对应 CTRLTYPE_CTRL_OPEN_STROBE 命令) - public static class NET_CTRL_OPEN_STROBE extends Structure - { - public int dwSize; - public int nChannelId; // 通道号 - public byte[] szPlateNumber = new byte[64]; // 车牌号码 - - public NET_CTRL_OPEN_STROBE() { - this.dwSize = this.size(); - } - } - + public static class NET_CTRL_OPEN_STROBE extends Structure { + public int dwSize; + public int nChannelId; // 通道号 + public byte[] szPlateNumber = new byte[64]; // 车牌号码 + + public NET_CTRL_OPEN_STROBE() { + this.dwSize = this.size(); + } + } + // 关闭道闸参数(对应 CTRLTYPE_CTRL_CLOSE_STROBE 命令) - public static class NET_CTRL_CLOSE_STROBE extends Structure - { - public int dwSize; - public int nChannelId; // 通道号 - - public NET_CTRL_CLOSE_STROBE() { - this.dwSize = this.size(); - } + public static class NET_CTRL_CLOSE_STROBE extends Structure { + public int dwSize; + public int nChannelId; // 通道号 + + public NET_CTRL_CLOSE_STROBE() { + this.dwSize = this.size(); + } } // 道闸控制方式枚举 - public static class NET_EM_CFG_TRAFFICSTROBE_CTRTYPE extends Structure - { - public static final int NET_EM_CFG_CTRTYPE_UNKNOWN = 0; // 未定义 - public static final int NET_EM_CFG_CTRTYPE_TRAFFICTRUSTLIST = 1; // 通过白名单控制是否开闸;只有白名单内车辆才开闸 - public static final int NET_EM_CFG_CTRTYPE_ALLSNAPCAR = 2; // 针对所有抓拍车辆都开闸 - public static final int NET_EM_CFG_CTRTYPE_ORDER = 3; // 通过上层下发的命令开闸 + public static class NET_EM_CFG_TRAFFICSTROBE_CTRTYPE extends Structure { + public static final int NET_EM_CFG_CTRTYPE_UNKNOWN = 0; // 未定义 + public static final int NET_EM_CFG_CTRTYPE_TRAFFICTRUSTLIST = 1; // 通过白名单控制是否开闸;只有白名单内车辆才开闸 + public static final int NET_EM_CFG_CTRTYPE_ALLSNAPCAR = 2; // 针对所有抓拍车辆都开闸 + public static final int NET_EM_CFG_CTRTYPE_ORDER = 3; // 通过上层下发的命令开闸 } // 所有车开闸种类 - public static class NET_EM_CFG_ALL_SNAP_CAR extends Structure - { - public static final int NET_EM_CFG_ALL_SNAP_CAR_UNKNOWN = 0; // 未知开闸种类 - public static final int NET_EM_CFG_ALL_SNAP_CAR_PLATE = 1; // 所有有牌车车辆 - public static final int NET_EM_CFG_ALL_SNAP_CAR_NOPLATE = 2; // 所有无牌车车辆 + public static class NET_EM_CFG_ALL_SNAP_CAR extends Structure { + public static final int NET_EM_CFG_ALL_SNAP_CAR_UNKNOWN = 0; // 未知开闸种类 + public static final int NET_EM_CFG_ALL_SNAP_CAR_PLATE = 1; // 所有有牌车车辆 + public static final int NET_EM_CFG_ALL_SNAP_CAR_NOPLATE = 2; // 所有无牌车车辆 } // 道闸常开配置 - public static class NET_CFG_STATIONARY_OPEN extends Structure - { - public int bEnable; // 使能 - public CFG_TIME_SCHEDULE stTimeShecule = new CFG_TIME_SCHEDULE(); // 常开模式执行时间段 + public static class NET_CFG_STATIONARY_OPEN extends Structure { + public int bEnable; // 使能 + public CFG_TIME_SCHEDULE stTimeShecule = new CFG_TIME_SCHEDULE(); // 常开模式执行时间段 } // 道闸配置信息(对应 NET_EM_CFG_TRAFFICSTROBE 命令) - public static class NET_CFG_TRAFFICSTROBE_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int bEnable; // 使能 - public int nCtrlTypeCount; // 道闸控制方式个数 - public int[] emCtrlType = new int[NET_CFG_MAX_CTRLTYPE_NUM]; // 道闸控制方式, 详见NET_EM_CFG_TRAFFICSTROBE_CTRTYPE - public int nAllSnapCarCount; // 所有车开闸种类个数 - public int[] emAllSnapCar = new int[NET_MAX_ALL_SNAP_CAR_COUNT]; // 所有车开闸种类, 详见NET_EM_CFG_ALL_SNAP_CAR - public NET_ALARM_MSG_HANDLE stuEventHandler; // 开启道闸联动参数 - public NET_ALARM_MSG_HANDLE stuEventHandlerClose; // 关闭道闸联动参数 - public byte[] szOrderIP = new byte[NET_MAX_IPADDR_EX_LEN]; // 负责命令开闸的平台IP - public int emCtrlTypeOnDisconnect; // 平台IP与设备断开连接后,设备采用的开闸方式, 详见NET_EM_CFG_TRAFFICSTROBE_CTRTYPE - public NET_CFG_STATIONARY_OPEN stuStationaryOpen; // 道闸常开配置 - - public NET_CFG_TRAFFICSTROBE_INFO() { - this.dwSize = this.size(); - } - } - + public static class NET_CFG_TRAFFICSTROBE_INFO extends Structure { + public int dwSize; // 结构体大小 + public int bEnable; // 使能 + public int nCtrlTypeCount; // 道闸控制方式个数 + public int[] emCtrlType = new int[NET_CFG_MAX_CTRLTYPE_NUM]; // 道闸控制方式, 详见NET_EM_CFG_TRAFFICSTROBE_CTRTYPE + public int nAllSnapCarCount; // 所有车开闸种类个数 + public int[] emAllSnapCar = new int[NET_MAX_ALL_SNAP_CAR_COUNT]; // 所有车开闸种类, 详见NET_EM_CFG_ALL_SNAP_CAR + public NET_ALARM_MSG_HANDLE stuEventHandler; // 开启道闸联动参数 + public NET_ALARM_MSG_HANDLE stuEventHandlerClose; // 关闭道闸联动参数 + public byte[] szOrderIP = new byte[NET_MAX_IPADDR_EX_LEN]; // 负责命令开闸的平台IP + public int emCtrlTypeOnDisconnect; // 平台IP与设备断开连接后,设备采用的开闸方式, 详见NET_EM_CFG_TRAFFICSTROBE_CTRTYPE + public NET_CFG_STATIONARY_OPEN stuStationaryOpen; // 道闸常开配置 + + public NET_CFG_TRAFFICSTROBE_INFO() { + this.dwSize = this.size(); + } + } + // 报警状态 (对应 CTRLTYPE_TRIGGER_ALARM_OUT 命令) - public static class ALARMCTRL_PARAM extends Structure - { - public int dwSize; - public int nAlarmNo; // 报警通道号,从0开始 - public int nAction; // 1:触发报警,0:停止报警 - - public ALARMCTRL_PARAM() { - this.dwSize = this.size(); - } - } - + public static class ALARMCTRL_PARAM extends Structure { + public int dwSize; + public int nAlarmNo; // 报警通道号,从0开始 + public int nAction; // 1:触发报警,0:停止报警 + + public ALARMCTRL_PARAM() { + this.dwSize = this.size(); + } + } + // 查询 IVS 前端设备入参 - public static class NET_IN_IVS_REMOTE_DEV_INFO extends Structure - { - public int dwSize; // 该结构体大小 - public int nChannel; // 通道号 - + public static class NET_IN_IVS_REMOTE_DEV_INFO extends Structure { + public int dwSize; // 该结构体大小 + public int nChannel; // 通道号 + public NET_IN_IVS_REMOTE_DEV_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 查询 IVS 前端设备出参 - public static class NET_OUT_IVS_REMOTE_DEV_INFO extends Structure - { - public int dwSize; // 该结构体大小 - public int nPort; // 端口 - public byte[] szIP = new byte[64]; // 设备IP - public byte[] szUser = new byte[64]; // 用户名 - public byte[] szPassword = new byte[64]; // 密码 - public byte[] szAddress = new byte[128]; // 机器部署地点 - + public static class NET_OUT_IVS_REMOTE_DEV_INFO extends Structure { + public int dwSize; // 该结构体大小 + public int nPort; // 端口 + public byte[] szIP = new byte[64]; // 设备IP + public byte[] szUser = new byte[64]; // 用户名 + public byte[] szPassword = new byte[64]; // 密码 + public byte[] szAddress = new byte[128]; // 机器部署地点 + public NET_OUT_IVS_REMOTE_DEV_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 传感器感应方式枚举类型 - public static class NET_SENSE_METHOD extends Structure - { - public static final int NET_SENSE_UNKNOWN = -1;//未知类型 - public static final int NET_SENSE_DOOR = 0; //门磁 - public static final int NET_SENSE_PASSIVEINFRA = 1; //被动红外 - public static final int NET_SENSE_GAS = 2; //气感 - public static final int NET_SENSE_SMOKING = 3; //烟感 - public static final int NET_SENSE_WATER = 4; //水感 - public static final int NET_SENSE_ACTIVEFRA = 5; //主动红外 - public static final int NET_SENSE_GLASS = 6; //玻璃破碎 - public static final int NET_SENSE_EMERGENCYSWITCH = 7; //紧急开关 - public static final int NET_SENSE_SHOCK = 8; //震动 - public static final int NET_SENSE_DOUBLEMETHOD = 9; //双鉴(红外+微波) - public static final int NET_SENSE_THREEMETHOD = 10; //三技术 - public static final int NET_SENSE_TEMP = 11; //温度 - public static final int NET_SENSE_HUMIDITY = 12; //湿度 - public static final int NET_SENSE_WIND = 13; //风速 - public static final int NET_SENSE_CALLBUTTON = 14; //呼叫按钮 - public static final int NET_SENSE_GASPRESSURE = 15; //气体压力 - public static final int NET_SENSE_GASCONCENTRATION = 16; //燃气浓度 - public static final int NET_SENSE_GASFLOW = 17; //气体流量 - public static final int NET_SENSE_OTHER = 18; //其他 - public static final int NET_SENSE_OIL = 19; //油量检测,汽油、柴油等车辆用油检测 - public static final int NET_SENSE_MILEAGE = 20; //里程数检测 - public static final int NET_SENSE_URGENCYBUTTON = 21; //紧急按钮 - public static final int NET_SENSE_STEAL = 22; //盗窃 - public static final int NET_SENSE_PERIMETER = 23; //周界 - public static final int NET_SENSE_PREVENTREMOVE = 24; //防拆 - public static final int NET_SENSE_DOORBELL = 25; //门铃 - public static final int NET_SENSE_ALTERVOLT = 26; //交流电压传感器 - public static final int NET_SENSE_DIRECTVOLT = 27; //直流电压传感器 - public static final int NET_SENSE_ALTERCUR = 28; //交流电流传感器 - public static final int NET_SENSE_DIRECTCUR = 29; //直流电流传感器 - public static final int NET_SENSE_RSUGENERAL = 30; //高新兴通用模拟量4~20mA或0~5V - public static final int NET_SENSE_RSUDOOR = 31; //高新兴门禁感应 - public static final int NET_SENSE_RSUPOWEROFF = 32; //高新兴断电感应 - public static final int NET_SENSE_TEMP1500 = 33;//1500温度传感器 - public static final int NET_SENSE_TEMPDS18B20 = 34;//DS18B20温度传感器 - public static final int NET_SENSE_HUMIDITY1500 = 35; //1500湿度传感器 - public static final int NET_SENSE_NUM = 36; //枚举类型总数 - } - + public static class NET_SENSE_METHOD extends Structure { + public static final int NET_SENSE_UNKNOWN = -1;//未知类型 + public static final int NET_SENSE_DOOR = 0; //门磁 + public static final int NET_SENSE_PASSIVEINFRA = 1; //被动红外 + public static final int NET_SENSE_GAS = 2; //气感 + public static final int NET_SENSE_SMOKING = 3; //烟感 + public static final int NET_SENSE_WATER = 4; //水感 + public static final int NET_SENSE_ACTIVEFRA = 5; //主动红外 + public static final int NET_SENSE_GLASS = 6; //玻璃破碎 + public static final int NET_SENSE_EMERGENCYSWITCH = 7; //紧急开关 + public static final int NET_SENSE_SHOCK = 8; //震动 + public static final int NET_SENSE_DOUBLEMETHOD = 9; //双鉴(红外+微波) + public static final int NET_SENSE_THREEMETHOD = 10; //三技术 + public static final int NET_SENSE_TEMP = 11; //温度 + public static final int NET_SENSE_HUMIDITY = 12; //湿度 + public static final int NET_SENSE_WIND = 13; //风速 + public static final int NET_SENSE_CALLBUTTON = 14; //呼叫按钮 + public static final int NET_SENSE_GASPRESSURE = 15; //气体压力 + public static final int NET_SENSE_GASCONCENTRATION = 16; //燃气浓度 + public static final int NET_SENSE_GASFLOW = 17; //气体流量 + public static final int NET_SENSE_OTHER = 18; //其他 + public static final int NET_SENSE_OIL = 19; //油量检测,汽油、柴油等车辆用油检测 + public static final int NET_SENSE_MILEAGE = 20; //里程数检测 + public static final int NET_SENSE_URGENCYBUTTON = 21; //紧急按钮 + public static final int NET_SENSE_STEAL = 22; //盗窃 + public static final int NET_SENSE_PERIMETER = 23; //周界 + public static final int NET_SENSE_PREVENTREMOVE = 24; //防拆 + public static final int NET_SENSE_DOORBELL = 25; //门铃 + public static final int NET_SENSE_ALTERVOLT = 26; //交流电压传感器 + public static final int NET_SENSE_DIRECTVOLT = 27; //直流电压传感器 + public static final int NET_SENSE_ALTERCUR = 28; //交流电流传感器 + public static final int NET_SENSE_DIRECTCUR = 29; //直流电流传感器 + public static final int NET_SENSE_RSUGENERAL = 30; //高新兴通用模拟量4~20mA或0~5V + public static final int NET_SENSE_RSUDOOR = 31; //高新兴门禁感应 + public static final int NET_SENSE_RSUPOWEROFF = 32; //高新兴断电感应 + public static final int NET_SENSE_TEMP1500 = 33;//1500温度传感器 + public static final int NET_SENSE_TEMPDS18B20 = 34;//DS18B20温度传感器 + public static final int NET_SENSE_HUMIDITY1500 = 35; //1500湿度传感器 + public static final int NET_SENSE_NUM = 36; //枚举类型总数 + } + // 热成像色彩 - public static class NET_THERMO_COLORIZATION extends Structure - { - public static final int NET_THERMO_COLORIZATION_UNKNOWN = 0; // 未知 - public static final int NET_THERMO_COLORIZATION_WHITE_HOT = 1; // 白热 - public static final int NET_THERMO_COLORIZATION_BLACK_HOT = 2; // 黑热 - public static final int NET_THERMO_COLORIZATION_IRONBOW2 = 3; // 铁虹2 - public static final int NET_THERMO_COLORIZATION_ICEFIRE = 4; // 冰火 - public static final int NET_THERMO_COLORIZATION_FUSION = 5; // 融合 - public static final int NET_THERMO_COLORIZATION_RAINBOW = 6; // 彩虹 - public static final int NET_THERMO_COLORIZATION_GLOBOW = 6; // .. - public static final int NET_THERMO_COLORIZATION_IRONBOW1 = 7; // 铁虹1 - public static final int NET_THERMO_COLORIZATION_SEPIA = 8; // 深褐 - public static final int NET_THERMO_COLORIZATION_COLOR1 = 9; // 彩色1 - public static final int NET_THERMO_COLORIZATION_COLOR2 = 10; // 彩色2 - public static final int NET_THERMO_COLORIZATION_RAIN = 11; // 雨天 - public static final int NET_THERMO_COLORIZATION_RED_HOT = 12; // 红热 - public static final int NET_THERMO_COLORIZATION_GREEN_HOT = 13; // 绿热 + public static class NET_THERMO_COLORIZATION extends Structure { + public static final int NET_THERMO_COLORIZATION_UNKNOWN = 0; // 未知 + public static final int NET_THERMO_COLORIZATION_WHITE_HOT = 1; // 白热 + public static final int NET_THERMO_COLORIZATION_BLACK_HOT = 2; // 黑热 + public static final int NET_THERMO_COLORIZATION_IRONBOW2 = 3; // 铁虹2 + public static final int NET_THERMO_COLORIZATION_ICEFIRE = 4; // 冰火 + public static final int NET_THERMO_COLORIZATION_FUSION = 5; // 融合 + public static final int NET_THERMO_COLORIZATION_RAINBOW = 6; // 彩虹 + public static final int NET_THERMO_COLORIZATION_GLOBOW = 6; // .. + public static final int NET_THERMO_COLORIZATION_IRONBOW1 = 7; // 铁虹1 + public static final int NET_THERMO_COLORIZATION_SEPIA = 8; // 深褐 + public static final int NET_THERMO_COLORIZATION_COLOR1 = 9; // 彩色1 + public static final int NET_THERMO_COLORIZATION_COLOR2 = 10; // 彩色2 + public static final int NET_THERMO_COLORIZATION_RAIN = 11; // 雨天 + public static final int NET_THERMO_COLORIZATION_RED_HOT = 12; // 红热 + public static final int NET_THERMO_COLORIZATION_GREEN_HOT = 13; // 绿热 } // 热成像感兴趣区域模式 - public static class NET_THERMO_ROI extends Structure - { - public static final int NET_THERMO_ROI_UNKNOWN = 0; // 未知 - public static final int NET_THERMO_ROI_FULL_SCREEN = 1; // 全屏 - public static final int NET_THERMO_ROI_SKY = 2; // 顶部 - public static final int NET_THERMO_ROI_GROUND = 3; // 中部 - public static final int NET_THERMO_ROI_HORIZONTAL = 4; // 底部 - public static final int NET_THERMO_ROI_CENTER_75 = 5; // 中心点 75% - public static final int NET_THERMO_ROI_CENTER_50 = 6; // 中心点 50% - public static final int NET_THERMO_ROI_CENTER_25 = 7; // 中心点 25% - public static final int NET_THERMO_ROI_CUSTOM = 8; // 自定义 - } - + public static class NET_THERMO_ROI extends Structure { + public static final int NET_THERMO_ROI_UNKNOWN = 0; // 未知 + public static final int NET_THERMO_ROI_FULL_SCREEN = 1; // 全屏 + public static final int NET_THERMO_ROI_SKY = 2; // 顶部 + public static final int NET_THERMO_ROI_GROUND = 3; // 中部 + public static final int NET_THERMO_ROI_HORIZONTAL = 4; // 底部 + public static final int NET_THERMO_ROI_CENTER_75 = 5; // 中心点 75% + public static final int NET_THERMO_ROI_CENTER_50 = 6; // 中心点 50% + public static final int NET_THERMO_ROI_CENTER_25 = 7; // 中心点 25% + public static final int NET_THERMO_ROI_CUSTOM = 8; // 自定义 + } + // 热成像模式 - public static class NET_THERMO_MODE extends Structure - { - public static final int NET_THERMO_MODE_UNKNOWN = 0; // 未知 - public static final int NET_THERMO_MODE_DEFAULT = 1; // 默认 - public static final int NET_THERMO_MODE_INDOOR = 2; // 室内 - public static final int NET_THERMO_MODE_OUTDOOR = 3; // 室外 - } - + public static class NET_THERMO_MODE extends Structure { + public static final int NET_THERMO_MODE_UNKNOWN = 0; // 未知 + public static final int NET_THERMO_MODE_DEFAULT = 1; // 默认 + public static final int NET_THERMO_MODE_INDOOR = 2; // 室内 + public static final int NET_THERMO_MODE_OUTDOOR = 3; // 室外 + } + // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_THERMO_GRAPHY_PRESET 命令入参 - public static class NET_IN_THERMO_GET_PRESETINFO extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - public int emMode; // 模式, 参考NET_THERMO_MODE - + public static class NET_IN_THERMO_GET_PRESETINFO extends Structure { + public int dwSize; + public int nChannel; // 通道号 + public int emMode; // 模式, 参考NET_THERMO_MODE + public NET_IN_THERMO_GET_PRESETINFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_THERMO_GRAPHY_PRESET 命令出参 - public static class NET_OUT_THERMO_GET_PRESETINFO extends Structure - { - public int dwSize; - public NET_THERMO_GRAPHY_INFO stInfo; // 热成像信息 - + public static class NET_OUT_THERMO_GET_PRESETINFO extends Structure { + public int dwSize; + public NET_THERMO_GRAPHY_INFO stInfo; // 热成像信息 + public NET_OUT_THERMO_GET_PRESETINFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 热成像优化区域 - public static class NET_THERMO_GRAPHY_OPTREGION extends Structure - { - public int bOptimizedRegion; // 是否开启优化区域 - public int nOptimizedROIType; // 优化区域类型,见NET_THERMO_ROI - public int nCustomRegion; // 自定义区域个数 - public NET_RECT[] stCustomRegions = (NET_RECT[])new NET_RECT().toArray(64); // 自定义区域,仅在 nOptimizedROIType 为 NET_THERMO_ROI_CUSTOM 时有效 - public byte[] Reserved = new byte[256]; - } - + public static class NET_THERMO_GRAPHY_OPTREGION extends Structure { + public int bOptimizedRegion; // 是否开启优化区域 + public int nOptimizedROIType; // 优化区域类型,见NET_THERMO_ROI + public int nCustomRegion; // 自定义区域个数 + public NET_RECT[] stCustomRegions = (NET_RECT[]) new NET_RECT().toArray(64); // 自定义区域,仅在 nOptimizedROIType 为 NET_THERMO_ROI_CUSTOM 时有效 + public byte[] Reserved = new byte[256]; + } + // 热成像信息 - public static class NET_THERMO_GRAPHY_INFO extends Structure - { - public int nBrightness; // 亮度 - public int nSharpness; // 锐度 - public int nEZoom; // 倍数 - public int nThermographyGamma; // 伽马值 - public int nColorization; // 色彩,见NET_THERMO_COLORIZATION - public int nSmartOptimizer; // 优化指数 - public NET_THERMO_GRAPHY_OPTREGION stOptRegion; // 优化区域 - public int nAgc; // 自动增益控制 - public int nAgcMaxGain; // 最大自动增益 - public int nAgcPlateau; // 增益均衡 - public byte[] reserved = new byte[244]; // 保留字段 - } - + public static class NET_THERMO_GRAPHY_INFO extends Structure { + public int nBrightness; // 亮度 + public int nSharpness; // 锐度 + public int nEZoom; // 倍数 + public int nThermographyGamma; // 伽马值 + public int nColorization; // 色彩,见NET_THERMO_COLORIZATION + public int nSmartOptimizer; // 优化指数 + public NET_THERMO_GRAPHY_OPTREGION stOptRegion; // 优化区域 + public int nAgc; // 自动增益控制 + public int nAgcMaxGain; // 最大自动增益 + public int nAgcPlateau; // 增益均衡 + public byte[] reserved = new byte[244]; // 保留字段 + } + // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_THERMO_GRAPHY_OPTREGION 命令入参 - public static class NET_IN_THERMO_GET_OPTREGION extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - + public static class NET_IN_THERMO_GET_OPTREGION extends Structure { + public int dwSize; + public int nChannel; // 通道号 + public NET_IN_THERMO_GET_OPTREGION() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_THERMO_GRAPHY_OPTREGION 命令出参 - public static class NET_OUT_THERMO_GET_OPTREGION extends Structure - { - public int dwSize; - public NET_THERMO_GRAPHY_OPTREGION stInfo; // 优化区域信息 - - public NET_OUT_THERMO_GET_OPTREGION() { - this.dwSize = this.size(); - } - } - + public static class NET_OUT_THERMO_GET_OPTREGION extends Structure { + public int dwSize; + public NET_THERMO_GRAPHY_OPTREGION stInfo; // 优化区域信息 + + public NET_OUT_THERMO_GET_OPTREGION() { + this.dwSize = this.size(); + } + } + // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_THERMO_GRAPHY_EXTSYSINFO 命令入参 - public static class NET_IN_THERMO_GET_EXTSYSINFO extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - - public NET_IN_THERMO_GET_EXTSYSINFO() { - this.dwSize = this.size(); - } - } - + public static class NET_IN_THERMO_GET_EXTSYSINFO extends Structure { + public int dwSize; + public int nChannel; // 通道号 + + public NET_IN_THERMO_GET_EXTSYSINFO() { + this.dwSize = this.size(); + } + } + // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_THERMO_GRAPHY_EXTSYSINFO 命令出参 - public static class NET_OUT_THERMO_GET_EXTSYSINFO extends Structure - { - public int dwSize; - public NET_THERMO_SYSINFO stInfo; // 通道号 - - public NET_OUT_THERMO_GET_EXTSYSINFO() { - this.dwSize = this.size(); - } - } - + public static class NET_OUT_THERMO_GET_EXTSYSINFO extends Structure { + public int dwSize; + public NET_THERMO_SYSINFO stInfo; // 通道号 + + public NET_OUT_THERMO_GET_EXTSYSINFO() { + this.dwSize = this.size(); + } + } + // 外部系统信息 - public static class NET_THERMO_SYSINFO extends Structure - { - public byte[] szSerialNumber = new byte[64]; // 序列号 - public byte[] szSoftwareVersion = new byte[64]; // 软件版本 - public byte[] szFirmwareVersion = new byte[64]; // 固件版本 - public byte[] szLibVersion = new byte[64]; // 库版本 - public byte[] reserved = new byte[256]; - } - + public static class NET_THERMO_SYSINFO extends Structure { + public byte[] szSerialNumber = new byte[64]; // 序列号 + public byte[] szSoftwareVersion = new byte[64]; // 软件版本 + public byte[] szFirmwareVersion = new byte[64]; // 固件版本 + public byte[] szLibVersion = new byte[64]; // 库版本 + public byte[] reserved = new byte[256]; + } + // CLIENT_GetDevCaps 接口 NET_THERMO_GRAPHY_CAPS 命令入参 - public static class NET_IN_THERMO_GETCAPS extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - - public NET_IN_THERMO_GETCAPS() { - this.dwSize = this.size(); - } + public static class NET_IN_THERMO_GETCAPS extends Structure { + public int dwSize; + public int nChannel; // 通道号 + + public NET_IN_THERMO_GETCAPS() { + this.dwSize = this.size(); + } } // CLIENT_GetDevCaps 接口 NET_THERMO_GRAPHY_CAPS 命令出参 - public static class NET_OUT_THERMO_GETCAPS extends Structure - { - public int dwSize; - public int dwModes; // 支持的预置模式掩码 - public int dwColorization; // 预置着色模式掩码 - public int dwROIModes; // 预置感兴趣区域模式掩码 - public RANGE stBrightness; // 亮度相关能力 - public RANGE stSharpness; // 锐度相关能力 - public RANGE stEZoom; // 倍数相关能力 - public RANGE stThermographyGamma; // 伽马相关能力 - public RANGE stSmartOptimizer; // 优化参数相关能力 - + public static class NET_OUT_THERMO_GETCAPS extends Structure { + public int dwSize; + public int dwModes; // 支持的预置模式掩码 + public int dwColorization; // 预置着色模式掩码 + public int dwROIModes; // 预置感兴趣区域模式掩码 + public RANGE stBrightness; // 亮度相关能力 + public RANGE stSharpness; // 锐度相关能力 + public RANGE stEZoom; // 倍数相关能力 + public RANGE stThermographyGamma; // 伽马相关能力 + public RANGE stSmartOptimizer; // 优化参数相关能力 + public NET_OUT_THERMO_GETCAPS() { - this.dwSize = this.size(); - } + this.dwSize = this.size(); + } } - + // range - public static class RANGE extends Structure - { - public float fMax; // 最大值 - public float fMin; // 最小值 - public int abStep; // 是否启用步长 - public float fStep; // 步长 - public int abDefault; // 是否启用默认值 - public float fDefault; // 默认值 - public byte[] reserved = new byte[16]; + public static class RANGE extends Structure { + public float fMax; // 最大值 + public float fMin; // 最小值 + public int abStep; // 是否启用步长 + public float fStep; // 步长 + public int abDefault; // 是否启用默认值 + public float fDefault; // 默认值 + public byte[] reserved = new byte[16]; } // CLIENT_GetDevCaps 接口 NET_RADIOMETRY_CAPS 命令入参 - public static class NET_IN_RADIOMETRY_GETCAPS extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - - public NET_IN_RADIOMETRY_GETCAPS() { - this.dwSize = this.size(); - } + public static class NET_IN_RADIOMETRY_GETCAPS extends Structure { + public int dwSize; + public int nChannel; // 通道号 + + public NET_IN_RADIOMETRY_GETCAPS() { + this.dwSize = this.size(); + } } // 测温模式的类型 - public static class NET_RADIOMETRY_METERTYPE extends Structure - { - public static final int NET_RADIOMETRY_METERTYPE_UNKNOWN = 0; - public static final int NET_RADIOMETRY_METERTYPE_SPOT = 1; // 点 - public static final int NET_RADIOMETRY_METERTYPE_LINE = 2; // 线 - public static final int NET_RADIOMETRY_METERTYPE_AREA = 3; // 区域 + public static class NET_RADIOMETRY_METERTYPE extends Structure { + public static final int NET_RADIOMETRY_METERTYPE_UNKNOWN = 0; + public static final int NET_RADIOMETRY_METERTYPE_SPOT = 1; // 点 + public static final int NET_RADIOMETRY_METERTYPE_LINE = 2; // 线 + public static final int NET_RADIOMETRY_METERTYPE_AREA = 3; // 区域 } // 点,线,区域总个数能力 - public static class NET_RADIOMETRY_TOTALNUM extends Structure - { - public int dwMaxNum; // 最多支持个数 - public int dwMaxSpots; // 最多点的个数 - public int dwMaxLines; // 最多划线的条数 - public int dwMaxAreas; // 最多区域的个数 - public byte[] reserved = new byte[32]; // 保留字节 + public static class NET_RADIOMETRY_TOTALNUM extends Structure { + public int dwMaxNum; // 最多支持个数 + public int dwMaxSpots; // 最多点的个数 + public int dwMaxLines; // 最多划线的条数 + public int dwMaxAreas; // 最多区域的个数 + public byte[] reserved = new byte[32]; // 保留字节 } // CLIENT_GetDevCaps 接口 NET_RADIOMETRY_CAPS 命令出参 - public static class NET_OUT_RADIOMETRY_GETCAPS extends Structure - { - public int dwSize; - NET_RADIOMETRY_TOTALNUM stTotalNum; // 点,线,区域总个数能力 - public int dwMaxPresets; // 最多测温预置点的个数 - public int dwMeterType; // 测温模式的类型掩码,见NET_RADIOMETRY_METERTYPE - public RANGE stObjectEmissivity; // 辐射系数相关能力 - public RANGE stObjectDistance; // 距离相关能力 - public RANGE stReflectedTemperature; // 反射温度相关能力 - public RANGE stRelativeHumidity; // 相对湿度相关能力 - public RANGE stAtmosphericTemperature; // 大气温度相关能力 - public int nStatisticsMinPeriod; // 测温点统计功能最小存储数据间隔 单位为秒 - public float fIsothermMaxTemp; // 色标条最高温度值 - public float fIsothermMinTemp; // 色标条最低温度值 - + public static class NET_OUT_RADIOMETRY_GETCAPS extends Structure { + public int dwSize; + NET_RADIOMETRY_TOTALNUM stTotalNum; // 点,线,区域总个数能力 + public int dwMaxPresets; // 最多测温预置点的个数 + public int dwMeterType; // 测温模式的类型掩码,见NET_RADIOMETRY_METERTYPE + public RANGE stObjectEmissivity; // 辐射系数相关能力 + public RANGE stObjectDistance; // 距离相关能力 + public RANGE stReflectedTemperature; // 反射温度相关能力 + public RANGE stRelativeHumidity; // 相对湿度相关能力 + public RANGE stAtmosphericTemperature; // 大气温度相关能力 + public int nStatisticsMinPeriod; // 测温点统计功能最小存储数据间隔 单位为秒 + public float fIsothermMaxTemp; // 色标条最高温度值 + public float fIsothermMinTemp; // 色标条最低温度值 + public NET_OUT_RADIOMETRY_GETCAPS() { - this.dwSize = this.size(); - } + this.dwSize = this.size(); + } } // 测温信息 - public static class NET_RADIOMETRYINFO extends Structure - { - public int nMeterType; // 返回测温类型,见NET_RADIOMETRY_METERTYPE - public int nTemperUnit; // 温度单位(当前配置的温度单位),见 NET_TEMPERATURE_UNIT - public float fTemperAver; // 点的温度或者平均温度 点的时候 只返回此字段 - public float fTemperMax; // 最高温度 - public float fTemperMin; // 最低温度 - public float fTemperMid; // 中间温度值 - public float fTemperStd; // 标准方差值 - public byte[] reserved = new byte[64]; + public static class NET_RADIOMETRYINFO extends Structure { + public int nMeterType; // 返回测温类型,见NET_RADIOMETRY_METERTYPE + public int nTemperUnit; // 温度单位(当前配置的温度单位),见 NET_TEMPERATURE_UNIT + public float fTemperAver; // 点的温度或者平均温度 点的时候 只返回此字段 + public float fTemperMax; // 最高温度 + public float fTemperMin; // 最低温度 + public float fTemperMid; // 中间温度值 + public float fTemperStd; // 标准方差值 + public byte[] reserved = new byte[64]; } // 获取测温项温度的条件 - public static class NET_RADIOMETRY_CONDITION extends Structure - { - public int nPresetId; // 预置点编号 - public int nRuleId; // 规则编号 - public int nMeterType; // 测温项类别,见NET_RADIOMETRY_METERTYPE - public byte[] szName = new byte[64]; // 测温项的名称,从测温配置规则名字中选取 - public int nChannel; // 通道号 - public byte[] reserved = new byte[256]; + public static class NET_RADIOMETRY_CONDITION extends Structure { + public int nPresetId; // 预置点编号 + public int nRuleId; // 规则编号 + public int nMeterType; // 测温项类别,见NET_RADIOMETRY_METERTYPE + public byte[] szName = new byte[64]; // 测温项的名称,从测温配置规则名字中选取 + public int nChannel; // 通道号 + public byte[] reserved = new byte[256]; } // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_RADIOMETRY_POINT_TEMPER 命令入参 - public static class NET_IN_RADIOMETRY_GETPOINTTEMPER extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - public NET_POINT stCoordinate; // 测温点的坐标,坐标值 0~8192 - - public NET_IN_RADIOMETRY_GETPOINTTEMPER() { - this.dwSize = this.size(); - } + public static class NET_IN_RADIOMETRY_GETPOINTTEMPER extends Structure { + public int dwSize; + public int nChannel; // 通道号 + public NET_POINT stCoordinate; // 测温点的坐标,坐标值 0~8192 + + public NET_IN_RADIOMETRY_GETPOINTTEMPER() { + this.dwSize = this.size(); + } } // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_RADIOMETRY_POINT_TEMPER 命令出参 - public static class NET_OUT_RADIOMETRY_GETPOINTTEMPER extends Structure - { - public int dwSize; - public NET_RADIOMETRYINFO stPointTempInfo; // 获取测温点的参数值 - + public static class NET_OUT_RADIOMETRY_GETPOINTTEMPER extends Structure { + public int dwSize; + public NET_RADIOMETRYINFO stPointTempInfo; // 获取测温点的参数值 + public NET_OUT_RADIOMETRY_GETPOINTTEMPER() { - this.dwSize = this.size(); - } + this.dwSize = this.size(); + } } - + // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_RADIOMETRY_TEMPER 命令入参 - public static class NET_IN_RADIOMETRY_GETTEMPER extends Structure - { - public int dwSize; - public NET_RADIOMETRY_CONDITION stCondition; // 获取测温项温度的条件 - - public NET_IN_RADIOMETRY_GETTEMPER() { - this.dwSize = this.size(); - } + public static class NET_IN_RADIOMETRY_GETTEMPER extends Structure { + public int dwSize; + public NET_RADIOMETRY_CONDITION stCondition; // 获取测温项温度的条件 + + public NET_IN_RADIOMETRY_GETTEMPER() { + this.dwSize = this.size(); + } } // CLIENT_QueryDevInfo 接口 NET_QUERY_DEV_RADIOMETRY_TEMPER 命令出参 - public static class NET_OUT_RADIOMETRY_GETTEMPER extends Structure - { - public int dwSize; - public NET_RADIOMETRYINFO stTempInfo; // 获取测温参数值 - - public NET_OUT_RADIOMETRY_GETTEMPER() { - this.dwSize = this.size(); - } - } - + public static class NET_OUT_RADIOMETRY_GETTEMPER extends Structure { + public int dwSize; + public NET_RADIOMETRYINFO stTempInfo; // 获取测温参数值 + + public NET_OUT_RADIOMETRY_GETTEMPER() { + this.dwSize = this.size(); + } + } + // 云台预置点 - public static class NET_PTZ_PRESET extends Structure - { - public int nIndex; // 编号 - public byte[] szName = new byte[PTZ_PRESET_NAME_LEN]; // 名称 - public byte[] szReserve = new byte[64]; // 预留64字节 + public static class NET_PTZ_PRESET extends Structure { + public int nIndex; // 编号 + public byte[] szName = new byte[PTZ_PRESET_NAME_LEN]; // 名称 + public byte[] szReserve = new byte[64]; // 预留64字节 } - + // 云台预置点列表 - public static class NET_PTZ_PRESET_LIST extends Structure - { - public int dwSize; - public int dwMaxPresetNum; // 预置点最大个数 - public int dwRetPresetNum; // 返回预置点个数 - public Pointer pstuPtzPorsetList; // 预置点列表(入参需要根据最大个数申请内存),内存大小为sizeof(NET_PTZ_PRESET)*dwMaxPresetNum - - public NET_PTZ_PRESET_LIST() { - this.dwSize = this.size(); - } - } - + public static class NET_PTZ_PRESET_LIST extends Structure { + public int dwSize; + public int dwMaxPresetNum; // 预置点最大个数 + public int dwRetPresetNum; // 返回预置点个数 + public Pointer pstuPtzPorsetList; // 预置点列表(入参需要根据最大个数申请内存),内存大小为sizeof(NET_PTZ_PRESET)*dwMaxPresetNum + + public NET_PTZ_PRESET_LIST() { + this.dwSize = this.size(); + } + } + //-------------------------------报警属性--------------------------------- - // 云台联动 - public static class NET_PTZ_LINK extends Structure - { - public int iType;//0-None,1-Preset,2-Tour,3-Pattern - public int iValue; - } - - ////////////////////////////////HDVR专用////////////////////////////////// + // 云台联动 + public static class NET_PTZ_LINK extends Structure { + public int iType;//0-None,1-Preset,2-Tour,3-Pattern + public int iValue; + } + + ////////////////////////////////HDVR专用////////////////////////////////// // 报警联动扩展结构体 - public static class NET_MSG_HANDLE_EX extends Structure - { + public static class NET_MSG_HANDLE_EX extends Structure { /* 消息处理方式,可以同时多种处理方式,包括 * 0x00000001 - 报警上传 * 0x00000002 - 联动录象 @@ -9056,369 +8676,359 @@ public interface NetSDKLib extends Library { * 0x00000100 - 蜂鸣 * 0x00000200 - 语音提示 * 0x00000400 - 抓图 - */ - /*当前报警所支持的处理方式,按位掩码表示*/ - public int dwActionMask; - /*触发动作,按位掩码表示,具体动作所需要的参数在各自的配置中体现*/ - public int dwActionFlag; - /*报警触发的输出通道,报警触发的输出,为1表示触发该输出*/ - public byte[] byRelAlarmOut = new byte[NET_MAX_ALARMOUT_NUM_EX]; - public int dwDuration;/*报警持续时间*/ - /*联动录象*/ - public byte[] byRecordChannel = new byte[NET_MAX_VIDEO_IN_NUM_EX];/*报警触发的录象通道,为1表示触发该通道*/ - public int dwRecLatch;/*录象持续时间*/ - /*抓图通道*/ - public byte[] bySnap = new byte[NET_MAX_VIDEO_IN_NUM_EX]; - /*轮巡通道*/ - public byte[] byTour = new byte[NET_MAX_VIDEO_IN_NUM_EX];/*轮巡通道0-31路*/ - /*云台联动*/ - public NET_PTZ_LINK[] struPtzLink = (NET_PTZ_LINK[])new NET_PTZ_LINK().toArray(NET_MAX_VIDEO_IN_NUM_EX); - public int dwEventLatch;/*联动开始延时时间,s为单位,范围是0~15,默认值是0*/ - /*报警触发的无线输出通道,报警触发的输出,为1表示触发该输出*/ - public byte[] byRelWIAlarmOut = new byte[NET_MAX_ALARMOUT_NUM_EX]; - public byte bMessageToNet; - public byte bMMSEn;/*短信报警使能*/ - public byte bySnapshotTimes;/*短信发送抓图张数*/ - public byte bMatrixEn;/*!<矩阵使能*/ - public int dwMatrix;/*!<矩阵掩码*/ - public byte bLog;/*!<日志使能,目前只有在WTN动态检测中使用*/ - public byte bSnapshotPeriod;/*!<抓图帧间隔,每隔多少帧抓一张图片,一定时间内抓拍的张数还与抓图帧率有关。0表示不隔帧,连续抓拍。*/ - public byte[] byTour2 = new byte[NET_MAX_VIDEO_IN_NUM_EX];/*轮巡通道32-63路*/ - public byte byEmailType;/*<0,图片附件,1,录像附件>*/ - public byte byEmailMaxLength;/*<附件录像时的最大长度,单位MB>*/ - public byte byEmailMaxTime;/*<附件是录像时最大时间长度,单位秒>*/ - public byte[] byReserved = new byte[475]; - } - - public static class EM_NET_DEFENCE_AREA_TYPE extends Structure - { - public static final int EM_NET_DEFENCE_AREA_TYPE_UNKNOW = 0; //未知 - public static final int EM_NET_DEFENCE_AREA_TYPE_INTIME = 1; //即时防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_DELAY = 2; //延时防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDAY = 3; //24小时防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_Follow = 4; //跟随防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_MEDICAL = 5; //医疗紧急防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_PANIC = 6; //恐慌防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_FIRE = 7; //火警防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDAYSOUND = 8; //24小时有声防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDATSLIENT = 9; //24小时无声防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_ENTRANCE1 = 10; //出入防区1 - public static final int EM_NET_DEFENCE_AREA_TYPE_ENTRANCE2 = 11; //出入防区2 - public static final int EM_NET_DEFENCE_AREA_TYPE_INSIDE = 12; //内部防区 - public static final int EM_NET_DEFENCE_AREA_TYPE_OUTSIDE = 13; //外部防区 - public static final int EN_NET_DEFENCE_AREA_TYPE_PEOPLEDETECT = 14; //人员检测防区 + */ + /*当前报警所支持的处理方式,按位掩码表示*/ + public int dwActionMask; + /*触发动作,按位掩码表示,具体动作所需要的参数在各自的配置中体现*/ + public int dwActionFlag; + /*报警触发的输出通道,报警触发的输出,为1表示触发该输出*/ + public byte[] byRelAlarmOut = new byte[NET_MAX_ALARMOUT_NUM_EX]; + public int dwDuration;/*报警持续时间*/ + /*联动录象*/ + public byte[] byRecordChannel = new byte[NET_MAX_VIDEO_IN_NUM_EX];/*报警触发的录象通道,为1表示触发该通道*/ + public int dwRecLatch;/*录象持续时间*/ + /*抓图通道*/ + public byte[] bySnap = new byte[NET_MAX_VIDEO_IN_NUM_EX]; + /*轮巡通道*/ + public byte[] byTour = new byte[NET_MAX_VIDEO_IN_NUM_EX];/*轮巡通道0-31路*/ + /*云台联动*/ + public NET_PTZ_LINK[] struPtzLink = (NET_PTZ_LINK[]) new NET_PTZ_LINK().toArray(NET_MAX_VIDEO_IN_NUM_EX); + public int dwEventLatch;/*联动开始延时时间,s为单位,范围是0~15,默认值是0*/ + /*报警触发的无线输出通道,报警触发的输出,为1表示触发该输出*/ + public byte[] byRelWIAlarmOut = new byte[NET_MAX_ALARMOUT_NUM_EX]; + public byte bMessageToNet; + public byte bMMSEn;/*短信报警使能*/ + public byte bySnapshotTimes;/*短信发送抓图张数*/ + public byte bMatrixEn;/*!<矩阵使能*/ + public int dwMatrix;/*!<矩阵掩码*/ + public byte bLog;/*!<日志使能,目前只有在WTN动态检测中使用*/ + public byte bSnapshotPeriod;/*!<抓图帧间隔,每隔多少帧抓一张图片,一定时间内抓拍的张数还与抓图帧率有关。0表示不隔帧,连续抓拍。*/ + public byte[] byTour2 = new byte[NET_MAX_VIDEO_IN_NUM_EX];/*轮巡通道32-63路*/ + public byte byEmailType;/*<0,图片附件,1,录像附件>*/ + public byte byEmailMaxLength;/*<附件录像时的最大长度,单位MB>*/ + public byte byEmailMaxTime;/*<附件是录像时最大时间长度,单位秒>*/ + public byte[] byReserved = new byte[475]; + } + + public static class EM_NET_DEFENCE_AREA_TYPE extends Structure { + public static final int EM_NET_DEFENCE_AREA_TYPE_UNKNOW = 0; //未知 + public static final int EM_NET_DEFENCE_AREA_TYPE_INTIME = 1; //即时防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_DELAY = 2; //延时防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDAY = 3; //24小时防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_Follow = 4; //跟随防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_MEDICAL = 5; //医疗紧急防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_PANIC = 6; //恐慌防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_FIRE = 7; //火警防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDAYSOUND = 8; //24小时有声防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDATSLIENT = 9; //24小时无声防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_ENTRANCE1 = 10; //出入防区1 + public static final int EM_NET_DEFENCE_AREA_TYPE_ENTRANCE2 = 11; //出入防区2 + public static final int EM_NET_DEFENCE_AREA_TYPE_INSIDE = 12; //内部防区 + public static final int EM_NET_DEFENCE_AREA_TYPE_OUTSIDE = 13; //外部防区 + public static final int EN_NET_DEFENCE_AREA_TYPE_PEOPLEDETECT = 14; //人员检测防区 } // 本地报警事件(对NET_ALARM_ALARM_EX升级) - public static class ALARM_ALARM_INFO_EX2 extends Structure - { - public int dwSize; - public int nChannelID; //通道号 - public int nAction; //0:开始, 1:停止 - public NET_TIME stuTime; //报警事件发生的时间 - public int emSenseType; //传感器类型, 取值范围为 NET_SENSE_METHOD 中的值 - public NET_MSG_HANDLE_EX stuEventHandler; //联动信息 - public int emDefenceAreaType; //防区类型, 取值类型为EM_NET_DEFENCE_AREA_TYPE中的值 - public int nEventID; //事件ID - public byte[] szName = new byte[NET_COMMON_STRING_32]; // 通道名称 - public int nCount; // 事件发生次数 - - public ALARM_ALARM_INFO_EX2() { - this.dwSize = this.size(); - } - } - + public static class ALARM_ALARM_INFO_EX2 extends Structure { + public int dwSize; + public int nChannelID; //通道号 + public int nAction; //0:开始, 1:停止 + public NET_TIME stuTime; //报警事件发生的时间 + public int emSenseType; //传感器类型, 取值范围为 NET_SENSE_METHOD 中的值 + public NET_MSG_HANDLE_EX stuEventHandler; //联动信息 + public int emDefenceAreaType; //防区类型, 取值类型为EM_NET_DEFENCE_AREA_TYPE中的值 + public int nEventID; //事件ID + public byte[] szName = new byte[NET_COMMON_STRING_32]; // 通道名称 + public int nCount; // 事件发生次数 + + public ALARM_ALARM_INFO_EX2() { + this.dwSize = this.size(); + } + } + // 布撤防状态变化事件的信息 - public static class ALARM_ARMMODE_CHANGE_INFO extends Structure - { - public int dwSize; - public NET_TIME stuTime; // 报警事件发生的时间 - public int bArm; // 变化后的状态,对应 NET_ALARM_MODE - public int emSceneMode; // 情景模式,对应 NET_SCENE_MODE - public int dwID; // ID号, 遥控器编号或键盘地址, emTriggerMode为NET_EM_TRIGGER_MODE_NET类型时为0 - public int emTriggerMode; // 触发方式,对应 NET_EM_TRIGGER_MODE - + public static class ALARM_ARMMODE_CHANGE_INFO extends Structure { + public int dwSize; + public NET_TIME stuTime; // 报警事件发生的时间 + public int bArm; // 变化后的状态,对应 NET_ALARM_MODE + public int emSceneMode; // 情景模式,对应 NET_SCENE_MODE + public int dwID; // ID号, 遥控器编号或键盘地址, emTriggerMode为NET_EM_TRIGGER_MODE_NET类型时为0 + public int emTriggerMode; // 触发方式,对应 NET_EM_TRIGGER_MODE + public ALARM_ARMMODE_CHANGE_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 布撤防模式 - public static class NET_ALARM_MODE extends Structure - { - public static final int NET_ALARM_MODE_UNKNOWN = -1; // 未知 - public static final int NET_ALARM_MODE_DISARMING = 0; // 撤防 - public static final int NET_ALARM_MODE_ARMING = 1; // 布防 - public static final int NET_ALARM_MODE_FORCEON = 2; // 强制布防 + public static class NET_ALARM_MODE extends Structure { + public static final int NET_ALARM_MODE_UNKNOWN = -1; // 未知 + public static final int NET_ALARM_MODE_DISARMING = 0; // 撤防 + public static final int NET_ALARM_MODE_ARMING = 1; // 布防 + public static final int NET_ALARM_MODE_FORCEON = 2; // 强制布防 public static final int NET_ALARM_MODE_PARTARMING = 3; // 部分布防 } - + // 布撤防场景模式 - public static class NET_SCENE_MODE extends Structure - { - public static final int NET_SCENE_MODE_UNKNOWN = 0; // 未知场景 - public static final int NET_SCENE_MODE_OUTDOOR = 1; // 外出模式 - public static final int NET_SCENE_MODE_INDOOR = 2; // 室内模式 - public static final int NET_SCENE_MODE_WHOLE = 3; // 全局模式 - public static final int NET_SCENE_MODE_RIGHTNOW = 4; // 立即模式 - public static final int NET_SCENE_MODE_SLEEPING = 5; // 就寝模式 - public static final int NET_SCENE_MODE_CUSTOM = 6; // 自定义模式 - } - + public static class NET_SCENE_MODE extends Structure { + public static final int NET_SCENE_MODE_UNKNOWN = 0; // 未知场景 + public static final int NET_SCENE_MODE_OUTDOOR = 1; // 外出模式 + public static final int NET_SCENE_MODE_INDOOR = 2; // 室内模式 + public static final int NET_SCENE_MODE_WHOLE = 3; // 全局模式 + public static final int NET_SCENE_MODE_RIGHTNOW = 4; // 立即模式 + public static final int NET_SCENE_MODE_SLEEPING = 5; // 就寝模式 + public static final int NET_SCENE_MODE_CUSTOM = 6; // 自定义模式 + } + // 触发方式 - public static class NET_EM_TRIGGER_MODE extends Structure - { - public static final int NET_EM_TRIGGER_MODE_UNKNOWN = 0; - public static final int NET_EM_TRIGGER_MODE_NET = 1; // 网络用户(平台或Web) - public static final int NET_EM_TRIGGER_MODE_KEYBOARD = 2; // 键盘 - public static final int NET_EM_TRIGGER_MODE_REMOTECONTROL = 3; // 遥控器 - } - + public static class NET_EM_TRIGGER_MODE extends Structure { + public static final int NET_EM_TRIGGER_MODE_UNKNOWN = 0; + public static final int NET_EM_TRIGGER_MODE_NET = 1; // 网络用户(平台或Web) + public static final int NET_EM_TRIGGER_MODE_KEYBOARD = 2; // 键盘 + public static final int NET_EM_TRIGGER_MODE_REMOTECONTROL = 3; // 遥控器 + } + // 紧急救助事件详情 - public static class ALARM_RCEMERGENCY_CALL_INFO extends Structure - { - public int dwSize; - public int nAction; // -1:未知 0:开始 1:停止 - public int emType; // 紧急类型,对应 EM_RCEMERGENCY_CALL_TYPE - public NET_TIME stuTime; // 事件发生时间 - public int emMode; // 报警方式,对应 EM_RCEMERGENCY_MODE_TYPE - public int dwID; // 用于标示不同的紧急事件(只有emMode是遥控器类型时有效, 表示遥控器的编号, 0表示无效ID) - - public ALARM_RCEMERGENCY_CALL_INFO() { - this.dwSize = this.size(); - } - } - + public static class ALARM_RCEMERGENCY_CALL_INFO extends Structure { + public int dwSize; + public int nAction; // -1:未知 0:开始 1:停止 + public int emType; // 紧急类型,对应 EM_RCEMERGENCY_CALL_TYPE + public NET_TIME stuTime; // 事件发生时间 + public int emMode; // 报警方式,对应 EM_RCEMERGENCY_MODE_TYPE + public int dwID; // 用于标示不同的紧急事件(只有emMode是遥控器类型时有效, 表示遥控器的编号, 0表示无效ID) + + public ALARM_RCEMERGENCY_CALL_INFO() { + this.dwSize = this.size(); + } + } + // 紧急救助事件类型 - public static class EM_RCEMERGENCY_CALL_TYPE extends Structure - { - public static final int EM_RCEMERGENCY_CALL_UNKNOWN = 0; - public static final int EM_RCEMERGENCY_CALL_FIRE = 1; // 火警 - public static final int EM_RCEMERGENCY_CALL_DURESS = 2; // 胁迫 - public static final int EM_RCEMERGENCY_CALL_ROBBER = 3; // 匪警 - public static final int EM_RCEMERGENCY_CALL_MEDICAL = 4; // 医疗 - public static final int EM_RCEMERGENCY_CALL_EMERGENCY = 5; // 紧急 - } - + public static class EM_RCEMERGENCY_CALL_TYPE extends Structure { + public static final int EM_RCEMERGENCY_CALL_UNKNOWN = 0; + public static final int EM_RCEMERGENCY_CALL_FIRE = 1; // 火警 + public static final int EM_RCEMERGENCY_CALL_DURESS = 2; // 胁迫 + public static final int EM_RCEMERGENCY_CALL_ROBBER = 3; // 匪警 + public static final int EM_RCEMERGENCY_CALL_MEDICAL = 4; // 医疗 + public static final int EM_RCEMERGENCY_CALL_EMERGENCY = 5; // 紧急 + } + // 报警方式 - public static class EM_RCEMERGENCY_MODE_TYPE extends Structure - { - public static final int EM_RCEMERGENCY_MODE_UNKNOWN = 0; - public static final int EM_RCEMERGENCY_MODE_KEYBOARD = 1; // 键盘 - public static final int EM_RCEMERGENCY_MODE_WIRELESS_CONTROL = 2; // 遥控器 + public static class EM_RCEMERGENCY_MODE_TYPE extends Structure { + public static final int EM_RCEMERGENCY_MODE_UNKNOWN = 0; + public static final int EM_RCEMERGENCY_MODE_KEYBOARD = 1; // 键盘 + public static final int EM_RCEMERGENCY_MODE_WIRELESS_CONTROL = 2; // 遥控器 } - + ///////////////////////////////////////////////////// ////////用户信息管理对应接口CLIENT_QueryUserInfoNew///////// // 用户信息表 public static class USER_MANAGE_INFO_NEW extends Structure { - public int dwSize; // 结构体大小 - public int dwRightNum; // 权限信息有效个数 - public OPR_RIGHT_NEW[] rightList = new OPR_RIGHT_NEW[NET_NEW_MAX_RIGHT_NUM]; // 权限信息,有效个数由 dwRightNum 成员决定, 用户权限个数上限NET_NEW_MAX_RIGHT_NUM = 1024 - public int dwGroupNum; // 用户组信息有效个数 - public USER_GROUP_INFO_NEW[] groupList = new USER_GROUP_INFO_NEW[NET_MAX_GROUP_NUM]; // 用户组信息,此参数废弃,请使用groupListEx - public int dwUserNum; // 用户数 - public USER_INFO_NEW[] userList = new USER_INFO_NEW[NET_MAX_USER_NUM]; // 用户列表, 用户个数上限NET_MAX_USER_NUM=200 - public int dwFouctionMask; // 掩码: 0x00000001 - 支持用户复用, 0x00000002 - 密码修改需要校验 - public byte byNameMaxLength; // 支持的用户名最大长度 - public byte byPSWMaxLength; // 支持的密码最大长度 - public byte[] byReserve = new byte[254]; - public USER_GROUP_INFO_EX2[] groupListEx = new USER_GROUP_INFO_EX2[NET_MAX_GROUP_NUM]; // 用户组信息扩展, 用户组个数上限NET_MAX_GROUP_NUM=20 - - public USER_MANAGE_INFO_NEW() { - this.dwSize = this.size(); - - for(int i = 0; i < NET_NEW_MAX_RIGHT_NUM; i++) { - rightList[i] = new OPR_RIGHT_NEW(); - } - - for(int i = 0; i < NET_MAX_USER_NUM; i++) { - userList[i] = new USER_INFO_NEW(); - } - - for(int i = 0; i < NET_MAX_GROUP_NUM; i++) { - groupList[i] = new USER_GROUP_INFO_NEW(); - groupListEx[i] = new USER_GROUP_INFO_EX2(); - } - } - } - + public int dwSize; // 结构体大小 + public int dwRightNum; // 权限信息有效个数 + public OPR_RIGHT_NEW[] rightList = new OPR_RIGHT_NEW[NET_NEW_MAX_RIGHT_NUM]; // 权限信息,有效个数由 dwRightNum 成员决定, 用户权限个数上限NET_NEW_MAX_RIGHT_NUM = 1024 + public int dwGroupNum; // 用户组信息有效个数 + public USER_GROUP_INFO_NEW[] groupList = new USER_GROUP_INFO_NEW[NET_MAX_GROUP_NUM]; // 用户组信息,此参数废弃,请使用groupListEx + public int dwUserNum; // 用户数 + public USER_INFO_NEW[] userList = new USER_INFO_NEW[NET_MAX_USER_NUM]; // 用户列表, 用户个数上限NET_MAX_USER_NUM=200 + public int dwFouctionMask; // 掩码: 0x00000001 - 支持用户复用, 0x00000002 - 密码修改需要校验 + public byte byNameMaxLength; // 支持的用户名最大长度 + public byte byPSWMaxLength; // 支持的密码最大长度 + public byte[] byReserve = new byte[254]; + public USER_GROUP_INFO_EX2[] groupListEx = new USER_GROUP_INFO_EX2[NET_MAX_GROUP_NUM]; // 用户组信息扩展, 用户组个数上限NET_MAX_GROUP_NUM=20 + + public USER_MANAGE_INFO_NEW() { + this.dwSize = this.size(); + + for (int i = 0; i < NET_NEW_MAX_RIGHT_NUM; i++) { + rightList[i] = new OPR_RIGHT_NEW(); + } + + for (int i = 0; i < NET_MAX_USER_NUM; i++) { + userList[i] = new USER_INFO_NEW(); + } + + for (int i = 0; i < NET_MAX_GROUP_NUM; i++) { + groupList[i] = new USER_GROUP_INFO_NEW(); + groupListEx[i] = new USER_GROUP_INFO_EX2(); + } + } + } + // 权限信息 public static class OPR_RIGHT_NEW extends Structure { - public int dwSize; //结构体大小 - public int dwID; //权限ID,每个 权限都有各自的ID - public byte[] name = new byte[NET_RIGHT_NAME_LENGTH]; //名称 权限名长度 NET_RIGHT_NAME_LENGTH=32 - public byte[] memo = new byte[NET_MEMO_LENGTH]; //说明备注长度NET_MEMO_LENGTH=32 - - public OPR_RIGHT_NEW() { - this.dwSize = this.size(); - } - } - + public int dwSize; //结构体大小 + public int dwID; //权限ID,每个 权限都有各自的ID + public byte[] name = new byte[NET_RIGHT_NAME_LENGTH]; //名称 权限名长度 NET_RIGHT_NAME_LENGTH=32 + public byte[] memo = new byte[NET_MEMO_LENGTH]; //说明备注长度NET_MEMO_LENGTH=32 + + public OPR_RIGHT_NEW() { + this.dwSize = this.size(); + } + } + // 用户组信息 public static class USER_GROUP_INFO_NEW extends Structure { - public int dwSize; - public int dwID; // 用户组ID, 每个用户组都有各自的ID - public byte[] name = new byte[NET_USER_NAME_LENGTH_EX]; // 用户组名称/NET_USER_NAME_LENGTH_EX=16 - public int dwRightNum; // 用户组权限有效个数 - public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户组支持权限数组 - public byte[] memo = new byte[NET_MEMO_LENGTH]; // 用户组备注说明 + public int dwSize; + public int dwID; // 用户组ID, 每个用户组都有各自的ID + public byte[] name = new byte[NET_USER_NAME_LENGTH_EX]; // 用户组名称/NET_USER_NAME_LENGTH_EX=16 + public int dwRightNum; // 用户组权限有效个数 + public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户组支持权限数组 + public byte[] memo = new byte[NET_MEMO_LENGTH]; // 用户组备注说明 + public USER_GROUP_INFO_NEW() { - this.dwSize = this.size(); - } - } - + this.dwSize = this.size(); + } + } + // 用户组信息扩展,用户组名加长 public static class USER_GROUP_INFO_EX2 extends Structure { - public int dwSize; // 结构体大小 - public int dwID; // ID - public byte[] name = new byte[NET_NEW_USER_NAME_LENGTH]; // 用户名 长度NET_NEW_USER_NAME_LENGTH=128 - public int dwRightNum; // 权限数量 - public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户权限 个数上限 NET_NEW_MAX_RIGHT_NUM = 1024 - public byte[] memo = new byte[NET_MEMO_LENGTH]; // 说明, 备注长度NET_MEMO_LENGTH=32 - + public int dwSize; // 结构体大小 + public int dwID; // ID + public byte[] name = new byte[NET_NEW_USER_NAME_LENGTH]; // 用户名 长度NET_NEW_USER_NAME_LENGTH=128 + public int dwRightNum; // 权限数量 + public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户权限 个数上限 NET_NEW_MAX_RIGHT_NUM = 1024 + public byte[] memo = new byte[NET_MEMO_LENGTH]; // 说明, 备注长度NET_MEMO_LENGTH=32 + public USER_GROUP_INFO_EX2() { - this.dwSize = this.size(); - } + this.dwSize = this.size(); + } } - + // 用户信息结构体 public static class USER_INFO_NEW extends Structure { - public int dwSize; // 结构体大小 - public int dwID; // 用户ID - public int dwGroupID; // 用户组组ID - public byte[] name = new byte[NET_NEW_USER_NAME_LENGTH]; // 用户名称,长度NET_NEW_USER_NAME_LENGTH=128 - public byte[] passWord = new byte[NET_NEW_USER_PSW_LENGTH]; // 用户密码,NET_NEW_USER_PSW_LENGTH=128 - public int dwRightNum; // 用户权限有效个数 - public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户支持权限数组,个数上限 NET_NEW_MAX_RIGHT_NUM = 1024 - public byte[] memo = new byte[NET_MEMO_LENGTH]; // 用户备注说明, 备注长度NET_MEMO_LENGTH=32 - public int dwFouctionMask; // 掩码,0x00000001 - 支持用户复用 - public NET_TIME stuTime; // 最后修改时间 - public byte byIsAnonymous; // 是否可以匿名登录, 0:不可匿名登录, 1: 可以匿名登录 - public byte[] byReserve = new byte[7]; // 保留字节 - + public int dwSize; // 结构体大小 + public int dwID; // 用户ID + public int dwGroupID; // 用户组组ID + public byte[] name = new byte[NET_NEW_USER_NAME_LENGTH]; // 用户名称,长度NET_NEW_USER_NAME_LENGTH=128 + public byte[] passWord = new byte[NET_NEW_USER_PSW_LENGTH]; // 用户密码,NET_NEW_USER_PSW_LENGTH=128 + public int dwRightNum; // 用户权限有效个数 + public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户支持权限数组,个数上限 NET_NEW_MAX_RIGHT_NUM = 1024 + public byte[] memo = new byte[NET_MEMO_LENGTH]; // 用户备注说明, 备注长度NET_MEMO_LENGTH=32 + public int dwFouctionMask; // 掩码,0x00000001 - 支持用户复用 + public NET_TIME stuTime; // 最后修改时间 + public byte byIsAnonymous; // 是否可以匿名登录, 0:不可匿名登录, 1: 可以匿名登录 + public byte[] byReserve = new byte[7]; // 保留字节 + public USER_INFO_NEW() { - this.dwSize = this.size(); - } + this.dwSize = this.size(); + } } - - + + //------------------------白名单相关结构体------------------------- // CLIENT_FindRecord接口输入参数 public static class NET_IN_FIND_RECORD_PARAM extends Structure { - public int dwSize; // 结构体大小 - public int emType; // 待查询记录类型,emType对应 EM_NET_RECORD_TYPE - public Pointer pQueryCondition; // 查询类型对应的查询条件 - + public int dwSize; // 结构体大小 + public int emType; // 待查询记录类型,emType对应 EM_NET_RECORD_TYPE + public Pointer pQueryCondition; // 查询类型对应的查询条件 + public NET_IN_FIND_RECORD_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 交通黑白名单账户记录查询条件 public static class FIND_RECORD_TRAFFICREDLIST_CONDITION extends Structure { - public int dwSize; - public byte[] szPlateNumber = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号 - public byte[] szPlateNumberVague = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号码模糊查询 - public int nQueryResultBegin; // 第一个条返回结果在查询结果中的偏移量 - public boolean bRapidQuery; // 是否快速查询, TRUE:为快速,快速查询时不等待所有增、删、改操作完成。默认为非快速查询 - + public int dwSize; + public byte[] szPlateNumber = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号 + public byte[] szPlateNumberVague = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号码模糊查询 + public int nQueryResultBegin; // 第一个条返回结果在查询结果中的偏移量 + public boolean bRapidQuery; // 是否快速查询, TRUE:为快速,快速查询时不等待所有增、删、改操作完成。默认为非快速查询 + public FIND_RECORD_TRAFFICREDLIST_CONDITION() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 交通流量记录查询条件 public static class FIND_RECORD_TRAFFICFLOW_CONDITION extends Structure { - public int dwSize; - public int abChannelId; // 通道号查询条件是否有效 - public int nChannelId; // 通道号 - public int abLane; // 车道号查询条件是否有效 - public int nLane; // 车道号 - public int bStartTime; // 开始时间查询条件是否有效 - public NET_TIME stStartTime; // 开始时间 - public int bEndTime; // 结束时间查询条件是否有效 - public NET_TIME stEndTime; // 结束时间 - public int bStatisticsTime; // 查询是否为统计时间,为BOOL类型,bStartTime及bEndTime均为1 - public FIND_RECORD_TRAFFICFLOW_CONDITION() { - this.dwSize = this.size(); - } - } - + public int dwSize; + public int abChannelId; // 通道号查询条件是否有效 + public int nChannelId; // 通道号 + public int abLane; // 车道号查询条件是否有效 + public int nLane; // 车道号 + public int bStartTime; // 开始时间查询条件是否有效 + public NET_TIME stStartTime; // 开始时间 + public int bEndTime; // 结束时间查询条件是否有效 + public NET_TIME stEndTime; // 结束时间 + public int bStatisticsTime; // 查询是否为统计时间,为BOOL类型,bStartTime及bEndTime均为1 + + public FIND_RECORD_TRAFFICFLOW_CONDITION() { + this.dwSize = this.size(); + } + } + // 门禁出入记录查询条件 public static class FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX extends Structure { - public int dwSize; - public int bCardNoEnable; // 启用卡号查询, 为BOOL类型 - public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 - public int bTimeEnable; // 启用时间段查询, 为BOOL类型 - public NET_TIME stStartTime; // 起始时间 - public NET_TIME stEndTime; // 结束时间 - public int nOrderNum; // 规则数 - public FIND_RECORD_ACCESSCTLCARDREC_ORDER[] stuOrders = - (FIND_RECORD_ACCESSCTLCARDREC_ORDER[])new FIND_RECORD_ACCESSCTLCARDREC_ORDER().toArray(MAX_ORDER_NUMBER); // 规则数组 - + public int dwSize; + public int bCardNoEnable; // 启用卡号查询, 为BOOL类型 + public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 + public int bTimeEnable; // 启用时间段查询, 为BOOL类型 + public NET_TIME stStartTime; // 起始时间 + public NET_TIME stEndTime; // 结束时间 + public int nOrderNum; // 规则数 + public FIND_RECORD_ACCESSCTLCARDREC_ORDER[] stuOrders = + (FIND_RECORD_ACCESSCTLCARDREC_ORDER[]) new FIND_RECORD_ACCESSCTLCARDREC_ORDER().toArray(MAX_ORDER_NUMBER); // 规则数组 + public FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 门禁出入记录排序规则详情 - public static class FIND_RECORD_ACCESSCTLCARDREC_ORDER extends Structure - { - public int emField; // 排序字段, 对应枚举 EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD - public int emOrderType; // 排序类型, 对应枚举 EM_RECORD_ORDER_TYPE - public byte[] byReverse = new byte[64]; // 保留字节 + public static class FIND_RECORD_ACCESSCTLCARDREC_ORDER extends Structure { + public int emField; // 排序字段, 对应枚举 EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD + public int emOrderType; // 排序类型, 对应枚举 EM_RECORD_ORDER_TYPE + public byte[] byReverse = new byte[64]; // 保留字节 } - + // 门禁出入记录排序字段 - public static class EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD extends Structure - { - public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_UNKNOWN = 0; // 未知 - public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_RECNO = 1; // 记录集编号 - public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_CREATETIME = 2; // 创建时间 + public static class EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD extends Structure { + public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_UNKNOWN = 0; // 未知 + public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_RECNO = 1; // 记录集编号 + public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_CREATETIME = 2; // 创建时间 } - + // 排序类型 - public static class EM_RECORD_ORDER_TYPE extends Structure - { - public static final int EM_RECORD_ORDER_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_RECORD_ORDER_TYPE_ASCENT = 1; // 升序 - public static final int EM_RECORD_ORDER_TYPE_DESCENT = 2; // 降序 + public static class EM_RECORD_ORDER_TYPE extends Structure { + public static final int EM_RECORD_ORDER_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_RECORD_ORDER_TYPE_ASCENT = 1; // 升序 + public static final int EM_RECORD_ORDER_TYPE_DESCENT = 2; // 降序 } - + // 开门方式(门禁事件,门禁出入记录,实际的开门方式) public static class NET_ACCESS_DOOROPEN_METHOD extends Structure { public static final int NET_ACCESS_DOOROPEN_METHOD_UNKNOWN = 0; - public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY = 1; // 密码开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_CARD = 2; // 刷卡开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST = 3; // 先刷卡后密码开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST = 4; // 先密码后刷卡开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_REMOTE = 5; // 远程开锁,如通过室内机或者平台对门口机开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_BUTTON = 6; // 开锁按钮进行开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT = 7; // 指纹开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT = 8; // 密码+刷卡+指纹组合开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT = 10; // 密码+指纹组合开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT = 11; // 刷卡+指纹组合开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_PERSONS = 12; // 多人开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_KEY = 13; // 钥匙开门 - public static final int NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD = 14; // 胁迫密码开门 - public static final int NET_ACCESS_DOOROPEN_METHOD_QRCODE = 15; // 二维码开门 - public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION = 16; // 人脸识别开门 - public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD = 18; // 人证对比 - public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD = 19; // 身份证+ 人证比对 - public static final int NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH = 20; // 蓝牙开门 - public static final int NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD = 21; // 个性化密码开门 - public static final int NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD = 22; // UserID+密码 - public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD = 23; // 人脸+密码开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD = 24; // 指纹+密码开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE = 25; // 指纹+人脸开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE = 26; // 刷卡+人脸开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD = 27; // 人脸或密码开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD = 28; // 指纹或密码开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE = 29; // 指纹或人脸开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE = 30; // 刷卡或人脸开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT = 31; // 刷卡或指纹开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD = 32; // 指纹+人脸+密码开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY = 1; // 密码开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_CARD = 2; // 刷卡开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST = 3; // 先刷卡后密码开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST = 4; // 先密码后刷卡开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_REMOTE = 5; // 远程开锁,如通过室内机或者平台对门口机开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_BUTTON = 6; // 开锁按钮进行开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT = 7; // 指纹开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT = 8; // 密码+刷卡+指纹组合开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT = 10; // 密码+指纹组合开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT = 11; // 刷卡+指纹组合开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_PERSONS = 12; // 多人开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_KEY = 13; // 钥匙开门 + public static final int NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD = 14; // 胁迫密码开门 + public static final int NET_ACCESS_DOOROPEN_METHOD_QRCODE = 15; // 二维码开门 + public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION = 16; // 人脸识别开门 + public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD = 18; // 人证对比 + public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD = 19; // 身份证+ 人证比对 + public static final int NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH = 20; // 蓝牙开门 + public static final int NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD = 21; // 个性化密码开门 + public static final int NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD = 22; // UserID+密码 + public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD = 23; // 人脸+密码开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD = 24; // 指纹+密码开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE = 25; // 指纹+人脸开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE = 26; // 刷卡+人脸开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD = 27; // 人脸或密码开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD = 28; // 指纹或密码开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE = 29; // 指纹或人脸开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE = 30; // 刷卡或人脸开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT = 31; // 刷卡或指纹开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD = 32; // 指纹+人脸+密码开锁 public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD = 33; // 刷卡+人脸+密码开锁 public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD = 34; // 刷卡+指纹+密码开锁 public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE = 35; // 卡+指纹+人脸组合开锁 @@ -9426,280 +9036,282 @@ public interface NetSDKLib extends Library { public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD = 37; // 卡或人脸或密码开锁 public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE = 38; // 卡或指纹或人脸开锁 public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD = 39; // 卡+指纹+人脸+密码组合开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD = 40; // 卡或指纹或人脸或密码开锁 - public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE = 41; // (身份证+人证比对)或 刷卡 或 人脸 + public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD = 40; // 卡或指纹或人脸或密码开锁 + public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE = 41; // (身份证+人证比对)或 刷卡 或 人脸 public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE = 42; // 人证比对 或 刷卡(二维码) 或 人脸 } - + // 卡类型 public static class NET_ACCESSCTLCARD_TYPE { public static final int NET_ACCESSCTLCARD_TYPE_UNKNOWN = -1; public static final int NET_ACCESSCTLCARD_TYPE_GENERAL = 0; // 一般卡 - public static final int NET_ACCESSCTLCARD_TYPE_VIP = 1; // VIP卡 - public static final int NET_ACCESSCTLCARD_TYPE_GUEST = 2; // 来宾卡 - public static final int NET_ACCESSCTLCARD_TYPE_PATROL = 3; // 巡逻卡 + public static final int NET_ACCESSCTLCARD_TYPE_VIP = 1; // VIP卡 + public static final int NET_ACCESSCTLCARD_TYPE_GUEST = 2; // 来宾卡 + public static final int NET_ACCESSCTLCARD_TYPE_PATROL = 3; // 巡逻卡 public static final int NET_ACCESSCTLCARD_TYPE_BLACKLIST = 4; // 黑名单卡 - public static final int NET_ACCESSCTLCARD_TYPE_CORCE = 5; // 胁迫卡 - public static final int NET_ACCESSCTLCARD_TYPE_POLLING = 6; // 巡检卡 - public static final int NET_ACCESSCTLCARD_TYPE_MOTHERCARD = 0xff; // 母卡 + public static final int NET_ACCESSCTLCARD_TYPE_CORCE = 5; // 胁迫卡 + public static final int NET_ACCESSCTLCARD_TYPE_POLLING = 6; // 巡检卡 + public static final int NET_ACCESSCTLCARD_TYPE_MOTHERCARD = 0xff; // 母卡 } - + // 门禁刷卡记录记录集信息 public static class NET_RECORDSET_ACCESS_CTL_CARDREC extends Structure { - public int dwSize; - public int nRecNo; // 记录集编号,只读 - public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN];// 卡号 - public byte[] szPwd = new byte[NET_MAX_CARDPWD_LEN]; // 密码 - public NET_TIME stuTime; // 刷卡时间 - public int bStatus; // 刷卡结果,TRUE表示成功,FALSE表示失败 - public int emMethod; // 开门方式 NET_ACCESS_DOOROPEN_METHOD - public int nDoor; // 门号,即CFG_CMD_ACCESS_EVENT配置CFG_ACCESS_EVENT_INFO的数组下标 - public byte[] szUserID = new byte[NET_MAX_USERID_LEN];// 用户ID - public int nReaderID; // 读卡器ID (废弃,不再使用) - public byte[] szSnapFtpUrl = new byte[MAX_PATH]; // 开锁抓拍上传的FTP地址 - - public byte[] szReaderID = new byte[NET_COMMON_STRING_32];// 读卡器ID // 开门并上传抓拍照片,在记录集记录存储地址,成功才有 - public int emCardType; // 卡类型 NET_ACCESSCTLCARD_TYPE - - public int nErrorCode; // 开门失败的原因,仅在bStatus为FALSE时有效 - // 0x00 没有错误 - // 0x10 未授权 - // 0x11 卡挂失或注销 - // 0x12 没有该门权限 - // 0x13 开门模式错误 - // 0x14 有效期错误 - // 0x15 防反潜模式 - // 0x16 胁迫报警未打开 - // 0x17 门常闭状态 - // 0x18 AB互锁状态 - // 0x19 巡逻卡 - // 0x1A 设备处于闯入报警状态 - // 0x20 时间段错误 - // 0x21 假期内开门时间段错误 - // 0x30 需要先验证有首卡权限的卡片 - // 0x40 卡片正确,输入密码错误 - // 0x41 卡片正确,输入密码超时 - // 0x42 卡片正确,输入指纹错误 - // 0x43 卡片正确,输入指纹超时 - // 0x44 指纹正确,输入密码错误 - // 0x45 指纹正确,输入密码超时 - // 0x50 组合开门顺序错误 - // 0x51 组合开门需要继续验证 - // 0x60 验证通过,控制台未授权 - public byte[] szRecordURL = new byte[NET_COMMON_STRING_128]; // 刷卡录像的地址 - public int nNumbers; // 抓图的张数 - public int emAttendanceState; // 考勤状态 ,参考 NET_ATTENDANCESTATE - public int emDirection; // 开门方向, 参考 NET_ENUM_DIRECTION_ACCESS_CTL - public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN]; // 班级(考勤肯尼亚定制) - public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN]; // 电话(考勤肯尼亚定制) - public byte[] szCardName = new byte[NET_MAX_CARDNAME_LEN]; // 卡命名 - public byte[] szSN = new byte[NET_COMMON_STRING_32]; // 智能锁序列号,无线配件需要该字段 - + public int dwSize; + public int nRecNo; // 记录集编号,只读 + public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN];// 卡号 + public byte[] szPwd = new byte[NET_MAX_CARDPWD_LEN]; // 密码 + public NET_TIME stuTime; // 刷卡时间 + public int bStatus; // 刷卡结果,TRUE表示成功,FALSE表示失败 + public int emMethod; // 开门方式 NET_ACCESS_DOOROPEN_METHOD + public int nDoor; // 门号,即CFG_CMD_ACCESS_EVENT配置CFG_ACCESS_EVENT_INFO的数组下标 + public byte[] szUserID = new byte[NET_MAX_USERID_LEN];// 用户ID + public int nReaderID; // 读卡器ID (废弃,不再使用) + public byte[] szSnapFtpUrl = new byte[MAX_PATH]; // 开锁抓拍上传的FTP地址 + + public byte[] szReaderID = new byte[NET_COMMON_STRING_32];// 读卡器ID // 开门并上传抓拍照片,在记录集记录存储地址,成功才有 + public int emCardType; // 卡类型 NET_ACCESSCTLCARD_TYPE + + public int nErrorCode; // 开门失败的原因,仅在bStatus为FALSE时有效 + // 0x00 没有错误 + // 0x10 未授权 + // 0x11 卡挂失或注销 + // 0x12 没有该门权限 + // 0x13 开门模式错误 + // 0x14 有效期错误 + // 0x15 防反潜模式 + // 0x16 胁迫报警未打开 + // 0x17 门常闭状态 + // 0x18 AB互锁状态 + // 0x19 巡逻卡 + // 0x1A 设备处于闯入报警状态 + // 0x20 时间段错误 + // 0x21 假期内开门时间段错误 + // 0x30 需要先验证有首卡权限的卡片 + // 0x40 卡片正确,输入密码错误 + // 0x41 卡片正确,输入密码超时 + // 0x42 卡片正确,输入指纹错误 + // 0x43 卡片正确,输入指纹超时 + // 0x44 指纹正确,输入密码错误 + // 0x45 指纹正确,输入密码超时 + // 0x50 组合开门顺序错误 + // 0x51 组合开门需要继续验证 + // 0x60 验证通过,控制台未授权 + public byte[] szRecordURL = new byte[NET_COMMON_STRING_128]; // 刷卡录像的地址 + public int nNumbers; // 抓图的张数 + public int emAttendanceState; // 考勤状态 ,参考 NET_ATTENDANCESTATE + public int emDirection; // 开门方向, 参考 NET_ENUM_DIRECTION_ACCESS_CTL + public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN]; // 班级(考勤肯尼亚定制) + public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN]; // 电话(考勤肯尼亚定制) + public byte[] szCardName = new byte[NET_MAX_CARDNAME_LEN]; // 卡命名 + public byte[] szSN = new byte[NET_COMMON_STRING_32]; // 智能锁序列号,无线配件需要该字段 + public NET_RECORDSET_ACCESS_CTL_CARDREC() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + //考勤状态 public static class NET_ATTENDANCESTATE extends Structure { public static final int NET_ATTENDANCESTATE_UNKNOWN = 0; - public static final int NET_ATTENDANCESTATE_SIGNIN = 1; // 签入 - public static final int NET_ATTENDANCESTATE_GOOUT = 2; // 外出 + public static final int NET_ATTENDANCESTATE_SIGNIN = 1; // 签入 + public static final int NET_ATTENDANCESTATE_GOOUT = 2; // 外出 public static final int NET_ATTENDANCESTATE_GOOUT_AND_RETRUN = 3; // 外出归来 public static final int NET_ATTENDANCESTATE_SIGNOUT = 4; // 签出 public static final int NET_ATTENDANCESTATE_WORK_OVERTIME_SIGNIN = 5; // 加班签到 public static final int NET_ATTENDANCESTATE_WORK_OVERTIME_SIGNOUT = 6; // 加班签出 } - + // 开门方向 public static class NET_ENUM_DIRECTION_ACCESS_CTL extends Structure { - public static final int NET_ENUM_DIRECTION_UNKNOWN = 0; - public static final int NET_ENUM_DIRECTION_ENTRY = 1; // 进门 - public static final int NET_ENUM_DIRECTION_EXIT = 2; // 出门 + public static final int NET_ENUM_DIRECTION_UNKNOWN = 0; + public static final int NET_ENUM_DIRECTION_ENTRY = 1; // 进门 + public static final int NET_ENUM_DIRECTION_EXIT = 2; // 出门 } - + // 记录集类型 public static class EM_NET_RECORD_TYPE extends Structure { public static final int NET_RECORD_UNKNOWN = 0; - public static final int NET_RECORD_TRAFFICREDLIST = 1; // 交通白名单账户记录, 查询条件对应 FIND_RECORD_TRAFFICREDLIST_CONDITION 结构体,记录信息对应 NET_TRAFFIC_LIST_RECORD 结构体 - public static final int NET_RECORD_TRAFFICBLACKLIST = 2; // 交通黑名单账号记录,查询条件对应 FIND_RECORD_TRAFFICREDLIST_CONDITION 结构体,记录信息对应 NET_TRAFFIC_LIST_RECORD 结构体 - public static final int NET_RECORD_BURN_CASE = 3; // 刻录案件记录,查询条件对应 FIND_RECORD_BURN_CASE_CONDITION 结构体,记录信息对应 NET_BURN_CASE_INFO 结构体 - public static final int NET_RECORD_ACCESSCTLCARD = 4; // 门禁卡,查询条件对应 FIND_RECORD_ACCESSCTLCARD_CONDITION 结构体,记录信息对应 NET_RECORDSET_ACCESS_CTL_CARD 结构体 - public static final int NET_RECORD_ACCESSCTLPWD = 5; // 门禁密码,查询条件对应 FIND_RECORD_ACCESSCTLPWD_CONDITION 结构体,记录信息对应 NET_RECORDSET_ACCESS_CTL_PWD - public static final int NET_RECORD_ACCESSCTLCARDREC = 6; // 门禁出入记录(必须同时按卡号和时间段查询,建议用 NET_RECORD_ACCESSCTLCARDREC_EX 查询),查询条件对应 FIND_RECORD_ACCESSCTLCARDREC_CONDITION 结构体,记录信息对应 NET_RECORDSET_ACCESS_CTL_CARDREC 结构体 - public static final int NET_RECORD_ACCESSCTLHOLIDAY = 7; // 假日记录集,查询条件对应 FIND_RECORD_ACCESSCTLHOLIDAY_CONDITION 结构体,记录信息对应 NET_RECORDSET_HOLIDAY 结构体 - public static final int NET_RECORD_TRAFFICFLOW_STATE = 8; // 查询交通流量记录,查询条件对应 FIND_RECORD_TRAFFICFLOW_CONDITION 结构体,记录信息对应 NET_RECORD_TRAFFIC_FLOW_STATE 结构体 - public static final int NET_RECORD_VIDEOTALKLOG = 9; // 通话记录,查询条件对应 FIND_RECORD_VIDEO_TALK_LOG_CONDITION 结构体,记录信息对应 NET_RECORD_VIDEO_TALK_LOG 结构体 - public static final int NET_RECORD_REGISTERUSERSTATE = 10; // 状态记录,查询条件对应 FIND_RECORD_REGISTER_USER_STATE_CONDITION 结构体,记录信息对应 NET_RECORD_REGISTER_USER_STATE 结构体 - public static final int NET_RECORD_VIDEOTALKCONTACT = 11; // 联系人记录,查询条件对应 FIND_RECORD_VIDEO_TALK_CONTACT_CONDITION 结构体,记录信息对应 NET_RECORD_VIDEO_TALK_CONTACT 结构体 - public static final int NET_RECORD_ANNOUNCEMENT = 12; // 公告记录,查询条件对应 FIND_RECORD_ANNOUNCEMENT_CONDITION 结构体,记录信息对应 NET_RECORD_ANNOUNCEMENT_INFO 结构体 - public static final int NET_RECORD_ALARMRECORD = 13; // 报警记录,查询条件对应 FIND_RECORD_ALARMRECORD_CONDITION 结构体,记录信息对应 NET_RECORD_ALARMRECORD_INFO 结构体 - public static final int NET_RECORD_COMMODITYNOTICE = 14; // 下发商品记录,查询条件对应 FIND_RECORD_COMMODITY_NOTICE_CONDITION 结构体,记录信息对应 NET_RECORD_COMMODITY_NOTICE 结构体 - public static final int NET_RECORD_HEALTHCARENOTICE = 15; // 就诊信息记录,查询条件对应 FIND_RECORD_HEALTH_CARE_NOTICE_CONDITION 结构体,记录信息对应 NET_RECORD_HEALTH_CARE_NOTICE 结构体 - public static final int NET_RECORD_ACCESSCTLCARDREC_EX = 16; // 门禁出入记录(可选择部分条件查询,建议替代NET_RECORD_ACCESSCTLCARDREC),查询条件对应 FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX 结构体,记录信息对应 NET_RECORDSET_ACCESS_CTL_CARDREC 结构体 - public static final int NET_RECORD_GPS_LOCATION = 17; // GPS位置信息记录, 只实现import和clear,记录信息对应 NET_RECORD_GPS_LOCATION_INFO 结构体 - public static final int NET_RECORD_RESIDENT = 18; // 公租房租户信息,查询条件对应 FIND_RECORD_RESIDENT_CONDTION结构体, 记录信息对应 NET_RECORD_RESIDENT_INFO 结构体 - public static final int NET_RECORD_SENSORRECORD = 19; // 监测量数据记录,查询条件对应 FIND_RECORD_SENSORRECORD_CONDITION 结构体,记录信息对应 NET_RECORD_SENSOR_RECORD 结构体 - public static final int NET_RECORD_ACCESSQRCODE = 20; // 开门二维码记录集,记录信息对应 NET_RECORD_ACCESSQRCODE_INFO结构体 - public static final int NET_RECORD_ACCESS_BLUETOOTH = 22; // 蓝牙开门记录集, 查询条件对应 FIND_RECORD_ACCESS_BLUETOOTH_INFO_CONDITION 结构体, 记录信息对应 NET_RECORD_ACCESS_BLUETOOTH_INFO 结构体 - } - + public static final int NET_RECORD_TRAFFICREDLIST = 1; // 交通白名单账户记录, 查询条件对应 FIND_RECORD_TRAFFICREDLIST_CONDITION 结构体,记录信息对应 NET_TRAFFIC_LIST_RECORD 结构体 + public static final int NET_RECORD_TRAFFICBLACKLIST = 2; // 交通黑名单账号记录,查询条件对应 FIND_RECORD_TRAFFICREDLIST_CONDITION 结构体,记录信息对应 NET_TRAFFIC_LIST_RECORD 结构体 + public static final int NET_RECORD_BURN_CASE = 3; // 刻录案件记录,查询条件对应 FIND_RECORD_BURN_CASE_CONDITION 结构体,记录信息对应 NET_BURN_CASE_INFO 结构体 + public static final int NET_RECORD_ACCESSCTLCARD = 4; // 门禁卡,查询条件对应 FIND_RECORD_ACCESSCTLCARD_CONDITION 结构体,记录信息对应 NET_RECORDSET_ACCESS_CTL_CARD 结构体 + public static final int NET_RECORD_ACCESSCTLPWD = 5; // 门禁密码,查询条件对应 FIND_RECORD_ACCESSCTLPWD_CONDITION 结构体,记录信息对应 NET_RECORDSET_ACCESS_CTL_PWD + public static final int NET_RECORD_ACCESSCTLCARDREC = 6; // 门禁出入记录(必须同时按卡号和时间段查询,建议用 NET_RECORD_ACCESSCTLCARDREC_EX 查询),查询条件对应 FIND_RECORD_ACCESSCTLCARDREC_CONDITION 结构体,记录信息对应 NET_RECORDSET_ACCESS_CTL_CARDREC 结构体 + public static final int NET_RECORD_ACCESSCTLHOLIDAY = 7; // 假日记录集,查询条件对应 FIND_RECORD_ACCESSCTLHOLIDAY_CONDITION 结构体,记录信息对应 NET_RECORDSET_HOLIDAY 结构体 + public static final int NET_RECORD_TRAFFICFLOW_STATE = 8; // 查询交通流量记录,查询条件对应 FIND_RECORD_TRAFFICFLOW_CONDITION 结构体,记录信息对应 NET_RECORD_TRAFFIC_FLOW_STATE 结构体 + public static final int NET_RECORD_VIDEOTALKLOG = 9; // 通话记录,查询条件对应 FIND_RECORD_VIDEO_TALK_LOG_CONDITION 结构体,记录信息对应 NET_RECORD_VIDEO_TALK_LOG 结构体 + public static final int NET_RECORD_REGISTERUSERSTATE = 10; // 状态记录,查询条件对应 FIND_RECORD_REGISTER_USER_STATE_CONDITION 结构体,记录信息对应 NET_RECORD_REGISTER_USER_STATE 结构体 + public static final int NET_RECORD_VIDEOTALKCONTACT = 11; // 联系人记录,查询条件对应 FIND_RECORD_VIDEO_TALK_CONTACT_CONDITION 结构体,记录信息对应 NET_RECORD_VIDEO_TALK_CONTACT 结构体 + public static final int NET_RECORD_ANNOUNCEMENT = 12; // 公告记录,查询条件对应 FIND_RECORD_ANNOUNCEMENT_CONDITION 结构体,记录信息对应 NET_RECORD_ANNOUNCEMENT_INFO 结构体 + public static final int NET_RECORD_ALARMRECORD = 13; // 报警记录,查询条件对应 FIND_RECORD_ALARMRECORD_CONDITION 结构体,记录信息对应 NET_RECORD_ALARMRECORD_INFO 结构体 + public static final int NET_RECORD_COMMODITYNOTICE = 14; // 下发商品记录,查询条件对应 FIND_RECORD_COMMODITY_NOTICE_CONDITION 结构体,记录信息对应 NET_RECORD_COMMODITY_NOTICE 结构体 + public static final int NET_RECORD_HEALTHCARENOTICE = 15; // 就诊信息记录,查询条件对应 FIND_RECORD_HEALTH_CARE_NOTICE_CONDITION 结构体,记录信息对应 NET_RECORD_HEALTH_CARE_NOTICE 结构体 + public static final int NET_RECORD_ACCESSCTLCARDREC_EX = 16; // 门禁出入记录(可选择部分条件查询,建议替代NET_RECORD_ACCESSCTLCARDREC),查询条件对应 FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX 结构体,记录信息对应 NET_RECORDSET_ACCESS_CTL_CARDREC 结构体 + public static final int NET_RECORD_GPS_LOCATION = 17; // GPS位置信息记录, 只实现import和clear,记录信息对应 NET_RECORD_GPS_LOCATION_INFO 结构体 + public static final int NET_RECORD_RESIDENT = 18; // 公租房租户信息,查询条件对应 FIND_RECORD_RESIDENT_CONDTION结构体, 记录信息对应 NET_RECORD_RESIDENT_INFO 结构体 + public static final int NET_RECORD_SENSORRECORD = 19; // 监测量数据记录,查询条件对应 FIND_RECORD_SENSORRECORD_CONDITION 结构体,记录信息对应 NET_RECORD_SENSOR_RECORD 结构体 + public static final int NET_RECORD_ACCESSQRCODE = 20; // 开门二维码记录集,记录信息对应 NET_RECORD_ACCESSQRCODE_INFO结构体 + public static final int NET_RECORD_ACCESS_BLUETOOTH = 22; // 蓝牙开门记录集, 查询条件对应 FIND_RECORD_ACCESS_BLUETOOTH_INFO_CONDITION 结构体, 记录信息对应 NET_RECORD_ACCESS_BLUETOOTH_INFO 结构体 + } + //交通黑白名单记录信息 public static class NET_TRAFFIC_LIST_RECORD extends Structure { - public int dwSize; - public int nRecordNo; // 之前查询到的记录号 - public byte[] szMasterOfCar = new byte[NET_MAX_NAME_LEN]; // 车主姓名 - public byte[] szPlateNumber = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号码 - public int emPlateType; // 车牌类型,对应EM_NET_PLATE_TYPE - public int emPlateColor; // 车牌颜色 ,对应EM_NET_PLATE_COLOR_TYPE - public int emVehicleType; // 车辆类型 ,对应EM_NET_VEHICLE_TYPE - public int emVehicleColor; // 车身颜色,对应EM_NET_VEHICLE_COLOR_TYPE - public NET_TIME stBeginTime; // 开始时间 - public NET_TIME stCancelTime; // 撤销时间 - public int nAuthrityNum; // 权限个数 - public NET_AUTHORITY_TYPE[] stAuthrityTypes = (NET_AUTHORITY_TYPE[])new NET_AUTHORITY_TYPE().toArray(NET_MAX_AUTHORITY_LIST_NUM); // 权限列表 , 白名单仅有 - public int emControlType; // 布控类型 ,黑名单仅有,对应EM_NET_TRAFFIC_CAR_CONTROL_TYPE - - public static class ByReference extends NET_TRAFFIC_LIST_RECORD implements Structure.ByReference {} - - public NET_TRAFFIC_LIST_RECORD() { - this.dwSize = this.size(); - } - } - + public int dwSize; + public int nRecordNo; // 之前查询到的记录号 + public byte[] szMasterOfCar = new byte[NET_MAX_NAME_LEN]; // 车主姓名 + public byte[] szPlateNumber = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号码 + public int emPlateType; // 车牌类型,对应EM_NET_PLATE_TYPE + public int emPlateColor; // 车牌颜色 ,对应EM_NET_PLATE_COLOR_TYPE + public int emVehicleType; // 车辆类型 ,对应EM_NET_VEHICLE_TYPE + public int emVehicleColor; // 车身颜色,对应EM_NET_VEHICLE_COLOR_TYPE + public NET_TIME stBeginTime; // 开始时间 + public NET_TIME stCancelTime; // 撤销时间 + public int nAuthrityNum; // 权限个数 + public NET_AUTHORITY_TYPE[] stAuthrityTypes = (NET_AUTHORITY_TYPE[]) new NET_AUTHORITY_TYPE().toArray(NET_MAX_AUTHORITY_LIST_NUM); // 权限列表 , 白名单仅有 + public int emControlType; // 布控类型 ,黑名单仅有,对应EM_NET_TRAFFIC_CAR_CONTROL_TYPE + + public static class ByReference extends NET_TRAFFIC_LIST_RECORD implements Structure.ByReference { + } + + public NET_TRAFFIC_LIST_RECORD() { + this.dwSize = this.size(); + } + } + // 交通流量记录 public static class NET_RECORD_TRAFFIC_FLOW_STATE extends Structure { - public int dwSize; - public int nRecordNum; // 记录编号 - public int nChannel; // 通道号 - public int nLane; // 车道号 - public int nVehicles; // 通过车辆总数 - public float fAverageSpeed; // 平均车速,单位km/h - public float fTimeOccupyRatio; // 时间占有率,即单位时间内通过断面的车辆所用时间的总和占单位时间的比例 - public float fSpaceOccupyRatio; // 空间占有率,即按百分率计量的车辆长度总和除以时间间隔内车辆平均行驶距离 - public float fSpaceHeadway; // 车头间距,相邻车辆之间的距离,单位米/辆 - public float fTimeHeadway; // 车头时距,单位秒/辆 - public int nLargeVehicles; // 大车交通量(9米<车长<12米),辆/单位时间 - public int nMediumVehicles; // 中型车交通量(6米<车长<9米),辆/单位时间 - public int nSmallVehicles; // 小车交通量(4米<车长<6米),辆/单位时间, - public float fBackOfQueue; // 排队长度,单位:米, 从信号交叉口停车线到上游排队车辆末端之间的距离 - + public int dwSize; + public int nRecordNum; // 记录编号 + public int nChannel; // 通道号 + public int nLane; // 车道号 + public int nVehicles; // 通过车辆总数 + public float fAverageSpeed; // 平均车速,单位km/h + public float fTimeOccupyRatio; // 时间占有率,即单位时间内通过断面的车辆所用时间的总和占单位时间的比例 + public float fSpaceOccupyRatio; // 空间占有率,即按百分率计量的车辆长度总和除以时间间隔内车辆平均行驶距离 + public float fSpaceHeadway; // 车头间距,相邻车辆之间的距离,单位米/辆 + public float fTimeHeadway; // 车头时距,单位秒/辆 + public int nLargeVehicles; // 大车交通量(9米<车长<12米),辆/单位时间 + public int nMediumVehicles; // 中型车交通量(6米<车长<9米),辆/单位时间 + public int nSmallVehicles; // 小车交通量(4米<车长<6米),辆/单位时间, + public float fBackOfQueue; // 排队长度,单位:米, 从信号交叉口停车线到上游排队车辆末端之间的距离 + public NET_RECORD_TRAFFIC_FLOW_STATE() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + //权限列表 , 白名单仅有 public static class NET_AUTHORITY_TYPE extends Structure { - public int dwSize; - public int emAuthorityType; //权限类型,对应EM_NET_AUTHORITY_TYPE - public boolean bAuthorityEnable; //权限使能 - - public NET_AUTHORITY_TYPE() { - this.dwSize = this.size(); - } + public int dwSize; + public int emAuthorityType; //权限类型,对应EM_NET_AUTHORITY_TYPE + public boolean bAuthorityEnable; //权限使能 + + public NET_AUTHORITY_TYPE() { + this.dwSize = this.size(); + } } //权限类型 public static class EM_NET_AUTHORITY_TYPE extends Structure { - public static final int NET_AUTHORITY_UNKNOW = 0; - public static final int NET_AUTHORITY_OPEN_GATE = 1; //开闸权限 + public static final int NET_AUTHORITY_UNKNOW = 0; + public static final int NET_AUTHORITY_OPEN_GATE = 1; //开闸权限 } - + // CLIENT_FindRecord接口输出参数 public static class NET_OUT_FIND_RECORD_PARAM extends Structure { - public int dwSize; // 结构体大小 - public LLong lFindeHandle; // 查询记录句柄,唯一标识某次查询 - - public NET_OUT_FIND_RECORD_PARAM() { - this.dwSize = this.size(); - } - } - + public int dwSize; // 结构体大小 + public LLong lFindeHandle; // 查询记录句柄,唯一标识某次查询 + + public NET_OUT_FIND_RECORD_PARAM() { + this.dwSize = this.size(); + } + } + // CLIENT_FindNextRecord接口输入参数 public static class NET_IN_FIND_NEXT_RECORD_PARAM extends Structure { - public int dwSize; // 结构体大小 - public LLong lFindeHandle; // 查询句柄 - public int nFileCount; // 当前想查询的记录条数 - + public int dwSize; // 结构体大小 + public LLong lFindeHandle; // 查询句柄 + public int nFileCount; // 当前想查询的记录条数 + public NET_IN_FIND_NEXT_RECORD_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + //CLIENT_FindNextRecord接口输出参数 public static class NET_OUT_FIND_NEXT_RECORD_PARAM extends Structure { - public int dwSize; // 结构体大小 - public Pointer pRecordList; // 记录列表,用户分配内存,对应 交通黑白名单记录信息 NET_TRAFFIC_LIST_RECORD - public int nMaxRecordNum; // 列表记录数 - public int nRetRecordNum; // 查询到的记录条数,当查询到的条数小于想查询的条数时,查询结束 - + public int dwSize; // 结构体大小 + public Pointer pRecordList; // 记录列表,用户分配内存,对应 交通黑白名单记录信息 NET_TRAFFIC_LIST_RECORD + public int nMaxRecordNum; // 列表记录数 + public int nRetRecordNum; // 查询到的记录条数,当查询到的条数小于想查询的条数时,查询结束 + public NET_OUT_FIND_NEXT_RECORD_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // CLIENT_QueryRecordCount接口输入参数 - public static class NET_IN_QUEYT_RECORD_COUNT_PARAM extends Structure - { - public int dwSize;//结构体大小 - public LLong lFindeHandle;//查询句柄 - + public static class NET_IN_QUEYT_RECORD_COUNT_PARAM extends Structure { + public int dwSize;//结构体大小 + public LLong lFindeHandle;//查询句柄 + public NET_IN_QUEYT_RECORD_COUNT_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // CLIENT_QueryRecordCount接口输出参数 - public static class NET_OUT_QUEYT_RECORD_COUNT_PARAM extends Structure - { - public int dwSize;//结构体大小 - public int nRecordCount;//设备返回的记录条数 - + public static class NET_OUT_QUEYT_RECORD_COUNT_PARAM extends Structure { + public int dwSize;//结构体大小 + public int nRecordCount;//设备返回的记录条数 + public NET_OUT_QUEYT_RECORD_COUNT_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // CLIENT_OperateTrafficList接口输入参数, public static class NET_IN_OPERATE_TRAFFIC_LIST_RECORD extends Structure { - public int dwSize; - public int emOperateType; // emOperateType对应EM_RECORD_OPERATE_TYPE - public int emRecordType; // 要操作记录信息类型,emRecordType对应EM_NET_RECORD_TYPE - public Pointer pstOpreateInfo; // 对应 添加NET_INSERT_RECORD_INFO/ 删除NET_REMOVE_RECORD_INFO / 修改NET_UPDATE_RECORD_INFO - + public int dwSize; + public int emOperateType; // emOperateType对应EM_RECORD_OPERATE_TYPE + public int emRecordType; // 要操作记录信息类型,emRecordType对应EM_NET_RECORD_TYPE + public Pointer pstOpreateInfo; // 对应 添加NET_INSERT_RECORD_INFO/ 删除NET_REMOVE_RECORD_INFO / 修改NET_UPDATE_RECORD_INFO + public NET_IN_OPERATE_TRAFFIC_LIST_RECORD() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } + // 添加 public static class NET_INSERT_RECORD_INFO extends Structure { - public int dwSize; - public NET_TRAFFIC_LIST_RECORD.ByReference pRecordInfo = new NET_TRAFFIC_LIST_RECORD.ByReference(); // 记录内容信息 - - public NET_INSERT_RECORD_INFO () { - this.dwSize = this.size(); + public int dwSize; + public NET_TRAFFIC_LIST_RECORD.ByReference pRecordInfo = new NET_TRAFFIC_LIST_RECORD.ByReference(); // 记录内容信息 + + public NET_INSERT_RECORD_INFO() { + this.dwSize = this.size(); } } + // 删除 public static class NET_REMOVE_RECORD_INFO extends Structure { - public int dwSize; - public int nRecordNo; // 之前查询到的记录号,对应NET_TRAFFIC_LIST_RECORD里的nRecordNo - + public int dwSize; + public int nRecordNo; // 之前查询到的记录号,对应NET_TRAFFIC_LIST_RECORD里的nRecordNo + public NET_REMOVE_RECORD_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } + // 修改 - public static class NET_UPDATE_RECORD_INFO extends Structure{ - public int dwSize; - public NET_TRAFFIC_LIST_RECORD.ByReference pRecordInfo; // 记录内容信息 ,对应 NET_TRAFFIC_LIST_RECORD - + public static class NET_UPDATE_RECORD_INFO extends Structure { + public int dwSize; + public NET_TRAFFIC_LIST_RECORD.ByReference pRecordInfo; // 记录内容信息 ,对应 NET_TRAFFIC_LIST_RECORD + public NET_UPDATE_RECORD_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 黑白名单操作类型 public static class EM_RECORD_OPERATE_TYPE extends Structure { public static final int NET_TRAFFIC_LIST_INSERT = 0; // 增加记录操作 @@ -9707,429 +9319,412 @@ public interface NetSDKLib extends Library { public static final int NET_TRAFFIC_LIST_REMOVE = 2; // 删除记录操作 public static final int NET_TRAFFIC_LIST_MAX = 3; } - + // CLIENT_OperateTrafficList接口输出参数,现阶段实现的操作接口中,只有返回nRecordNo的操作,stRetRecord暂时不可用,是null public static class NET_OUT_OPERATE_TRAFFIC_LIST_RECORD extends Structure { - public int dwSize; - public int nRecordNo; //记录号 - + public int dwSize; + public int nRecordNo; //记录号 + public NET_OUT_OPERATE_TRAFFIC_LIST_RECORD() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 记录集操作参数 public static class NET_CTRL_RECORDSET_PARAM extends Structure { - public int dwSize; - public int emType; // 记录集信息类型,对应EM_NET_RECORD_TYPE - public Pointer pBuf; // 新增\更新\查询\导入时,为记录集信息缓存,详见EM_NET_RECORD_TYPE注释 - // 删除时,为记录编号(int型) - public int nBufLen; // 记录集信息缓存大小 - + public int dwSize; + public int emType; // 记录集信息类型,对应EM_NET_RECORD_TYPE + public Pointer pBuf; // 新增\更新\查询\导入时,为记录集信息缓存,详见EM_NET_RECORD_TYPE注释 + // 删除时,为记录编号(int型) + public int nBufLen; // 记录集信息缓存大小 + public NET_CTRL_RECORDSET_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 黑白名单上传 public static class NETDEV_BLACKWHITE_LIST_INFO extends Structure { - public byte[] szFile = new byte[MAX_PATH_STOR]; // 黑白名单文件路径 - public int nFileSize; // 升级文件大小 - public byte byFileType; // 当前文件类型,0-黑名单,1-白名单 - public byte byAction; // 动作,0-覆盖,1-追加 - public byte[] byReserved = new byte[126]; // 保留 + public byte[] szFile = new byte[MAX_PATH_STOR]; // 黑白名单文件路径 + public int nFileSize; // 升级文件大小 + public byte byFileType; // 当前文件类型,0-黑名单,1-白名单 + public byte byAction; // 动作,0-覆盖,1-追加 + public byte[] byReserved = new byte[126]; // 保留 } - + // GPS信息(车载设备) public static class GPS_Info extends Structure { - public NET_TIME revTime; // 定位时间 - public byte[] DvrSerial = new byte[50]; // 设备序列号 - public double longitude; // 经度(单位是百万分之度,范围0-360度) - public double latidude; // 纬度(单位是百万分之度,范围0-180度) - public double height; // 高度(米) - public double angle; // 方向角(正北方向为原点,顺时针为正) - public double speed; // 速度(单位是海里,speed/1000*1.852公里/小时) - public short starCount; // 定位星数,无符号 - public int antennaState; // 天线状态(true 好,false 坏) - public int orientationState; // 定位状态(true 定位,false 不定位) - - public static class ByValue extends GPS_Info implements Structure.ByValue { } - } - + public NET_TIME revTime; // 定位时间 + public byte[] DvrSerial = new byte[50]; // 设备序列号 + public double longitude; // 经度(单位是百万分之度,范围0-360度) + public double latidude; // 纬度(单位是百万分之度,范围0-180度) + public double height; // 高度(米) + public double angle; // 方向角(正北方向为原点,顺时针为正) + public double speed; // 速度(单位是海里,speed/1000*1.852公里/小时) + public short starCount; // 定位星数,无符号 + public int antennaState; // 天线状态(true 好,false 坏) + public int orientationState; // 定位状态(true 定位,false 不定位) + + public static class ByValue extends GPS_Info implements Structure.ByValue { + } + } + // 报警状态信息 public static class ALARM_STATE_INFO extends Structure { - public int nAlarmCount; // 发生的报警事件个数 - public int[] nAlarmState = new int[128]; // 发生的报警事件类型 - public byte[] byRserved = new byte[128]; // 保留字节 - - public static class ByValue extends ALARM_STATE_INFO implements Structure.ByValue { } + public int nAlarmCount; // 发生的报警事件个数 + public int[] nAlarmState = new int[128]; // 发生的报警事件类型 + public byte[] byRserved = new byte[128]; // 保留字节 + + public static class ByValue extends ALARM_STATE_INFO implements Structure.ByValue { + } } - + // 对应CLIENT_SearchDevicesByIPs接口 public static class DEVICE_IP_SEARCH_INFO extends Structure { - public int dwSize; // 结构体大小 - public int nIpNum; // 当前搜索的IP个数 - public DEVICE_IP[] szIPArr - = (DEVICE_IP[])new DEVICE_IP().toArray(NET_MAX_SAERCH_IP_NUM); // 具体待搜索的IP信息数组 - + public int dwSize; // 结构体大小 + public int nIpNum; // 当前搜索的IP个数 + public DEVICE_IP[] szIPArr + = (DEVICE_IP[]) new DEVICE_IP().toArray(NET_MAX_SAERCH_IP_NUM); // 具体待搜索的IP信息数组 + public DEVICE_IP_SEARCH_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 具体待搜索的IP信息 public static class DEVICE_IP extends Structure { - public byte[] szIP = new byte[64]; // 具体待搜索的IP信息 + public byte[] szIP = new byte[64]; // 具体待搜索的IP信息 } - + // CLIENT_UploadRemoteFile 接口输入参数(上传文件到设备) public static class NET_IN_UPLOAD_REMOTE_FILE extends Structure { - public int dwSize; - public Pointer pszFileSrc; // 源文件路径 - public Pointer pszFileDst; // 目标文件路径 - public Pointer pszFolderDst; // 目标文件夹路径:可为NULL, NULL时设备使用默认路径 - public int nPacketLen; // 文件分包大小(字节): 0表示不分包 - - public NET_IN_UPLOAD_REMOTE_FILE(){ - this.dwSize = this.size(); - } - } - + public int dwSize; + public Pointer pszFileSrc; // 源文件路径 + public Pointer pszFileDst; // 目标文件路径 + public Pointer pszFolderDst; // 目标文件夹路径:可为NULL, NULL时设备使用默认路径 + public int nPacketLen; // 文件分包大小(字节): 0表示不分包 + + public NET_IN_UPLOAD_REMOTE_FILE() { + this.dwSize = this.size(); + } + } + // CLIENT_UploadRemoteFile 接口输出参数(上传文件到设备) public static class NET_OUT_UPLOAD_REMOTE_FILE extends Structure { - public int dwSize; - + public int dwSize; + public NET_OUT_UPLOAD_REMOTE_FILE() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // CLIENT_ListRemoteFile 接口输入参数 - public static class NET_IN_LIST_REMOTE_FILE extends Structure - { - public int dwSize; - public String pszPath; // 路径 - public int bFileNameOnly; // 只获取文件名称, 不返回文件夹信息, 文件信息中只有文件名有效, BOOL类型 - public int emCondition; // 指定获取文件的条件, 对应 NET_REMOTE_FILE_COND - + public static class NET_IN_LIST_REMOTE_FILE extends Structure { + public int dwSize; + public String pszPath; // 路径 + public int bFileNameOnly; // 只获取文件名称, 不返回文件夹信息, 文件信息中只有文件名有效, BOOL类型 + public int emCondition; // 指定获取文件的条件, 对应 NET_REMOTE_FILE_COND + public NET_IN_LIST_REMOTE_FILE() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_ListRemoteFile 接口输出参数 - public static class NET_OUT_LIST_REMOTE_FILE extends Structure - { - public int dwSize; - public Pointer pstuFiles; // 文件信息数组, 用户分配内存, 对应 NET_REMOTE_FILE_INFO[],大小为sizeof(NET_REMOTE_FILE_INFO)*nMaxFileCount - public int nMaxFileCount; // 文件信息数组大小, 用户填写 - public int nRetFileCount; // 返回的文件数量 - + public static class NET_OUT_LIST_REMOTE_FILE extends Structure { + public int dwSize; + public Pointer pstuFiles; // 文件信息数组, 用户分配内存, 对应 NET_REMOTE_FILE_INFO[],大小为sizeof(NET_REMOTE_FILE_INFO)*nMaxFileCount + public int nMaxFileCount; // 文件信息数组大小, 用户填写 + public int nRetFileCount; // 返回的文件数量 + public NET_OUT_LIST_REMOTE_FILE() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // 文件/目录信息 - public static class NET_REMOTE_FILE_INFO extends Structure - { - public int dwSize; - public int bDirectory; // 是否文件夹, BOOL类型 - public byte[] szPath = new byte[MAX_PATH]; // 路径 - public NET_TIME stuCreateTime; // 创建时间 - public NET_TIME stuModifyTime; // 修改时间 - public long nFileSize; // 文件大小 - public byte[] szFileType = new byte[NET_FILE_TYPE_LEN]; // 文件类型 - + public static class NET_REMOTE_FILE_INFO extends Structure { + public int dwSize; + public int bDirectory; // 是否文件夹, BOOL类型 + public byte[] szPath = new byte[MAX_PATH]; // 路径 + public NET_TIME stuCreateTime; // 创建时间 + public NET_TIME stuModifyTime; // 修改时间 + public long nFileSize; // 文件大小 + public byte[] szFileType = new byte[NET_FILE_TYPE_LEN]; // 文件类型 + public NET_REMOTE_FILE_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // 获取文件的条件 - public static class NET_REMOTE_FILE_COND extends Structure - { + public static class NET_REMOTE_FILE_COND extends Structure { public static final int NET_REMOTE_FILE_COND_NONE = 0; // 无条件 public static final int NET_REMOTE_FILE_COND_VOICE = 1; // 语音联动的文件,*无法*按路径获取,*只能*获取获取文件名称 - } - + } + // CLIENT_RemoveRemoteFiles 接口输入参数 - public static class NET_IN_REMOVE_REMOTE_FILES extends Structure - { - public int dwSize; - public Pointer pszPathPointer; // 文件路径数组指针,对应 FILE_PATH[] - public int nFileCount; // 文件路径数量 - - public NET_IN_REMOVE_REMOTE_FILES() { - this.dwSize = this.size(); - } - } - + public static class NET_IN_REMOVE_REMOTE_FILES extends Structure { + public int dwSize; + public Pointer pszPathPointer; // 文件路径数组指针,对应 FILE_PATH[] + public int nFileCount; // 文件路径数量 + + public NET_IN_REMOVE_REMOTE_FILES() { + this.dwSize = this.size(); + } + } + public static class FILE_PATH extends Structure { - public String pszPath; + public String pszPath; } // CLIENT_RemoveRemoteFiles 接口输出参数 - public static class NET_OUT_REMOVE_REMOTE_FILES extends Structure - { - public int dwSize; - + public static class NET_OUT_REMOVE_REMOTE_FILES extends Structure { + public int dwSize; + public NET_OUT_REMOVE_REMOTE_FILES() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // CLIENT_ParkingControlAttachRecord()接口输入参数 public static class NET_IN_PARKING_CONTROL_PARAM extends Structure { - public int dwSize; - public StdCallCallback cbCallBack; // 数据回调函数,fParkingControlRecordCallBack 回调 - public Pointer dwUser; // 用户定义参数 - + public int dwSize; + public StdCallCallback cbCallBack; // 数据回调函数,fParkingControlRecordCallBack 回调 + public Pointer dwUser; // 用户定义参数 + public NET_IN_PARKING_CONTROL_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_ParkingControlDetachRecord()接口输出参数 public static class NET_OUT_PARKING_CONTROL_PARAM extends Structure { - public int dwSize; - + public int dwSize; + public NET_OUT_PARKING_CONTROL_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 过车记录信息 public static class NET_CAR_PASS_ITEM extends Structure { - public int dwSize; - public NET_TIME stuTime; // 过车时间 - public int dwCardNo; // 卡号 - public int emCardType; // 智能停车系统出入口机IC卡用户类型,对应 NET_ECK_IC_CARD_USER_TYPE - public int emFlag; // 过车记录类型,对应 NET_ECK_CAR_PASS_FLAG - - public NET_CAR_PASS_ITEM(){ - this.dwSize = this.size(); + public int dwSize; + public NET_TIME stuTime; // 过车时间 + public int dwCardNo; // 卡号 + public int emCardType; // 智能停车系统出入口机IC卡用户类型,对应 NET_ECK_IC_CARD_USER_TYPE + public int emFlag; // 过车记录类型,对应 NET_ECK_CAR_PASS_FLAG + + public NET_CAR_PASS_ITEM() { + this.dwSize = this.size(); } } - + // 智能停车系统出入口机IC卡用户类型 public static class NET_ECK_IC_CARD_USER_TYPE extends Structure { - public static final int NET_ECK_IC_CARD_USER_UNKNOWN = 0; - public static final int NET_ECK_IC_CARD_USER_ALL = 1; // 全部类型 - public static final int NET_ECK_IC_CARD_USER_TEMP = 2; // 临时用户 - public static final int NET_ECK_IC_CARD_USER_LONG = 3; // 长期用户 - public static final int NET_ECK_IC_CARD_USER_ADMIN = 4; // 管理员 - public static final int NET_ECK_IC_CARD_USER_BLACK_LIST = 5; // 黑名单 - } - + public static final int NET_ECK_IC_CARD_USER_UNKNOWN = 0; + public static final int NET_ECK_IC_CARD_USER_ALL = 1; // 全部类型 + public static final int NET_ECK_IC_CARD_USER_TEMP = 2; // 临时用户 + public static final int NET_ECK_IC_CARD_USER_LONG = 3; // 长期用户 + public static final int NET_ECK_IC_CARD_USER_ADMIN = 4; // 管理员 + public static final int NET_ECK_IC_CARD_USER_BLACK_LIST = 5; // 黑名单 + } + // 智能停车系统出入口机异常过车记录类型 public static class NET_ECK_CAR_PASS_FLAG extends Structure { - public static final int NET_ECK_CAR_PASS_FLAG_NORMAL = 0; // 正常 - public static final int NET_ECK_CAR_PASS_FLAG_ABNORMAL = 1; // 异常 - public static final int NET_ECK_CAR_PASS_FLAG_ALL = 2; // 全部 - } + public static final int NET_ECK_CAR_PASS_FLAG_NORMAL = 0; // 正常 + public static final int NET_ECK_CAR_PASS_FLAG_ABNORMAL = 1; // 异常 + public static final int NET_ECK_CAR_PASS_FLAG_ALL = 2; // 全部 + } // CLIENT_ParkingControlStartFind接口输入参数****************** public static class NET_IN_PARKING_CONTROL_START_FIND_PARAM extends Structure { - public int dwSize; // 结构体大小 - public int bSearchCount; // 查询记录调试是否有效 - public int dwSearchCount; // 查询记录条数, 数值范围1~100 - public int bBegin; // 查询开始时间是否有效 - public NET_TIME stuBegin; // 查询开始时间 - public int bEnd; // 查询结束时间是否有效 - public NET_TIME stuEnd; // 查询结束时间 - public int bCardType; // 卡类型是否有效 - public int emCardType; // 卡类型,对应 NET_ECK_IC_CARD_USER_TYPE - public int bFlag; // 过车标记是否有效 - public int emFlag; // 过车标记,对应 NET_ECK_CAR_PASS_FLAG - + public int dwSize; // 结构体大小 + public int bSearchCount; // 查询记录调试是否有效 + public int dwSearchCount; // 查询记录条数, 数值范围1~100 + public int bBegin; // 查询开始时间是否有效 + public NET_TIME stuBegin; // 查询开始时间 + public int bEnd; // 查询结束时间是否有效 + public NET_TIME stuEnd; // 查询结束时间 + public int bCardType; // 卡类型是否有效 + public int emCardType; // 卡类型,对应 NET_ECK_IC_CARD_USER_TYPE + public int bFlag; // 过车标记是否有效 + public int emFlag; // 过车标记,对应 NET_ECK_CAR_PASS_FLAG + public NET_IN_PARKING_CONTROL_START_FIND_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_ParkingControlStartFind接口输出参数 public static class NET_OUT_PARKING_CONTROL_START_FIND_PARAM extends Structure { - public int dwSize; // 结构体大小 - public int dwTotalCount; // 符合此次查询条件的结果总条数 - - public NET_OUT_PARKING_CONTROL_START_FIND_PARAM(){ - this.dwSize = this.size(); + public int dwSize; // 结构体大小 + public int dwTotalCount; // 符合此次查询条件的结果总条数 + + public NET_OUT_PARKING_CONTROL_START_FIND_PARAM() { + this.dwSize = this.size(); } } - + // CLIENT_ParkingControlDoFind接口输入参数******************* public static class NET_IN_PARKING_CONTROL_DO_FIND_PARAM extends Structure { - public int dwSize; // 结构体大小 - public int dwFileCount; // 当前想查询的记录条数 - - public NET_IN_PARKING_CONTROL_DO_FIND_PARAM(){ - this.dwSize = this.size(); + public int dwSize; // 结构体大小 + public int dwFileCount; // 当前想查询的记录条数 + + public NET_IN_PARKING_CONTROL_DO_FIND_PARAM() { + this.dwSize = this.size(); } - } + } // CLIENT_ParkingControlDoFind接口输出参数 - public static class NET_OUT_PARKING_CONTROL_DO_FIND_PARAM extends Structure{ - public int dwSize; // 结构体大小 - public Pointer pstuRecordList; // 记录列表,用户分配内存,对应NET_CAR_PASS_ITEM[],大小nMaxRecordNum个NET_CAR_PASS_ITEM - public int nMaxRecordNum; // 列表记录数 - public int nRetRecordNum; // 查询到的记录条数,当查询到的条数小于想查询的条数时,查询结束 - - public NET_OUT_PARKING_CONTROL_DO_FIND_PARAM(){ - this.dwSize = this.size(); - } - } - + public static class NET_OUT_PARKING_CONTROL_DO_FIND_PARAM extends Structure { + public int dwSize; // 结构体大小 + public Pointer pstuRecordList; // 记录列表,用户分配内存,对应NET_CAR_PASS_ITEM[],大小nMaxRecordNum个NET_CAR_PASS_ITEM + public int nMaxRecordNum; // 列表记录数 + public int nRetRecordNum; // 查询到的记录条数,当查询到的条数小于想查询的条数时,查询结束 + + public NET_OUT_PARKING_CONTROL_DO_FIND_PARAM() { + this.dwSize = this.size(); + } + } + // CLIENT_ParkingControlAttachParkInfo()接口输入参数 - public static class NET_IN_PARK_INFO_PARAM extends Structure - { - public int dwSize; - public NET_PARK_INFO_FILTER stuFilter; - public StdCallCallback cbCallBack; // 数据回调函数,fParkInfoCallBack 回调 - public Pointer dwUser; // 用户定义参数 - + public static class NET_IN_PARK_INFO_PARAM extends Structure { + public int dwSize; + public NET_PARK_INFO_FILTER stuFilter; + public StdCallCallback cbCallBack; // 数据回调函数,fParkInfoCallBack 回调 + public Pointer dwUser; // 用户定义参数 + public NET_IN_PARK_INFO_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // CLIENT_ParkingControlAttachParkInfo()接口输出参数 - public static class NET_OUT_PARK_INFO_PARAM extends Structure - { - public int dwSize; - + public static class NET_OUT_PARK_INFO_PARAM extends Structure { + public int dwSize; + public NET_OUT_PARK_INFO_PARAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 车位检测器信息查询条件 - public static class NET_PARK_INFO_FILTER extends Structure - { - public int dwSize; - public int dwNum; // 车位检测器类型数量 - public int[] emType = new int[NET_ECK_PARK_DETECTOR_TYPE.NET_ECK_PARK_DETECTOR_TYPE_ALL]; // 车位检测器类型 - + public static class NET_PARK_INFO_FILTER extends Structure { + public int dwSize; + public int dwNum; // 车位检测器类型数量 + public int[] emType = new int[NET_ECK_PARK_DETECTOR_TYPE.NET_ECK_PARK_DETECTOR_TYPE_ALL]; // 车位检测器类型 + public NET_PARK_INFO_FILTER() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // 车位检测器类型 - public static class NET_ECK_PARK_DETECTOR_TYPE extends Structure - { - public static final int NET_ECK_PARK_DETECTOR_TYPE_SONIC = 0; // 超声波探测器 + public static class NET_ECK_PARK_DETECTOR_TYPE extends Structure { + public static final int NET_ECK_PARK_DETECTOR_TYPE_SONIC = 0; // 超声波探测器 public static final int NET_ECK_PARK_DETECTOR_TYPE_CAMERA = 1; // 相机检测器 - public static final int NET_ECK_PARK_DETECTOR_TYPE_ALL = 2; - } - + public static final int NET_ECK_PARK_DETECTOR_TYPE_ALL = 2; + } + // 车位信息 - public static class NET_PARK_INFO_ITEM extends Structure - { - public int dwSize; - public byte[] szParkNo = new byte[NET_COMMON_STRING_32]; // 车位号 - public int emState; // 车位状态,对应 NET_ECK_PARK_STATE - public int dwScreenIndex; // 车位号显示对应的诱导屏分屏号 - public int dwFreeParkNum; // 屏号显示的当前空余车位数目 - - public NET_PARK_INFO_ITEM(){ - this.dwSize = this.size(); - } - } - + public static class NET_PARK_INFO_ITEM extends Structure { + public int dwSize; + public byte[] szParkNo = new byte[NET_COMMON_STRING_32]; // 车位号 + public int emState; // 车位状态,对应 NET_ECK_PARK_STATE + public int dwScreenIndex; // 车位号显示对应的诱导屏分屏号 + public int dwFreeParkNum; // 屏号显示的当前空余车位数目 + + public NET_PARK_INFO_ITEM() { + this.dwSize = this.size(); + } + } + // 智能停车系统车位状态 - public static class NET_ECK_PARK_STATE extends Structure - { + public static class NET_ECK_PARK_STATE extends Structure { public static final int NET_ECK_PARK_STATE_UNKOWN = 0; - public static final int NET_ECK_PARK_STATE_PARK = 1; // 车位有车 + public static final int NET_ECK_PARK_STATE_PARK = 1; // 车位有车 public static final int NET_ECK_PARK_STATE_NOPARK = 2; // 车位无车 - } - + } + // 智能停车系统出入口机设置车位信息 参数 NET_CTRL_ECK_SET_PARK_INFO - public static class NET_CTRL_ECK_SET_PARK_INFO_PARAM extends Structure - { - public int dwSize; - public int nScreenNum; // 屏数量, 不超过 ECK_SCREEN_NUM_MAX - public int[] nScreenIndex = new int[ECK_SCREEN_NUM_MAX]; // 屏号, 每个元素表示屏序号 - public int[] nFreeParkNum = new int[ECK_SCREEN_NUM_MAX]; // 对应屏管理下的空余车位数 - // 长度和下标与nScreenIndex一致,每个元素表示对应屏号下的空余车位 - public NET_CTRL_ECK_SET_PARK_INFO_PARAM(){ - this.dwSize = this.size(); - } - } - + public static class NET_CTRL_ECK_SET_PARK_INFO_PARAM extends Structure { + public int dwSize; + public int nScreenNum; // 屏数量, 不超过 ECK_SCREEN_NUM_MAX + public int[] nScreenIndex = new int[ECK_SCREEN_NUM_MAX]; // 屏号, 每个元素表示屏序号 + public int[] nFreeParkNum = new int[ECK_SCREEN_NUM_MAX]; // 对应屏管理下的空余车位数 + + // 长度和下标与nScreenIndex一致,每个元素表示对应屏号下的空余车位 + public NET_CTRL_ECK_SET_PARK_INFO_PARAM() { + this.dwSize = this.size(); + } + } + // CLIENT_PowerControl接口输入参数(电视墙电源控制) - public static class NET_IN_WM_POWER_CTRL extends Structure - { - public int dwSize; - public int nMonitorWallID; // 电视墙序号 - public String pszBlockID; // 区块ID, NULL/""-所有区块 - public int nTVID; // 显示单元序号, -1表示区块中所有显示单元 - public int bPowerOn; // 是否打开电源 - + public static class NET_IN_WM_POWER_CTRL extends Structure { + public int dwSize; + public int nMonitorWallID; // 电视墙序号 + public String pszBlockID; // 区块ID, NULL/""-所有区块 + public int nTVID; // 显示单元序号, -1表示区块中所有显示单元 + public int bPowerOn; // 是否打开电源 + public NET_IN_WM_POWER_CTRL() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_PowerControl接口输出参数(电视墙电源控制) - public static class NET_OUT_WM_POWER_CTRL extends Structure - { - public int dwSize; - + public static class NET_OUT_WM_POWER_CTRL extends Structure { + public int dwSize; + public NET_OUT_WM_POWER_CTRL() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // CLIENT_LoadMonitorWallCollection接口输入参数(载入电视墙预案) - public static class NET_IN_WM_LOAD_COLLECTION extends Structure - { - public int dwSize; - public int nMonitorWallID; // 电视墙序号 - public Pointer pszName; // 预案名称 - + public static class NET_IN_WM_LOAD_COLLECTION extends Structure { + public int dwSize; + public int nMonitorWallID; // 电视墙序号 + public Pointer pszName; // 预案名称 + public NET_IN_WM_LOAD_COLLECTION() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_LoadMonitorWallCollection接口输出参数(载入电视墙预案) - public static class NET_OUT_WM_LOAD_COLLECTION extends Structure - { - public int dwSize; - + public static class NET_OUT_WM_LOAD_COLLECTION extends Structure { + public int dwSize; + public NET_OUT_WM_LOAD_COLLECTION() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_SaveMonitorWallCollection接口输入参数(保存电视墙预案) - public static class NET_IN_WM_SAVE_COLLECTION extends Structure - { - public int dwSize; - public int nMonitorWallID; // 电视墙序号 - public Pointer pszName; // 预案名称 - public String pszControlID; // 控制id - + public static class NET_IN_WM_SAVE_COLLECTION extends Structure { + public int dwSize; + public int nMonitorWallID; // 电视墙序号 + public Pointer pszName; // 预案名称 + public String pszControlID; // 控制id + public NET_IN_WM_SAVE_COLLECTION() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_SaveMonitorWallCollection接口输出参数(保存电视墙预案) - public static class NET_OUT_WM_SAVE_COLLECTION extends Structure - { - public int dwSize; - + public static class NET_OUT_WM_SAVE_COLLECTION extends Structure { + public int dwSize; + public NET_OUT_WM_SAVE_COLLECTION() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // 分割模式 - public static class NET_SPLIT_MODE extends Structure - { + public static class NET_SPLIT_MODE extends Structure { public static final int NET_SPLIT_1 = 1; // 1画面 public static final int NET_SPLIT_2 = 2; // 2画面 public static final int NET_SPLIT_4 = 4; // 4画面 @@ -10149,8313 +9744,7707 @@ public interface NetSDKLib extends Library { public static final int NET_COMPOSITE_SPLIT_1 = NET_SPLIT_PIP_BASE * 3 + 1;// 融合屏成员1分割 public static final int NET_COMPOSITE_SPLIT_4 = NET_SPLIT_PIP_BASE * 3 + 4;// 融合屏成员4分割 } - + // 区块窗口信息 - public static class NET_WINDOW_COLLECTION extends Structure - { - public int dwSize; - public int nWindowID; // 窗口ID - public int bWndEnable; // 窗口是否有效 - public DH_RECT stuRect; // 窗口区域, 自由分割模式下有效 - public int bDirectable; // 坐标是否满足直通条件 - public int nZOrder; // 窗口Z次序 - public int bSrcEnable; // 显示源是否有效 - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID - public int nVideoChannel; // 视频通道号 - public int nVideoStream; // 视频码流类型 - public int nAudioChannel; // 音频通道 - public int nAudioStream; // 音频码流类型 - public int nUniqueChannel; // 设备内统一编号的唯一通道号 - + public static class NET_WINDOW_COLLECTION extends Structure { + public int dwSize; + public int nWindowID; // 窗口ID + public int bWndEnable; // 窗口是否有效 + public DH_RECT stuRect; // 窗口区域, 自由分割模式下有效 + public int bDirectable; // 坐标是否满足直通条件 + public int nZOrder; // 窗口Z次序 + public int bSrcEnable; // 显示源是否有效 + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID + public int nVideoChannel; // 视频通道号 + public int nVideoStream; // 视频码流类型 + public int nAudioChannel; // 音频通道 + public int nAudioStream; // 音频码流类型 + public int nUniqueChannel; // 设备内统一编号的唯一通道号 + public NET_WINDOW_COLLECTION() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // 区块收藏 - public static class NET_BLOCK_COLLECTION extends Structure - { - public int dwSize; - public int emSplitMode; // 分割模式,对应 NET_SPLIT_MODE - public NET_WINDOW_COLLECTION[] stuWnds = (NET_WINDOW_COLLECTION[])new NET_WINDOW_COLLECTION().toArray(NET_MAX_SPLIT_WINDOW); // 窗口信息数组 - public int nWndsCount; // 窗口数量 - public byte[] szName = new byte[NET_DEVICE_NAME_LEN]; // 收藏夹名称 - public int nScreen; // 输出通道号, 包括拼接屏 - public byte[] szCompositeID = new byte[NET_DEV_ID_LEN_EX]; // 拼接屏ID - public Pointer pstuWndsEx; // 窗口信息数组指针 NET_WINDOW_COLLECTION[] , 由用户分配内存. 当stuWnds数组大小不够用时可以使用 - public int nMaxWndsCountEx; // 最大窗口数量, 用户填写. pstuWndsEx数组的元素个数 - public int nRetWndsCountEx; // 返回窗口数量 - + public static class NET_BLOCK_COLLECTION extends Structure { + public int dwSize; + public int emSplitMode; // 分割模式,对应 NET_SPLIT_MODE + public NET_WINDOW_COLLECTION[] stuWnds = (NET_WINDOW_COLLECTION[]) new NET_WINDOW_COLLECTION().toArray(NET_MAX_SPLIT_WINDOW); // 窗口信息数组 + public int nWndsCount; // 窗口数量 + public byte[] szName = new byte[NET_DEVICE_NAME_LEN]; // 收藏夹名称 + public int nScreen; // 输出通道号, 包括拼接屏 + public byte[] szCompositeID = new byte[NET_DEV_ID_LEN_EX]; // 拼接屏ID + public Pointer pstuWndsEx; // 窗口信息数组指针 NET_WINDOW_COLLECTION[] , 由用户分配内存. 当stuWnds数组大小不够用时可以使用 + public int nMaxWndsCountEx; // 最大窗口数量, 用户填写. pstuWndsEx数组的元素个数 + public int nRetWndsCountEx; // 返回窗口数量 + public NET_BLOCK_COLLECTION() { - this.dwSize = this.size(); - } + this.dwSize = this.size(); + } } // 电视墙显示单元 - public static class NET_MONITORWALL_OUTPUT extends Structure - { - public int dwSize; - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN]; // 设备ID, 本机时为"" - public int nChannel; // 通道号 - public byte[] szName = new byte[NET_DEV_NAME_LEN]; // 屏幕名称 - + public static class NET_MONITORWALL_OUTPUT extends Structure { + public int dwSize; + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN]; // 设备ID, 本机时为"" + public int nChannel; // 通道号 + public byte[] szName = new byte[NET_DEV_NAME_LEN]; // 屏幕名称 + public NET_MONITORWALL_OUTPUT() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // 电视墙显示区块 - public static class NET_MONITORWALL_BLOCK extends Structure - { - public int dwSize; - public byte[] szName = new byte[NET_DEV_NAME_LEN]; // 区块名称 - public byte[] szCompositeID = new byte[NET_DEV_ID_LEN]; // 拼接屏ID - public byte[] szControlID = new byte[NET_DEV_ID_LEN]; // 控制ID - public int nSingleOutputWidth; // 单个显示单元所占的网格列数 - public int nSingleOutputHeight; // 单个显示单元所占的网格行数 - public DH_RECT stuRect; // 区域坐标 - public NET_TSECT_WEEK_DAY[] stuPowerSchedule = (NET_TSECT_WEEK_DAY[])new NET_TSECT_WEEK_DAY().toArray(NET_TSCHE_DAY_NUM); // 开机时间表, 第一维各元素表示周日~周六和节假日 - public Pointer pstuOutputs; // 显示单元数组 NET_MONITORWALL_OUTPUT[] , 用户分配内存 - public int nMaxOutputCount; // 显示单元数组大小, 用户填写 - public int nRetOutputCount; // 返回的显示单元数量 - public byte[] szBlockType = new byte[NET_COMMON_STRING_32]; // 显示单元组类型,为支持由接收卡组成单元的小间距LED区块而增加该字段,其他类型 - + public static class NET_MONITORWALL_BLOCK extends Structure { + public int dwSize; + public byte[] szName = new byte[NET_DEV_NAME_LEN]; // 区块名称 + public byte[] szCompositeID = new byte[NET_DEV_ID_LEN]; // 拼接屏ID + public byte[] szControlID = new byte[NET_DEV_ID_LEN]; // 控制ID + public int nSingleOutputWidth; // 单个显示单元所占的网格列数 + public int nSingleOutputHeight; // 单个显示单元所占的网格行数 + public DH_RECT stuRect; // 区域坐标 + public NET_TSECT_WEEK_DAY[] stuPowerSchedule = (NET_TSECT_WEEK_DAY[]) new NET_TSECT_WEEK_DAY().toArray(NET_TSCHE_DAY_NUM); // 开机时间表, 第一维各元素表示周日~周六和节假日 + public Pointer pstuOutputs; // 显示单元数组 NET_MONITORWALL_OUTPUT[] , 用户分配内存 + public int nMaxOutputCount; // 显示单元数组大小, 用户填写 + public int nRetOutputCount; // 返回的显示单元数量 + public byte[] szBlockType = new byte[NET_COMMON_STRING_32]; // 显示单元组类型,为支持由接收卡组成单元的小间距LED区块而增加该字段,其他类型 + public NET_MONITORWALL_BLOCK() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - - public static class NET_TSECT_WEEK_DAY extends Structure - { - public NET_TSECT[] stuPowerSchedule = (NET_TSECT[])new NET_TSECT().toArray(NET_TSCHE_SEC_NUM); + } + + public static class NET_TSECT_WEEK_DAY extends Structure { + public NET_TSECT[] stuPowerSchedule = (NET_TSECT[]) new NET_TSECT().toArray(NET_TSCHE_SEC_NUM); } // 电视墙配置 - public static class NET_MONITORWALL extends Structure - { - public int dwSize; - public byte[] szName = new byte[NET_DEV_NAME_LEN]; // 名称 - public int nGridLine; // 网格行数 - public int nGridColume; // 网格列数 - public Pointer pstuBlocks; // 显示区块数组 NET_MONITORWALL_BLOCK[] , 用户分配内存 - public int nMaxBlockCount; // 显示区块数组大小, 用户填写 - public int nRetBlockCount; // 返回的显示区块数量 - public int bDisable; // 是否禁用, 0-该电视墙有效, 1-该电视墙无效 - public byte[] szDesc = new byte[NET_COMMON_STRING_256]; // 电视墙描述信息 - + public static class NET_MONITORWALL extends Structure { + public int dwSize; + public byte[] szName = new byte[NET_DEV_NAME_LEN]; // 名称 + public int nGridLine; // 网格行数 + public int nGridColume; // 网格列数 + public Pointer pstuBlocks; // 显示区块数组 NET_MONITORWALL_BLOCK[] , 用户分配内存 + public int nMaxBlockCount; // 显示区块数组大小, 用户填写 + public int nRetBlockCount; // 返回的显示区块数量 + public int bDisable; // 是否禁用, 0-该电视墙有效, 1-该电视墙无效 + public byte[] szDesc = new byte[NET_COMMON_STRING_256]; // 电视墙描述信息 + public NET_MONITORWALL() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // 电视墙预案 - public static class NET_MONITORWALL_COLLECTION extends Structure - { - public int dwSize; - public byte[] szName = new byte[NET_DEVICE_NAME_LEN]; // 电视墙预案名称 - public NET_BLOCK_COLLECTION[] stuBlocks = new NET_BLOCK_COLLECTION[NET_MAX_BLOCK_NUM];// 区块数组 - public int nBlocksCount; // 区块数量 - public byte[] szControlID = new byte[NET_DEV_ID_LEN_EX]; // 控制ID - public NET_MONITORWALL stuMonitorWall; // 电视墙配置 - + public static class NET_MONITORWALL_COLLECTION extends Structure { + public int dwSize; + public byte[] szName = new byte[NET_DEVICE_NAME_LEN]; // 电视墙预案名称 + public NET_BLOCK_COLLECTION[] stuBlocks = new NET_BLOCK_COLLECTION[NET_MAX_BLOCK_NUM];// 区块数组 + public int nBlocksCount; // 区块数量 + public byte[] szControlID = new byte[NET_DEV_ID_LEN_EX]; // 控制ID + public NET_MONITORWALL stuMonitorWall; // 电视墙配置 + public NET_MONITORWALL_COLLECTION() { - this.dwSize = this.size(); - - for(int i = 0; i < NET_MAX_BLOCK_NUM; i++) { - stuBlocks[i] = new NET_BLOCK_COLLECTION(); - } + this.dwSize = this.size(); + + for (int i = 0; i < NET_MAX_BLOCK_NUM; i++) { + stuBlocks[i] = new NET_BLOCK_COLLECTION(); + } } - } + } // CLIENT_GetMonitorWallCollections接口输入参数(获取电视墙预案信息) - public static class NET_IN_WM_GET_COLLECTIONS extends Structure - { - public int dwSize; - public int nMonitorWallID; // 电视墙ID - + public static class NET_IN_WM_GET_COLLECTIONS extends Structure { + public int dwSize; + public int nMonitorWallID; // 电视墙ID + public NET_IN_WM_GET_COLLECTIONS() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_GetMonitorWallCollections接口输出参数(获取电视墙预案信息) - public static class NET_OUT_WM_GET_COLLECTIONS extends Structure - { - public int dwSize; - public Pointer pCollections; // 电视墙预案数组, 对应 NET_MONITORWALL_COLLECTION 指针 - public int nMaxCollectionsCount; // 电视墙预案数组大小 - public int nCollectionsCount; // 电视墙预案数量 - + public static class NET_OUT_WM_GET_COLLECTIONS extends Structure { + public int dwSize; + public Pointer pCollections; // 电视墙预案数组, 对应 NET_MONITORWALL_COLLECTION 指针 + public int nMaxCollectionsCount; // 电视墙预案数组大小 + public int nCollectionsCount; // 电视墙预案数量 + public NET_OUT_WM_GET_COLLECTIONS() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // 级联权限验证信息 - public static class NET_CASCADE_AUTHENTICATOR extends Structure - { - public int dwSize; - public byte[] szUser = new byte[NET_NEW_USER_NAME_LENGTH]; // 用户名 - public byte[] szPwd = new byte[NET_NEW_USER_PSW_LENGTH]; // 密码 - public byte[] szSerialNo = new byte[NET_SERIALNO_LEN]; // 设备序列号 - + public static class NET_CASCADE_AUTHENTICATOR extends Structure { + public int dwSize; + public byte[] szUser = new byte[NET_NEW_USER_NAME_LENGTH]; // 用户名 + public byte[] szPwd = new byte[NET_NEW_USER_PSW_LENGTH]; // 密码 + public byte[] szSerialNo = new byte[NET_SERIALNO_LEN]; // 设备序列号 + public NET_CASCADE_AUTHENTICATOR() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - - public static class EM_SRC_PUSHSTREAM_TYPE extends Structure - { - public static final int EM_SRC_PUSHSTREAM_AUTO = 0; // 设备端根据码流头自动识别,默认值 - public static final int EM_SRC_PUSHSTREAM_HIKVISION = 1; // 海康私有码流 - public static final int EM_SRC_PUSHSTREAM_PS = 2; // PS流 - public static final int EM_SRC_PUSHSTREAM_TS = 3; // TS流 - public static final int EM_SRC_PUSHSTREAM_SVAC = 4; // SVAC码流 + + public static class EM_SRC_PUSHSTREAM_TYPE extends Structure { + public static final int EM_SRC_PUSHSTREAM_AUTO = 0; // 设备端根据码流头自动识别,默认值 + public static final int EM_SRC_PUSHSTREAM_HIKVISION = 1; // 海康私有码流 + public static final int EM_SRC_PUSHSTREAM_PS = 2; // PS流 + public static final int EM_SRC_PUSHSTREAM_TS = 3; // TS流 + public static final int EM_SRC_PUSHSTREAM_SVAC = 4; // SVAC码流 } - + // 显示源 - public static class NET_SPLIT_SOURCE extends Structure - { - public int dwSize; - public int bEnable; // 使能 - public byte[] szIp = new byte[NET_MAX_IPADDR_LEN]; // IP, 空表示没有设置 - public byte[] szUser = new byte[NET_USER_NAME_LENGTH]; // 用户名, 建议使用szUserEx - public byte[] szPwd = new byte[NET_USER_PSW_LENGTH]; // 密码, 建议使用szPwdEx - public int nPort; // 端口 - public int nChannelID; // 通道号 - public int nStreamType; // 视频码流, -1-自动, 0-主码流, 1-辅码流1, 2-辅码流2, 3-辅码流3, 4-snap, 5-预览 - public int nDefinition; // 清晰度, 0-标清, 1-高清 - public int emProtocol; // 协议类型,对应 NET_DEVICE_PROTOCOL - public byte[] szDevName = new byte[NET_DEVICE_NAME_LEN]; // 设备名称 - public int nVideoChannel; // 视频输入通道数 - public int nAudioChannel; // 音频输入通道数 + public static class NET_SPLIT_SOURCE extends Structure { + public int dwSize; + public int bEnable; // 使能 + public byte[] szIp = new byte[NET_MAX_IPADDR_LEN]; // IP, 空表示没有设置 + public byte[] szUser = new byte[NET_USER_NAME_LENGTH]; // 用户名, 建议使用szUserEx + public byte[] szPwd = new byte[NET_USER_PSW_LENGTH]; // 密码, 建议使用szPwdEx + public int nPort; // 端口 + public int nChannelID; // 通道号 + public int nStreamType; // 视频码流, -1-自动, 0-主码流, 1-辅码流1, 2-辅码流2, 3-辅码流3, 4-snap, 5-预览 + public int nDefinition; // 清晰度, 0-标清, 1-高清 + public int emProtocol; // 协议类型,对应 NET_DEVICE_PROTOCOL + public byte[] szDevName = new byte[NET_DEVICE_NAME_LEN]; // 设备名称 + public int nVideoChannel; // 视频输入通道数 + public int nAudioChannel; // 音频输入通道数 //-------------------------------------------------------------------------------------- // 以下只对解码器有效 - public int bDecoder; // 是否是解码器 - public byte byConnType; // -1: auto, 0:TCP;1:UDP;2:组播 - public byte byWorkMode; // 0:直连;1:转发 - public short wListenPort; // 指示侦听服务的端口,转发时有效; byConnType为组播时,则作为多播端口 - public byte[] szDevIpEx = new byte[NET_MAX_IPADDR_OR_DOMAIN_LEN]; // szDevIp扩展,前端DVR的IP地址(可以输入域名) - public byte bySnapMode; // 抓图模式(nStreamType==4时有效) 0:表示请求一帧,1:表示定时发送请求 - public byte byManuFactory; // 目标设备的生产厂商, 具体参考EM_IPC_TYPE类 - public byte byDeviceType; // 目标设备的设备类型, 0:IPC - public byte byDecodePolicy; // 目标设备的解码策略, 0:兼容以前 - // 1:实时等级高 2:实时等级中 - // 3:实时等级低 4:默认等级 - // 5:流畅等级高 6:流畅等级中 - // 7:流畅等级低 + public int bDecoder; // 是否是解码器 + public byte byConnType; // -1: auto, 0:TCP;1:UDP;2:组播 + public byte byWorkMode; // 0:直连;1:转发 + public short wListenPort; // 指示侦听服务的端口,转发时有效; byConnType为组播时,则作为多播端口 + public byte[] szDevIpEx = new byte[NET_MAX_IPADDR_OR_DOMAIN_LEN]; // szDevIp扩展,前端DVR的IP地址(可以输入域名) + public byte bySnapMode; // 抓图模式(nStreamType==4时有效) 0:表示请求一帧,1:表示定时发送请求 + public byte byManuFactory; // 目标设备的生产厂商, 具体参考EM_IPC_TYPE类 + public byte byDeviceType; // 目标设备的设备类型, 0:IPC + public byte byDecodePolicy; // 目标设备的解码策略, 0:兼容以前 + // 1:实时等级高 2:实时等级中 + // 3:实时等级低 4:默认等级 + // 5:流畅等级高 6:流畅等级中 + // 7:流畅等级低 //-------------------------------------------------------------------------------------- - public int dwHttpPort; // Http端口号, 0-65535 - public int dwRtspPort; // Rtsp端口号, 0-65535 - public byte[] szChnName = new byte[NET_DEVICE_NAME_LEN]; // 远程通道名称, 只有读取到的名称不为空时才可以修改该通道的名称 - public byte[] szMcastIP = new byte[NET_MAX_IPADDR_LEN]; // 多播IP地址, byConnType为组播时有效 - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID, ""-null, "Local"-本地通道, "Remote"-远程通道, 或者填入具体的RemoteDevice中的设备ID - public int bRemoteChannel; // 是否远程通道(只读) - public int nRemoteChannelID; // 远程通道ID(只读), bRemoteChannel=TRUE时有效 - public byte[] szDevClass = new byte[NET_DEV_TYPE_LEN]; // 设备类型, 如IPC, DVR, NVR等 - public byte[] szDevType = new byte[NET_DEV_TYPE_LEN]; // 设备具体型号, 如IPC-HF3300 - public byte[] szMainStreamUrl = new byte[MAX_PATH]; // 主码流url地址, byManuFactory为NET_IPC_OTHER时有效 - public byte[] szExtraStreamUrl = new byte[MAX_PATH]; // 辅码流url地址, byManuFactory为NET_IPC_OTHER时有效 - public int nUniqueChannel; // 设备内统一编号的唯一通道号, 只读 - public NET_CASCADE_AUTHENTICATOR stuCascadeAuth; // 级联认证信息, 设备ID为"Local/Cascade/SerialNo"时有效, 其中SerialNo是设备序列号 - public int nHint; // 0-普通视频源, 1-报警视频源 - public int nOptionalMainUrlCount; // 备用主码流地址数量 - public byte[] szOptionalMainUrls = new byte[NET_MAX_OPTIONAL_URL_NUM * MAX_PATH]; // 备用主码流地址列表 - public int nOptionalExtraUrlCount; // 备用辅码流地址数量 - public byte[] szOptionalExtraUrls = new byte[NET_MAX_OPTIONAL_URL_NUM * MAX_PATH]; // 备用辅码流地址列表 + public int dwHttpPort; // Http端口号, 0-65535 + public int dwRtspPort; // Rtsp端口号, 0-65535 + public byte[] szChnName = new byte[NET_DEVICE_NAME_LEN]; // 远程通道名称, 只有读取到的名称不为空时才可以修改该通道的名称 + public byte[] szMcastIP = new byte[NET_MAX_IPADDR_LEN]; // 多播IP地址, byConnType为组播时有效 + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID, ""-null, "Local"-本地通道, "Remote"-远程通道, 或者填入具体的RemoteDevice中的设备ID + public int bRemoteChannel; // 是否远程通道(只读) + public int nRemoteChannelID; // 远程通道ID(只读), bRemoteChannel=TRUE时有效 + public byte[] szDevClass = new byte[NET_DEV_TYPE_LEN]; // 设备类型, 如IPC, DVR, NVR等 + public byte[] szDevType = new byte[NET_DEV_TYPE_LEN]; // 设备具体型号, 如IPC-HF3300 + public byte[] szMainStreamUrl = new byte[MAX_PATH]; // 主码流url地址, byManuFactory为NET_IPC_OTHER时有效 + public byte[] szExtraStreamUrl = new byte[MAX_PATH]; // 辅码流url地址, byManuFactory为NET_IPC_OTHER时有效 + public int nUniqueChannel; // 设备内统一编号的唯一通道号, 只读 + public NET_CASCADE_AUTHENTICATOR stuCascadeAuth; // 级联认证信息, 设备ID为"Local/Cascade/SerialNo"时有效, 其中SerialNo是设备序列号 + public int nHint; // 0-普通视频源, 1-报警视频源 + public int nOptionalMainUrlCount; // 备用主码流地址数量 + public byte[] szOptionalMainUrls = new byte[NET_MAX_OPTIONAL_URL_NUM * MAX_PATH]; // 备用主码流地址列表 + public int nOptionalExtraUrlCount; // 备用辅码流地址数量 + public byte[] szOptionalExtraUrls = new byte[NET_MAX_OPTIONAL_URL_NUM * MAX_PATH]; // 备用辅码流地址列表 //-------------------------------------------------------------------------------------- //协议后续添加字段 - public int nInterval; // 轮巡时间间隔 单位:秒 - public byte[] szUserEx = new byte[NET_NEW_USER_NAME_LENGTH];// 用户名 - public byte[] szPwdEx = new byte[NET_NEW_USER_PSW_LENGTH]; // 密码 - public int emPushStream; // 推流方式的码流类型,只有byConnType为TCP-Push或UDP-Push才有该字段,对应 EM_SRC_PUSHSTREAM_TYPE - public NET_RECT stuSRect; // 视频源区域,当szDeviceID不为空时有效 - + public int nInterval; // 轮巡时间间隔 单位:秒 + public byte[] szUserEx = new byte[NET_NEW_USER_NAME_LENGTH];// 用户名 + public byte[] szPwdEx = new byte[NET_NEW_USER_PSW_LENGTH]; // 密码 + public int emPushStream; // 推流方式的码流类型,只有byConnType为TCP-Push或UDP-Push才有该字段,对应 EM_SRC_PUSHSTREAM_TYPE + public NET_RECT stuSRect; // 视频源区域,当szDeviceID不为空时有效 + public NET_SPLIT_SOURCE() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // 矩阵子卡信息 - public static class NET_MATRIX_CARD extends Structure - { - public int dwSize; - public int bEnable; // 是否有效 - public int dwCardType; // 子卡类型 - public byte[] szInterface = new byte[NET_MATRIX_INTERFACE_LEN]; // 信号接口类型, "CVBS", "VGA", "DVI"... - public byte[] szAddress = new byte[NET_MAX_IPADDR_OR_DOMAIN_LEN]; // 设备ip或域名, 无网络接口的子卡可以为空 - public int nPort; // 端口号, 无网络接口的子卡可以为0 - public int nDefinition; // 清晰度, 0=标清, 1=高清 - public int nVideoInChn; // 视频输入通道数 - public int nAudioInChn; // 音频输入通道数 - public int nVideoOutChn; // 视频输出通道数 - public int nAudioOutChn; // 音频输出通道数 - public int nVideoEncChn; // 视频编码通道数 - public int nAudioEncChn; // 音频编码通道数 - public int nVideoDecChn; // 视频解码通道数 - public int nAudioDecChn; // 音频解码通道数 - public int nStauts; // 状态: -1-未知, 0-正常, 1-无响应, 2-网络掉线, 3-冲突, 4-正在升级, 5-链路状态异常, 6-子板背板未插好, 7-程序版本出错 - public int nCommPorts; // 串口数 - public int nVideoInChnMin; // 视频输入通道号最小值 - public int nVideoInChnMax; // 视频输入通道号最大值 - public int nAudioInChnMin; // 音频输入通道号最小值 - public int nAudioInChnMax; // 音频输入通道号最大值 - public int nVideoOutChnMin; // 视频输出通道号最小值 - public int nVideoOutChnMax; // 视频输出通道号最大值 - public int nAudioOutChnMin; // 音频输出通道号最小值 - public int nAudioOutChnMax; // 音频输出通道号最大值 - public int nVideoEncChnMin; // 视频编码通道号最小值 - public int nVideoEncChnMax; // 视频编码通道号最大值 - public int nAudioEncChnMin; // 音频编码通道号最小值 - public int nAudioEncChnMax; // 音频编码通道号最大值 - public int nVideoDecChnMin; // 视频解码通道号最小值 - public int nVideoDecChnMax; // 视频解码通道号最大值 - public int nAudioDecChnMin; // 音频解码通道号最小值 - public int nAudioDecChnMax; // 音频解码通道号最大值 - public int nCascadeChannels; // 级联通道数 - public int nCascadeChannelBitrate; // 级联通道带宽, 单位Mbps - public int nAlarmInChnCount; // 报警输入通道数 - public int nAlarmInChnMin; // 报警输入通道号最小值 - public int nAlarmInChnMax; // 报警输入通道号最大值 - public int nAlarmOutChnCount; // 报警输出通道数 - public int nAlarmOutChnMin; // 报警输入通道号最小值 - public int nAlarmOutChnMax; // 报警输入通道号最大值 - public int nVideoAnalyseChnCount; // 智能分析通道数 - public int nVideoAnalyseChnMin; // 智能分析通道号最小值 - public int nVideoAnalyseChnMax; // 智能分析通道号最大值 - public int nCommPortMin; // 串口号最小值 - public int nCommPortMax; // 串口号最大值 - public byte[] szVersion = new byte[NET_COMMON_STRING_32]; // 版本信息 - public NET_TIME stuBuildTime; // 编译时间 - public byte[] szBIOSVersion = new byte[NET_COMMON_STRING_64]; // BIOS版本号 - public byte[] szMAC = new byte[NET_MACADDR_LEN]; // MAC地址 - + public static class NET_MATRIX_CARD extends Structure { + public int dwSize; + public int bEnable; // 是否有效 + public int dwCardType; // 子卡类型 + public byte[] szInterface = new byte[NET_MATRIX_INTERFACE_LEN]; // 信号接口类型, "CVBS", "VGA", "DVI"... + public byte[] szAddress = new byte[NET_MAX_IPADDR_OR_DOMAIN_LEN]; // 设备ip或域名, 无网络接口的子卡可以为空 + public int nPort; // 端口号, 无网络接口的子卡可以为0 + public int nDefinition; // 清晰度, 0=标清, 1=高清 + public int nVideoInChn; // 视频输入通道数 + public int nAudioInChn; // 音频输入通道数 + public int nVideoOutChn; // 视频输出通道数 + public int nAudioOutChn; // 音频输出通道数 + public int nVideoEncChn; // 视频编码通道数 + public int nAudioEncChn; // 音频编码通道数 + public int nVideoDecChn; // 视频解码通道数 + public int nAudioDecChn; // 音频解码通道数 + public int nStauts; // 状态: -1-未知, 0-正常, 1-无响应, 2-网络掉线, 3-冲突, 4-正在升级, 5-链路状态异常, 6-子板背板未插好, 7-程序版本出错 + public int nCommPorts; // 串口数 + public int nVideoInChnMin; // 视频输入通道号最小值 + public int nVideoInChnMax; // 视频输入通道号最大值 + public int nAudioInChnMin; // 音频输入通道号最小值 + public int nAudioInChnMax; // 音频输入通道号最大值 + public int nVideoOutChnMin; // 视频输出通道号最小值 + public int nVideoOutChnMax; // 视频输出通道号最大值 + public int nAudioOutChnMin; // 音频输出通道号最小值 + public int nAudioOutChnMax; // 音频输出通道号最大值 + public int nVideoEncChnMin; // 视频编码通道号最小值 + public int nVideoEncChnMax; // 视频编码通道号最大值 + public int nAudioEncChnMin; // 音频编码通道号最小值 + public int nAudioEncChnMax; // 音频编码通道号最大值 + public int nVideoDecChnMin; // 视频解码通道号最小值 + public int nVideoDecChnMax; // 视频解码通道号最大值 + public int nAudioDecChnMin; // 音频解码通道号最小值 + public int nAudioDecChnMax; // 音频解码通道号最大值 + public int nCascadeChannels; // 级联通道数 + public int nCascadeChannelBitrate; // 级联通道带宽, 单位Mbps + public int nAlarmInChnCount; // 报警输入通道数 + public int nAlarmInChnMin; // 报警输入通道号最小值 + public int nAlarmInChnMax; // 报警输入通道号最大值 + public int nAlarmOutChnCount; // 报警输出通道数 + public int nAlarmOutChnMin; // 报警输入通道号最小值 + public int nAlarmOutChnMax; // 报警输入通道号最大值 + public int nVideoAnalyseChnCount; // 智能分析通道数 + public int nVideoAnalyseChnMin; // 智能分析通道号最小值 + public int nVideoAnalyseChnMax; // 智能分析通道号最大值 + public int nCommPortMin; // 串口号最小值 + public int nCommPortMax; // 串口号最大值 + public byte[] szVersion = new byte[NET_COMMON_STRING_32]; // 版本信息 + public NET_TIME stuBuildTime; // 编译时间 + public byte[] szBIOSVersion = new byte[NET_COMMON_STRING_64]; // BIOS版本号 + public byte[] szMAC = new byte[NET_MACADDR_LEN]; // MAC地址 + public NET_MATRIX_CARD() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } - + } + // 矩阵子卡列表 - public static class NET_MATRIX_CARD_LIST extends Structure - { - public int dwSize; - public int nCount; // 子卡数量 + public static class NET_MATRIX_CARD_LIST extends Structure { + public int dwSize; + public int nCount; // 子卡数量 public NET_MATRIX_CARD[] stuCards = new NET_MATRIX_CARD[NET_MATRIX_MAX_CARDS]; // 子卡列表 - + public NET_MATRIX_CARD_LIST() { - this.dwSize = this.size(); - for(int i = 0; i < NET_MATRIX_MAX_CARDS; i++) { - stuCards[i] = new NET_MATRIX_CARD(); - } + this.dwSize = this.size(); + for (int i = 0; i < NET_MATRIX_MAX_CARDS; i++) { + stuCards[i] = new NET_MATRIX_CARD(); + } } - } - + } + // CLIENT_FindFramInfo 接口输入参数 - public static class NET_IN_FIND_FRAMEINFO_PRAM extends Structure - { - public int dwSize; // 结构体大小 - public boolean abFileName; // 文件名是否作为有效的查询条件,若文件名有效,则不用填充文件信息(stRecordInfo) - public byte[] szFileName = new byte[MAX_PATH]; // 文件名 + public static class NET_IN_FIND_FRAMEINFO_PRAM extends Structure { + public int dwSize; // 结构体大小 + public boolean abFileName; // 文件名是否作为有效的查询条件,若文件名有效,则不用填充文件信息(stRecordInfo) + public byte[] szFileName = new byte[MAX_PATH]; // 文件名 public NET_RECORDFILE_INFO stuRecordInfo; // 文件信息 - public int dwFramTypeMask; // 帧类型掩码,详见“帧类型掩码定义” - + public int dwFramTypeMask; // 帧类型掩码,详见“帧类型掩码定义” + public NET_IN_FIND_FRAMEINFO_PRAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } // CLIENT_FindFramInfo 接口输出参数 - public static class NET_OUT_FIND_FRAMEINFO_PRAM extends Structure - { - public int dwSize; // 结构体大小 - public LLong lFindHandle; // 文件查找句柄 - + public static class NET_OUT_FIND_FRAMEINFO_PRAM extends Structure { + public int dwSize; // 结构体大小 + public LLong lFindHandle; // 文件查找句柄 + public NET_OUT_FIND_FRAMEINFO_PRAM() { - this.dwSize = this.size(); + this.dwSize = this.size(); } } - + // CLIENT_FileStreamClearTags / CLIENT_FileStreamSetTags 接口输入参数 - public static class NET_IN_FILE_STREAM_TAGS_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int nArrayCount; // 标签数组个数 - public Pointer pstuTagInfo; // 标签数组,各项内容关系为"且", 用户分配内存,大小为sizeof( NET_FILE_STREAM_TAG_INFO )*nArrayCount - + public static class NET_IN_FILE_STREAM_TAGS_INFO extends Structure { + public int dwSize; // 结构体大小 + public int nArrayCount; // 标签数组个数 + public Pointer pstuTagInfo; // 标签数组,各项内容关系为"且", 用户分配内存,大小为sizeof( NET_FILE_STREAM_TAG_INFO )*nArrayCount + public NET_IN_FILE_STREAM_TAGS_INFO() { - this.dwSize = this.size(); + this.dwSize = this.size(); } - } + } // CLIENT_FileStreamClearTags / CLIENT_FileStreamSetTags 接口输出参数 - public static class NET_OUT_FILE_STREAM_TAGS_INFO extends Structure - { - public int dwSize; // 结构体大小 - - public NET_OUT_FILE_STREAM_TAGS_INFO() { - this.dwSize = this.size(); - } - } - + public static class NET_OUT_FILE_STREAM_TAGS_INFO extends Structure { + public int dwSize; // 结构体大小 + + public NET_OUT_FILE_STREAM_TAGS_INFO() { + this.dwSize = this.size(); + } + } + // 标签数组 - public static class NET_FILE_STREAM_TAG_INFO extends Structure - { - public int dwSize; // 结构体大小 - public NET_TIME stuTime; // 标签时间 - public byte[] szContext = new byte[NET_COMMON_STRING_64]; // 标签内容,中文必须使用utf8编码 - public byte[] szUserName = new byte[NET_COMMON_STRING_32]; // 用户名,中文必须使用utf8编码,EVS定制增加 - public byte[] szChannelName = new byte[NET_COMMON_STRING_64]; // 通道名称,中文必须使用utf8编码,EVS定制增加 - public int nDuration; // 打标的录像持续时间,单位秒 - - public NET_FILE_STREAM_TAG_INFO() { - this.dwSize = this.size(); - } - } - + public static class NET_FILE_STREAM_TAG_INFO extends Structure { + public int dwSize; // 结构体大小 + public NET_TIME stuTime; // 标签时间 + public byte[] szContext = new byte[NET_COMMON_STRING_64]; // 标签内容,中文必须使用utf8编码 + public byte[] szUserName = new byte[NET_COMMON_STRING_32]; // 用户名,中文必须使用utf8编码,EVS定制增加 + public byte[] szChannelName = new byte[NET_COMMON_STRING_64]; // 通道名称,中文必须使用utf8编码,EVS定制增加 + public int nDuration; // 打标的录像持续时间,单位秒 + + public NET_FILE_STREAM_TAG_INFO() { + this.dwSize = this.size(); + } + } + // CLIENT_FileStreamGetTags 接口输入参数 - public static class NET_IN_FILE_STREAM_GET_TAGS_INFO extends Structure - { - public int dwSize; // 结构体大小 - - public NET_IN_FILE_STREAM_GET_TAGS_INFO() { - this.dwSize = this.size(); - } - } + public static class NET_IN_FILE_STREAM_GET_TAGS_INFO extends Structure { + public int dwSize; // 结构体大小 + + public NET_IN_FILE_STREAM_GET_TAGS_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_FileStreamGetTags 接口输出参数 + public static class NET_OUT_FILE_STREAM_GET_TAGS_INFO extends Structure { + public int dwSize; // 结构体大小 + public int nMaxNumber; // 标签数组最大个数 + public int nRetTagsCount; // 实际返回的标签信息个数 + public Pointer pstuTagInfo; // 标签数组 NET_FILE_STREAM_TAG_INFO_EX + + public NET_OUT_FILE_STREAM_GET_TAGS_INFO() { + this.dwSize = this.size(); + } + } + + // 查询到的标签信息 + public static class NET_FILE_STREAM_TAG_INFO_EX extends Structure { + public int dwSize; // 结构体大小 + public NET_TIME stuTime; // 标签所对于视频的时间,精确到秒 + public int nMillisecond; // 毫秒 + public int nSequence; // 视频序列号 + public byte[] szContext = new byte[NET_COMMON_STRING_64]; // 标签内容,中文必须使用utf8编码 + public NET_TIME stuStartTime; // 录像文件开始时间 + public NET_TIME stuEndTime; // 录像文件结束时间 + public int emType; // 文件类型,对应 NET_FILE_STREAM_TYPE + public byte[] szUserName = new byte[NET_COMMON_STRING_32]; // 用户名,中文必须使用utf8编码,EVS定制增加 + public byte[] szChannelName = new byte[NET_COMMON_STRING_64]; // 通道名称,中文必须使用utf8编码,EVS定制增加 + public int nDuration; // 打标的录像持续时间,单位秒 + + public NET_FILE_STREAM_TAG_INFO_EX() { + this.dwSize = this.size(); + } + } + + // 文件类型 + public static class NET_FILE_STREAM_TYPE extends Structure { + public static final int NET_FILE_STREAM_TYPE_UNKNOWN = 0; // 未知 + public static final int NET_FILE_STREAM_TYPE_NORMAL = 1; // 普通 + public static final int NET_FILE_STREAM_TYPE_ALARM = 2; // 报警 + public static final int NET_FILE_STREAM_TYPE_DETECTION = 3; // 动检 + } + + // 一屏幕的分割模式信息, CLIENT_GetSplitMode/CLIENT_SetSplitMode参数 + public static class NET_SPLIT_MODE_INFO extends Structure { + public int dwSize; + public int emSplitMode; // 分割模式, NET_SPLIT_MODE + public int nGroupID; // 分组序号 + public int dwDisplayType; // 显示类型;具体见NET_SPLIT_DISPLAY_TYPE(注释各模式下显示内容由"PicInPic"决定, 各模式下显示内容按NVD旧有规则决定(即DisChn字段决定)。兼容,没有这一个项时,默认为普通显示类型,即"General") + + public NET_SPLIT_MODE_INFO() { + this.dwSize = this.size(); + } + } + + // 分割能力, CLIENT_GetSplitCaps 参数 + public static class NET_SPLIT_CAPS extends Structure { + public int dwSize; + public int nModeCount; // 支持的分割模式数量 + public int[] emSplitMode = new int[NET_MAX_SPLIT_MODE_NUM]; // 支持的分割模式, 见 NET_SPLIT_MODE + public int nMaxSourceCount; // 最大显示源配置数 + public int nFreeWindowCount; // 支持的最大自由开窗数目 + public int bCollectionSupported; // 是否支持区块收藏, BOOL类型,0或1 + public int dwDisplayType; // 掩码表示多个显示类型,具体见NET_SPLIT_DISPLAY_TYPE(注释各模式下显示内容由"PicInPic"决定, 各模式下显示内容按NVD旧有规则决定(即DisChn字段决定)。兼容,没有这一个项时,默认为普通显示类型,即"General") + public int nPIPModeCount; // 画中画支持的分割模式数量 + public int[] emPIPSplitMode = new int[NET_MAX_SPLIT_MODE_NUM]; // 画中画支持的分割模式, 见 NET_SPLIT_MODE + public int[] nInputChannels = new int[NET_SPLIT_INPUT_NUM]; // 支持的输入通道 + public int nInputChannelCount; // 支持的输入通道个数, 0表示没有输入通道限制 + public int nBootModeCount; // 启动分割模式数量 + public int[] emBootMode = new int[NET_MAX_SPLIT_MODE_NUM]; // 支持的启动默认画面分割模式, 见 NET_SPLIT_MODE + + public NET_SPLIT_CAPS() { + this.dwSize = this.size(); + } + } + + // (设置显示源, 支持同时设置多个窗口)CLIENT_SplitSetMultiSource 接口的输入参数 + public static class NET_IN_SPLIT_SET_MULTI_SOURCE extends Structure { + public int dwSize; + public int emCtrlType; // 视频输出控制方式,见 EM_VIDEO_OUT_CTRL_TYPE + public int nChannel; // 视频输出逻辑通道号, emCtrlType为EM_VIDEO_OUT_CTRL_CHANNEL时有效 + public String pszCompositeID; // 拼接屏ID, emCtrlType为EM_VIDEO_OUT_CTRL_COMPOSITE_ID时有效 + public int bSplitModeEnable; // 是否改变分割模式, BOOL类型,0或1 + public int emSplitMode; // 分割模式, bSplitModeEnable=TRUE时有效,见 NET_SPLIT_MODE + public int nGroupID; // 分割分组号, bSplitModeEnable=TRUE时有效 + public Pointer pnWindows; // 窗口号数组 int[],由用户申请内存,大小为sizeof(int)*nWindowCount + public int nWindowCount; // 窗口数量 + public Pointer pstuSources; // 视频源信息, 分别对应每个窗口, 数量同窗口数 NET_SPLIT_SOURCE[] ,由用户申请内存,大小为sizeof(NET_SPLIT_SOURCE)*nWindowCount + + public NET_IN_SPLIT_SET_MULTI_SOURCE() { + this.dwSize = this.size(); + } + } + + // (设置显示源, 支持同时设置多个窗口) CLIENT_SplitSetMultiSource 接口的输出参数 + public static class NET_OUT_SPLIT_SET_MULTI_SOURCE extends Structure { + public int dwSize; + + public NET_OUT_SPLIT_SET_MULTI_SOURCE() { + this.dwSize = this.size(); + } + } + + // (下位矩阵切换) CLIENT_MatrixSwitch 输入参数 + public static class NET_IN_MATRIX_SWITCH extends Structure { + public int dwSize; + public int emSplitMode; // 分割模式,见 NET_SPLIT_MODE + public Pointer pnOutputChannels; // 输出通道, 可同时指定多个输出通道一起切换, 内容一致 + // 由用户申请内存 int[] ,大小为sizeof(int)*nOutputChannelCount + public int nOutputChannelCount; // 输出通道数 + public Pointer pnInputChannels; // 输入通道, 每个分割窗口一个对应一个输入通道 + // 由用户申请内存 int[] ,大小为sizeof(int)*nInputChannelCount + public int nInputChannelCount; // 输入通道数 + + public NET_IN_MATRIX_SWITCH() { + this.dwSize = this.size(); + } + } + + // (下位矩阵切换) CLIENT_MatrixSwitch 输出参数 + public static class NET_OUT_MATRIX_SWITCH extends Structure { + public int dwSize; + + public NET_OUT_MATRIX_SWITCH() { + this.dwSize = this.size(); + } + } + + // 刻录模式 + public static class NET_BURN_MODE extends Structure { + public static final int BURN_MODE_SYNC = 0; // 同步 + public static final int BURN_MODE_TURN = 1; // 轮流 + public static final int BURN_MODE_CYCLE = 2; // 循环 + } + + // 刻录流格式 + public static class NET_BURN_RECORD_PACK extends Structure { + public static final int BURN_PACK_DHAV = 0; // DHAV + public static final int BURN_PACK_PS = 1; // PS + public static final int BURN_PACK_ASF = 2; // ASF + public static final int BURN_PACK_MP4 = 3; // MP4 + public static final int BURN_PACK_TS = 4; // TS + } + + // 刻录扩展模式 + public static class NET_BURN_EXTMODE extends Structure { + public static final int BURN_EXTMODE_UNKNOWN = 0; // 未知 + public static final int BURN_EXTMODE_NORMAL = 1; // 正常刻录 + public static final int BURN_EXTMODE_NODISK = 2; // 无盘刻录 + } + + // (开始刻录) CLIENT_StartBurn 接口输入参数 + public static class NET_IN_START_BURN extends Structure { + public int dwSize; + public int dwDevMask; // 刻录设备掩码, 按位表示多个刻录设备组合 + public int[] nChannels = new int[NET_MAX_BURN_CHANNEL_NUM]; // 刻录通道数组 + public int nChannelCount; // 刻录通道数 + public int emMode; // 刻录模式,见 NET_BURN_MODE + public int emPack; // 刻录流格式,见 NET_BURN_RECORD_PACK + public int emExtMode; // 刻录扩展模式, 见 NET_BURN_EXTMODE + + public NET_IN_START_BURN() { + this.dwSize = this.size(); + } + } + + // (开始刻录)CLIENT_StartBurn 接口输出参数 + public static class NET_OUT_START_BURN extends Structure { + public int dwSize; + + public NET_OUT_START_BURN() { + this.dwSize = this.size(); + } + } + + // (打开会话)CLIENT_StartBurnSession 接口输入参数 + public static class NET_IN_START_BURN_SESSION extends Structure { + public int dwSize; + public int nSessionID; // 会话ID + + public NET_IN_START_BURN_SESSION() { + this.dwSize = this.size(); + } + } + + // (打开会话)CLIENT_StartBurnSession 接口输出参数 + public static class NET_OUT_START_BURN_SESSION extends Structure { + public int dwSize; + + public NET_OUT_START_BURN_SESSION() { + this.dwSize = this.size(); + } + } + + // CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_EJECT_BURNER、CTRLTYPE_CTRL_CLOSE_BURNER 等 命令参数 + public static class NET_CTRL_BURNERDOOR extends Structure { + public int dwSize; + public Pointer szBurnerName; // 光盘名称,如“/dev/sda”, 用户申请内存 + public int bResult; // 操作结果 + public int bSafeEject; // 是否安全弹出光驱, 1-弹出前做数据保存, 0-直接弹出 + + public NET_CTRL_BURNERDOOR() { + this.dwSize = this.size(); + } + } + + // 光驱托盘状态 + public static class EM_NET_BURN_DEV_TRAY_TYPE extends Structure { + public static final int EM_NET_BURN_DEV_TRAY_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_NET_BURN_DEV_TRAY_TYPE_READY = 1; // 光盘就绪 + public static final int EM_NET_BURN_DEV_TRAY_TYPE_OPEN = 2; // 托盘弹出 + public static final int EM_NET_BURN_DEV_TRAY_TYPE_NODISK = 3; // 无盘 + public static final int EM_NET_BURN_DEV_TRAY_TYPE_NOT_READY = 4; // 光盘未就绪 + } + + // 光驱使用状态 + public static class EM_NET_BURN_DEV_OPERATE_TYPE extends Structure { + public static final int EM_NET_BURN_DEV_OPERATE_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_NET_BURN_DEV_OPERATE_TYPE_WRITE = 1; // 执行写 + public static final int EM_NET_BURN_DEV_OPERATE_TYPE_READ = 2; // 执行读 + public static final int EM_NET_BURN_DEV_OPERATE_TYPE_IDLE = 3; // 空闲 + } + + // 刻录机信息 + public static class NET_DEV_BURNING extends Structure { + public int dwDriverType; // 刻录驱动器类型;0:DHFS,1:DISK,2:CDRW + public int dwBusType; // 总线类型;0:USB,1:1394,2:IDE, 3: SATA, 4: ESATA + public int dwTotalSpace; // 总容量(KB) + public int dwRemainSpace; // 剩余容量(KB) + public byte[] dwDriverName = new byte[NET_BURNING_DEV_NAMELEN]; // 刻录驱动器名称 + public int emTrayType; // 光驱托盘状态, 详见EM_NET_BURN_DEV_TRAY_TYPE + public int emOperateType; // 光盘使用状态, 详见EM_NET_BURN_DEV_OPERATE_TYPE + } + + // 设备刻录机信息 + public static class NET_BURNING_DEVINFO extends Structure { + public int dwDevNum; // 刻录设备个数 + public NET_DEV_BURNING[] stuList = (NET_DEV_BURNING[]) new NET_DEV_BURNING().toArray(NET_MAX_BURNING_DEV_NUM); // 各刻录设备信息 + } + + // CLIENT_AttachBurnState()输入参数 + public static class NET_IN_ATTACH_STATE extends Structure { + public int dwSize; + public Pointer szDeviceName; // 光盘名称,如"/dev/sda" + public fAttachBurnStateCB cbAttachState; // 刻录监听回调 + public Pointer dwUser; // 用户数据 + public LLong lBurnSession; // 刻录会话句柄, CLIENT_StartBurnSession的返回值. 该值为0时, szDeviceName有效, 此时按刻录设备订阅刻录状态 + public fAttachBurnStateCBEx cbAttachStateEx; // 扩展刻录监听回调 + public Pointer dwUserEx; // 扩展刻录监听回调用户数据 + + public NET_IN_ATTACH_STATE() { + this.dwSize = this.size(); + } + } + + // CLIENT_AttachBurnState 输出参数 + public static class NET_OUT_ATTACH_STATE extends Structure { + public int dwSize; + + public NET_OUT_ATTACH_STATE() { + this.dwSize = this.size(); + } + } + + // fAttachBurnStateCB 参数 + public static class NET_CB_BURNSTATE extends Structure { + public int dwSize; + public Pointer szState; // 消息类型 + //"UploadFileStart":可以开始附件上传 + //"InitBurnDevice":初始化刻录设备 + //"Burning":刻录中 + //"BurnExtraFileStop":刻录停止 + //"BurnFilePause":刻录暂停 + //"SpaceFull":刻录空间满 + //"BurnFileError":刻录出错 + public Pointer szFileName; // 当前刻录附件文件名,用于"UploadFileStart"开始附件上传消息 + public int dwTotalSpace; // 总容量,单位KB,用于"Burning"刻录中,显示容量或计算进度 + public int dwRemainSpace; // 剩余容量,单位KB,用于"Burning"刻录中 + public Pointer szDeviceName; // 刻录设备名称,用于区分不同的刻录设备 + public int nRemainTime; // 刻录剩余时间, 单位秒, -1代表无效 + } + + // 刻录状态 + public static class NET_BURN_STATE extends Structure { + public static final int BURN_STATE_STOP = 0; // 停止 + public static final int BURN_STATE_STOPING = 1; // 停止中 + public static final int BURN_STATE_INIT = 2; // 初始化 + public static final int BURN_STATE_BURNING = 3; // 刻录中 + public static final int BURN_STATE_PAUSE = 4; // 暂停 + public static final int BURN_STATE_CHANGE_DISK = 5; // 换盘中 + public static final int BURN_STATE_PREPARE_EXTRA_FILE = 6; // 附件初始化 + public static final int BURN_STATE_WAIT_EXTRA_FILE = 7; // 等待附件刻录 + public static final int BURN_STATE_UPLOAD_FILE_START = 8; // 附件刻录中 + public static final int BURN_STATE_CHECKING_DISK = 9; // 检测光盘中 + public static final int BURN_STATE_DISK_READY = 10; // 光盘准备就绪 + } + + // 刻录错误码 + public static class NET_BURN_ERROR_CODE extends Structure { + public static final int BURN_CODE_NORMAL = 0; // 正常 + public static final int BURN_CODE_UNKNOWN_ERROR = 1; // 未知错误 + public static final int BURN_CODE_SPACE_FULL = 2; // 刻录满 + public static final int BURN_CODE_START_ERROR = 3; // 开始刻录出错 + public static final int BURN_CODE_STOP_ERROR = 4; // 停止刻录出错 + public static final int BURN_CODE_WRITE_ERROR = 5; // 刻录出错 + public static final int BURN_CODE_UNKNOWN = 6; // 未知 + } + + // CLIENT_BurnGetState 接口输入参数 + public static class NET_IN_BURN_GET_STATE extends Structure { + public int dwSize; + + public NET_IN_BURN_GET_STATE() { + this.dwSize = this.size(); + } + } + + // 光驱使用状态 + public static class EM_NET_BURN_DEV_USED_STATE extends Structure { + public static final int EM_NET_BURN_DEV_USED_STATE_UNKNOWN = 0; //未知 + public static final int EM_NET_BURN_DEV_USED_STATE_STOP = 1; //停止 + public static final int EM_NET_BURN_DEV_USED_STATE_BURNING = 2; //刻录中 + } + + // 刻录设备状态 + public static class NET_BURN_DEV_STATE extends Structure { + public int dwSize; + public int nDeviceID; // 光驱设备ID + public byte[] szDevName = new byte[NET_BURNING_DEV_NAMELEN]; // 光驱设备名称 + public int dwTotalSpace; // 光驱总容量, 单位KB + public int dwRemainSpace; // 光驱剩余容量, 单位KB + public int emUsedType; // 光驱使用状态, 详见EM_NET_BURN_DEV_USED_STATE + public int emError; // 单个光驱出错状态, 详见NET_BURN_ERROR_CODE + + public NET_BURN_DEV_STATE() { + this.dwSize = this.size(); + } + } + + // CLIENT_BurnGetState 接口输出参数 + public static class NET_OUT_BURN_GET_STATE extends Structure { + public int dwSize; + public int emState; // 刻录状态, 详见NET_BURN_STATE + public int emErrorCode; // 错误码, 详见NET_BURN_ERROR_CODE + public int dwDevMask; // 刻录设备掩码, 按位表示多个刻录设备组合 + public int[] nChannels = new int[NET_MAX_BURN_CHANNEL_NUM]; // 刻录通道数组 + public int nChannelCount; // 刻录通道数 + public int emMode; // 刻录模式, 详见NET_BURN_MODE + public int emPack; // 刻录流格式, 详见NET_BURN_RECORD_PACK + public int nFileIndex; // 当前刻录文件编号 + public NET_TIME stuStartTime; // 刻录开始时间 + public NET_BURN_DEV_STATE[] stuDevState = (NET_BURN_DEV_STATE[]) new NET_BURN_DEV_STATE().toArray(NET_MAX_BURNING_DEV_NUM); // 刻录设备状态 + public int nRemainTime; // 刻录剩余时间, 单位秒, -1代表无效 + public int emExtMode; // 扩展模式,当为无盘刻录时,stuDevState可能无效, 详见NET_BURN_EXTMODE + + public NET_OUT_BURN_GET_STATE() { + this.dwSize = this.size(); + } + } + + // 雷达监测超速报警事件 智能楼宇专用 ( NET_ALARM_RADAR_HIGH_SPEED ) + public static class ALARM_RADAR_HIGH_SPEED_INFO extends Structure { + public NET_TIME_EX stuTime; // 事件发生时间 + public float fSpeed; // 速度(单位:km/h) + public byte[] szPlateNumber = new byte[16]; // 车牌 + public byte[] byReserved = new byte[1008]; // 预留字段 + } + + // 设备巡检报警事件 智网专用 ( NET_ALARM_POLLING_ALARM ) + public static class ALARM_POLLING_ALARM_INFO extends Structure { + public NET_TIME_EX stuTime; // 事件发生时间 + public byte[] byReserved = new byte[1024]; // 预留字段 + } + + // 门禁事件 ALARM_ACCESS_CTL_EVENT + public static class ALARM_ACCESS_CTL_EVENT_INFO extends Structure { + public int dwSize; + public int nDoor; // 门通道号 + public byte[] szDoorName = new byte[NET_MAX_DOORNAME_LEN]; // 门禁名称 + public NET_TIME stuTime; // 报警事件发生的时间 + public int emEventType; // 门禁事件类型 参考 NET_ACCESS_CTL_EVENT_TYPE + public int bStatus; // 刷卡结果,TRUE表示成功,FALSE表示失败 + public int emCardType; // 卡类型, 参考 NET_ACCESSCTLCARD_TYPE + public int emOpenMethod; // 开门方式, 参考 NET_ACCESS_DOOROPEN_METHOD + public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 + public byte[] szPwd = new byte[NET_MAX_CARDPWD_LEN]; // 密码 + public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 门读卡器ID + public byte[] szUserID = new byte[NET_COMMON_STRING_64]; // 开门用户 + public byte[] szSnapURL = new byte[NET_COMMON_STRING_256]; // 抓拍照片存储地址 + public int nErrorCode; // 开门失败的原因,仅在bStatus为FALSE时有效 + // 0x00 没有错误 + // 0x10 未授权 + // 0x11 卡挂失或注销 + // 0x12 没有该门权限 + // 0x13 开门模式错误 + // 0x14 有效期错误 + // 0x15 防反潜模式 + // 0x16 胁迫报警未打开 + // 0x17 门常闭状态 + // 0x18 AB互锁状态 + // 0x19 巡逻卡 + // 0x1A 设备处于闯入报警状态 + // 0x20 时间段错误 + // 0x21 假期内开门时间段错误 + // 0x30 需要先验证有首卡权限的卡片 + // 0x40 卡片正确,输入密码错误 + // 0x41 卡片正确,输入密码超时 + // 0x42 卡片正确,输入指纹错误 + // 0x43 卡片正确,输入指纹超时 + // 0x44 指纹正确,输入密码错误 + // 0x45 指纹正确,输入密码超时 + // 0x50 组合开门顺序错误 + // 0x51 组合开门需要继续验证 + // 0x60 验证通过,控制台未授权 + public int nPunchingRecNo; // 刷卡记录集中的记录编号 + public int nNumbers; // 抓图张数 + public int emStatus; // 卡状态 NET_ACCESSCTLCARD_STATE + public byte[] szSN = new byte[32]; // 智能锁序列号 + public int emAttendanceState; // 考勤状态, 参考 NET_ATTENDANCESTATE + public byte[] szQRCode = new byte[512]; // 二维码 + public byte[] szCallLiftFloor = new byte[16]; // 呼梯楼层号 + + public ALARM_ACCESS_CTL_EVENT_INFO() { + super(); + this.dwSize = this.size(); + } + + @Override + public String toString() { + return "ALARM_ACCESS_CTL_EVENT_INFO [dwSize=" + dwSize + ", nDoor=" + + nDoor + ", szDoorName=" + Arrays.toString(szDoorName) + + ", stuTime=" + stuTime + ", emEventType=" + emEventType + + ", bStatus=" + bStatus + ", emCardType=" + emCardType + + ", emOpenMethod=" + emOpenMethod + ", szCardNo=" + + Arrays.toString(szCardNo) + ", szPwd=" + + Arrays.toString(szPwd) + ", szReaderID=" + + Arrays.toString(szReaderID) + ", szUserID=" + + Arrays.toString(szUserID) + ", szSnapURL=" + + Arrays.toString(szSnapURL) + ", nErrorCode=" + nErrorCode + + ", nPunchingRecNo=" + nPunchingRecNo + "]"; + } + } + + // 消警事件 + public static class ALARM_ALARMCLEAR_INFO extends Structure { + public int dwSize; + public int nChannelID; // 通道号 + public NET_TIME stuTime; // 报警事件发生的时间 + public int bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + + public ALARM_ALARMCLEAR_INFO() { + this.dwSize = this.size(); + } + + @Override + public String toString() { + return "ALARM_ALARMCLEAR_INFO [dwSize=" + dwSize + ", nChannelID=" + + nChannelID + ", stuTime=" + stuTime + ", bEventAction=" + + bEventAction + "]"; + } + } + + public static class NET_ALARM_TYPE { + public static final int NET_ALARM_LOCAL = 0; //开关量防区的报警事件(对应 NET_ALARM_ALARM_EX2 事件) + public static final int NET_ALARM_ALARMEXTENDED = 1; //扩展模块报警事件(对应 NET_ALARM_ALARMEXTENDED 事件) + public static final int NET_ALARM_TEMP = 2; //温度报警事件(对应 NET_ALARM_TEMPERATURE 事件) + public static final int NET_ALARM_URGENCY = 3; //紧急报警事件(对应 NET_URGENCY_ALARM_EX 事件) + public static final int NET_ALARM_RCEMERGENCYCALL = 4; //紧急呼叫报警事件(对应 NET_ALARM_RCEMERGENCY_CALL 事件) + public static final int NET_ALARM_ALL = 5; //所有报警事件 + } + + // CLIENT_ControlDevice 接口的 NET_CTRL_CLEAR_ALARM 命令参数 + public static class NET_CTRL_CLEAR_ALARM extends Structure { + public int dwSize; + public int nChannelID; // 防区通道号, -1 表示所有通道 + public int emAlarmType; // 事件类型(支持的类型较少,建议用nEventType字段) NET_ALARM_TYPE + public String szDevPwd; // 登陆设备的密码,如不使用加密消警,直接赋值为NULL + public int bEventType; // 表示是否启用nEventType字段, TRUE:nEventType代替emAlarmType字段, FALSE:沿用emAlarmType字段,忽略nEventType字段 + public int nEventType; // 事件类型, 对应 fMessCallBack 回调来上的lCommand字段, 即CLIENT_StartListenEx接口获得事件类型 + + // 比如NET_ALARM_ALARM_EX2表示本地报警事件 + public NET_CTRL_CLEAR_ALARM() { + this.dwSize = this.size(); + } + + @Override + public String toString() { + return "NET_CTRL_CLEAR_ALARM [dwSize=" + dwSize + ", nChannelID=" + + nChannelID + ", emAlarmType=" + emAlarmType + ", szDevPwd=" + + szDevPwd + ", bEventType=" + bEventType + ", nEventType=" + + nEventType + "]"; + } + } + + // CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_START_ALARMBELL / CTRLTYPE_CTRL_STOP_ALARMBELL命令参数 + public static class NET_CTRL_ALARMBELL extends Structure { + public int dwSize; + public int nChannelID; // 通道号(0开始) + + public NET_CTRL_ALARMBELL() { + this.dwSize = this.size(); + } + } + + // 警灯配置(对应 CFG_CMD_ALARMLAMP) + public static class CFG_ALARMLAMP_INFO extends Structure { + public int emAlarmLamp; // 警灯状态,参考 EM_ALARMLAMP_MODE + } + + // 警灯状态 + public static class EM_ALARMLAMP_MODE extends Structure { + public static final int EM_ALARMLAMP_MODE_UNKNOWN = -1; // 未知 + public static final int EM_ALARMLAMP_MODE_OFF = 0; // 灭 + public static final int EM_ALARMLAMP_MODE_ON = 1; // 亮 + public static final int EM_ALARMLAMP_MODE_BLINK = 2; // 闪烁 + } + + // 发送的通知类型,对应CLIENT_SendNotifyToDev接口 + public static class NET_EM_NOTIFY_TYPE extends Structure { + public static final int NET_EM_NOTIFY_PATROL_STATUS = 1; // 发送巡更通知 (对应结构体 NET_IN_PATROL_STATUS_INFO, NET_OUT_PATROL_STATUS_INFO ) + } + + // 巡更状态 + public static class NET_EM_PATROL_STATUS extends Structure { + public static final int NET_EM_PATROL_STATUS_UNKNOWN = 0; // 未知状态 + public static final int NET_EM_PATROL_STATUS_BEGIN = 1; // 巡更开始 + public static final int NET_EM_PATROL_STATUS_END = 2; // 巡更结束 + public static final int NET_EM_PATROL_STATUS_FAIL = 3; // 巡更失败 + } + + // CLIENT_SendNotifyToDev 入参 (对应枚举 NET_EM_NOTIFY_PATROL_STATUS) + public static class NET_IN_PATROL_STATUS_INFO extends Structure { + public int dwSize; // 结构体大小 + public int emPatrolStatus; // 巡更状态,参考 NET_EM_PATROL_STATUS + + public NET_IN_PATROL_STATUS_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_SendNotifyToDev 出参 (对应枚举 NET_EM_NOTIFY_PATROL_STATUS) + public static class NET_OUT_PATROL_STATUS_INFO extends Structure { + public int dwSize; // 结构体大小 + + public NET_OUT_PATROL_STATUS_INFO() { + this.dwSize = this.size(); + } + } + + // 报警事件类型 NET_ALARM_TALKING_INVITE (设备请求对方发起对讲事件)对应的数据描述信息 + public static class ALARM_TALKING_INVITE_INFO extends Structure { + public int dwSize; + public int emCaller; // 设备希望的对讲发起方,取值参考 EM_TALKING_CALLER + public NET_TIME stuTime; // 事件触发时间 + public byte[] szCallID = new byte[NET_COMMON_STRING_64]; // 呼叫惟一标识符 + public int nLevel; // 表示所呼叫设备所处层级 + public TALKINGINVITE_REMOTEDEVICEINFO stuRemoteDeviceInfo; // 远端设备信息 + + public ALARM_TALKING_INVITE_INFO() { + this.dwSize = this.size(); + } + } + + // 对讲发起方 + public static class EM_TALKING_CALLER extends Structure { + public static final int EM_TALKING_CALLER_UNKNOWN = 0; // 未知发起方 + public static final int EM_TALKING_CALLER_PLATFORM = 1; // 对讲发起方为平台 + } + + // Invite事件远程设备协议 + public static class TALKINGINVITE_REMOTEDEVICE_PROTOCOL extends Structure { + public static final int EM_TALKINGINVITE_REMOTEDEVICE_PROTOCOL_UNKNOWN = 0; // 未知 + public static final int EM_TALKINGINVITE_REMOTEDEVICE_PROTOCOL_HIKVISION = 1; // 海康 + } + + // Invite事件远端设备信息 + public static class TALKINGINVITE_REMOTEDEVICEINFO extends Structure { + public byte[] szIP = new byte[MAX_REMOTEDEVICEINFO_IPADDR_LEN]; // 设备IP + public int nPort; // 端口 + public int emProtocol; // 协议类型,取值参考 EM_TALKINGINVITE_REMOTEDEVICE_PROTOCOL + public byte[] szUser = new byte[MAX_REMOTEDEVICEINFO_USERNAME_LEN]; // 用户名 + public byte[] szPassword = new byte[MAX_REMOTEDEVICEINFO_USERPSW_LENGTH];// 密码 + public byte[] szReverse = new byte[1024]; // 保留字段 + } + + // IO控制命令,对应 CLIENT_QueryIOControlState 接口 和 CLIENT_IOControl 接口 + public static class NET_IOTYPE extends Structure { + public static final int NET_ALARMINPUT = 1; // 控制报警输入,对应结构体为 ALARM_CONTROL + public static final int NET_ALARMOUTPUT = 2; // 控制报警输出,对应结构体为 ALARM_CONTROL + public static final int NET_DECODER_ALARMOUT = 3; // 控制报警解码器输出,对应结构体为 DECODER_ALARM_CONTROL + public static final int NET_WIRELESS_ALARMOUT = 5; // 控制无线报警输出,对应结构体为 ALARM_CONTROL + public static final int NET_ALARM_TRIGGER_MODE = 7; // 报警触发方式(手动,自动,关闭),使用 TRIGGER_MODE_CONTROL 结构体 + } + + // 报警IO控制 + public static class ALARM_CONTROL extends Structure { + public short index; // 端口序号 + public short state; // 端口状态,0 - 关闭,1 - 打开 + } + + // 报警解码器控制 + public static class DECODER_ALARM_CONTROL extends Structure { + public int decoderNo; // 报警解码器号,从0开始 + public short alarmChn; // 报警输出口,从0开始 + public short alarmState; // 报警输出状态;1:打开,0:关闭 + } + + // 触发方式 + public static class TRIGGER_MODE_CONTROL extends Structure { + public short index; // 端口序号 + public short mode; // 触发方式(0关闭1手动2自动);不设置的通道,sdk默认将保持原来的设置。 + public byte[] bReserved = new byte[28]; + } + + // 报警输出通道的状态的配置, 对应 命令 CFG_CMD_ALARMOUT + public static class CFG_ALARMOUT_INFO extends Structure { + public int nChannelID; // 报警通道号(0开始) + public byte[] szChnName = new byte[MAX_CHANNELNAME_LEN]; // 报警通道名称 + public byte[] szOutputType = new byte[MAX_NAME_LEN]; // 输出类型, 用户自定义 + public int nOutputMode; // 输出模式, 0-自动报警, 1-强制报警, 2-关闭报警 + public int nPulseDelay; // 脉冲模式输出时间, 单位为秒(0-255秒) + public int nSlot; // 根地址, 0表示本地通道, 1表示连接在第一个串口上的扩展通道, 2、3...以此类推, -1表示无效 + public int nLevel1; // 第一级级联地址, 表示连接在第nSlot串口上的第nLevel1个探测器或仪表, 从0开始, -1表示无效 + public byte abLevel2; // 类型为bool, 表示nLevel2字段是否存在 + public int nLevel2; // 第二级级联地址, 表示连接在第nLevel1个的仪表上的探测器序号, 从0开始 + } + + // 检测采集设备报警事件, 对应事件类型 NET_ALARM_SCADA_DEV_ALARM + public static class ALARM_SCADA_DEV_INFO extends Structure { + public int dwSize; + public int nChannel; // 通道号 + public NET_TIME stuTime; // 事件发生的时间 + public byte[] szDevName = new byte[NET_COMMON_STRING_64]; // 故障设备名称 + public byte[] szDesc = new byte[NET_COMMON_STRING_256]; // 报警描述 + public int nAction; // -1:未知 0:脉冲 1:开始 2:停止 + public byte[] szID = new byte[NET_COMMON_STRING_32]; // 点位ID, 目前使用16字节 + public byte[] szSensorID = new byte[NET_COMMON_STRING_32]; // 探测器ID, 目前使用16字节 + public byte[] szDevID = new byte[NET_COMMON_STRING_32]; // 设备ID, 目前使用16字节 + public byte[] szPointName = new byte[NET_COMMON_STRING_64]; // 点位名,与点表匹配 + public int nAlarmFlag; // 0:开始, 1:结束 + + public ALARM_SCADA_DEV_INFO() { + this.dwSize = this.size(); + } + } + + // 点位类型 + public static class EM_NET_SCADA_POINT_TYPE extends Structure { + public static final int EM_NET_SCADA_POINT_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_NET_SCADA_POINT_TYPE_ALL = 1; // 所有类型 + public static final int EM_NET_SCADA_POINT_TYPE_YC = 2; // 遥测 模拟量输入 + public static final int EM_NET_SCADA_POINT_TYPE_YX = 3; // 遥信 开关量输入 + public static final int EM_NET_SCADA_POINT_TYPE_YT = 4; // 遥调 模拟量输出 + public static final int EM_NET_SCADA_POINT_TYPE_YK = 5; // 遥控 开关量输出 + } + + // CLIENT_SCADAAttachInfo()接口输入参数 + public static class NET_IN_SCADA_ATTACH_INFO extends Structure { + public int dwSize; + public StdCallCallback cbCallBack; // 数据回调函数, fSCADAAttachInfoCallBack 回调 + public int emPointType; // 点位类型,取值参考 EM_NET_SCADA_POINT_TYPE + public Pointer dwUser; // 用户定义参数 + + public NET_IN_SCADA_ATTACH_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_SCADAAttachInfo()接口输出参数 + public static class NET_OUT_SCADA_ATTACH_INFO extends Structure { + public int dwSize; + + public NET_OUT_SCADA_ATTACH_INFO() { + this.dwSize = this.size(); + } + } + + // 监测点位信息列表 + public static class NET_SCADA_NOTIFY_POINT_INFO_LIST extends Structure { + public int dwSize; + public int nList; // 监测点位信息个数 + public NET_SCADA_NOTIFY_POINT_INFO[] stuList = (NET_SCADA_NOTIFY_POINT_INFO[]) new NET_SCADA_NOTIFY_POINT_INFO().toArray(MAX_SCADA_POINT_LIST_INFO_NUM); // 监测点位信息 + + public NET_SCADA_NOTIFY_POINT_INFO_LIST() { + this.dwSize = this.size(); + } + } + + // 监测点位信息 + public static class NET_SCADA_NOTIFY_POINT_INFO extends Structure { + public int dwSize; + public byte[] szDevName = new byte[NET_COMMON_STRING_64]; // 设备名称,与getInfo获取的名称一致 + public int emPointType; // 点位类型,取值参考 EM_NET_SCADA_POINT_TYPE + public byte[] szPointName = new byte[NET_COMMON_STRING_64]; // 点位名,与点位表的取值一致 + public float fValue; // Type为YC时为浮点数 + public int nValue; // Type为YX时为整数 + public byte[] szFSUID = new byte[NET_COMMON_STRING_64]; // 现场监控单元ID(Field Supervision Unit), 即设备本身 + public byte[] szID = new byte[NET_COMMON_STRING_64]; // 点位ID + public byte[] szSensorID = new byte[NET_COMMON_STRING_64]; // 探测器ID + public NET_TIME_EX stuCollectTime; // 采集时间 + + public NET_SCADA_NOTIFY_POINT_INFO() { + this.dwSize = this.size(); + } + } + + public static class CFG_TRAFFICSNAPSHOT_NEW_INFO extends Structure { + public int nCount; // 有效成员个数 + public CFG_TRAFFICSNAPSHOT_INFO[] stInfo = (CFG_TRAFFICSNAPSHOT_INFO[]) new CFG_TRAFFICSNAPSHOT_INFO().toArray(8); // 交通抓拍表数组 + } + + // CFG_CMD_INTELLECTIVETRAFFIC + public static class CFG_TRAFFICSNAPSHOT_INFO extends Structure { + public byte[] szDeviceAddress = new byte[MAX_DEVICE_ADDRESS]; // 设备地址 UTF-8编码,256字节 + public int nVideoTitleMask; // OSD叠加类型掩码 从低位到高位分别表示:0-时间 1-地点 2-车牌3-车长 4-车速 5-限速6-大车限速 7-小车限速8-超速 9-违法代码10-车道号 11-车身颜色 12-车牌类型 13-车牌颜色14-红灯点亮时间 15-违章类型 16-雷达方向 17-设备编号 18-标定到期时间 19-车型 20-行驶方向 + public int nRedLightMargin; // 红灯冗余间隔时间 红灯开始的一段时间内,车辆通行不算闯红灯,单位:秒 + public float fLongVehicleLengthLevel; // 超长车长度最小阈值 单位:米,包含 + public float[] arfLargeVehicleLengthLevel = new float[2]; // 大车长度阈值 单位:米,包含小值 + public float[] arfMediumVehicleLengthLevel = new float[2]; // 中型车长度阈值 单位:米,包含小值 + public float[] arfSmallVehicleLengthLevel = new float[2]; // 小车长度阈值 单位:米,包含小值 + public float fMotoVehicleLengthLevel; // 摩托车长度最大阈值 单位:米,不包含 + public BREAKINGSNAPTIMES_INFO stBreakingSnapTimes; // 违章抓拍张数 + public DETECTOR_INFO[] arstDetector = (DETECTOR_INFO[]) new DETECTOR_INFO().toArray(MAX_DETECTOR); // 车检器配置,下标是车道号 + public int nCarType; // 抓拍车辆类型 0-大小车都抓拍1-抓拍小车2-抓拍大车3-大小车都不抓拍 + public int nMaxSpeed; // 当测得的速度超过最大速度时,则以最大速度计 0~255km/h + public int nFrameMode; // 帧间隔模式 1-速度自适应(超过速度上限取0间隔,低于速度下限取2间隔,中间取1间隔)2-由联动参数决定 + public int[] arnAdaptiveSpeed = new int[2]; // 速度自适应下限和上限 + public CFG_ALARM_MSG_HANDLE stuEventHandler; // 交通抓拍联动参数 + public int abSchemeRange; // BOOL类型,TRUE:方案针对相机,以车到0的值为准;FALSE:方案针对车道。不可以修改此字段数据, 只内部使用 + public int nVideoTitleMask1; // 从低位到高位分别表示:0-车标 1-红灯结束时间 2-设备制造厂商 3-小车低限速 4-大车低限速 5-小车高限速 6-大车高限速 7-设备工作模式 8-通用自定义 9-车道自定义 10-抓拍触发源 11-停车场区域12-车辆类型(面包车、轿车等等) 13-中车低限速 14-中车高限速 15-道路方向 16-GPS信息 + public int nMergeVideoTitleMask; // 合成图片OSD叠加类型掩码 参照nVideoTitleMask字段 + public int nMergeVideoTitleMask1; // 合成图片OSD叠加类型掩码 参照nVideoTitleMask1字段 + public int nTriggerSource; // 触发源掩码 0-RS232 1-RS485 2-IO 3-Video 4-Net + public int nSnapMode; // 抓拍模式 0-全部抓拍 1-超速抓拍 2-逆向抓拍 3-PK模式 + public int nWorkMode; // 工作模式 0-自动模式,1-线圈抓拍模式,2-线圈抓拍识别,3-视频抓拍,4-视频识别, 5-混合抓拍(带识别) + public int nCarThreShold; // 车长阈值 区分大小车长的阈值,单位: cm + public int nSnapType; // 抓拍或抓录选择 0-正常抓拍模式 1-视频抓拍模式 2-黑屏快抓模式 + public int[] nCustomFrameInterval = new int[3]; // 自定义抓拍帧间隔 第一个元素指车速小于速度自适应下限时的抓拍帧间隔,依次类推 + public int nKeepAlive; // 与雷达、车检器的默认保活周期 单位秒 + public OSD_INFO stOSD; // 原始图片OSD参数配置 + public OSD_INFO stMergeOSD; // 合成图片OSD参数配置 + public CFG_NET_TIME stValidUntilTime; // 标定到期时间,指该时间点之前抓拍照片有效 + public RADAR_INFO stRadar; + public byte[] szRoadwayCode = new byte[MAX_ROADWAYNO]; // 道路代码 + public int nVideoTitleMask2; // 原始图片OSD叠加类型掩码2 从低位到高位分别表示:0-国别 1-尾气数据 + public int nMergeVideoTitleMask2; // 合成图片OSD叠加类型掩码2 参照nVideoTitleMask2字段 + public int nParkType; // 出入口类型,0-默认( 兼容以前,不区分出口/入口 ),1-入口相机, 2-出口相机 + } + + // 车检器配置 + public static class DETECTOR_INFO extends Structure { + public int nDetectBreaking; // 违章类型掩码 从低位到高位依次是:0-正常1-闯红灯2-压线3-逆行4-欠速5-超速6-有车占道 + // 7-黄牌占道 8-闯黄灯 9-违章占公交车道 10-不系安全带 11-驾驶员抽烟 12-驾驶员打电话 + public COILCONFIG_INFO[] arstCoilCfg = (COILCONFIG_INFO[]) new COILCONFIG_INFO().toArray(MAX_COILCONFIG); // 线圈配置数组 + public int nRoadwayNumber; // 车道号 1-16 ; 0表示不启用 + public int nRoadwayDirection; // 车道方向(车开往的方向) 0-南向北 1-西南向东北 2-东 3-西北向东南 4-北向南 5-东北向西南 6-东向西 7-东南向西北 8-忽略 + public int nRedLightCardNum; // 卡口图片序号 表示将电警中的某一张图片作为卡口图片(共三张),0表示不采用,1~3,表示采用对应序号的图片 + public int nCoilsNumber; // 线圈个数 1-3 + public int nOperationType; // 业务模式 0-卡口电警1-电警2-卡口 + public int[] arnCoilsDistance = new int[3]; // 两两线圈的间隔 范围0-1000,单位为厘米 + public int nCoilsWidth; // 每个线圈的宽度 0~200cm + public int[] arnSmallCarSpeedLimit = new int[2]; // 小型车辆速度下限和上限 0~255km/h,不启用大小车限速时作为普通车辆限速 + public int[] arnBigCarSpeedLimit = new int[2]; // 大型车辆速度下限和上限 0~255km/h,启用大小车限速时有效 + public int nOverSpeedMargin; // 限高速宽限值 单位:km/h + public int nBigCarOverSpeedMargin; // 大车限高速宽限值 单位:km/h,启用大小车限速时有效 + public int nUnderSpeedMargin; // 限低速宽限值 单位:km/h + public int nBigCarUnderSpeedMargin; // 大车限低速宽限值 单位:km/h,启用大小车限速时有效 + public byte bSpeedLimitForSize; // bool类型,是否启用大小车限速 + public byte bMaskRetrograde; // bool类型,逆行是否视为违章行为 + public byte[] byReserved = new byte[2]; // 保留对齐 + public byte[] szDrivingDirection = new byte[3 * MAX_DRIVINGDIRECTION]; // "DrivingDirection" : ["Approach", "上海", "杭州"],行驶方向 + // "Approach"-上行,即车辆离设备部署点越来越近;"Leave"-下行, + // 即车辆离设备部署点越来越远,第二和第三个参数分别代表上行和 + // 下行的两个地点,UTF-8编码 + public int nOverPercentage; // 超速百分比,超过限速百分比后抓拍 + public int nCarScheme; // 具体的方案Index,具体方案含义参参考打包环境local.png;根据CFG_TRAFFICSNAPSHOT_INFO.abSchemeRange字段区分作用范围 + public int nSigScheme; // 同上,非卡口使用 + public int bEnable; // BOOL类型,车道是否有效,只有有效时才抓拍 + public int[] nYellowSpeedLimit = new int[2]; //黄牌车限速上限和下限 范围0~255km/h + public int nRoadType; //工作路段 0 普通公路 1 高速公路 + public int nSnapMode; //抓拍模式 0-全部抓拍 1-超速抓拍 2-逆向抓拍(鄞州项目用) + public int nDelayMode; //延时抓拍方案 0-使DelaySnapshotDistance,1-使用DelayTime + public int nDelayTime; //延时抓拍时间 闯红灯第三张抓拍位置距离最后一个线圈的时间,单位毫秒 + public int nTriggerMode; //触发模式 0-入线圈触发 1-出线圈触发 2-出入都抓拍 3-关闭 + public int nErrorRange; //速度误差值,进线圈2与进线圈3之间的速度误差值,若实际误差大于或等于该值,视速度无效,否则取平均速度 0-20 + public double dSpeedCorrection; //速度校正系数,即速度值为测出的值乘以该系数 + public int[] nDirection = new int[2]; //相对车道方向需要上报车辆行驶方向,nDirection[0] 0--空 1--正向 ; nDirection[1] 0--空 1--反向 + public byte[] szCustomParkNo = new byte[CFG_COMMON_STRING_32 + 1];// 自定义车位号(停车场用) + public byte[] btReserved = new byte[3]; + } + + // 线圈配置 + public static class COILCONFIG_INFO extends Structure { + public int nDelayFlashID; // 延时闪光灯序号 每个线圈对应的延时闪关灯序号,范围0~5,0表示不延时任何闪光灯 + public int nFlashSerialNum; // 闪光灯序号 范围0~5,0表示不打开闪光灯(鄞州项目用) + public int nRedDirection; // 红灯方向 每个线圈对应的红灯方向:0-不关联,1-左转红灯,2-直行红灯,3-右转红灯,4-待左,5-待直,6-待右, 只在电警中有效 + public int nTriggerMode; // 线圈触发模式 触发模式:0-入线圈触发1-出线圈触发(鄞州项目用) + public int nFlashSerialNum2; //多抓第二张对应闪光灯序号 范围0~5,0表示不打开闪光灯 + public int nFlashSerialNum3; //多抓第三张对应闪光灯序号 范围0~5,0表示不打开闪光灯 + } + + // 违章抓拍张数 + public static class BREAKINGSNAPTIMES_INFO extends Structure { + public int nNormal; // 正常 + public int nRunRedLight; // 闯红灯 + public int nOverLine; // 压线 + public int nOverYellowLine; // 压黄线 + public int nRetrograde; // 逆向 + public int nUnderSpeed; // 欠速 + public int nOverSpeed; // 超速 + public int nWrongRunningRoute; // 有车占道 + public int nYellowInRoute; // 黄牌占道 + public int nSpecialRetrograde; // 特殊逆行 + public int nTurnLeft; // 违章左转 + public int nTurnRight; // 违章右转 + public int nCrossLane; // 违章变道 + public int nU_Turn; // 违章调头 + public int nParking; // 违章停车 + public int nWaitingArea; // 违章进入待行区 + public int nWrongRoute; // 不按车道行驶 + public int nParkingSpaceParking; // 车位有车 + public int nParkingSpaceNoParking; // 车位无车 + public int nRunYellowLight; // 闯黄灯 + public int nStay; // 违章停留 + public int nPedestrainPriority; // 斑马线行人优先违章 + public int nVehicleInBusRoute; // 违章占道 + public int nBacking; // 违章倒车 + public int nOverStopLine; // 压停止线 + public int nParkingOnYellowBox; // 黄网格线停车 + public int nRestrictedPlate; // 受限车牌 + public int nNoPassing; // 禁行 + public int nWithoutSafeBelt; // 不系安全带 + public int nDriverSmoking; // 驾驶员抽烟 + public int nDriverCalling; // 驾驶员打电话 + public int nPedestrianRunRedLight; // 行人闯红灯 + public int nPassNotInOrder; // 未按规定依次通行 + } + + // OSD属性 + public static class OSD_INFO extends Structure { + public BLACK_REGION_INFO stBackRegionInfo; //OSD黑边属性 + public int nOSDAttrScheme; //OSD属性配置方案 0=未知 , 1=全体OSD项共用属性 , 2=每个OSD项一个属性 + public OSD_ATTR_SCHEME stOSDAttrScheme; //OSD属性配置方案内容 + public OSD_CUSTOM_SORT[] stOSDCustomSorts = (OSD_CUSTOM_SORT[]) new OSD_CUSTOM_SORT().toArray(MAX_OSD_CUSTOM_SORT_NUM); //OSD叠加内容自定义排序 + public int nOSDCustomSortNum; + public int nRedLightTimeDisplay; //OSD红灯时间配置 0=未知,1=违法最后一张,2=所有张 + public byte cSeperater; //OSD不同项之间的分隔符 + public byte[] bReserved = new byte[3]; //字节对齐 + public byte[] szOSDOrder = new byte[MAX_CONF_CHAR]; + public int nOSDContentScheme; //0=未知, 1=Mask , 2=CustomizeSort + public OSD_CUSTOM_INFO stOSDCustomInfo; //OSD自定义项 + } + + // OSD黑边 + public static class BLACK_REGION_INFO extends Structure { + public int nHeight; //黑边高度 取值范围:0 ~ ( 8192-原图片高度) + public int nOSDPosition; //黑边位置 0=未知 , 1=顶部 , 2=底部 + } + + // OSD属性配置方案内容 + public static class OSD_ATTR_SCHEME extends Structure { + public OSD_WHOLE_ATTR stWholeAttr; //全体OSD项共用属性 + } + + // 全体OSD项共用属性 + public static class OSD_WHOLE_ATTR extends Structure { + public int bPositionAsBlackRegion; //BOOL类型,位置是否同黑边相同,true时,下面的Position无效,BOOL类型 + public CFG_RECT stPostion; //位置,不能超过图片范围 + public int bNewLine; //BOOL类型,超出矩形范围是否换行,bPositionAsBlackRegion为true时有效,BOOL类型 + public int bLoneVehicle; //BOOL类型,车辆信息独立显示,true 一行显示一辆车信息,false 允许多辆车信息显示在一行,BOOL类型 + } + + // OSD叠加内容自定义排序 + public static class OSD_CUSTOM_SORT extends Structure { + public OSD_CUSTOM_ELEMENT[] stElements = (OSD_CUSTOM_ELEMENT[]) new OSD_CUSTOM_ELEMENT().toArray(MAX_OSD_CUSTOM_SORT_ELEM_NUM); //具体叠加元素 + public int nElementNum; + } + + // OSD具体叠加元素 + public static class OSD_CUSTOM_ELEMENT extends Structure { + public int nNameType; //名称类型, 0:szName字段含义参照szOSDOrder字段定义的项 + // 1:"Name"字段表示自定义项,无需解析 + public byte[] szName = new byte[MAX_OSD_CUSTOM_VALUE_LEN]; // 该项名称 + public byte[] szPrefix = new byte[MAX_PRE_POX_STR_LEN]; // 叠加前缀字符串 + public byte[] szPostfix = new byte[MAX_PRE_POX_STR_LEN]; //叠加后缀字符串 + public int nSeperaterCount; //后面添加分隔符个数 + + } + + // OSD自定义项 + public static class OSD_CUSTOM_INFO extends Structure { + public OSD_CUSTOM_GENERAL_INFO[] stGeneralInfos = (OSD_CUSTOM_GENERAL_INFO[]) new OSD_CUSTOM_GENERAL_INFO().toArray(MAX_OSD_CUSTOM_GENERAL_NUM); //具体叠加元素 + public int nGeneralInfoNum; + } + + public static class OSD_CUSTOM_GENERAL_INFO extends Structure { + public int bEnable; //BOOL类型,是否叠加 + } + + public static class RADAR_INFO extends Structure { + public int nAngle; //角度,用于修正雷达探头安装的角度造成的速度误差,范围[0,90] + public int nAntiJammingValue; //抗干扰门槛值 + public int nComeInValue; //来向进入门槛值,取值范围[0,65535] + public int nComeOutValue; //来向离开门槛值 + public int nDelayTime; //雷达延时,单位ms,范围[0,255] + public int nDetectBreaking; //违章类型掩码,从低位到高位依次是: + //0-正常,1-闯红灯, 2-压线, 3-逆行,4-欠速 + //5-超速,6-有车占道,7-黄牌占道,8-闯黄灯,9-违章占公交车道 + public int nDetectMode; //检测模式 0-车头检测 1-车尾检测 2-双向检测 + public int nInstallMode; //雷达安装方式 0-侧面安装 1-上方安装 + public int nLevel; //灵敏度,0级灵敏度最高,范围[0,5] + public int nMultiTargetFilter; //多目标过滤模式,0-正常 1-过滤 + public int nWentEndValue; //去向信号结束门槛值 + public int nWentInValue; //去向进入门槛值 + public int nWentOutValue; //去向离开门槛值 + } + + // 串口状态 + public static class NET_COMM_STATE extends Structure { + public int uBeOpened; // 串口是否打开,0:未打开 1:打开. + public int uBaudRate; // 波特率, 1~8分别表示 1200 2400 4800 9600 19200 38400 57600 115200 + public int uDataBites; // 数据位,4~8表示4位~8位 + public int uStopBits; // 停止位, 232串口 : 数值0 代表停止位1; 数值1 代表停止位1.5; 数值2 代表停止位2. 485串口 : 数值1 代表停止位1; 数值2 代表停止位2. + public int uParity; // 检验, 0:无校验,1:奇校验;2:偶校验; + public byte[] bReserved = new byte[32]; + } + + + // 门禁卡记录查询条件 + public static class FIND_RECORD_ACCESSCTLCARD_CONDITION extends Structure { + public int dwSize; + public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + public int bIsValid; // 是否有效, 1:有效, 0:无效 , boolean类型,为1或者0 + public int abCardNo; // 卡号查询条件是否有效,针对成员 szCardNo,boolean类型,为1或者0 + public int abUserID; // 用户ID查询条件是否有效,针对成员 szUserID, boolean类型,为1或者0 + public int abIsValid; // IsValid查询条件是否有效,针对成员 bIsValid, boolean类型,为1或者0 + + public FIND_RECORD_ACCESSCTLCARD_CONDITION() { + this.dwSize = this.size(); + } + } + + // 门禁卡记录集信息 + public static class NET_RECORDSET_ACCESS_CTL_CARD extends Structure { + public int dwSize; + public int nRecNo; // 记录集编号,只读 + public NET_TIME stuCreateTime = new NET_TIME(); // 创建时间 + public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID, 设备暂不支持 + public int emStatus; // 卡状态 NET_ACCESSCTLCARD_STATE + public int emType; // 卡类型 NET_ACCESSCTLCARD_TYPE + public byte[] szPsw = new byte[NET_MAX_CARDPWD_LEN]; // 卡密码 + public int nDoorNum; // 有效的门数目; + public int[] sznDoors = new int[NET_MAX_DOOR_NUM]; // 有权限的门序号,即CFG_CMD_ACCESS_EVENT配置的数组下标 + public int nTimeSectionNum; // 有效的的开门时间段数目 + public int[] sznTimeSectionNo = new int[NET_MAX_TIMESECTION_NUM]; // 开门时间段索引,即CFG_ACCESS_TIMESCHEDULE_INFO的数组下标 + public int nUserTime; // 使用次数,仅当来宾卡时有效 + public NET_TIME stuValidStartTime = new NET_TIME(); // 开始有效期, 设备暂不支持时分秒 + public NET_TIME stuValidEndTime = new NET_TIME(); // 结束有效期, 设备暂不支持时分秒 + public int bIsValid; // 是否有效,1有效; 0无效, boolean类型,为1或者0 + public NET_ACCESSCTLCARD_FINGERPRINT_PACKET stuFingerPrintInfo; // 下发指纹数据信息,仅为兼容性保留,请使用 stuFingerPrintInfoEx, 如果使用,内部的 pPacketData,请初始化 + public int bFirstEnter; // 是否拥有首卡权限, boolean类型,为1或者0 + public byte[] szCardName = new byte[NET_MAX_CARDNAME_LEN]; // 卡命名 + public byte[] szVTOPosition = new byte[NET_COMMON_STRING_64]; // 门口机关联位置 + public int bHandicap; // 是否为残疾人卡, boolean类型,为1或者0 + public int bEnableExtended; // 启用成员 stuFingerPrintInfoEx, boolean类型,为1或者0 + public NET_ACCESSCTLCARD_FINGERPRINT_PACKET_EX stuFingerPrintInfoEx; // 指纹数据信息, 如果使用,内部的 pPacketData,请初始化 + public int nFaceDataNum; // 人脸数据个数不超过20 + public NET_FACE_FACEDATA[] szFaceDataArr = (NET_FACE_FACEDATA[]) new NET_FACE_FACEDATA().toArray(MAX_FACE_COUTN);// 人脸模板数据 + public byte[] szDynamicCheckCode = new byte[MAX_COMMON_STRING_16];// 动态校验码。 + // VTO等设备会保存此校验码,以后每次刷卡都以一定的算法生成新校验码并写入IC卡中,同时更新VTO设备的校验码,只有卡号和此校验码同时验证通过时才可开门。 + public int nRepeatEnterRouteNum; // 反潜路径个数 + public int[] arRepeatEnterRoute = new int[MAX_REPEATENTERROUTE_NUM]; // 反潜路径 + public int nRepeatEnterRouteTimeout; // 反潜超时时间 + public int bNewDoor; // 是否启动新开门授权字段,TRUE表示使用nNewDoorNum和nNewDoors字段下发开门权限, BOOL类型 + public int nNewDoorNum; // 有效的门数目; + public int[] nNewDoors = new int[MAX_ACCESSDOOR_NUM]; // 有权限的门序号,即CFG_CMD_ACCESS_EVENT配置的数组下标 + public int nNewTimeSectionNum; // 有效的的开门时间段数目 + public int[] nNewTimeSectionNo = new int[MAX_ACCESSDOOR_NUM]; // 开门时间段索引,即CFG_ACCESS_TIMESCHEDULE_INFO的数组下标 + public byte[] szCitizenIDNo = new byte[MAX_COMMON_STRING_32]; // 身份证号码 + public int nSpecialDaysScheduleNum; // 假日计划表示数量 + public int[] arSpecialDaysSchedule = new int[MAX_ACCESSDOOR_NUM];// 假日计划标识// 缺点:目前方案只支持一卡刷一个设备。 + public int nUserType; // 用户类型, 0 普通用户, 1 黑名单用户 + public int nFloorNum; // 有效的楼层数量 + public FLOOR_NO[] szFloorNoArr = (FLOOR_NO[]) new FLOOR_NO().toArray(MAX_ACCESS_FLOOR_NUM); // 楼层号 + + public NET_RECORDSET_ACCESS_CTL_CARD() { + this.dwSize = this.size(); + } + } + + public static class FLOOR_NO extends Structure { + public byte[] szFloorNo = new byte[NET_COMMON_STRING_4]; // 楼层号 + } + + // 卡状态 + public static class NET_ACCESSCTLCARD_STATE extends Structure { + public static final int NET_ACCESSCTLCARD_STATE_UNKNOWN = -1; + public static final int NET_ACCESSCTLCARD_STATE_NORMAL = 0; // 正常 + public static final int NET_ACCESSCTLCARD_STATE_LOSE = 0x01; // 挂失 + public static final int NET_ACCESSCTLCARD_STATE_LOGOFF = 0x02; // 注销 + public static final int NET_ACCESSCTLCARD_STATE_FREEZE = 0x04; // 冻结 + public static final int NET_ACCESSCTLCARD_STATE_ARREARAGE = 0x08; // 欠费 + public static final int NET_ACCESSCTLCARD_STATE_OVERDUE = 0x10; // 逾期 + public static final int NET_ACCESSCTLCARD_STATE_PREARREARAGE = 0x20; // 预欠费(还是可以开门,但有语音提示) + } + + // 指纹数据,只用于下发信息 + public static class NET_ACCESSCTLCARD_FINGERPRINT_PACKET extends Structure { + public int dwSize; + public int nLength; // 单个数据包长度,单位字节 + public int nCount; // 包个数 + public Pointer pPacketData; // 所有指纹数据包,用户申请内存并填充,长度为 nLength*nCount + + public NET_ACCESSCTLCARD_FINGERPRINT_PACKET() { + this.dwSize = this.size(); + } + } + + // 指纹数据扩展,可用于下发和获取信息 + public static class NET_ACCESSCTLCARD_FINGERPRINT_PACKET_EX extends Structure { + public int nLength; // 单个数据包长度,单位字节 + public int nCount; // 包个数 + public Pointer pPacketData; // 所有指纹数据包, 用户申请内存,大小至少为nLength * nCount + public int nPacketLen; // pPacketData 指向内存区的大小,用户填写 + public int nRealPacketLen; // 返回给用户实际指纹总大小 + public byte[] byReverseed = new byte[1024]; //保留大小 + } + + + // 查询记录能力集能力集 + public static class CFG_CAP_RECORDFINDER_INFO extends Structure { + public int nMaxPageSize;//最大分页条数 + } + + // 时间同步服务器配置 + public static class CFG_NTP_INFO extends Structure { + public int bEnable; // 使能开关,BOOL类型 + public byte[] szAddress = new byte[MAX_ADDRESS_LEN]; // IP地址或网络名 + public int nPort; // 端口号 + public int nUpdatePeriod; // 更新周期,单位为分钟 + public int emTimeZoneType; // 时区, 参考 EM_CFG_TIME_ZONE_TYPE + public byte[] szTimeZoneDesc = new byte[MAX_NAME_LEN]; // 时区描述 + public int nSandbyServerNum; // 实际备用NTP服务器个数 + public CFG_NTP_SERVER[] stuStandbyServer = (CFG_NTP_SERVER[]) new CFG_NTP_SERVER().toArray(MAX_NTP_SERVER); // 备选NTP服务器地址 + } + + // NTP服务器 + public static class CFG_NTP_SERVER extends Structure { + public int bEnable; // BOOL类型 + public byte[] szAddress = new byte[MAX_ADDRESS_LEN]; // IP地址或网络名 + public int nPort; // 端口号 + } + + // 时区定义(NTP) + public static class EM_CFG_TIME_ZONE_TYPE extends Structure { + public static final int EM_CFG_TIME_ZONE_0 = 0; // {0, 0*3600,"GMT+00:00"} + public static final int EM_CFG_TIME_ZONE_1 = 1; // {1, 1*3600,"GMT+01:00"} + public static final int EM_CFG_TIME_ZONE_2 = 2; // {2, 2*3600,"GMT+02:00"} + public static final int EM_CFG_TIME_ZONE_3 = 3; // {3, 3*3600,"GMT+03:00"} + public static final int EM_CFG_TIME_ZONE_4 = 4; // {4, 3*3600+1800,"GMT+03:30"} + public static final int EM_CFG_TIME_ZONE_5 = 5; // {5, 4*3600,"GMT+04:00"} + public static final int EM_CFG_TIME_ZONE_6 = 6; // {6, 4*3600+1800,"GMT+04:30"} + public static final int EM_CFG_TIME_ZONE_7 = 7; // {7, 5*3600,"GMT+05:00"} + public static final int EM_CFG_TIME_ZONE_8 = 8; // {8, 5*3600+1800,"GMT+05:30"} + public static final int EM_CFG_TIME_ZONE_9 = 9; // {9, 5*3600+1800+900,"GMT+05:45"} + public static final int EM_CFG_TIME_ZONE_10 = 10; // {10, 6*3600,"GMT+06:00"} + public static final int EM_CFG_TIME_ZONE_11 = 11; // {11, 6*3600+1800,"GMT+06:30"} + public static final int EM_CFG_TIME_ZONE_12 = 12; // {12, 7*3600,"GMT+07:00"} + public static final int EM_CFG_TIME_ZONE_13 = 13; // {13, 8*3600,"GMT+08:00"} + public static final int EM_CFG_TIME_ZONE_14 = 14; // {14, 9*3600,"GMT+09:00"} + public static final int EM_CFG_TIME_ZONE_15 = 15; // {15, 9*3600+1800,"GMT+09:30"} + public static final int EM_CFG_TIME_ZONE_16 = 16; // {16, 10*3600,"GMT+10:00"} + public static final int EM_CFG_TIME_ZONE_17 = 17; // {17, 11*3600,"GMT+11:00"} + public static final int EM_CFG_TIME_ZONE_18 = 18; // {18, 12*3600,"GMT+12:00"} + public static final int EM_CFG_TIME_ZONE_19 = 19; // {19, 13*3600,"GMT+13:00"} + public static final int EM_CFG_TIME_ZONE_20 = 20; // {20, -1*3600,"GMT-01:00"} + public static final int EM_CFG_TIME_ZONE_21 = 21; // {21, -2*3600,"GMT-02:00"} + public static final int EM_CFG_TIME_ZONE_22 = 22; // {22, -3*3600,"GMT-03:00"} + public static final int EM_CFG_TIME_ZONE_23 = 23; // {23, -3*3600-1800,"GMT-03:30"} + public static final int EM_CFG_TIME_ZONE_24 = 24; // {24, -4*3600,"GMT-04:00"} + public static final int EM_CFG_TIME_ZONE_25 = 25; // {25, -5*3600,"GMT-05:00"} + public static final int EM_CFG_TIME_ZONE_26 = 26; // {26, -6*3600,"GMT-06:00"} + public static final int EM_CFG_TIME_ZONE_27 = 27; // {27, -7*3600,"GMT-07:00"} + public static final int EM_CFG_TIME_ZONE_28 = 28; // {28, -8*3600,"GMT-08:00"} + public static final int EM_CFG_TIME_ZONE_29 = 29; // {29, -9*3600,"GMT-09:00"} + public static final int EM_CFG_TIME_ZONE_30 = 30; // {30, -10*3600,"GMT-10:00"} + public static final int EM_CFG_TIME_ZONE_31 = 31; // {31, -11*3600,"GMT-11:00"} + public static final int EM_CFG_TIME_ZONE_32 = 32; // {32, -12*3600,"GMT-12:00"} + } + + // 录像信息对应 CLIENT_FindFileEx 接口的 NET_FILE_QUERY_FILE 命令 查询条件 + // 目前支持通过路径查询 + public static class NET_IN_MEDIA_QUERY_FILE extends Structure { + public int dwSize; // 结构体大小 + public String szDirs; // 工作目录列表,一次可查询多个目录,为空表示查询所有目录。目录之间以分号分隔,如“/mnt/dvr/sda0;/mnt/dvr/sda1”,szDirs==null 或"" 表示查询所有 + public int nMediaType; // 文件类型,0:查询任意类型,1:查询jpg图片,2:查询dav + public int nChannelID; // 通道号从0开始,-1表示查询所有通道 + public NET_TIME stuStartTime; // 开始时间 + public NET_TIME stuEndTime; // 结束时间 + public int[] nEventLists = new int[MAX_IVS_EVENT_NUM]; // 事件类型列表,参见智能分析事件类型 + public int nEventCount; // 事件总数 + public byte byVideoStream; // 视频码流 0-未知 1-主码流 2-辅码流1 3-辅码流2 4-辅码流3 + public byte[] bReserved = new byte[3]; // 字节对齐 + public int[] emFalgLists = new int[EM_RECORD_SNAP_FLAG_TYPE.FLAG_TYPE_MAX]; // 录像或抓图文件标志, 不设置标志表示查询所有文件, 参考 EM_RECORD_SNAP_FLAG_TYPE + public int nFalgCount; // 标志总数 + public NET_RECORD_CARD_INFO stuCardInfo; // 卡号录像信息, emFalgLists包含卡号录像时有效 + public int nUserCount; // 用户名有效个数 + public byte[] szUserName = new byte[MAX_QUERY_USER_NUM * NET_NEW_USER_NAME_LENGTH]; // 用户名 + public int emResultOrder; // 查询结果排序方式, 参考 EM_RESULT_ORDER_TYPE + public int bTime; // 是否按时间查询 + + public NET_IN_MEDIA_QUERY_FILE() { + this.dwSize = this.size(); + } + } + + // 录像信息对应 CLIENT_FindFileEx 接口的 NET_FILE_QUERY_FILE 命令 查询结果 + public static class NET_OUT_MEDIA_QUERY_FILE extends Structure { + public int dwSize; // 结构体大小 + public int nChannelID; // 通道号从0开始,-1表示查询所有通道 + public NET_TIME stuStartTime; // 开始时间 + public NET_TIME stuEndTime; // 结束时间 + public int nFileSize; // 文件长度 + public byte byFileType; // 文件类型 1:jpg图片, 2: dav + public byte byDriveNo; // 该字段已废弃,后续开发使用 nDriveNo成员 + public byte byPartition; // 分区号 + public byte byVideoStream; // 视频码流 0-未知 1-主码流 2-辅码流1 3-辅码流 4-辅码流 + public int nCluster; // 簇号 + public byte[] szFilePath = new byte[MAX_PATH]; // 文件路径 + public int[] nEventLists = new int[MAX_IVS_EVENT_NUM]; // 关联的事件列表,事件类型列表,参见智能分析事件类型 + public int nEventCount; //事件总数 + public int[] emFalgLists = new int[EM_RECORD_SNAP_FLAG_TYPE.FLAG_TYPE_MAX]; // 录像或抓图文件标志, 参考 EM_RECORD_SNAP_FLAG_TYPE + public int nFalgCount; //标志总数 + public int nDriveNo; // 磁盘号 + + //频浓缩文件相关信息 + public byte[] szSynopsisPicPath = new byte[NET_COMMON_STRING_512]; // 预处理文件提取到的快照 文件路径 + // 支持HTTP URL表示:"http://www.dahuate.com/1.jpg" + // 支持FTP URL表示: "ftp://ftp.dahuate.com/1.jpg" + // 支持服务器本地路径 + // a)"C:/pic/1.jpg" + // b)"/mnt//2010/8/11/dav/15:40:50.jpg" + public int nSynopsisMaxTime; // 支持浓缩视频最大时间长度,单位 秒 + public int nSynopsisMinTime; // 支持浓缩视频最小时间长度,单位 秒 + + //文件摘要信息 + public int nFileSummaryNum; // 文件摘要信息数 + public NET_FILE_SUMMARY_INFO[] stFileSummaryInfo = (NET_FILE_SUMMARY_INFO[]) new NET_FILE_SUMMARY_INFO().toArray(MAX_FILE_SUMMARY_NUM); // 文件摘要信息 + public long nFileSizeEx; // 文件长度扩展,支持文件长度大于4G,单位字节 + + public NET_OUT_MEDIA_QUERY_FILE() { + this.dwSize = this.size(); + } + } + + // 卡号录像信息 + public static class NET_RECORD_CARD_INFO extends Structure { + public int dwSize; + public int nType; // 类型, 0-Card, 1-Field + public byte[] szCardNo = new byte[NET_MAX_CARD_INFO_LEN]; // 卡号 + public int emTradeType; // 交易类型, 参考 EM_ATM_TRADE_TYPE + public byte[] szAmount = new byte[NET_COMMON_STRING_64]; // 交易金额, 空字符串表示不限金额 + public int nError; // 错误码, 0-所有错误, 1-吞钞, 2-吞卡 + public int nFieldCount; // 域数量, 按域查询时有效 + public byte[] szFields = new byte[MAX_CARD_RECORD_FIELD_NUM * NET_COMMON_STRING_256]; // 域信息, 按域查询时有效 + public byte[] szChange = new byte[NET_COMMON_STRING_32]; // 零钱 + + public NET_RECORD_CARD_INFO() { + this.dwSize = this.size(); + } + } + + // 文件摘要信息 + public static class NET_FILE_SUMMARY_INFO extends Structure { + public byte[] szKey = new byte[NET_COMMON_STRING_64]; // 摘要名称 + public byte[] szValue = new byte[NET_COMMON_STRING_512]; // 摘要内容 + public byte[] bReserved = new byte[256]; // 保留字段 + } + + // 录像或抓图文件标志 + public static class EM_RECORD_SNAP_FLAG_TYPE extends Structure { + public static final int FLAG_TYPE_TIMING = 0; //定时文件 + public static final int FLAG_TYPE_MANUAL = 1; //手动文件 + public static final int FLAG_TYPE_MARKED = 2; //重要文件 + public static final int FLAG_TYPE_EVENT = 3; //事件文件 + public static final int FLAG_TYPE_MOSAIC = 4; //合成图片 + public static final int FLAG_TYPE_CUTOUT = 5; //抠图图片 + public static final int FLAG_TYPE_LEAVE_WORD = 6; //留言文件 + public static final int FLAG_TYPE_TALKBACK_LOCAL_SIDE = 7; //对讲本地方文件 + public static final int FLAG_TYPE_TALKBACK_REMOTE_SIDE = 8; //对讲远程方文件 + public static final int FLAG_TYPE_SYNOPSIS_VIDEO = 9; //浓缩视频 + public static final int FLAG_TYPE_ORIGINAL_VIDEO = 10; //原始视频 + public static final int FLAG_TYPE_PRE_ORIGINAL_VIDEO = 11; //已经预处理的原始视频 + public static final int FLAG_TYPE_BLACK_PLATE = 12; //黑名单图片 + public static final int FLAG_TYPE_ORIGINAL_PIC = 13; //原始图片 + public static final int FLAG_TYPE_CARD = 14; //卡号录像 + public static final int FLAG_TYPE_MAX = 128; + } + + // 交易类型 + public static class EM_ATM_TRADE_TYPE extends Structure { + public static final int ATM_TRADE_ALL = 0; // 所有类型 + public static final int ATM_TRADE_ENQUIRY = 1; // 查询 + public static final int ATM_TRADE_WITHDRAW = 2; // 取款 + public static final int ATM_TRADE_MODIFY_PASSWORD = 3; // 修改密码 + public static final int ATM_TRADE_TRANSFER = 4; // 转账 + public static final int ATM_TRADE_DEPOSIT = 5; // 存款 + public static final int ATM_TRADE_CARDLESS_ENQUIRY = 6; // 无卡查询 + public static final int ATM_TRADE_CARDLESS_DEPOSIT = 7; // 无卡存款 + public static final int ATM_TRADE_OTHER = 8; // 其他 + } + + // 查询结果排序方式 + public static class EM_RESULT_ORDER_TYPE extends Structure { + public static final int EM_RESULT_ORDER_UNKNOWN = 0; // 未知 + public static final int EM_RESULT_ORDER_ASCENT_BYTIME = 1; // 按时间升序排序 + public static final int EM_RESULT_ORDER_DESCENT_BYTIME = 2; // 按时间降序排序 + } + + // CLIENT_ControlDevice 接口的 CTRLTYPE_CTRL_START_VIDEO_ANALYSE 命令参数, 开始视频智能分析 + public static class NET_CTRL_START_VIDEO_ANALYSE extends Structure { + public int dwSize; + public int nChannelId; // 通道号 + + public NET_CTRL_START_VIDEO_ANALYSE() { + this.dwSize = this.size(); + } + } + + // CLIENT_ControlDevice 接口的 CTRLTYPE_CTRL_STOP_VIDEO_ANALYSE 命令参数, 停止视频智能分析 + public static class NET_CTRL_STOP_VIDEO_ANALYSE extends Structure { + public int dwSize; + public int nChannelId; // 通道号 + + public NET_CTRL_STOP_VIDEO_ANALYSE() { + this.dwSize = this.size(); + } + } + + // CLIENT_AttachVideoAnalyseState 接口输入参数 + public static class NET_IN_ATTACH_VIDEOANALYSE_STATE extends Structure { + public int dwSize; + public int nChannleId; // 通道号 + public StdCallCallback cbVideoAnalyseState; // 视频分析状态回调函数,fVideoAnalyseState 回调 + public Pointer dwUser; // 用户信息 + + public NET_IN_ATTACH_VIDEOANALYSE_STATE() { + this.dwSize = this.size(); + } + } + + // CLIENT_AttachVideoAnalyseState 接口输出参数 + public static class NET_OUT_ATTACH_VIDEOANALYSE_STATE extends Structure { + public int dwSize; + public LLong lAttachHandle; // 分析进度句柄,唯一标识某一通道的分析进度 + + public NET_OUT_ATTACH_VIDEOANALYSE_STATE() { + this.dwSize = this.size(); + } + } + + public static class NET_VIDEOANALYSE_STATE extends Structure { + public int dwSize; + public int dwProgress; // 分析进度,0-100 + public byte[] szState = new byte[NET_COMMON_STRING_64]; // 通道状态,Running":运行,"Stop":停止,"NoStart":未启动,"Failed":失败,"Successed":成功 + public byte[] szFailedCode = new byte[NET_COMMON_STRING_64]; // 错误码 + + public NET_VIDEOANALYSE_STATE() { + this.dwSize = this.size(); + } + } + + // 热成像火情报警信息上报事件, 对应事件 NET_ALARM_FIREWARNING_INFO + public static class ALARM_FIREWARNING_INFO_DETAIL extends Structure { + public int nChannel; // 对应视频通道号 + public int nWarningInfoCount; // 报警信息个数 + public NET_FIREWARNING_INFO[] stuFireWarningInfo + = new NET_FIREWARNING_INFO[MAX_FIREWARNING_INFO_NUM]; // 具体报警信息 + public byte[] reserved = new byte[256]; + + public ALARM_FIREWARNING_INFO_DETAIL() { + for (int i = 0; i < stuFireWarningInfo.length; i++) { + stuFireWarningInfo[i] = new NET_FIREWARNING_INFO(); + } + } + } + + //热成像火情报警信息 + public static class NET_FIREWARNING_INFO extends Structure { + public int nPresetId; // 预置点编号 从测温规则配置 CFG_RADIOMETRY_RULE_INFO 中选择 + public NET_RECT stuBoundingBox; // 着火点矩形框 + public int nTemperatureUnit; // 温度单位(当前配置的温度单位),见 NET_TEMPERATURE_UNIT + public float fTemperature; // 最高点温度值 同帧检测和差分检测提供 + public int nDistance; // 着火点距离,单位米 0表示无效 + public GPS_POINT stuGpsPoint; // 着火点经纬度 + public PTZ_POSITION_UNIT stuPTZPosition; // 云台运行信息 + public float fAltitude; // 高度(单位:米) + public byte[] reserved = new byte[208]; + } + + // 着火点经纬度 + public static class GPS_POINT extends Structure { + public int dwLongitude; // 经度(单位是百万分之度,范围0-360度)如东经120.178274度表示为300178274 + public int dwLatidude; // 纬度(单位是百万分之度,范围0-180度)如北纬30.183382度表示为120183382 + // 经纬度的具体转换方式可以参考结构体 NET_WIFI_GPS_INFO 中的注释 + } + + //云台控制坐标单元 + public static class PTZ_POSITION_UNIT extends Structure { + public int nPositionX; // 云台水平方向角度,归一化到-1~1 + public int nPositionY; // 云台垂直方向角度,归一化到-1~1 + public int nZoom; // 云台光圈放大倍率,归一化到 0~1 + public byte[] szReserve = new byte[32]; // 预留32字节 + } + + // 搜索到的地点信息 + public static class NET_WIFI_GPS_INFO extends Structure { + public int emPositioningResult; // 定位结果, 参考 NET_GPS_POSITION_RESULT + public int nLongitude; // 经度(单位是百万分之一度) + // 西经:0 - 180000000 实际值应为: 180*1000000 – dwLongitude + // 东经:180000000 - 360000000 实际值应为: dwLongitude – 180*1000000 + // 如: 300168866应为(300168866 - 180*1000000)/1000000 即东经120.168866度 + public int nLatidude; // 纬度(单位是百万分之一度) + // 南纬:0 - 90000000 实际值应为: 90*1000000 – dwLatidude + // 北纬:90000000 – 180000000 实际值应为: dwLatidude – 90*1000000 + // 如: 120186268应为 (120186268 - 90*1000000)/1000000 即北纬30. 186268度 + public int nSpeed; // 速度, 单位千分之一km/H + public byte[] reserved = new byte[112]; // 保留字段 + } + + // 定位结果 + public static class NET_GPS_POSITION_RESULT extends Structure { + public static final int NET_GPS_POSITION_RESULT_UNKNOWN = 0; // 未知 + public static final int NET_GPS_POSITION_RESULT_FAILED = 1; // 有GPS数据,但定位失败,此时定位数据无意义 + public static final int NET_GPS_POSITION_RESULT_SUCCEED = 2; // 有GPS数据,且定位成功,此时定位数据有意义 + } + + // 热成像增益模式 + public static class CFG_THERMO_GAIN_MODE extends Structure { + public static final int CFG_THERMO_GAIN_MODE_UNKNOWN = 0; + public static final int CFG_THERMO_GAIN_MODE_HIGHTEMP = 1; // 高温 + public static final int CFG_THERMO_GAIN_MODE_LOWTEMP = 2; // 低温 + public static final int CFG_THERMO_GAIN_MODE_AUTO = 3; // 自动 + } + + // 热成像自动增益设置 + public static class CFG_THERMO_AUTO_GAIN extends Structure { + public int nLowToHigh; // 温度超过此设定值时,自动切换到高温模式 + public int nLHROI; // 由低温切换到高温时的ROI 百分比0~100 + public int nHighToLow; // 温度下降到此设定值时,自动切换到低温模式 + public int nHLROI; // 由高温切换到低温时的ROI 百分比0~100 + } + + // 热成像配置,单个模式的配置 + public static class CFG_THERMOGRAPHY_OPTION extends Structure { + public int nEZoom; // 倍数 + public int nThermographyGamma; // 伽马值 + public int nColorization; // 伪彩色,见 NET_THERMO_COLORIZATION + public int nSmartOptimizer; // 智能场景优化指数 0 ~100, 具体取值范围由能力决定 + public int bOptimizedRegion; // 是否开启感兴趣区域,只有感兴趣区域内的信息会被纳入统计用来做自动亮度调整(AGC) + public int nOptimizedROIType; // 感兴趣区域类型,见 NET_THERMO_ROI + public int nCustomRegion; // 自定义区域个数 + public CFG_RECT[] stCustomRegions = (CFG_RECT[]) new CFG_RECT().toArray(64); // 自定义区域,仅在 nOptimizedROIType 为 NET_THERMO_ROI_CUSTOM 时有效 + public byte[] Reserved = new byte[256]; // 此保留字段确保此结构布局与 NET_THERMO_GRAPHY_INFO 相同 + public int nAgc; // 自动增益控制 [0-255]具体取值范围由能力决定 + public int nAgcMaxGain; // 最大自动增益 [0-255]具体取值范围由能力决定 + public int nAgcPlateau; // 增益均衡 具体取值范围由能力决定 + public int nGainMode; // 增益模式,参见 CFG_THERMO_GAIN_MODE + public CFG_THERMO_AUTO_GAIN stAutoGain; // 自动增益设置,只在增益模式为 CFG_THERMO_GAIN_MODE_AUTO 有效 + } + + // 热成像配置 + public static class CFG_THERMOGRAPHY_INFO extends Structure { + public int nModeCount; // 模式个数,目前只有一个 + public CFG_THERMOGRAPHY_OPTION[] stOptions = new CFG_THERMOGRAPHY_OPTION[16]; // 对应不同模式的配置 + + public CFG_THERMOGRAPHY_INFO() { + for (int i = 0; i < stOptions.length; i++) { + stOptions[i] = new CFG_THERMOGRAPHY_OPTION(); + } + } + } + + // 温度单位 + public static class NET_TEMPERATURE_UNIT extends Structure { + public static final int NET_TEMPERATURE_UNIT_UNKNOWN = 0; + public static final int NET_TEMPERATURE_UNIT_CENTIGRADE = 1; // 摄氏度 + public static final int NET_TEMPERATURE_UNIT_FAHRENHEIT = 2; // 华氏度 + } + + // 测温规则配置结构, 对应命令 CFG_CMD_THERMOMETRY_RULE + public static class CFG_RADIOMETRY_RULE_INFO extends Structure { + public int nCount; // 规则个数 + public CFG_RADIOMETRY_RULE[] stRule = new CFG_RADIOMETRY_RULE[512]; // 测温规则 + + public CFG_RADIOMETRY_RULE_INFO() { + for (int i = 0; i < stRule.length; i++) { + stRule[i] = new CFG_RADIOMETRY_RULE(); + } + } + } + + // 区域测温的子类型 + public static class EM_CFG_AREA_SUBTYPE extends Structure { + public static final int EM_CFG_AREA_SUBTYPE_UNKNOWN = 0; + public static final int EM_CFG_AREA_SUBTYPE_RECT = 1; // 矩形 + public static final int EM_CFG_AREA_SUBTYPE_ELLIPSE = 2; // 椭圆 + public static final int EM_CFG_AREA_SUBTYPE_POLYGON = 3; // 多边形 + } + + // 测温规则 + public static class CFG_RADIOMETRY_RULE extends Structure { + public int bEnable; // 测温使能, BOOL类型 + public int nPresetId; // 预置点编号 + public int nRuleId; // 规则编号 + public byte[] szName = new byte[128]; // 自定义名称 + public int nMeterType; // 测温模式的类型,见 NET_RADIOMETRY_METERTYPE + public CFG_POLYGON[] stCoordinates = new CFG_POLYGON[64]; // 测温点坐标 使用相对坐标体系,取值均为0~8191 + public int nCoordinateCnt; // 测温点坐标实际个数 + public int nSamplePeriod; // 温度采样周期 单位 : 秒 + public CFG_RADIOMETRY_ALARMSETTING[] stAlarmSetting = new CFG_RADIOMETRY_ALARMSETTING[64]; // 测温点报警设置 + public int nAlarmSettingCnt; // 测温点报警设置实际个数 + public CFG_RADIOMETRY_LOCALPARAM stLocalParameters; // 本地参数配置 + public int emAreaSubType; // 区域测温的子类型, 见EM_CFG_AREA_SUBTYPE + + public CFG_RADIOMETRY_RULE() { + for (int i = 0; i < stCoordinates.length; i++) { + stCoordinates[i] = new CFG_POLYGON(); + } + + for (int i = 0; i < stAlarmSetting.length; i++) { + stAlarmSetting[i] = new CFG_RADIOMETRY_ALARMSETTING(); + } + } + } + + // 温度统计 + public static class CFG_TEMP_STATISTICS extends Structure { + public int bEnable; // 是否开启温度统计 + public byte[] szName = new byte[128]; // 测温项的名字 + public int nMeterType; // 测温模式的类型,见 NET_RADIOMETRY_METERTYPE + public int nPeriod; // 保存温度数据周期 + } + + // 温度统计配置结构 + public static class CFG_TEMP_STATISTICS_INFO extends Structure { + public int nCount; // 个数 + public CFG_TEMP_STATISTICS[] stStatistics = new CFG_TEMP_STATISTICS[64]; // 温度统计 + + public CFG_TEMP_STATISTICS_INFO() { + for (int i = 0; i < stStatistics.length; i++) { + stStatistics[i] = new CFG_TEMP_STATISTICS(); + } + } + } + + // 温度单位 + public static class CFG_TEMPERATURE_UNIT extends Structure { + public static final int TEMPERATURE_UNIT_UNKNOWN = 0; + public static final int TEMPERATURE_UNIT_CENTIGRADE = 1; // 摄氏度 + public static final int TEMPERATURE_UNIT_FAHRENHEIT = 2; // 华氏度 + } + + // 热成像测温全局配置 + public static class CFG_THERMOMETRY_INFO extends Structure { + public int nRelativeHumidity; // 相对湿度 + public float fAtmosphericTemperature; // 大气温度 + public float fObjectEmissivity; // 物体辐射系数 + public int nObjectDistance; // 物体距离 + public float fReflectedTemperature; // 物体反射温度 + public int nTemperatureUnit; // 温度单位,见 TEMPERATURE_UNIT + public int bIsothermEnable; // 色标功能使能 + public int nMinLimitTemp; // 等温线下限温度值 + public int nMediumTemp; // 等温线中位温度值 + public int nMaxLimitTemp; // 等温线上限温度值 + public int nSaturationTemp; // 等温线饱和温度值 + public CFG_RECT stIsothermRect; // 色温条矩形区域(OSD 位置),使用相对坐标体系,取值均为0-8191 + public int bColorBarDisplay; // 是否显示色标条(OSD 叠加) + public int bHotSpotFollow; // 是否开启热点探测追踪使能 + public int bTemperEnable; // 测温开关 + public CFG_RGBA stHighCTMakerColor; // 高色温标注颜色 + public CFG_RGBA stLowCTMakerColor; // 低色温标注颜色 + } + + // 测温点报警设置 + public static class CFG_RADIOMETRY_ALARMSETTING extends Structure { + public int nId; // 报警唯一编号 报警编号统一编码 + public int bEnable; // 是否开启该点报警, BOOL类型 + public int nResultType; // 测温报警结果类型,见 CFG_STATISTIC_TYPE,可取值: + // 点测温:具体值, + // 线测温:最大, 最小, 平均 + // 区域测温:最大, 最小, 平均, 标准, 中间, ISO + public int nAlarmCondition; // 报警条件,见 CFG_COMPARE_RESULT + public float fThreshold; // 报警阈值温度 浮点数 + public float fHysteresis; // 温度误差,浮点数,比如0.1 表示正负误差在0.1范围内 + public int nDuration; // 阈值温度持续时间 单位:秒 + } + + // 测温规则本地参数配置 + public static class CFG_RADIOMETRY_LOCALPARAM extends Structure { + public int bEnable; // 是否启用本地配置, BOOL类型 + public float fObjectEmissivity; // 目标辐射系数 浮点数 0~1 + public int nObjectDistance; // 目标距离 + public int nRefalectedTemp; // 目标反射温度 + } + + // 统计量类型 + public static class CFG_STATISTIC_TYPE extends Structure { + public static final int CFG_STATISTIC_TYPE_UNKNOWN = 0; + public static final int CFG_STATISTIC_TYPE_VAL = 1; // 具体值 + public static final int CFG_STATISTIC_TYPE_MAX = 2; // 最大 + public static final int CFG_STATISTIC_TYPE_MIN = 3; // 最小 + public static final int CFG_STATISTIC_TYPE_AVR = 4; // 平均 + public static final int CFG_STATISTIC_TYPE_STD = 5; // 标准 + public static final int CFG_STATISTIC_TYPE_MID = 6; // 中间 + public static final int CFG_STATISTIC_TYPE_ISO = 7; // ISO + } + + // 比较运算结果 + public static class CFG_COMPARE_RESULT extends Structure { + public static final int CFG_COMPARE_RESULT_UNKNOWN = 0; + public static final int CFG_COMPARE_RESULT_BELOW = 1; // 低于 + public static final int CFG_COMPARE_RESULT_MATCH = 2; // 匹配 + public static final int CFG_COMPARE_RESULT_ABOVE = 3; // 高于 + } + + // 记录集新增操作(insert)参数 + public static class NET_CTRL_RECORDSET_INSERT_PARAM extends Structure { + public int dwSize; + public NET_CTRL_RECORDSET_INSERT_IN stuCtrlRecordSetInfo; // 记录集信息(用户填写) + public NET_CTRL_RECORDSET_INSERT_OUT stuCtrlRecordSetResult; // 记录集信息(设备返回) + + public NET_CTRL_RECORDSET_INSERT_PARAM() { + this.dwSize = this.size(); + } + } + + // 记录集新增操作(insert)输入参数 + public static class NET_CTRL_RECORDSET_INSERT_IN extends Structure { + public int dwSize; + public int emType; // 记录集信息类型, 取值参考 EM_NET_RECORD_TYPE + public Pointer pBuf; // 记录集信息缓存,详见EM_NET_RECORD_TYPE注释,由用户申请内存. + public int nBufLen; // 记录集信息缓存大小,大小参照记录集信息类型对应的结构体 + + public NET_CTRL_RECORDSET_INSERT_IN() { + this.dwSize = this.size(); + } + } + + // 记录集新增操作(insert)输出参数 + public static class NET_CTRL_RECORDSET_INSERT_OUT extends Structure { + public int dwSize; + public int nRecNo; // 记录编号(新增insert时设备返回) + + public NET_CTRL_RECORDSET_INSERT_OUT() { + this.dwSize = this.size(); + } + } + + // 门禁密码记录查询条件 + public static class FIND_RECORD_ACCESSCTLPWD_CONDITION extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + + public FIND_RECORD_ACCESSCTLPWD_CONDITION() { + this.dwSize = this.size(); + } + } + + // 门禁密码记录集信息 + public static class NET_RECORDSET_ACCESS_CTL_PWD extends Structure { + public int dwSize; + public int nRecNo; // 记录集编号,只读 + public NET_TIME stuCreateTime; // 创建时间 + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID, 设备暂不支持 + public byte[] szDoorOpenPwd = new byte[NET_MAX_CARDPWD_LEN]; // 开门密码 + public byte[] szAlarmPwd = new byte[NET_MAX_CARDPWD_LEN]; // 报警密码 + public int nDoorNum; // 有效的的门数目 + public int[] sznDoors = new int[NET_MAX_DOOR_NUM]; // 有权限的门序号,即 CFG_CMD_ACCESS_EVENT 配置CFG_ACCESS_EVENT_INFO的数组下标 + public byte[] szVTOPosition = new byte[NET_COMMON_STRING_64]; // 门口机关联位置 + public int nTimeSectionNum; // 开门时间段个数 + public int[] nTimeSectionIndex = new int[NET_MAX_TIMESECTION_NUM]; // 开门时间段索引,是个数组,每个元素与sznDoors中的门对应 + public int bNewDoor; // BOOL类型, 是否启动新开门授权字段,TRUE表示使用 nNewDoorNum 和 nNewDoors 字段下发开门权限 + public int nNewDoorNum; // 有效的门数目; + public int[] nNewDoors = new int[MAX_ACCESSDOOR_NUM]; // 有权限的门序号,即 CFG_CMD_ACCESS_EVENT 配置的数组下标 + public int nNewTimeSectionNum; // 有效的的开门时间段数目 + public int[] nNewTimeSectionNo = new int[MAX_ACCESSDOOR_NUM]; // 开门时间段索引,即 CFG_ACCESS_TIMESCHEDULE_INFO 的数组下标 + public NET_TIME stuValidStartTime; // 开始有效期 + public NET_TIME stuValidEndTime; // 结束有效期 + public int nValidCounts; // 有效次数 + + public NET_RECORDSET_ACCESS_CTL_PWD() { + this.dwSize = this.size(); + } + } + + // 开门二维码记录集信息 + public static class NET_RECORD_ACCESSQRCODE_INFO extends Structure { + public int dwSize; // 结构体大小 + public int nRecNo; // 记录集编号,只读 + public byte[] szQRCode = new byte[NET_MAX_QRCODE_LEN]; // 二维码 + public int nLeftTimes; // 剩余的有效次数 + public NET_TIME stuStartTime; // 有效期开始时间 + public NET_TIME stuEndTime; // 有效期截止时间 + public byte[] szRoomNumber = new byte[16]; // 房间号 + + public NET_RECORD_ACCESSQRCODE_INFO() { + this.dwSize = this.size(); + } + } + + // 查询盒子工作状态, 对应命令 NET_DEVSTATE_GET_WORK_STATE + public static class NET_QUERY_WORK_STATE extends Structure { + public int dwSize; // 保留字段 + public NET_WORKSTATE stuWorkState; // 运行状态 + + public NET_QUERY_WORK_STATE() { + this.dwSize = this.size(); + } + } + + // 设备工作状态 + public static class NET_WORKSTATE extends Structure { + public int bOnline; // 设备是否在线,BOOL类型 + public byte[] szFirmwareVersion = new byte[NET_COMMON_STRING_128]; // 固件版本号 + public float fTemperature; // 温度值, 单位摄氏度 + public float fPowerDissipation; // 功耗, 单位W + public int nUtilizationOfCPU; // CPU 使用率 + public int nStorageNum; // 存储设备个数 + public NET_STORAGE_INFO[] stuStorages = new NET_STORAGE_INFO[MAX_STORAGE_NUM]; // 存储设备信息 + public int nUpTimeLast; // 上次上电时间, 单位: 秒 + public int nUpTimeTotal; // 总共上电时间, 单位: 秒 + public double dbMemInfoTotal; // 总内存大小, 单位: 字节 + public double dbMemInfoFree; // 剩余内存大小, 单位: 字节 + public byte[] byReserved1 = new byte[4]; // 字节对齐,非保留字节 + public byte[] szDevType = new byte[32]; // 设备型号 + public NET_RESOURCE_STATE stuResourceStat; // 网络资源 + public byte[] byReserved = new byte[8]; // 保留字节 + + public NET_WORKSTATE() { + for (int i = 0; i < MAX_STORAGE_NUM; i++) { + stuStorages[i] = new NET_STORAGE_INFO(); + } + } + } + + // 存储设备信息 + public static class NET_STORAGE_INFO extends Structure { + public int emState; // 存储设备状态, ENUM_STORAGE_STATE + public int nPartitonNum; // 分区个数 + public NET_PARTITION_INFO[] stuPartions = new NET_PARTITION_INFO[MAX_PARTITION_NUM]; // 分区信息 + public byte[] byReserved = new byte[128]; // 保留字段 + + public NET_STORAGE_INFO() { + for (int i = 0; i < MAX_PARTITION_NUM; i++) { + stuPartions[i] = new NET_PARTITION_INFO(); + } + } + } + + // 网络资源 + public static class NET_RESOURCE_STATE extends Structure { + public int nIPChanneIn; // IP通道接入速度, 单位: kbps + public int nNetRemain; // 网络接收剩余能力, 单位: kbps + public int nNetCapability; // 网络接收总能力, 单位: kbps + public int nRemotePreview; // 远程预览能力, 单位: kbps + public int nRmtPlayDownload; // 远程回放及下载能力, 单位: kbps + public int nRemoteSendRemain; // 远程发送剩余能力, 单位: kbps + public int nRemoteSendCapability; // 远程发送总能力, 单位: kbps + public byte[] byReserved = new byte[32]; // 保留字节 + } + + // 存储设备分区信息 + public static class NET_PARTITION_INFO extends Structure { + public double dbTotalBytes; // 分区总空间 + public double dbUsedBytes; // 分区使用的空间 + public int bError; // 是否异常, BOOL类型 + public byte[] byReserved = new byte[64]; // 保留字段 + } + + // CLIENT_GetSelfCheckInfo 输入参数 + public static class NET_IN_GET_SELTCHECK_INFO extends Structure { + public int dwSize; // 用户使用该结构体时,dwSize 需赋值为 sizeof (NET_IN_GET_SELTCHECK_INFO) + + public NET_IN_GET_SELTCHECK_INFO() { + this.dwSize = this.size(); + } + } + + // 设备自检信息 + public static class NET_SELFCHECK_INFO extends Structure { + public int dwSize; + public int nAlarmIn; // 报警输入通道数 + public int nAlarmOut; // 报警输出通道数 + public NET_TIME stuTime; // 上报时间 + public byte[] szPlateNo = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌 + public byte[] szICCID = new byte[NET_MAX_SIM_LEN]; // SIM卡号,建议使用szICCIDExInfo字段 + public byte byOrientation; // 定位状态,0-未定位,1-定位 + public byte byACCState; // ACC 状态,0-关闭,1-打开 + public byte byConstantElecState; // 常电状态,0-正常连接,1-断开,2-欠压,3-高压 + public byte byAntennaState; // 通信信号状态,0-正常,1-未知故障,2-未接,3-短路 + + // 外部设备状态 + public byte byReportStation; // 报站器状态,0-未接,1-正常,2-异常 + public byte byControlScreen; // 调度屏状态,0-未接,1-正常,2-异常 + public byte byPOS; // POS机状态,0-未接,1-正常,2-异常 + public byte byCoinBox; // 投币箱状态,0-未接,1-正常,2-异常 + + // 能力集 + public int bTimerSnap; // 定时抓图,TRUE-支持,FALSE-不支持, BOOL类型 + public int bElectronEnclosure; // 电子围栏,TRUE-支持,FALSE-不支持, BOOL类型 + public int bTeleUpgrade; // 远程升级,TRUE-支持,FALSE-不支持, BOOL类型 + + public int nHddNum; // 硬盘个数 + public NET_HDD_STATE[] stuHddStates = new NET_HDD_STATE[NET_MAX_DISKNUM]; // 硬盘状态 + + public Pointer pChannleState; // 通道状态,是一个 NET_CHANNLE_STATE 数组, + // CLIENT_AttachMission接口,NET_MISSION_TYPE_SELFCHECK类型,回调函数,内存由SDK申请,SDK释放 + // CLIENT_GetSelfCheckInfo接口,出参,内存由用户申请,用户释放,大小为sizeof(NET_CHANNLE_STATE)*nChannelMax + public int nChannleNum; // 实际上报的通道个数 + public int nChannelMax; // CLIENT_GetSelfCheckInfo接口,pChannleState内存的最大NET_CHANNLE_STATE个数 + public int emConnState; // PAD/DVR连接状态, 参考 NET_PAD_CONNECT_STATE + public int emHomeState; // Home键状态, 参考 NET_HOME_STATE + public byte[] szICCIDExInfo = new byte[NET_COMMON_STRING_256]; // SIM卡号扩展信息,用于字段扩展使用 + public byte by3GState; // 3G/4G状态, 0-未连接,1-连接,2-模块未找到 + public byte byWifiState; // Wifi状态, 0-未连接,1-连接,2-模块未找到 + public byte byGpsState; // Gps状态, 0-未连接,1-连接,2-模块未找到 + public byte byBlackBoxState; // BlackBox状态, 0-未接,1-正常 + public int nCpuUsage; // CPU使用百分比, 单位% + public int nTemperature; // 设备内部温度, 摄氏度 + + public NET_SELFCHECK_INFO() { + this.dwSize = this.size(); + + for (int i = 0; i < NET_MAX_DISKNUM; i++) { + stuHddStates[i] = new NET_HDD_STATE(); + } + } + } + + // 硬盘状态 + public static class NET_HDD_STATE extends Structure { + public int dwSize; + public int nState; // 硬盘状态,0-正常,1-错误 + public double dbTotalSize; // 硬盘总容量,字节为单位 + public NET_PARTITION_STATE[] stuPartitions = new NET_PARTITION_STATE[NET_MAX_STORAGE_PARTITION_NUM]; // 分区状态 + public int nPartitionNum; // 分区数 + + public NET_HDD_STATE() { + this.dwSize = this.size(); + + for (int i = 0; i < NET_MAX_STORAGE_PARTITION_NUM; i++) { + stuPartitions[i] = new NET_PARTITION_STATE(); + } + } + } + + // 分区状态 + public static class NET_PARTITION_STATE extends Structure { + public int dwSize; + public int nStatus; // 分区状态,0-正常,1-错误 + public double dbTotalSize; // 分区总容量,字节为单位 + public double dbRemainSize; // 剩余容量,字节为单位 + + public NET_PARTITION_STATE() { + this.dwSize = this.size(); + } + } + + // 扩展网络配置结构体 + public static class NETDEV_NET_CFG_EX extends Structure { + public int dwSize; + public byte[] sDevName = new byte[NET_MAX_NAME_LEN]; // 设备主机名 + public short wTcpMaxConnectNum; // TCP最大连接数 + public short wTcpPort; // TCP帧听端口 + public short wUdpPort; // UDP侦听端口 + public short wHttpPort; // HTTP端口号 + public short wHttpsPort; // HTTPS端口号 + public short wSslPort; // SSL端口号 + public int nEtherNetNum; // 以太网口数 + public NET_ETHERNET_EX[] stEtherNet = new NET_ETHERNET_EX[NET_MAX_ETHERNET_NUM_EX]; // 以太网口 + public NET_REMOTE_HOST struAlarmHost; // 报警服务器 + public NET_REMOTE_HOST struLogHost; // 日志服务器 + public NET_REMOTE_HOST struSmtpHost; // SMTP服务器 + public NET_REMOTE_HOST struMultiCast; // 多播组 + public NET_REMOTE_HOST struNfs; // NFS服务器 + public NET_REMOTE_HOST struPppoe; // PPPoE服务器 + public byte[] sPppoeIP = new byte[NET_MAX_IPADDR_LEN]; // PPPoE注册返回的IP + public NET_REMOTE_HOST struDdns; // DDNS服务器 + public byte[] sDdnsHostName = new byte[NET_MAX_HOST_NAMELEN]; // DDNS主机名 + public NET_REMOTE_HOST struDns; // DNS服务器 + public NET_MAIL_CFG struMail; // 邮件配置 + public byte[] bReserved = new byte[128]; // 保留字节 + + public NETDEV_NET_CFG_EX() { + this.dwSize = this.size(); + + for (int i = 0; i < NET_MAX_ETHERNET_NUM_EX; i++) { + stEtherNet[i] = new NET_ETHERNET_EX(); + } + } + } + + // 以太网扩展配置 + public static class NET_ETHERNET_EX extends Structure { + public byte[] sDevIPAddr = new byte[NET_MAX_IPADDR_LEN]; // DVR IP 地址 + public byte[] sDevIPMask = new byte[NET_MAX_IPADDR_LEN]; // DVR IP 地址掩码 + public byte[] sGatewayIP = new byte[NET_MAX_IPADDR_LEN]; // 网关地址 + + /* + * 1:10Mbps 全双工 + * 2:10Mbps 自适应 + * 3:10Mbps 半双工 + * 4:100Mbps 全双工 + * 5:100Mbps 自适应 + * 6:100Mbps 半双工 + * 7:自适应 + */ + // 为了扩展将DWORD拆成四个 + public byte dwNetInterface; // NSP + public byte bTranMedia; // 0:有线,1:无线 + public byte bValid; // 按位表示,第一位:1:有效 0:无效;第二位:0:DHCP关闭 1:DHCP使能;第三位:0:不支持DHCP 1:支持DHCP + public byte bDefaultEth; // 是否作为默认的网卡 1:默认 0:非默认 + public byte[] byMACAddr = new byte[NET_MACADDR_LEN]; // MAC地址,只读 + public byte bMode; // 网卡所处模式, 0:绑定模式, 1:负载均衡模式, 2:多址模式, 3:容错模式 + public byte[] bReserved1 = new byte[3]; // 字节对齐 + public byte[] szEthernetName = new byte[NET_MAX_NAME_LEN]; // 网卡名,只读 + public byte[] bReserved = new byte[12]; // 保留字节 + } + + + // 远程主机配置 + public static class NET_REMOTE_HOST extends Structure { + public byte byEnable; // 连接使能 + public byte byAssistant; // 目前只对于PPPoE服务器有用,0:在有线网卡拨号;1:在无线网卡上拨号 + public short wHostPort; // 远程主机 端口 + public byte[] sHostIPAddr = new byte[NET_MAX_IPADDR_LEN]; // 远程主机 IP 地址 + public byte[] sHostUser = new byte[NET_MAX_HOST_NAMELEN]; // 远程主机 用户名 + public byte[] sHostPassword = new byte[NET_MAX_HOST_PSWLEN]; // 远程主机 密码 + } + + // 邮件配置 + public static class NET_MAIL_CFG extends Structure { + public byte[] sMailIPAddr = new byte[NET_MAX_IPADDR_LEN]; // 邮件服务器IP地址 + public short wMailPort; // 邮件服务器端口 + public short wReserved; // 保留 + public byte[] sSenderAddr = new byte[NET_MAX_MAIL_ADDR_LEN]; // 发送地址 + public byte[] sUserName = new byte[NET_MAX_NAME_LEN]; // 用户名 + public byte[] sUserPsw = new byte[NET_MAX_NAME_LEN]; // 用户密码 + public byte[] sDestAddr = new byte[NET_MAX_MAIL_ADDR_LEN]; // 目的地址 + public byte[] sCcAddr = new byte[NET_MAX_MAIL_ADDR_LEN]; // 抄送地址 + public byte[] sBccAddr = new byte[NET_MAX_MAIL_ADDR_LEN]; // 暗抄地址 + public byte[] sSubject = new byte[NET_MAX_MAIL_SUBJECT_LEN]; // 标题 + } + + // 向视频输出口投放视频和图片文件, CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_DELIVERY_FILE 命令参数 + public static class NET_CTRL_DELIVERY_FILE extends Structure { + public int dwSize; // 结构体大小 + public int nPort; // 视频输出口 + public int emPlayMode; // 播放类型, 参考 EM_VIDEO_PLAY_MODE_TYPE + public NET_TIME stuStartPlayTime; // 开始播放的时间 + public NET_TIME stuStopPlayTime; // 结束播放的时间,emPlayMode为 EM_VIDEO_PLAY_MODE_TYPE_REPEAT 时,此值有效 + public int nFileCount; // 投放的文件个数 + public NET_DELIVERY_FILE_INFO[] stuFileInfo = new NET_DELIVERY_FILE_INFO[MAX_DELIVERY_FILE_NUM]; // 投放的文件信息 + + public NET_CTRL_DELIVERY_FILE() { + this.dwSize = this.size(); + } + } + + // 投放文件信息 + public static class NET_DELIVERY_FILE_INFO extends Structure { + public int emFileType; // 文件类型, 参考 EM_DELIVERY_FILE_TYPE + public byte[] szFileURL = new byte[DELIVERY_FILE_URL_LEN]; // 文件的资源地址 + public int nImageSustain; // 每张图片停留多长时间,单位秒 (emFileType为 EM_DELIVERY_FILE_TYPE_IMAGE 时此字段有效) + public byte[] byReserved = new byte[1024]; // 保留字节 + } + + // 视频播放模式 + public static class EM_VIDEO_PLAY_MODE_TYPE extends Structure { + public static final int EM_VIDEO_PLAY_MODE_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_VIDEO_PLAY_MODE_TYPE_ONCE = 1; // 播放一次 + public static final int EM_VIDEO_PLAY_MODE_TYPE_REPEAT = 2; // 循环播放 + } + + // 投放的文件类型 + public static class EM_DELIVERY_FILE_TYPE extends Structure { + public static final int EM_DELIVERY_FILE_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_DELIVERY_FILE_TYPE_VIDEO = 1; // 视频 + public static final int EM_DELIVERY_FILE_TYPE_IMAGE = 2; // 图片 + } + + // CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_START_PLAYAUDIO 命令参数 + public static class NET_CTRL_START_PLAYAUDIO extends Structure { + public int dwSize; + public byte[] szAudioPath = new byte[NET_MAX_AUDIO_PATH]; + + public NET_CTRL_START_PLAYAUDIO() { + this.dwSize = this.size(); + } + } + + // 公告记录信息查询条件 + public static class FIND_RECORD_ANNOUNCEMENT_CONDITION extends Structure { + public int dwSize; + public int bTimeEnable; // 启用时间段查询, BOOL类型 + public NET_TIME stStartTime; // 起始时间 + public NET_TIME stEndTime; // 结束时间 + + public FIND_RECORD_ANNOUNCEMENT_CONDITION() { + this.dwSize = this.size(); + } + } + + //公告记录信息 + public static class NET_RECORD_ANNOUNCEMENT_INFO extends Structure { + public int dwSize; + public int nRecNo; // 记录集编号,只读 + public NET_TIME stuCreateTime; // 创建时间 + public NET_TIME stuIssueTime; // 公告发布时间 + public byte[] szAnnounceTitle = new byte[NET_COMMON_STRING_64]; // 公告标题 + public byte[] szAnnounceContent = new byte[NET_COMMON_STRING_256];//公告内容 + public byte[] szAnnounceDoor = new byte[NET_COMMON_STRING_16]; //公告要发送的房间号 + public NET_TIME stuExpireTime; //公告过期的时间 + public int emAnnounceState; //公告的状态 , 参考 NET_ANNOUNCE_STATE + public int emAnnounceReadFlag; //公告是否已经浏览, 参考 NET_ANNOUNCE_READFLAG + + public NET_RECORD_ANNOUNCEMENT_INFO() { + this.dwSize = this.size(); + } + } + + //公告的状态 + public static class NET_ANNOUNCE_STATE extends Structure { + public static final int NET_ANNOUNCE_STATE_UNSENDED = 0; //初始状态(未发送) + public static final int NET_ANNOUNCE_STATE_SENDED = 1; //已经发送 + public static final int NET_ANNOUNCE_STATE_EXPIRED = 2; //已经过期 + public static final int NET_ANNOUNCE_STATE_UNKNOWN = 3; //未知 + } + + //公告是否已经浏览 + public static class NET_ANNOUNCE_READFLAG extends Structure { + public static final int NET_ANNOUNCE_READFLAG_UNREADED = 0; //未读 + public static final int NET_ANNOUNCE_READFLAG_READED = 1; //已读 + public static final int NET_ANNOUNCE_READFLAG_UNKNOWN = 2; //未知 + } + + // 开始实时监视并指定回调数据格式入参 + public static class NET_IN_REALPLAY_BY_DATA_TYPE extends Structure { + public int dwSize; // 结构体大小 + public int nChannelID; // 通道编号 + public Pointer hWnd; // 窗口句柄, HWND类型 + public int rType; // 码流类型 ,参考 NET_RealPlayType + public fRealDataCallBackEx cbRealData; // 数据回调函数 + public int emDataType; // 回调的数据类型,参考 EM_REAL_DATA_TYPE + public Pointer dwUser; // 用户数据 + public String szSaveFileName; // 转换后的文件名 + + public NET_IN_REALPLAY_BY_DATA_TYPE() { + this.dwSize = this.size(); + } + } + + // 开始实时监视并指定回调数据格式出参 + public static class NET_OUT_REALPLAY_BY_DATA_TYPE extends Structure { + public int dwSize; // 结构体大小 + + public NET_OUT_REALPLAY_BY_DATA_TYPE() { + this.dwSize = this.size(); + } + } + + // 实时监视回调数据类型 + public static class EM_REAL_DATA_TYPE extends Structure { + public static final int EM_REAL_DATA_TYPE_PRIVATE = 0; // 私有码流 + public static final int EM_REAL_DATA_TYPE_GBPS = 1; // 国标PS码流 + public static final int EM_REAL_DATA_TYPE_TS = 2; // TS码流 + public static final int EM_REAL_DATA_TYPE_MP4 = 3; // MP4文件(从回调函数出来的是私有码流数据,参数dwDataType值为0) + public static final int EM_REAL_DATA_TYPE_H264 = 4; // 裸H264码流 + } + + // 开始回放并指定回调数据格式 入参 + public static class NET_IN_PLAYBACK_BY_DATA_TYPE extends Structure { + public int dwSize; // 结构体大小 + public int nChannelID; // 通道编号 + public NET_TIME stStartTime; // 开始时间 + public NET_TIME stStopTime; // 结束时间 + public Pointer hWnd; // 播放窗格, 可为NULL + public StdCallCallback cbDownLoadPos; // 进度回调 + public Pointer dwPosUser; // 进度回调用户信息 + public StdCallCallback fDownLoadDataCallBack; // 数据回调 + public int emDataType; // 回调的数据类型 + public Pointer dwDataUser; // 数据回调用户信息 + public int nPlayDirection; // 播放方向, 0:正放; 1:倒放; + + public NET_IN_PLAYBACK_BY_DATA_TYPE() { + this.dwSize = this.size(); + } + } + + // 开始回放并指定回调数据格式 出参 + public static class NET_OUT_PLAYBACK_BY_DATA_TYPE extends Structure { + public int dwSize; // 结构体大小 + + public NET_OUT_PLAYBACK_BY_DATA_TYPE() { + this.dwSize = this.size(); + } + } + + // 开始下载并指定回调数据格式 入参 + public static class NET_IN_DOWNLOAD_BY_DATA_TYPE extends Structure { + public int dwSize; // 结构体大小 + public int nChannelID; // 通道编号 + public int emRecordType; // 录像类型, 详见EM_QUERY_RECORD_TYPE + public String szSavedFileName; // 下载的文件路径 + public NET_TIME stStartTime; // 开始时间 + public NET_TIME stStopTime; // 结束时间 + public StdCallCallback cbDownLoadPos; // 进度回调 + public Pointer dwPosUser; // 进度回调用户信息 + public StdCallCallback fDownLoadDataCallBack; // 数据回调 + public int emDataType; // 回调的数据类型,详见 EM_REAL_DATA_TYPE + public Pointer dwDataUser; // 数据回调用户信息 + + public NET_IN_DOWNLOAD_BY_DATA_TYPE() { + this.dwSize = this.size(); + } + } + + // 开始下载并指定回调数据格式 出参 + public static class NET_OUT_DOWNLOAD_BY_DATA_TYPE extends Structure { + public int dwSize; // 结构体大小 + + public NET_OUT_DOWNLOAD_BY_DATA_TYPE() { + this.dwSize = this.size(); + } + } + + // 事件类型 NET_ALARM_HIGH_SPEED (车辆超速报警事件)对应的数据块描述信息 + public static class ALARM_HIGH_SPEED_INFO extends Structure { + public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; + public NET_TIME_EX stuTime; // 事件发生的时间 + public double dbPTS; // 时间戳(单位是毫秒) + public NET_GPS_STATUS_INFO stGPSStatusInfo; // GPS信息 + public int nSpeedLimit; // 车连限速值km/h + public int nCurSpeed; // 当前车辆速度km/h + public int nMaxSpeed; // 最高速度Km/h + public byte[] byReserved = new byte[508]; // 保留字节 + } + + // GPS状态信息 + public static class NET_GPS_STATUS_INFO extends Structure { + public NET_TIME revTime; // 定位时间 + public byte[] DvrSerial = new byte[50]; // 设备序列号 + public byte[] byRserved1 = new byte[6]; // 对齐字节 + public double longitude; // 经度(单位是百万分之度,范围0-360度) + public double latidude; // 纬度(单位是百万分之度,范围0-180度) + public double height; // 高度(米) + public double angle; // 方向角(正北方向为原点,顺时针为正) + public double speed; // 速度(单位km/H) + public short starCount; // 定位星数, emDateSource为 EM_DATE_SOURCE_GPS时有效 + public byte[] byRserved2 = new byte[2]; // 对齐字节 + public int antennaState; // 天线状态, 参考 NET_THREE_STATUS_BOOL, emDateSource为 EM_DATE_SOURCE_GPS时有效 + public int orientationState; // 定位状态, 参考 NET_THREE_STATUS_BOOL + public int workStae; // 工作状态(0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算 + // emDateSource为 EM_DATE_SOURCE_GPS时有效 + public int nAlarmCount; // 发生的报警位置个数 + public int[] nAlarmState = new int[128]; // 发生的报警位置,值可能多个, emDateSource为 EM_DATE_SOURCE_GPS时有效 + public byte bOffline; // 0-实时 1-补传 + public byte bSNR; // GPS信噪比,表示GPS信号强度,值越大,信号越强 范围:0~100,0表示不可用 + public byte[] byRserved3 = new byte[2]; // 对齐字节 + public int emDateSource; // 数据来源, 参考 EM_DATE_SOURCE + public byte[] byRserved = new byte[124]; // 保留字节 + } + + //三态布尔类型 + public static class NET_THREE_STATUS_BOOL extends Structure { + public static final int BOOL_STATUS_FALSE = 0; + public static final int BOOL_STATUS_TRUE = 1; + public static final int BOOL_STATUS_UNKNOWN = 2; //未知 + } + + // 数据来源 + public static class EM_DATE_SOURCE extends Structure { + public static final int EM_DATE_SOURCE_GPS = 0; // GPS + public static final int EM_DATE_SOURCE_INERTIALNAVIGATION = 1; // 惯性导航数据 + } + + // Gps定位信息 + public static class NET_GPS_LOCATION_INFO extends Structure { + public GPS_Info stuGpsInfo; // GPS信息 + public ALARM_STATE_INFO stuAlarmStateInfo; // 报警状态信息 + public int nTemperature; // 温度(单位:0.1摄氏度) + public int nHumidity; // 湿度(单位:0.1%) + public int nIdleTime; // 怠速时长(单位:秒) + public int nMileage; // 里程(单位:0.1km) + public int nVoltage; // 设置电压值(单位:0.1伏) + public byte[] byReserved = new byte[1024]; + } + + // 事件类型 NET_ALARM_VIDEO_LOSS (视频丢失事件)对应的数据块描述信息 + public static class ALARM_VIDEO_LOSS_INFO extends Structure { + public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; + public int nChannelID; // 通道号 + public double dbPTS; // 时间戳(单位是毫秒) + public byte[] byReserved1 = new byte[4]; // 字节对齐 + public NET_TIME_EX stuTime; // 事件发生的时间 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + //报警事件类型 NET_ALARM_BUS_SHARP_ACCELERATE(车辆急加速事件)对应的数据描述信息 + public static class ALARM_BUS_SHARP_ACCELERATE_INFO extends Structure { + public int dwSize; + public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息 + public NET_TIME_EX stuTime; // 事件发生的时间 + + public ALARM_BUS_SHARP_ACCELERATE_INFO() { + this.dwSize = this.size(); + } + } + + //报警事件类型 NET_ALARM_BUS_SHARP_DECELERATE(车辆急减速事件)对应的数据描述信息 + public static class ALARM_BUS_SHARP_DECELERATE_INFO extends Structure { + public int dwSize; + public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息 + public NET_TIME_EX stuTime; // 事件发生的时间 + + public ALARM_BUS_SHARP_DECELERATE_INFO() { + this.dwSize = this.size(); + } + } + + // GPS未定位报警(NET_ALARM_GPS_NOT_ALIGNED) + public static class ALARM_GPS_NOT_ALIGNED_INFO extends Structure { + public int nAction; // 事件动作,0表示脉冲事件,1表示报警开始,2表示报警结束; + public NET_TIME_EX stuTime; // 事件发生的时间 + public byte[] byReserved = new byte[1024]; // 保留字节 + } + + // 前端断网报警信息, 对应 NET_ALARM_FRONTDISCONNECT + public static class ALARM_FRONTDISCONNET_INFO extends Structure { + public int dwSize; // 结构体大小 + public int nChannelID; // 通道号 + public int nAction; // 0:开始 1:停止 + public NET_TIME stuTime; // 事件发生时间 + public byte[] szIpAddress = new byte[MAX_PATH]; // 前端IPC的IP地址 + + public ALARM_FRONTDISCONNET_INFO() { + this.dwSize = this.size(); + } + } + + // 存储错误报警, 对应 NET_ALARM_STORAGE_FAILURE_EX + public static class ALARM_STORAGE_FAILURE_EX extends Structure { + public int dwSize; + public int nAction; // 0:开始 1:停止 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] szDevice = new byte[NET_STORAGE_NAME_LEN]; // 存储设备名称 + public byte[] szGroup = new byte[NET_STORAGE_NAME_LEN]; // 存储组名称 + public byte[] szPath = new byte[MAX_PATH]; // 路径 + public int emError; // 错误类型, 参考 EM_STORAGE_ERROR + public int nPhysicNo; // 硬盘所在槽编码, 从1开始 + public NET_TIME_EX stuTime; // 事件发生的时间 + + public ALARM_STORAGE_FAILURE_EX() { + this.dwSize = this.size(); + } + } + + // 存储组不存在事件信息, 对应 NET_ALARM_STORAGE_NOT_EXIST + public static class ALARM_STORAGE_NOT_EXIST_INFO extends Structure { + public int dwSize; + public int nAction; // 0:开始 1:停止 + public byte[] szGroup = new byte[NET_STORAGE_NAME_LEN]; // 在录像或抓图存储点中设置但不存在的组 + public NET_TIME stuTime; // 事件触发时间 + + public ALARM_STORAGE_NOT_EXIST_INFO() { + this.dwSize = this.size(); + } + } + + // 车辆ACC报警事件, 对应事件类型 NET_ALARM_VEHICLE_ACC + public static class ALARM_VEHICLE_ACC_INFO extends Structure { + public int dwSize; + public int nACCStatus; // ACC状态, 0:无效, 1:开启, 2:关闭 + public int nAction; // 事件动作, 0:Start, 1:Stop + public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息 + public int nConstantElectricStatus; // 常电状态, 0:未知, 1:连接, 2:断开 + public NET_TIME_EX stuTime; // 事件发生的时间 + public int nTotalMileage; // 总的里程数,单位:米,当nACCStatus为2时,将ntotalMileage进行上报 + public NET_TIME_EX stuStartTime; // nACCStatus为1时刻的时间 + public NET_GPS_STATUS_INFO stuStartGPS; // nACCStatus为1时刻的GPS信息 + + public ALARM_VEHICLE_ACC_INFO() { + this.dwSize = this.size(); + } + } + + // 事件类型 NET_ALARM_VIDEOBLIND(视频遮挡事件)对应的数据块描述信息 + public static class ALARM_VIDEO_BLIND_INFO extends Structure { + public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; + public int nChannelID; // 通道号 + public double dbPTS; // 时间戳(单位是毫秒) + public NET_TIME_EX stuTime; // 事件发生的时间 + public int nEventID; // 事件ID + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // 紧急事件(对应 NET_URGENCY_ALARM_EX2, 对原有的 NET_URGENCY_ALARM_EX 类型的升级, 指人为触发的紧急事件, 一般处理是联动外部通讯功能请求帮助) + public static class ALARM_URGENCY_ALARM_EX2 extends Structure { + public int dwSize; + public NET_TIME stuTime; // 事件产生的时间 + public int nID; // 用于标识不同的紧急事件 + + public ALARM_URGENCY_ALARM_EX2() { + this.dwSize = this.size(); + } + } + + // 事件类型 NET_ALARM_DRIVER_NOTCONFIRM (司机未按确认按钮报警事件)对应的数据块描述信息 + public static class ALARM_DRIVER_NOTCONFIRM_INFO extends Structure { + public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; + public NET_TIME_EX stuTime; // 事件发生的时间 + public double dbPTS; // 时间戳(单位是毫秒) + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // CLIENT_AttachBusState, 订阅Bus状态输入参结构 + public static class NET_IN_BUS_ATTACH extends Structure { + public int dwSize; + public fBusStateCallBack cbBusState; // 状态回调函数 + public Pointer dwUser; // 用户数据 + + public NET_IN_BUS_ATTACH() { + this.dwSize = this.size(); + } + } + + // CLIENT_AttachBusState, 订阅Bus状态输出参结构 + public static class NET_OUT_BUS_ATTACH extends Structure { + public int dwSize; + + public NET_OUT_BUS_ATTACH() { + this.dwSize = this.size(); + } + } + + // 事件类型 NET_ALARM_BUS_PASSENGER_CARD_CHECK (乘客刷卡事件)对应的数据描述信息 + public static class ALARM_PASSENGER_CARD_CHECK extends Structure { + public int bEventConfirm; // 是否需要回复, BOOL类型 + public byte[] szCardNum = new byte[NET_MAX_BUSCARD_NUM]; // 公交卡号 + public NET_GPS_STATUS_INFO stuGPS; // GPS信息 + public NET_TIME_EX UTC; // 刷卡时间 + public int nTime; // UTC整型 + public int emType; // 刷卡类型, 参考 EM_PASSENGER_CARD_CHECK_TYPE + public byte[] szMac = new byte[NET_MAX_POS_MAC_NUM]; // 刷卡机Mac码 (默认"0000",兼容老设备) + public byte[] reserved = new byte[1012]; // 预留 + } + + public static class EM_PASSENGER_CARD_CHECK_TYPE extends Structure { + public static final int EM_PASSENGER_CARD_CHECK_TYPE_UNKOWN = 0; // 未知 + public static final int EM_PASSENGER_CARD_CHECK_TYPE_SIGNIN = 1; // 签到/上车 + public static final int EM_PASSENGER_CARD_CHECK_TYPE_SIGNOUT = 2; // 签出/下车 + public static final int EM_PASSENGER_CARD_CHECK_TYPE_NORMAL = 3; // 正常刷卡,不区分上下车 + } + + // CLIENT_AttachEventRestore 接口输入参数 + public static class NET_IN_ATTACH_EVENT_RESTORE extends Structure { + public int dwSize; //结构体大小 + public byte[] szUuid = new byte[MAX_EVENT_RESTORE_UUID]; //客户端惟一标识 + + public NET_IN_ATTACH_EVENT_RESTORE() { + this.dwSize = this.size(); + } + } + + public static class GPS_TEMP_HUMIDITY_INFO extends Structure { + public double dTemperature; // 温度值(摄氏度),实际值的1000倍,如30.0摄氏度表示为30000 + public double dHumidity; // 湿度值(%),实际值的1000倍,如30.0%表示为30000 + public byte[] bReserved = new byte[128]; // 保留字节 + + public static class ByValue extends GPS_Info implements Structure.ByValue { + } + } + + + // 事件类型 NET_ALARM_FACEINFO_COLLECT (人脸信息录入事件)对应的数据块描述信息 + public static class ALARM_FACEINFO_COLLECT_INFO extends Structure { + + public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; + public NET_TIME_EX stuTime; // 事件发生的时间 + public double dbPTS; // 时间戳(单位是毫秒) + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // 人脸信息记录操作类型, 接口 CLIENT_FaceInfoOpreate + public static class EM_FACEINFO_OPREATE_TYPE extends Structure { + public static final int EM_FACEINFO_OPREATE_ADD = 0; // 添加, pInbuf = NET_IN_ADD_FACE_INFO , pOutBuf = NET_OUT_ADD_FACE_INFO + public static final int EM_FACEINFO_OPREATE_GET = 1; // 获取, pInBuf = NET_IN_GET_FACE_INFO , pOutBuf = NET_OUT_GET_FACE_INFO + public static final int EM_FACEINFO_OPREATE_UPDATE = 2; // 更新, pInbuf = NET_IN_UPDATE_FACE_INFO , pOutBuf = NET_OUT_UPDATE_FACE_INFO + public static final int EM_FACEINFO_OPREATE_REMOVE = 3; // 删除, pInbuf = NET_IN_REMOVE_FACE_INFO , pOutBuf = NET_OUT_REMOVE_FACE_INFO + public static final int EM_FACEINFO_OPREATE_CLEAR = 4; // 清除, pInbuf = NET_IN_CLEAR_FACE_INFO, pOutBuf = NET_OUT_CLEAR_FACE_INFO + } + + // 添加人脸记录信息输入参数 + public static class NET_IN_ADD_FACE_INFO extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + public NET_FACE_RECORD_INFO stuFaceInfo; // 人脸数据 + + public NET_IN_ADD_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 人脸信息 + public static class NET_FACE_RECORD_INFO extends Structure { + public byte[] szUserName = new byte[MAX_USER_NAME_LEN]; // 用户名 + public int nRoom; // 房间个数 + public NET_FACE_ROOMNO[] szRoomNoArr = (NET_FACE_ROOMNO[]) new NET_FACE_ROOMNO().toArray(MAX_ROOMNUM_COUNT); // 房间号列表 + public int nFaceData; // 人脸模板数据个数 + public NET_FACE_FACEDATA[] szFaceDataArr = (NET_FACE_FACEDATA[]) new NET_FACE_FACEDATA().toArray(MAX_FACE_COUTN);// 人脸模板数据 + public int[] nFaceDataLen = new int[MAX_FACE_COUTN]; // 人脸模版数据大小 + public int nFacePhoto; // 人脸照片个数 + public int[] nFacePhotoLen = new int[MAX_PHOTO_COUNT]; // 每张图片的大小 + public FACE_PHOTO[] pszFacePhotoArr = (FACE_PHOTO[]) new FACE_PHOTO().toArray(MAX_PHOTO_COUNT); // 人脸照片数据,大小不超过120K + public byte[] byReserved = new byte[384]; // 保留字节 + } + + public static class NET_FACE_ROOMNO extends Structure { + public byte[] szRoomNo = new byte[NET_COMMON_STRING_16]; // 房间号 + } + + public static class NET_FACE_FACEDATA extends Structure { + public byte[] szFaceData = new byte[MAX_FACE_DATA_LEN]; // 人脸数据 + } + + public static class FACE_PHOTO extends Structure { + public Pointer pszFacePhoto; + } + + + // 添加人脸记录信息输出参数 + public static class NET_OUT_ADD_FACE_INFO extends Structure { + public int dwSize; + + public NET_OUT_ADD_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 获取人脸记录信息输入参数 + public static class NET_IN_GET_FACE_INFO extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + + public NET_IN_GET_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 获取人脸记录信息输出参数 + public static class NET_OUT_GET_FACE_INFO extends Structure { + public int dwSize; + public int nFaceData; // 人脸模板数据个数 + public NET_FACE_FACEDATA[] szFaceDataArr = (NET_FACE_FACEDATA[]) new NET_FACE_FACEDATA().toArray(MAX_FACE_COUTN); // 人脸模板数据 + + public NET_OUT_GET_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 更新人脸记录信息输入参数 + public static class NET_IN_UPDATE_FACE_INFO extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + public NET_FACE_RECORD_INFO stuFaceInfo; // 人脸数据 + + public NET_IN_UPDATE_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 更新人脸记录信息输出参数 + public static class NET_OUT_UPDATE_FACE_INFO extends Structure { + public int dwSize; + + public NET_OUT_UPDATE_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 删除人脸记录信息输入参数 + public static class NET_IN_REMOVE_FACE_INFO extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + + public NET_IN_REMOVE_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 删除人脸记录信息输出参数 + public static class NET_OUT_REMOVE_FACE_INFO extends Structure { + public int dwSize; + + public NET_OUT_REMOVE_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 清除人脸记录信息输入参数 + public static class NET_IN_CLEAR_FACE_INFO extends Structure { + public int dwSize; + + public NET_IN_CLEAR_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 清除人脸记录信息输出参数 + public static class NET_OUT_CLEAR_FACE_INFO extends Structure { + public int dwSize; + + public NET_OUT_CLEAR_FACE_INFO() { + this.dwSize = this.size(); + } + } + + // 添加节目信息接口输入参数 + public static class NET_IN_ADD_ONE_PROGRAMME extends Structure { + public int dwSize; + public NET_PROGRAMME_INFO stuProgrammeInfo; // 节目信息 + + public NET_IN_ADD_ONE_PROGRAMME() { + this.dwSize = this.size(); + } + } + + // 添加节目信息接口输出参数 + public static class NET_OUT_ADD_ONE_PROGRAMME extends Structure { + public int dwSize; + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID + + public NET_OUT_ADD_ONE_PROGRAMME() { + this.dwSize = this.size(); + } + } + + // 诱导屏节目配置信息 + public static class NET_PROGRAMME_INFO extends Structure { + public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 节目名称 + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID,添加时无效,用于修改、删除 + public int bEnable; // 节目是否启用,BOOL类型 + public NET_ORDINARY_INFO stuOrdinaryInfo = new NET_ORDINARY_INFO(); // 普通节目信息,此参数需要在库里new对象 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // 诱导屏普通节目信息 + public static class NET_ORDINARY_INFO extends Structure { + public int bTempletState; // 节目是否保存为模板, BOOL类型 + public byte[] szDescription = new byte[MAX_COMMON_STRING_128]; // 节目描述信息 + public int nWhnCount; // 诱导屏窗口个数 + public NET_GUIDESCREEN_WINDOW_INFO[] stuWindowsInfo = (NET_GUIDESCREEN_WINDOW_INFO[]) new NET_GUIDESCREEN_WINDOW_INFO().toArray(MAX_WINDOWS_COUNT); // 诱导屏窗口信息 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 诱导屏窗口信息 + public static class NET_GUIDESCREEN_WINDOW_INFO extends Structure { + public byte[] szWindowID = new byte[MAX_COMMON_STRING_64]; // 窗口ID + public int nVolume; // 窗口音量,相对整屏音量的百分比 + public NET_COLOR_RGBA stuColor; // 窗口背景颜色 + public int nDiaphaneity; // 窗口背景透明度0-100 + public int emTourPeriodType; // 窗口轮训类型, 对应 EM_TOURPERIOD_TYPE + public int nTourPeriodTime; // 自定义轮训时间,单位秒, 轮训类型为自定义轮训时有效 + public int bAutoPlay; // 预览自动播放,Video元素有效, BOOL类型 + public int bLoopPlay; // 预览循环播放,Video元素有效, BOOL类型 + public int nElementsCount; // 诱导屏窗口元素个数 + public Pointer pstElementsBuf; // 诱导屏窗口元素信息缓存区, 根据类型对应不同的结构体 + // 填充多个元素信息, 每个元素信息内容为 NET_ELEMENT_COMMON_INFO + 元素类型对应的结构体 + public int nBufLen; // 诱导屏窗口元素信息缓存区大小 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 窗口元素通有信息 + public static class NET_ELEMENT_COMMON_INFO extends Structure { + public int emElementsType; // 窗口元素类型,对应枚举 EM_ELEMENTS_TYPE + public byte[] byReserved = new byte[128]; // 保留字节 + } + + //窗口轮训周期类型 + public static class EM_TOURPERIOD_TYPE extends Structure { + public static final int EM_TOURPERIOD_UNKNOWN = 0; // 未知 + public static final int EM_TOURPERIOD_PROGRAMME = 1; // 节目周期 + public static final int EM_TOURPERIOD_PLAN = 2; // 计划周期 + public static final int EM_TOURPERIOD_CUSTOM = 3; // 自定义周期 + } + + // 诱导屏窗口元素类型 + public static class EM_ELEMENTS_TYPE extends Structure { + public static final int EM_ELEMENTS_UNKNOWN = 0; // 未知 + public static final int EM_ELEMENTS_VIDEO = 1; // 视频元素, 对应 NET_VIDEO_ELEMENT_INFO + public static final int EM_ELEMENTS_PICTURE = 2; // 图片元素, 对应 NET_PICTURE_ELEMENT_INFO + public static final int EM_ELEMENTS_TEXT = 3; // 文本元素, 对应 NET_TEXT_ELEMENT_INFO + public static final int EM_ELEMENTS_PLACEHOLDER = 4; // 占位符元素, 对应 NET_PLACEHOLDER_ELEMENT_INFO + public static final int EM_ELEMENTS_CAPTURE = 5; // 抓拍元素, 对应 NET_CAPTURE_ELEMENT_INFO + } + + // 视频元素信息 + public static class NET_VIDEO_ELEMENT_INFO extends Structure { + public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 + public int bFillerState; // 是否垫片, BOOL类型 + public byte[] szPath = new byte[MAX_COMMON_STRING_128]; // 文件地址 + public int nPlayCount; // 播放次数 + public int nNote; // 注释信息个数 + public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[]) new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 诱导屏窗口元素注释信息 + public static class NET_GUIDESCREEN_NOTE_INFO extends Structure { + public int bEnable; // 是否有效, BOOL类型 + public NET_GUIDESCREEN_TEXT_INFO stuTextInfo; // 文字注释信息 + public NET_RECT stuRect; // 文字注释的坐标 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 文本信息 + public static class NET_GUIDESCREEN_TEXT_INFO extends Structure { + public byte[] szContent = new byte[MAX_ELEMENTTEXT_LENGTH]; // 文本内容 + public int nFontSize; // 字体大小 + public NET_COLOR_RGBA stuFontColor; // 字体颜色 + public byte[] szFontStyle = new byte[MAX_COMMON_STRING_32]; // 字体类型 + public double dbLineHeight; // 行高 + public int emHoriAlign; // 水平对齐方向, 对应 EM_HORI_ALIGN_TYPE + public int emVertAlign; // 垂直对齐方向, 对应 EM_VERT_ALIGN_TYPE + public int nPlayTime; // 播放时间, 单位秒 + public int nPlayCount; // 播放次数 + public int nStayTime; // 停留间隔(切入切出的间隔时间)单位:s + public int emEnterStyle; // 切入风格, 对应 EM_PIC_STYLE_TYPE + public int emExitStyle; // 切出风格, 对应 EM_PIC_STYLE_TYPE + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 水平对齐类型 + public static class EM_HORI_ALIGN_TYPE extends Structure { + public static final int EM_HORI_ALIGN_UNKNOWN = 0; // 未知 + public static final int EM_HORI_ALIGN_LEFT = 1; // 左对齐 + public static final int EM_HORI_ALIGN_CENTER = 2; // 居中 + public static final int EM_HORI_ALIGN_RIGHT = 3; // 右对齐 + } + + // 垂直对齐类型 + public static class EM_VERT_ALIGN_TYPE extends Structure { + public static final int EM_VERT_ALIGN_UNKNOWN = 0; // 未知 + public static final int EM_VERT_ALIGN_UP = 1; // 上对齐 + public static final int EM_VERT_ALIGN_CENTER = 2; // 居中 + public static final int EM_VERT_ALIGN_DOWN = 3; // 下对齐 + } + + // 切入(切出) 风格 + public static class EM_PIC_STYLE_TYPE extends Structure { + public static final int EM_PIC_STYLE_UNKNOWN = 0; // 未知 + public static final int EM_PIC_STYLE_DEFAULT = 1; // 默认 + public static final int EM_PIC_STYLE_UP = 2; // 上移 + public static final int EM_PIC_STYLE_DOWN = 3; // 下移 + public static final int EM_PIC_STYLE_LEFT = 4; // 左移 + public static final int EM_PIC_STYLE_RIGHT = 5; // 右移 + } + + // 图片元素信息 + public static class NET_PICTURE_ELEMENT_INFO extends Structure { + public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 + public int bFillerState; // 是否垫片, BOOL类型 + public byte[] szPath = new byte[MAX_COMMON_STRING_128]; // 图片文件地址 + public int nPlayTime; // 播放时间, 单位秒 + public int nPlayCount; // 播放次数 + public int nDiaphaneity; // 透明度, 0-100 + public int nStayTime; // 停留时间, 单位秒 + public int emEnterStyle; // 切入风格, 对应 EM_PIC_STYLE_TYPE + public int emExitStyle; // 切出风格, 对应 EM_PIC_STYLE_TYPE + public int nNote; // 注释信息个数 + public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[]) new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 诱导屏窗口文本元素信息 + public static class NET_TEXT_ELEMENT_INFO extends Structure { + public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 + public int bFillerState; // 是否垫片, 对应 BOOL类型 + public NET_GUIDESCREEN_TEXT_INFO stuElementsText; // 文本元素信息 + public int nNote; // 注释信息个数 + public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[]) new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 诱导屏窗口占位符元素信息 + public static class NET_PLACEHOLDER_ELEMENT_INFO extends Structure { + public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 + public int bFillerState; // 是否垫片, BOOL类型 + public int nNote; // 注释信息个数 + public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[]) new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 抓拍元素信息 + public static class NET_CAPTURE_ELEMENT_INFO extends Structure { + + public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 + public int bFillerState; // 是否垫片, BOOL类型 + public byte[] szUserName = new byte[NET_USER_NAME_LEN_EX]; // 用户名 + public byte[] szPassWord = new byte[NET_USER_PSW_LEN_EX]; // 密码 + public byte[] szIP = new byte[NET_MAX_IPADDR_LEN_EX]; // IP地址 + public int nPort; // 端口号 + public int nChannel; // 通道号 + public int emCaptureType; // 抓拍类型, 对应 EM_CAPTURE_TYPE + public int nPlayTime; // 播放时间, 单位秒 + public int nNote; // 注释信息个数 + public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[]) new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 抓拍类型 + public static class EM_CAPTURE_TYPE extends Structure { + public static final int EM_CAPTURE_UNKNOWN = 0; // 未知 + public static final int EM_CAPTURE_VIDEO = 1; // 视频 + public static final int EM_CAPTURE_PICTURE = 2; // 图片 + } + + // 设置诱导屏屏幕配置信息输入参数 + public static class NET_IN_SET_GUIDESCREEN_CFG extends Structure { + public int dwSize; + public int nScreenCount; // 诱导屏属性配置信息个数, 值由用户指定 + + // 诱导屏属性配置信息, 内存由用户维护, NET_GUIDESCREEN_ATTRIBUTE_INFO + // 大小为nScreenCount 个 NET_GUIDESCREEN_ATTRIBUTE_INFO + public Pointer pstGuideScreenCfg; + + public NET_IN_SET_GUIDESCREEN_CFG() { + this.dwSize = this.size(); + } + } + + // 设置诱导屏屏幕配置信息输出参数 + public static class NET_OUT_SET_GUIDESCREEN_CFG extends Structure { + public int dwSize; + + public NET_OUT_SET_GUIDESCREEN_CFG() { + this.dwSize = this.size(); + } + } + + // 诱导屏属性配置信息 + public static class NET_GUIDESCREEN_ATTRIBUTE_INFO extends Structure { + public int dwSize; + public byte[] szScreenID = new byte[MAX_COMMON_STRING_64]; // 屏幕ID + public int emStatus; // 显示屏开关状态 对应 EM_SCREEN_STATUS_TYPE + public int bIsForeverOpen; // 是否永久开屏, 0:开屏 1:关屏 + public int nScreenTime; // 开关屏时间个数 + public NET_SCREEN_TIME_INFO[] stuScreenTime = (NET_SCREEN_TIME_INFO[]) new NET_SCREEN_TIME_INFO().toArray(MAX_SCREENTIME_COUNT); // 开关屏时间数组 + public int nBright; // 显示屏亮度, 1-100 + public int nContrast; // 显示屏对比度, 1-100 + public int nSaturation; // 显示屏饱和度, 1-100 + public int nVolume; // 屏幕整体音量 + public int nWidth; // 宽度 + public int nHeight; // 高度 + public int nWindowsCount; // 窗口个数 + public NET_GUIDESCREEN_WINDOW_RECT_INFO[] stuWindows = (NET_GUIDESCREEN_WINDOW_RECT_INFO[]) new NET_GUIDESCREEN_WINDOW_RECT_INFO().toArray(MAX_WINDOWS_COUNT); // 窗口信息 + public NET_GUIDESCREEN_AUTO_BRIGHT stuAutoBright; // 诱导屏自动调节屏幕亮度信息 + public byte[] byReserved = new byte[512]; // 保留字节 + + public NET_GUIDESCREEN_ATTRIBUTE_INFO() { + this.dwSize = this.size(); + } + } + + // 诱导屏自动调节屏幕亮度信息 + public static class NET_GUIDESCREEN_AUTO_BRIGHT extends Structure { + public int bEnable; // 是否使能自动亮度配置 + public int nLightBright; // 白天的亮度 + public int nDarkBright; // 夜间的亮度 + public NET_SUN_RISE_SET_TIME[] stuSunTime = (NET_SUN_RISE_SET_TIME[]) new NET_SUN_RISE_SET_TIME().toArray(MAX_SUNTIME_COUNT); // 日出日落时间 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 诱导屏配置日出日落时间 + public static class NET_SUN_RISE_SET_TIME extends Structure { + public int nSunrise; // 日出时间, 默认上午6 时 + public int nSunset; // 日落时间, 默认下午18 时 + public byte[] byReserved = new byte[32]; // 保留字节 + } + + //开关屏时间信息 + public static class NET_SCREEN_TIME_INFO extends Structure { + public int bEnable; // 是否启用, BOOL类型 + public int emDateType; // 开关屏日期类型 对应 EM_SCREEN_DATE_TYPE + public int nDateCount; // 开关屏日期个数' + public int[] nPlayDates = new int[MAX_PLAYDATES_COUNT]; // 开关屏日期 + public NET_PROGRAMME_TIME_INFO stuOpenTime; // 开屏时间 + public NET_PROGRAMME_TIME_INFO stuCloseTime; // 关屏时间 + public byte[] byReserved = new byte[128]; // 保留 + } + + // 诱导屏窗口坐标信息 + public static class NET_GUIDESCREEN_WINDOW_RECT_INFO extends Structure { + public byte[] szWindowID = new byte[MAX_COMMON_STRING_64]; // 窗口ID + public NET_RECT stuRect; // 窗口坐标 + public int nWindowBright; // 诱导屏窗口亮度,单独配置某个子屏的亮度,填0时以整屏亮度为准 + public byte[] byReserved = new byte[132]; // 保留 + } + + // 节目时间信息 + public static class NET_PROGRAMME_TIME_INFO extends Structure { + public int dwHour; // 时 + public int dwMinute; // 分 + public int dwSecond; // 秒 + + public String toString() { + return dwHour + ":" + dwMinute + ":" + dwSecond; + } + } + + // 显示屏开关状态(枚举转结构体) + public static class EM_SCREEN_STATUS_TYPE extends Structure { + public static int EM_SCREEN_STATUS_UNKNOWN = 0; // 未知 + public static int EM_SCREEN_STATUS_ON = 1; // 开 + public static int EM_SCREEN_STATUS_OFF = 2; // 关 + } + + // 日期类型枚(枚举转结构体) + public static class EM_SCREEN_DATE_TYPE extends Structure { + public static int EM_SCREEN_DATE_UNKNOWN = 0; // 未知 + public static int EM_SCREEN_DATE_MONTH = 1; // 每月 + public static int EM_SCREEN_DATE_WEEK = 2; // 每周 + public static int EM_SCREEN_DATE_DAY = 3; // 每日 + } + + // 增加即时节目计划输入参数 + public static class NET_IN_ADD_IMME_PROGRAMMEPLAN extends Structure { + public int dwSize; + public NET_IMMEDIATELY_PLAN_INFO stuImmePlan; // 即时节目计划信息 + + public NET_IN_ADD_IMME_PROGRAMMEPLAN() { + this.dwSize = this.size(); + } + } + + // 增加节目计划输出参数 + public static class NET_OUT_ADD_PROGRAMMEPLAN extends Structure { + public int dwSize; + public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID char[] + + public NET_OUT_ADD_PROGRAMMEPLAN() { + this.dwSize = this.size(); + } + } + + // 即时节目计划配置信息 + public static class NET_IMMEDIATELY_PLAN_INFO extends Structure { + public byte[] szPlanName = new byte[MAX_COMMON_STRING_64]; // 节目计划名称 + public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID ,添加时无效,用于修改、删除 + public byte[] szSplitScreenID = new byte[MAX_COMMON_STRING_64]; // 分屏ID + public int bEnable; // 计划是否启用 , BOOL类型 + public int nPlayTime; // 播放时长, 单位 : 分钟 + public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 即时发布的节目名称 + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 即时发布的节目ID + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // 修改节目信息接口输入参数 + public static class NET_IN_MODIFY_ONE_PROGRAMME extends Structure { + public int dwSize; + public NET_PROGRAMME_INFO stuProgrammeInfo; // 节目信息 + + public NET_IN_MODIFY_ONE_PROGRAMME() { + this.dwSize = this.size(); + } + } + + + // 修改节目信息接口输出参数 + public static class NET_OUT_MODIFY_ONE_PROGRAMME extends Structure { + public int dwSize; + + public NET_OUT_MODIFY_ONE_PROGRAMME() { + this.dwSize = this.size(); + } + } + + // 批量删除节目信息接口输入参数 + public static class NET_IN_DEL_PROGRAMMES extends Structure { + public int dwSize; + public int nProgrammeID; // 节目ID个数 + public PRO_GRAMME_ID[] szProGrammeIdListArr = (PRO_GRAMME_ID[]) new PRO_GRAMME_ID().toArray(MAX_PROGRAMMES_COUNT); // 需要删除的节目ID列表 + + public NET_IN_DEL_PROGRAMMES() { + this.dwSize = this.size(); + } + } + + // 需要删除的节目ID + public static class PRO_GRAMME_ID extends Structure { + public byte[] szProGrammeIdList = new byte[MAX_COMMON_STRING_64]; // 需要删除的节目ID + } + + // 批量删除节目信息接口输出参数 + public static class NET_OUT_DEL_PROGRAMMES extends Structure { + public int dwSize; + + public NET_OUT_DEL_PROGRAMMES() { + this.dwSize = this.size(); + } + } + + // 修改即时节目计划输入参数 + public static class NET_IN_MODIFY_IMME_PROGRAMMEPLAN extends Structure { + public int dwSize; + public NET_IMMEDIATELY_PLAN_INFO stuImmePlan; // 即时节目计划信息 + + public NET_IN_MODIFY_IMME_PROGRAMMEPLAN() { + this.dwSize = this.size(); + } + } + + // 修改即时节目计划输出参数 + public static class NET_OUT_MODIFY_IMME_PROGRAMMEPLAN extends Structure { + public int dwSize; + + public NET_OUT_MODIFY_IMME_PROGRAMMEPLAN() { + this.dwSize = this.size(); + } + } + + // 增加定时节目计划输入参数 + public static class NET_IN_ADD_TIMER_PROGRAMMEPLAN extends Structure { + public int dwSize; + public NET_TIMER_PLAN_INFO stuTimerPlan; // 定时节目计划信息 + + public NET_IN_ADD_TIMER_PROGRAMMEPLAN() { + this.dwSize = this.size(); + } + } + + // 定时节目计划配置信息 + public static class NET_TIMER_PLAN_INFO extends Structure { + public byte[] szPlanName = new byte[MAX_COMMON_STRING_64]; // 节目计划名称 + public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID,添加时无效,用于修改、删除 + public byte[] szSplitScreenID = new byte[MAX_COMMON_STRING_64]; // 分屏ID + public int emDataType; // 节目计划日期类型, 对应 EM_TIMERPLAN_DATE_TYPE + public int nDataCount; // 节目计划日期个数 + public int[] nPlayDates = new int[MAX_PLAYDATES_COUNT]; // 节目播放日期列表 + public NET_PROGRAMME_DATA stuSatrtDate = new NET_PROGRAMME_DATA(); // 节目开始日期 + public NET_PROGRAMME_DATA stuEndDate = new NET_PROGRAMME_DATA(); // 节目结束日期 + public int emReviewState; // 审核状态, 对应 EM_REVIES_STATE + public byte[] szReviewOpinion = new byte[MAX_COMMON_STRING_64]; // 审核意见 + public int bOverdue; // 计划是否过期, BOOL类型 + public int nProgrammes; // 节目个数 + public NET_PROGRAMME_OF_PLAN[] stuProgrammes = (NET_PROGRAMME_OF_PLAN[]) new NET_PROGRAMME_OF_PLAN().toArray(MAX_PROGRAMMES_COUNT); // 节目组信息 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // 定时计划日期类型 + public static class EM_TIMERPLAN_DATE_TYPE extends Structure { + public static final int EM_TIMERPLAN_DATE_UNKNOWN = 0; // 未知 + public static final int EM_TIMERPLAN_DATE_MONTH = 1; // 每月 + public static final int EM_TIMERPLAN_DATE_WEEK = 2; // 每周 + public static final int EM_TIMERPLAN_DATE_DAY = 3; // 每日 + public static final int EM_TIMERPLAN_DATE_CUSTOM = 4; // 自定义 + } + + // 节目日期格式 + public static class NET_PROGRAMME_DATA extends Structure { + public int dwYear; // 年 + public int dwMonth; // 月 + public int dwDay; // 日 + + public String toString() { + return dwYear + "-" + dwMonth + "-" + dwDay; + } + } + + // 节目计划中的节目信息 + public static class NET_PROGRAMME_OF_PLAN extends Structure { + public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 节目名称 + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID + public int bIsBgProgramme; // 是否背景节目, BOOL类型 + public NET_PROGRAMME_TIME_INFO stuSatrtTime; // 节目开始时间 + public NET_PROGRAMME_TIME_INFO stuEndTime; // 节目结束时间 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 审核状态 + public static class EM_REVIES_STATE extends Structure { + public static final int EM_REVIES_UNKNOWN = 0; // 未知 + public static final int EM_REVIES_PASS = 1; // 通过 + public static final int EM_REVIES_NOTPASS = 2; // 不通过 + } + + // 修改定时节目计划输入参数 + public static class NET_IN_MODIFY_TIMER_PROGRAMMEPLAN extends Structure { + public int dwSize; + public NET_TIMER_PLAN_INFO stuTimerPlan; // 定时节目计划信息 + + public NET_IN_MODIFY_TIMER_PROGRAMMEPLAN() { + this.dwSize = this.size(); + } + } + + // 修改定时节目计划输出参数 + public static class NET_OUT_MODIFY_TIMER_PROGRAMMEPLAN extends Structure { + public int dwSize; + + public NET_OUT_MODIFY_TIMER_PROGRAMMEPLAN() { + this.dwSize = this.size(); + } + } + + // 删除多个节目计划输入参数 + public static class NET_IN_DEL_PROGRAMMEPLANS extends Structure { + public int dwSize; + public int nPlanID; // 节目计划ID个数 + public PLAN_ID[] szPlanIDArr = (PLAN_ID[]) new PLAN_ID().toArray(MAX_PROGRAMMES_COUNT); // 节目计划ID + + public NET_IN_DEL_PROGRAMMEPLANS() { + this.dwSize = this.size(); + } + } + + // 节目计划ID + public static class PLAN_ID extends Structure { + public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID + } + + // 删除多个节目计划输出参数 + public static class NET_OUT_DEL_PROGRAMMEPLANS extends Structure { + public int dwSize; + + public NET_OUT_DEL_PROGRAMMEPLANS() { + this.dwSize = this.size(); + } + } + + // 通过诱导屏ID 获取诱导屏配置信息输入参数 + public static class NET_IN_GET_GUIDESCREEN_CFG_BYID extends Structure { + public int dwSize; + public byte[] szScreenID = new byte[MAX_COMMON_STRING_64]; // 屏ID + + public NET_IN_GET_GUIDESCREEN_CFG_BYID() { + this.dwSize = this.size(); + } + } + + // 通过诱导屏ID 获取诱导屏配置信息输出参数 + public static class NET_OUT_GET_GUIDESCREEN_CFG_BYID extends Structure { + public int dwSize; + public NET_GUIDESCREEN_ATTRIBUTE_INFO stuGuideScreenCfg; // 诱导屏属性信息 + + public NET_OUT_GET_GUIDESCREEN_CFG_BYID() { + this.dwSize = this.size(); + } + } + + // 获取所有诱导屏配置信息输入参数 + public static class NET_IN_GET_ALL_GUIDESCREEN_CFG extends Structure { + public int dwSize; + + public NET_IN_GET_ALL_GUIDESCREEN_CFG() { + this.dwSize = this.size(); + } + } + + // 获取所有诱导屏配置信息输出参数 + public static class NET_OUT_GET_ALL_GUIDESCREEN_CFG extends Structure { + public int dwSize; + public int nMaxScreen; // 最大诱导屏个数, 值由用户指定 + public int nRetScreen; // 实际返回的诱导屏个数 + public Pointer pstGuideScreenCfg; // 用于存放获取到的诱导屏属性信息, 内存由用户维护 + + // 大小为nMaxScreen 个 NET_GUIDESCREEN_ATTRIBUTE_INFO + // 对应 NET_GUIDESCREEN_ATTRIBUTE_INFO[] + public NET_OUT_GET_ALL_GUIDESCREEN_CFG() { + this.dwSize = this.size(); + } + } + + // 通过节目ID 获取节目信息输入参数 + public static class NET_IN_GET_PROGRAMME_BYID extends Structure { + public int dwSize; + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID + + public NET_IN_GET_PROGRAMME_BYID() { + this.dwSize = this.size(); + } + } + + // 通过节目ID 获取节目信息输出参数 + public static class NET_OUT_GET_PROGRAMME_BYID extends Structure { + public int dwSize; + public NET_PROGRAMME_INFO stuProgrammeInfo; // 节目配置信息 + + public NET_OUT_GET_PROGRAMME_BYID() { + this.dwSize = this.size(); + } + } + + // 获取所有节目信息输入参数 + public static class NET_IN_GET_ALL_PROGRAMMES extends Structure { + public int dwSize; + + public NET_IN_GET_ALL_PROGRAMMES() { + this.dwSize = this.size(); + } + } + + // 获取所有节目信息输出参数 + public static class NET_OUT_GET_ALL_PROGRAMMES extends Structure { + public int dwSize; + public int nMaxCnt; // pstProgrammeInfo最大NET_PROGRAMME_INFO 个数 + public int nRetCnt; // pstProgrammeInfo实际返回的 NET_PROGRAMME_INFO 个数 + public Pointer pstProgrammeInfo; // 节目配置信息, 内存由用户维护,对应 NET_PROGRAMME_INFO[] + // 大小为 nMaxCnt 个 NET_PROGRAMME_INFO + + public NET_OUT_GET_ALL_PROGRAMMES() { + this.dwSize = this.size(); + } + } + + // 获取所有节目的简要信息输入参数 + public static class NET_IN_GET_ALL_BRIEFLYPROGRAMMES extends Structure { + public int dwSize; + + public NET_IN_GET_ALL_BRIEFLYPROGRAMMES() { + this.dwSize = this.size(); + } + } + + // 获取所有节目的简要信息输出参数 + public static class NET_OUT_GET_ALL_BRIEFLYPROGRAMMES extends Structure { + public int dwSize; + public int nRetCnt; // 实际返回的个数 + public NET_BRIEFLY_PROGRAMME_INFO[] stuBriProgrammes = (NET_BRIEFLY_PROGRAMME_INFO[]) new NET_BRIEFLY_PROGRAMME_INFO().toArray(MAX_PROGRAMMES_COUNT); // 节目简要信息 + + public NET_OUT_GET_ALL_BRIEFLYPROGRAMMES() { + this.dwSize = this.size(); + } + } + + // 节目简要信息 + public static class NET_BRIEFLY_PROGRAMME_INFO extends Structure { + public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 节目名称 + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID + public int emProgrammeType; // 简要节目信息类型,对应枚举 EM_BRIEFLYPROGRAM_TYPE + public int bEnable; // 节目是否启用, BOOL类型 + public int bTempletState; // 节目是否保存为模板, BOOL类型 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // 简要节目信息类型 + public static class EM_BRIEFLYPROGRAM_TYPE extends Structure { + public static final int EM_BRIEFLYPROGRAM_UNKNOWN = 0; // 未知 + public static final int EM_BRIEFLYPROGRAM_BAR = 1; // 广告节目 + public static final int EM_BRIEFLYPROGRAM_ORDINARY = 2; // 普通节目 + } + + // 获取所有节目计划输入参数 + public static class NET_IN_GET_ALL_PROGRAMMEPLANS extends Structure { + public int dwSize; + + public NET_IN_GET_ALL_PROGRAMMEPLANS() { + this.dwSize = this.size(); + } + } + + // 获取所有节目计划输出参数 + public static class NET_OUT_GET_ALL_PROGRAMMEPLANS extends Structure { + public int dwSize; + public int nMaxPlanCnt; // 即时节目和定时节目计划最大个数, 由用户指定 + public int nRetImmCnt; // 实际返回的即时节目计划个数 + public Pointer pstImmePlan; // 即时节目计划信息, 对应 NET_IMMEDIATELY_PLAN_INFO[], + // 大小 nMaxPlanCnt 个 NET_IMMEDIATELY_PLAN_INFO + public int nRetTimerCnt; // 实际返回的定时节目计划个数 + public Pointer pstTimerPlan; // 定时节目计划信息,对应 NET_TIMER_PLAN_INFO[], + // 大小 nMaxPlanCnt 个 NET_TIMER_PLAN_INFO + + public NET_OUT_GET_ALL_PROGRAMMEPLANS() { + this.dwSize = this.size(); + } + } + + // 即时计划与定时计划信息数组 + public static class NET_PROGRAMME_PLANS_INFO extends Structure { + public NET_IMMEDIATELY_PLAN_INFO[] szImmePlan; // 即时节目计划信息数组 + public NET_TIMER_PLAN_INFO[] szTimerPlan; // 定时节目计划信息数组 + + public NET_PROGRAMME_PLANS_INFO() { + } + + public NET_PROGRAMME_PLANS_INFO(int maxPlanCount) { + szImmePlan = new NET_IMMEDIATELY_PLAN_INFO[maxPlanCount]; + szTimerPlan = new NET_TIMER_PLAN_INFO[maxPlanCount]; + for (int i = 0; i < maxPlanCount; i++) { + szImmePlan[i] = new NET_IMMEDIATELY_PLAN_INFO(); + szTimerPlan[i] = new NET_TIMER_PLAN_INFO(); + } + } + } + + // 通过节目计划ID 获取节目计划输入参数 + public static class NET_IN_GET_PROGRAMMEPLAN_BYID extends Structure { + public int dwSize; + public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID + + public NET_IN_GET_PROGRAMMEPLAN_BYID() { + this.dwSize = this.size(); + } + } + + // 通过节目计划ID 获取节目计划输出参数 + public static class NET_OUT_GET_PROGRAMMEPLAN_BYID extends Structure { + public int dwSize; + public int emPlanType; // 节目计划类型, 对应 EM_PROGRAMMEPLAN_TYPE + public NET_IMMEDIATELY_PLAN_INFO stuImmePlan; // 即时节目计划信息, emPlanType 为 EM_PROGRAMMEPLAN_IMME 时有效 + public NET_TIMER_PLAN_INFO stuTimerPlan; // 定时节目计划信息, emPlanType 为 EM_PROGRAMMEPLAN_TIMER 时有效 + + public NET_OUT_GET_PROGRAMMEPLAN_BYID() { + this.dwSize = this.size(); + } + } + + // 节目计划类型 + public static class EM_PROGRAMMEPLAN_TYPE extends Structure { + public static final int EM_PROGRAMMEPLAN_UNKNOWN = 0; // 未知 + public static final int EM_PROGRAMMEPLAN_IMME = 1; // 即时计划 + public static final int EM_PROGRAMMEPLAN_TIMER = 2; // 定时计划 + } + + //设置光带状态信息输入参数 + public static class NET_IN_SET_GD_STATUS extends Structure { + public int dwSize; + public byte[] szScreenID = new byte[MAX_COMMON_STRING_64]; // 分屏ID, 即窗口ID + public int nGDNum; // 光带总数 + public int[] emStatus = new int[MAX_GD_COUNT]; // 光带信息, 对应 EM_GD_COLOR_TYPE + + public NET_IN_SET_GD_STATUS() { + this.dwSize = this.size(); + } + } + + //设置光带状态信息输出参数 + public static class NET_OUT_SET_GD_STATUS extends Structure { + public int dwSize; + + public NET_OUT_SET_GD_STATUS() { + this.dwSize = this.size(); + } + } + + // 光带颜色类型 + public static class EM_GD_COLOR_TYPE extends Structure { + public static final int EM_GD_COLOR_RED = 0; // 红色 + public static final int EM_GD_COLOR_GREEN = 1; // 绿色 + public static final int EM_GD_COLOR_YELLOW = 2; // 黄色 + } + + + // 用户信息表 + public static class USER_MANAGE_INFO_EX extends Structure { + public int dwRightNum; // 权限信息 + public OPR_RIGHT_EX[] rightList = (OPR_RIGHT_EX[]) new OPR_RIGHT_EX().toArray(NET_MAX_RIGHT_NUM); + public int dwGroupNum; // 用户组信息 + public USER_GROUP_INFO_EX[] groupList = (USER_GROUP_INFO_EX[]) new USER_GROUP_INFO_EX().toArray(NET_MAX_GROUP_NUM); + public int dwUserNum; // 用户信息 + public USER_INFO_EX[] userList = (USER_INFO_EX[]) new USER_INFO_EX().toArray(NET_MAX_USER_NUM); + public int dwFouctionMask; // 掩码;0x00000001 - 支持用户复用,0x00000002 - 密码修改需要校验 + public byte byNameMaxLength; // 支持的用户名最大长度 + public byte byPSWMaxLength; // 支持的密码最大长度 + public byte[] byReserve = new byte[254]; + } + + // 权限信息 + public static class OPR_RIGHT_EX extends Structure { + public int dwID; + public byte[] name = new byte[NET_RIGHT_NAME_LENGTH]; + public byte[] memo = new byte[NET_MEMO_LENGTH]; + } + + // 用户组信息 + public static class USER_GROUP_INFO_EX extends Structure { + public int dwID; + public byte[] name = new byte[NET_USER_NAME_LENGTH_EX]; + public int dwRightNum; + public int[] rights = new int[NET_MAX_RIGHT_NUM]; + public byte[] memo = new byte[NET_MEMO_LENGTH]; + } + + // 用户信息 + public static class USER_INFO_EX extends Structure { + public int dwID; + public int dwGroupID; + public byte[] name = new byte[NET_USER_NAME_LENGTH_EX]; + public byte[] passWord = new byte[NET_USER_PSW_LENGTH_EX]; + public int dwRightNum; + public int[] rights = new int[NET_MAX_RIGHT_NUM]; + public byte[] memo = new byte[NET_MEMO_LENGTH]; + public int dwFouctionMask; // 掩码,0x00000001 - 支持用户复用 + public byte[] byReserve = new byte[32]; + } + + // CLIENT_DownloadRemoteFile 接口输入参数(文件下载) + public static class NET_IN_DOWNLOAD_REMOTE_FILE extends Structure { + public int dwSize; + public Pointer pszFileName; // 需要下载的文件名 + public Pointer pszFileDst; // 存放文件路径 + + public NET_IN_DOWNLOAD_REMOTE_FILE() { + this.dwSize = this.size(); + } + } + + // CLIENT_DownloadRemoteFile 接口输出参数(文件下载) + public static class NET_OUT_DOWNLOAD_REMOTE_FILE extends Structure { + public int dwSize; + + public NET_OUT_DOWNLOAD_REMOTE_FILE() { + this.dwSize = this.size(); + } + } + + // 车牌对比, 对应事件 EVENT_IVS_VEHICLE_RECOGNITION + public static class DEV_EVENT_VEHICLE_RECOGNITION_INFO extends Structure { + public byte[] szName = new byte[128]; // 事件名称 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public int nVehicleAction; // 车辆动作 0-未知,1-在检测区域内,2-离开检测区域 + + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_MSG_OBJECT stuVehicle; // 车身信息 + + public NET_SEAT_INFO stuMainSeatInfo; // 主驾驶位信息 + public NET_SEAT_INFO stuSlaveSeatInfo; // 副驾驶位信息 + public int nVehicleAttachNum; // 车上附件数量 + public NET_VEHICLE_ATTACH[] stuVehicleAttach = (NET_VEHICLE_ATTACH[]) new NET_VEHICLE_ATTACH().toArray(8); // 车上附件数据 + public byte[] szCountry = new byte[32]; // 国家,2字节,符合ISO3166规范 + + public int nCarCandidateNum; // 候选车辆数量 + public NET_CAR_CANDIDATE_INFO[] stuCarCandidate = (NET_CAR_CANDIDATE_INFO[]) new NET_CAR_CANDIDATE_INFO().toArray(MAX_CAR_CANDIDATE_NUM); // 候选车辆数据 + + public EVENT_COMM_INFO stCommInfo; // 公共信息 + public int nChannel; // 通道号 + public byte[] bReserved = new byte[1024]; + } + + public static class NET_CAR_CANDIDATE_INFO extends Structure { + public NET_VEHICLE_INFO stuVehicleInfo; // 车辆信息 + public int nDifferentAttributresNum; // 和数据库不相符的属性数目 + public int[] nDifferentAttributres = new int[16]; // 和数据库不相符的属性集合,元素值取值意义:0-未知 1-车牌属地 2-车标 3-车型 4-车色 5-车牌颜色 + + public byte[] bReserved = new byte[512]; + } + + public static class NET_VEHICLE_INFO extends Structure { + public int nUID; // 车辆唯一标识符,由服务端生成用于程序中表示惟一 + public byte[] szGroupID = new byte[64]; // 车辆所属组ID + public byte[] szGroupName = new byte[128]; // 车辆所属组名 + public byte[] szPlateNumber = new byte[64]; // 车牌号码 + public byte[] szPlateCountry = new byte[4]; // 车辆所在国家,2字节,符合ISO3166规范 + + public int nPlateType; // 车牌类型 + // 01 大型汽车号牌 黄底黑字 + // 02 小型汽车号牌 蓝底白字 + // 03 使馆汽车号牌 黑底白字、红“使”字 + // 04 领馆汽车号牌 黑底白字、红“领”字 + // 05 境外汽车号牌 黑底白、红字 + // 06 外籍汽车号牌 黑底白字 + // 13 农用运输车号牌 黄底黑字黑框线 + // 15 挂车号牌 黄底黑字黑框线 + // 16 教练汽车号牌 黄底黑字黑框线 + // 18 试验汽车号牌 + // 20 临时入境汽车号牌 白底红字黑“临时入境” + // 22 临时行驶车号牌 白底黑字黑线框 + // 23 公安警用汽车号牌 + + public int nVehicleType; // 车型(轿车、卡车等) + // 001 巡逻车 + // 002 交警车辆 + // 003 消防车 + // 004 单兵 + // 005 其他警车 + // 006 其他设备 + // 020 政府车辆 + // 031 校车 + // 032 运钞车 + // 033 客运车辆 + // 034 公交车 + // 035 出租车 + // 036 危险品车辆 + + public int nBrand; // 车辆车标,需要通过映射表得到真正的车标.同卡口事件的CarLogoIndex + public int nCarSeries; // 车辆子品牌,需要通过映射表得到真正的子品牌,同卡口事件的SubBrand + public int nCarSeriesModelYearIndex; // 车辆品牌年款,需要通过映射表得到真正的年款,同卡口事件的BrandYear 车头年款序号范围1~999;车尾年款序号范围1001~1999;0表示未知;1000预留。 + public NET_COLOR_RGBA stuVehicleColor; // 车色 第一个元素表示红色分量值; 第二个元素表示绿色分量值; 第三个元素表示蓝色分量值; 第四个元素表示透明度分量(无意义) + public NET_COLOR_RGBA stuPlateColor; // 车牌颜色,规则同车色 + public byte[] szOwnerName = new byte[64]; // 车主名称 + public int nSex; // 车主性别 + public int nCertificateType; // 车主证件类型 0-未知 1-身份证 2-护照 3-军官证 + public byte[] szPersonID = new byte[32]; // 人员身份证号码,工号,或其他编号 + public byte[] szOwnerCountry = new byte[4]; // 车主国籍,2字节,符合ISO3166规范 + public byte[] szProvince = new byte[64]; // 省份 + public byte[] szCity = new byte[64]; // 城市 + public byte[] szHomeAddress = new byte[128]; // 注册人员家庭地址(IVSS需求) + public byte[] szEmail = new byte[32]; // 车主电子邮箱 + public byte[] szPhoneNo = new byte[128]; // 注册车主电话号码 + public byte[] bReserved = new byte[512]; + } + + //获取播放盒上全部节目信息接口输入参数 + public static class NET_IN_GET_ALL_PLAYBOX_PROGRAM extends Structure { + public int dwSize; + + public NET_IN_GET_ALL_PLAYBOX_PROGRAM() { + this.dwSize = this.size(); + } + } + + //获取播放盒上全部节目信息接口输出参数 + public static class NET_OUT_GET_ALL_PLAYBOX_PROGRAM extends Structure { + public int dwSize; + public int nMaxProgramCount; // 节目信息最大个数,由用户指定 + public int nRetProgramCount; // 实际返回的节目信息个数 + public Pointer pstProgramInfo; // 播放盒上的节目信息, 内存资源由用户维护,对应 NET_PROGRAM_ON_PLAYBOX[] + + public NET_OUT_GET_ALL_PLAYBOX_PROGRAM() { + this.dwSize = this.size(); + } + } + + // 播放盒节目信息 + public static class NET_PROGRAM_ON_PLAYBOX extends Structure { + public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 节目名称 + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID, 添加节目时不需要指定 + public int bEnable; // 节目是否启用 + public int emProgramType; // 节目类型, 参考 EM_PLAYBOXPROGRAM_TYPE + public NET_PROGRAM_LOGO_INFO stuLogoInfo; // LOGO节目信息, emProgramType为EM_PROGRAM_ON_PLAYBOX_LOGO时有效 + public NET_PROGRAM_BAR_INFO stuBarInfo; // 广告条节目信息, emProgramType为EM_PROGRAM_ON_PLAYBOX_BAR时有效 + public NET_PROGRAM_ORDINARY_INFO stuOrdinaryInfo = new NET_PROGRAM_ORDINARY_INFO(); // 普通节目信息, emProgramType为EM_PROGRAM_ON_PLAYBOX_ORDINARY时有效, 此参数需要在库里new对象 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // 播放盒节目类型 + public static class EM_PLAYBOXPROGRAM_TYPE extends Structure { + public static final int EM_PROGRAM_ON_PLAYBOX_LOGO = 0; // LOGO, 对应结构体 NET_PROGRAM_LOGO_INFO + public static final int EM_PROGRAM_ON_PLAYBOX_BAR = 1; // 广告条, 对应结构体 NET_PROGRAM_BAR_INFO + public static final int EM_PROGRAM_ON_PLAYBOX_ORDINARY = 2; // 普通节目, 对应结构体 NET_PROGRAM_ORDINARY_INFO + } + + // LOGO节目信息 + public static class NET_PROGRAM_LOGO_INFO extends Structure { + public byte[] szLogoPath = new byte[MAX_COMMON_STRING_128]; // Logo路径 + public NET_RECT stuBackgroundRect; // Logo位置 + public int nDiaphaneity; // 透明度, 0-100 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 广告条节目信息 + public static class NET_PROGRAM_BAR_INFO extends Structure { + public byte[] szContent = new byte[MAX_COMMON_STRING_512]; // 广告内容 + public NET_COLOR_RGBA stuFontColor; // 字体颜色 + public int nFontSize; // 字体大小 + public byte[] szFontStyle = new byte[MAX_COMMON_STRING_32]; // 字体类型 + public int nPlaySpeed; // 播放速度 + public NET_RECT stuBackgroundRect; // 广告条位置 + public NET_COLOR_RGBA stuBackColor; // 广告条背景颜色 + public int nDiaphaneity; // 透明度, 0-100 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 普通广告节目信息 + public static class NET_PROGRAM_ORDINARY_INFO extends Structure { + public int bTempletState; // 节目是否保存为模板 + public byte[] szDescription = new byte[MAX_COMMON_STRING_128]; // 节目描述信息 + public int nWidth; // 画布宽度 + public int nHeight; // 画布高度 + public int nWinCount; // 窗口数量 + public NET_PLAYBOX_WINDOWS_INFO[] stuWindowsInfo = (NET_PLAYBOX_WINDOWS_INFO[]) new NET_PLAYBOX_WINDOWS_INFO().toArray(MAX_WINDOWS_COUNT); // 窗口信息 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 播放盒上窗口信息 + public static class NET_PLAYBOX_WINDOWS_INFO extends Structure { + public NET_RECT stuRect; // 窗口位置 + public int nZorder; // 窗口Z轴序 + public int nVolume; // 窗口音量,相对整屏音量的百分比 + public NET_COLOR_RGBA stuBackColor; // 窗口背景颜色 + public int nDiaphaneity; // 窗口背景透明度0-100 + public int emTourPeriodType; // 窗口轮训类型 EM_TOURPERIOD_TYPE + public int nTourPeriodTime; // 自定义轮训时间,单位秒, 轮训类型为自定义轮训时有效 + public int bAutoPlay; // 预览自动播放,Video元素有效 + public int bLoopPlay; // 预览循环播放,Video元素有效 + public int nElementsCount; // 诱导屏窗口元素个数 + public Pointer pstElementsBuf; // 播放盒窗口元素信息缓存区, 根据类型对应不同的结构体 + // 填充多个元素信息, 每个元素信息内容为 NET_ELEMENT_COMMON_INFO + 元素类型对应的结构体 + public int nBufLen; // 诱导屏窗口元素信息缓存区大小 + public byte[] byReserved = new byte[128]; // 保留字节 + } + + // 通过programme ID 获取播放盒上对应的节目信息输入参数 + public static class NET_IN_GET_PLAYBOX_PROGRAM_BYID extends Structure { + public int dwSize; + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID + + public NET_IN_GET_PLAYBOX_PROGRAM_BYID() { + this.dwSize = this.size(); + } + } + + // 通过programme ID 获取播放盒上对应的节目信息输出参数 + public static class NET_OUT_GET_PLAYBOX_PROGRAM_BYID extends Structure { + public int dwSize; + public NET_PROGRAM_ON_PLAYBOX stuPlayBoxProgram; // 播放盒节目信息 + + public NET_OUT_GET_PLAYBOX_PROGRAM_BYID() { + this.dwSize = this.size(); + } + } + + // 在播放盒上添加一个节目信息输入参数 + public static class NET_IN_ADD_ONE_PLAYBOX_PRAGROM extends Structure { + public int dwSize; + public NET_PROGRAM_ON_PLAYBOX stuPlayBoxProgram; // 播放盒节目信息 + + public NET_IN_ADD_ONE_PLAYBOX_PRAGROM() { + this.dwSize = this.size(); + } + } + + // 在播放盒上添加一个节目信息输出参数 + public static class NET_OUT_ADD_ONE_PLAYBOX_PRAGROM extends Structure { + public int dwSize; + public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID + + public NET_OUT_ADD_ONE_PLAYBOX_PRAGROM() { + this.dwSize = this.size(); + } + } + + // 在播放盒上修改指定ID的节目信息输入参数 + public static class NET_IN_MODIFY_PLAYBOX_PROGRAM_BYID extends Structure { + public int dwSize; + public NET_PROGRAM_ON_PLAYBOX stuPlayBoxProgram; // 播放盒节目信息 + + public NET_IN_MODIFY_PLAYBOX_PROGRAM_BYID() { + this.dwSize = this.size(); + } + } + + // 在播放盒上修改指定ID的节目信息输出参数 + public static class NET_OUT_MODIFY_PLAYBOX_PROGRAM_BYID extends Structure { + public int dwSize; + + public NET_OUT_MODIFY_PLAYBOX_PROGRAM_BYID() { + this.dwSize = this.size(); + } + } + + //云台定位信息报警 + public static class NET_PTZ_LOCATION_INFO extends Structure { + public int nChannelID; // 通道号 + public int nPTZPan; // 云台水平运动位置,有效范围:[0,3600] + public int nPTZTilt; // 云台垂直运动位置,有效范围:[-1800,1800] + public int nPTZZoom; // 云台光圈变动位置,有效范围:[0,128] + public byte bState; // 云台运动状态, 0-未知 1-运动 2-空闲 + public byte bAction; // 云台动作,255-未知,0-预置点,1-线扫,2-巡航,3-巡迹,4-水平旋转,5-普通移动,6-巡迹录制,7-全景云台扫描,8-热度图 + // 9-精确定位,10-设备校正,11-智能配置,12-云台重启 + public byte bFocusState; // 云台聚焦状态, 0-未知, 1-运动状态, 2-空闲 + public byte bEffectiveInTimeSection; // 在时间段内预置点状态是否有效 + // 如果当前上报的预置点是时间段内的预置点,则为1,其他情况为0 + public int nPtzActionID; // 巡航ID号 + public int dwPresetID; // 云台所在预置点编号 + public float fFocusPosition; // 聚焦位置 + public byte bZoomState; // 云台ZOOM状态,0-未知,1-ZOOM,2-空闲 + public byte[] bReserved = new byte[3]; // 对齐 + public int dwSequence; // 包序号,用于校验是否丢包 + public int dwUTC; // 对应的UTC(1970-1-1 00:00:00)秒数。 + public int emPresetStatus; // 预置点位置,参考 EM_DH_PTZ_PRESET_STATUS + public int nZoomValue; // 真实变倍值 当前倍率(扩大100倍表示) + public int[] reserved = new int[244]; // 保留字段 + } + + // 预置点状态枚举 + public static class EM_DH_PTZ_PRESET_STATUS extends Structure { + public static final int EM_DH_PTZ_PRESET_STATUS_UNKNOWN = 0; // 未知 + public static final int EM_DH_PTZ_PRESET_STATUS_REACH = 1; // 预置点到达 + public static final int EM_DH_PTZ_PRESET_STATUS_UNREACH = 2; // 预置点未到达 + } + + public static class NET_EM_CFG_OPERATE_TYPE extends Structure { + public static final int NET_EM_CFG_SNAP_MODE = 0; // 抓图模式配置,对应结构体 NET_SNAP_MODE + public static final int NET_EM_CFG_DEV_CAR_COACH = 1; // 铁路记录配置, 对应结构体 NET_DEV_CAR_COACH_INFO + public static final int NET_EM_CFG_YUEQING_SUPPLYLIGHTING = 2; // 乐清外接灯光配置, 对应结构体 NET_YUEQING_SUPPLYLIGHTING_INFO + public static final int NET_EM_CFG_MEDIA_GLOBAL = 3; // 媒体组件全局配置, 对应结构体 NET_MEDIA_GLOBAL_INFO + + /*********OSD叠加相关配置*************************************************************************************************/ + public static final int NET_EM_CFG_CHANNELTITLE = 1000; // 叠加通道标题属性配置,对应结构体 NET_OSD_CHANNEL_TITLE,其中结构体中的emOsdBlendType为必填参数 + public static final int NET_EM_CFG_TIMETITLE = 1001; // 叠加时间标题属性配置,对应结构体 NET_OSD_TIME_TITLE,其中结构体中的emOsdBlendType为必填参数 + public static final int NET_EM_CFG_CUSTOMTITLE = 1002; // 叠加自定义标题属性配置,对应结构体 NET_OSD_CUSTOM_TITLE,其中结构体中的stuCustomTitle.emOsdBlendType为必填参数 + public static final int NET_EM_CFG_CUSTOMTITLETEXTALIGN = 1003; // 叠加自定义标题对齐方式属性配置,对应结构体 NET_OSD_CUSTOM_TITLE_TEXT_ALIGN + public static final int NET_EM_CFG_OSDCOMMINFO = 1004; // 叠加公共属性配置,对应结构体 NET_OSD_COMM_INFO + public static final int NET_EM_CFG_OSD_PTZZOOM = 1005; // 变倍叠加配置,对应结构体 NET_OSD_PTZZOOM_INFO + public static final int NET_EM_CFG_GPSTITLE = 1006; // 叠加GPS标题显示配置,对应结构体 NET_OSD_GPS_TITLE + public static final int NET_EM_CFG_OSD_NUMBERSTATPLAN = 1007; // 人数统计计划叠加OSD配置, 支持NumberStatPlan算法大类时(球机)使用,对应结构体NET_OSD_NUMBER_STATPLAN + public static final int NET_EM_CFG_GPSSTARNUM_OSD = 1008; // GPS搜星数OSD配置, 车载定制需求, 对应结构体 NET_CFG_GPSSTARNUM_OSD_INFO + + /*********encode 相关配置*************************************************************************************************/ + public static final int NET_EM_CFG_ENCODE_VIDEO = 1100; // 编码视频格式属性配置,对应结构体 NET_ENCODE_VIDEO_INFO + public static final int NET_EM_CFG_ENCODE_VIDEO_PACK = 1101; // 编码视频格式打包模式配置,对应结构体 NET_ENCODE_VIDEO_PACK_INFO + public static final int NET_EM_CFG_ENCODE_VIDEO_SVC = 1102; // 编码视频格式SVC配置,对应结构体 NET_ENCODE_VIDEO_SVC_INFO + public static final int NET_EM_CFG_ENCODE_VIDEO_PROFILE = 1103; // 编码视频格式profile配置,对应结构体 NET_ENCODE_VIDEO_PROFILE_INFO + public static final int NET_EM_CFG_ENCODE_AUDIO_COMPRESSION = 1104; // 编码音频压缩格式配置,对应结构体 NET_ENCODE_AUDIO_COMPRESSION_INFO + public static final int NET_EM_CFG_ENCODE_AUDIO_INFO = 1105; // 编码音频格式配置,对应结构体 NET_ENCODE_AUDIO_INFO + public static final int NET_EM_CFG_ENCODE_SNAP_INFO = 1106; // 编码抓图配置,对应结构体 NET_ENCODE_SNAP_INFO + public static final int NET_EM_CFG_ENCODE_SNAPTIME = 1107; // 编码抓图时间相关配置,对应结构体 NET_ENCODE_SNAP_TIME_INFO + public static final int NET_EM_CFG_ENCODE_CHANNELTITLE = 1108; // 通道名称配置,对应结构体 NET_ENCODE_CHANNELTITLE_INFO + + /**********音频相关配置***************************************************************************************************/ + public static final int NET_EM_CFG_AUDIOIN_SOURCE = 1200; // 音频输入类型配置,对应结构体 NET_ENCODE_AUDIO_SOURCE_INFO + public static final int NET_EM_CFG_AUDIOIN_DENOISE = 1201; // 音频降噪配置,对应结构体 NET_AUDIOIN_DENOISE_INFO + public static final int NET_EM_CFG_AUDIOIN_VOLUME = 1202; // 音频输入音量配置,对应结构体 NET_AUDIOIN_VOLUME_INFO + public static final int NET_EM_CFG_AUDIOOUT_VOLUME = 1203; // 音频输出音量配置,对应结构体 NET_AUDIOOUT_VOLUME_INFO + + /**********videoin 相关配置***********************************************************************************************/ + public static final int NET_EM_CFG_VIDEOIN_SWITCHMODE = 1300; // 切换模式配置,对应结构体 NET_VIDEOIN_SWITCH_MODE_INFO + public static final int NET_EM_CFG_VIDEOIN_COLOR = 1301; // 视频输入颜色配置,对应结构体 NET_VIDEOIN_COLOR_INFO + public static final int NET_EM_CFG_VIDEOIN_IMAGE_OPT = 1302; // 图像属性配置,对应结构体 NET_VIDEOIN_IMAGE_INFO + public static final int NET_EM_CFG_VIDEOIN_STABLE = 1303; // 图像防抖配置,对应结构体 NET_VIDEOIN_STABLE_INFO + public static final int NET_EM_CFG_VIDEOIN_IRISAUTO = 1304; // 自动光圈配置,对应结构体 NET_VIDEOIN_IRISAUTO_INFO + public static final int NET_EM_CFG_VIDEOIN_IMAGEENHANCEMENT = 1305; // 图像增强配置,对应结构体 NET_VIDEOIN_IMAGEENHANCEMENT_INFO + public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_NORMAL = 1306; // 曝光通用属性配置,对应结构体 NET_VIDEOIN_EXPOSURE_NORMAL_INFO + public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_OTHER = 1307; // 其他曝光属性配置,对应结构体 NET_VIDEOIN_EXPOSURE_OTHER_INFO + public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_SHUTTER = 1308; // 曝光快门配置,对应结构体 NET_VIDEOIN_EXPOSURE_SHUTTER_INFO + public static final int NET_EM_CFG_VIDEOIN_BACKLIGHT = 1309; // 背光配置,对应结构体 NET_VIDEOIN_BACKLIGHT_INFO + public static final int NET_EM_CFG_VIDEOIN_INTENSITY = 1310; // 场景自适应对比度强度配置,对应结构体 NET_VIDEOIN_INTENSITY_INFO + public static final int NET_EM_CFG_VIDEOIN_LIGHTING = 1311; // 补光灯配置,对应结构体 NET_VIDEOIN_LIGHTING_INFO + public static final int NET_EM_CFG_VIDEOIN_DEFOG = 1312; // 透雾配置,对应结构体 NET_VIDEOIN_DEFOG_INFO + public static final int NET_EM_CFG_VIDEOIN_FOCUSMODE = 1313; // 聚焦模式配置,对应结构体 NET_VIDEOIN_FOCUSMODE_INFO + public static final int NET_EM_CFG_VIDEOIN_FOCUSVALUE = 1314; // 聚焦信息配置,对应结构体 NET_VIDEOIN_FOCUSVALUE_INFO + public static final int NET_EM_CFG_VIDEOIN_WHITEBALANCE = 1315; // 白平衡配置,对应结构体 NET_VIDEOIN_WHITEBALANCE_INFO + public static final int NET_EM_CFG_VIDEOIN_DAYNIGHT = 1316; // 日夜模式配置,对应结构体 NET_VIDEOIN_DAYNIGHT_INFO + public static final int NET_EM_CFG_VIDEOIN_DAYNIGHT_ICR = 1317; // 日夜模式ICR切换类型配置,对应结构体 NET_VIDEOIN_DAYNIGHT_ICR_INFO + public static final int NET_EM_CFG_VIDEOIN_SHARPNESS = 1318; // 锐度配置,对应结构体 NET_VIDEOIN_SHARPNESS_INFO + public static final int NET_EM_CFG_VIDEOIN_COMM_DENOISE = 1319; // 通用降噪配置,对应结构体 NET_VIDEOIN_DENOISE_INFO + public static final int NET_EM_CFG_VIDEOIN_3D_DENOISE = 1320; // 3D 降噪配置,对应结构体 NET_VIDEOIN_3D_DENOISE_INFO + + /***********庭审相关配置*****************************************************************************************/ + public static final int NET_EM_CFG_ENCODE_PLAN = 1400; // 刻录光盘编码计划, 对应结构体 NET_ENCODE_PLAN_INFO + public static final int NET_EM_CFG_COMPOSE_CHANNEL = 1401; // 合成通道配置, 对应结构体NET_COMPOSE_CHANNEL_INFO + + /**********报警网关相关配置**************************************************************************************/ + public static final int NET_EM_CFG_ALARM_SOUND = 1500; // 报警网关语音配置, 对应结构体 NET_ALARM_SOUND_INFO + + /**********网络应用相关配置**************************************************************************************/ + public static final int NET_EM_CFG_ACCESS_POINT = 1600; // 用于WiFi服务端配置(热点功能), 对应结构体 NET_NETAPP_ACCESSPOINT + + /**************安全基线需求**************************************************************************************/ + public static final int NET_EM_CFG_NAS = 1700; // NAS 配置, 对应结构体 NET_NAS_INFO + public static final int NET_EM_CFG_PPPOE = 1701; // PPPOE 配置,对应结构体 NET_PPPOE_INFO + public static final int NET_EM_CFG_EMAIL = 1702; // Email 配置,对应结构体 NET_EAMIL_INFO + public static final int NET_EM_CFG_DDNS = 1703; // DDNS 配置,对应结构体 NET_DDNS_INFO + + /**************SCADA配置需求**************************************************************************************/ + public static final int NET_EM_CFG_SCADA_PROTOCOLS_MANAGER = 1800; // 协议管理配置,对应结构体 NET_SCADA_PROTOCOLS_MANAGER + public static final int NET_EM_CFG_SCADA_DEVICEINFO_CFG = 1801; // 设备信息配置,对应结构体 NET_SCADA_DEVICEINFO_CFG + + /**************NetApp配置需求*************************************************************************************/ + public static final int NET_EM_CFG_NETAPP_LINK_LAYER_VPN = 1900; // 链路层VPN设置,对应结构体 NET_NETAPP_LINK_LAYER_VPN_CFG + + /**************中国铁塔平台接入***********************************************************************************/ + public static final int NET_EM_CFG_VSP_CHINA_TOWER = 2000; // 安徽治超平台接入配置,对应结构体 NET_VSP_CHINA_TOWER + + /**********智能相关配置*******************************************************************************************/ + public static final int NET_EM_CFG_STEREO_CALIBRATE = 2100; // 双目标定结果, 对应结构体NET_STEREO_CALIBRATE_INFO + public static final int NET_EM_CFG_STEREO_CALIBRATEMATRIX_MULTISENSOR = 2101; // 多目相机标定配置CalibrateMatrix(MultiSensor), 对应的结构体 NET_MULTI_SENSOR_INFO + + /**********雷达配置***********************************************************************************************/ + public static final int NET_EM_CFG_RADAR = 2200; // 雷达配置,对应结构体 DEV_RADAR_CONFIG + + /**********视频对讲电话通用配置***********************************************************************************/ + public static final int NET_EM_CFG_VTH_PASSWORD = 2300; // 视频对讲电话通用配置,对应结构体 NET_CFG_VTH_PASSWORD_INFO + public static final int NET_EM_CFG_REGISTAR = 2301; // 注册服务器配置,对应结构体 NET_CFG_REGISTAR_INFO + public static final int NET_EM_CFG_SIP = 2302; // sip配置, 对应结构体 NET_CFG_SIPSERVER_INFO + + /**********镜头前遮挡盖配置***************************************************************************************/ + public static final int NET_EM_CFG_AELENSMASK = 2400; //镜头前遮挡盖配置,对应结构体NET_CFG_AELENSMASK_INFO + + public static final int NET_EM_CFG_ULTRASONIC = 2500; //超声波配置,对应结构体NET_CFG_ULTRASONIC_INFO + + /**********报警主机相关配置***************************************************************************************/ + public static final int NET_EM_CFG_ARMSCHEDULE = 2600; // 报警计划配置,对应结构体 NET_CFG_ARMSCHEDULE_INFO + + /**********录像抓图功能相关配置***********************************************************************************/ + public static final int NET_EM_CFG_RECORDEXTRA = 3610; // 录像辅码流录像配置, 对应结构体 NET_CFG_RECORDEXTRA_INFO + + /**********视频诊断相关配置***************************************************************************************/ + public static final int NET_EM_VIDEODIAGNOSIS_PROJECT = 3700; // 视频诊断计划配置, 对应结构体NET_CFG_VIDEODIAGNOSIS_PROJECT_INFO + + /***********车载相关配置******************************************************************************************/ + public static final int NET_EM_CFG_POSITIONREPORTPOLICY = 3800; // 车载GPS位置信息上报策略配置, 对应结构体 NET_CFG_POSITIONREPORTPOLICY_INFO + public static final int NET_EM_CFG_VEHICLE_WORKTIMESCHEDULE = 3801; // 车载工作计划配置,对应结构体 NET_CFG_VEHICLE_WORKTIMESCHEDULE_INFO + public static final int NET_EM_CFG_VEHICLE_LOAD = 3802; // 荷载人数配置, 对应结构体 NET_CFG_VEHICLE_LOAD_INFO + + /***********门禁相关配置******************************************************************************************/ + public static final int NET_EM_CFG_ACCESSCTL_BLACKLIST = 3900; // 门禁黑名单报警配置,对应结构体 NET_CFG_ACCESSCTL_BLACKLIST + public static final int NET_EM_CFG_ACCESSCTL_BLACKLIST_LINK = 3901; // 门禁黑名单报警联动配置,对应结构体 NET_CFG_ALARM_MSG_HANDLE + public static final int NET_EM_CFG_ACCESSCTL_SPECIALDAY_GROUP = 3902; // 门禁节假日组配置, 对应结构体 NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO + public static final int NET_EM_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE = 3903; // 门禁节假日计划配置, 对应结构体 NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO + + /***********定制配置************************************************************************************************/ + public static final int NET_EM_CFG_SERIALNOWHITETABLE = 4000; // 前端序列号白名单下发至NVR 配置, 对应结构体 NET_CFG_SERIALNOWHITETABLE_INFO + + /***********道闸配置************************************************************************************************/ + public static final int NET_EM_CFG_TRAFFICSTROBE = 9100; // 道闸配置, 对应结构体 NET_CFG_TRAFFICSTROBE_INFO + } + + //通用曝光属性配置 + public static class NET_VIDEOIN_EXPOSURE_NORMAL_INFO extends Structure { + public int dwSize; + public int emCfgType; // 配置类型,获取和设置时都要指定,对应枚举 NET_EM_CONFIG_TYPE + public int emExposureMode; // 曝光模式, 对应枚举 NET_EM_EXPOSURE_MODE + public int nAntiFlicker; // 防闪烁0-Outdoor 1-50Hz防闪烁 2-60Hz防闪烁 + public int nCompensation; // 曝光补偿0-100 + public int nGain; // 增益值 + public int nGainMin; // 增益下限0-100 + public int nGainMax; // 增益上限0-100 + public int nExposureIris; // 光圈值,模式为光圈优先时有效,0-100 + public double dbExposureValue1; // 自动曝光时间下限或者手动曝光自定义时间,毫秒为单位,取值0.1ms~80ms + public double dbExposureValue2; // 自动曝光时间上限,毫秒为单位,取值0.1ms~80ms,且必须不小于"ExposureValue1"取值 + + public NET_VIDEOIN_EXPOSURE_NORMAL_INFO() { + this.dwSize = this.size(); + } + } + + // 每个通道对应的配置类型 + public static class NET_EM_CONFIG_TYPE extends Structure { + public static final int NET_EM_CONFIG_DAYTIME = 0; // 白天 + public static final int NET_EM_CONFIG_NIGHT = 1; // 夜晚 + public static final int NET_EM_CONFIG_NORMAL = 2; // 普通 + } + + // 曝光模式 + public static class NET_EM_EXPOSURE_MODE extends Structure { + public static final int NET_EM_EXPOSURE_AUTO = 0; // 默认自动 + public static final int NET_EM_EXPOSURE_LOWNICE = 1; // 低噪声 + public static final int NET_EM_EXPOSURE_ANTISHADOW = 2; // 防拖影 + public static final int NET_EM_EXPOSURE_MANUALRANGE = 4; // 手动区间 + public static final int NET_EM_EXPOSURE_APERTUREFIRST = 5; // 光圈优先 + public static final int NET_EM_EXPOSURE_MANUALFIXATION = 6; // 手动固定 + public static final int NET_EM_EXPOSURE_GIANFIRST = 7; // 增益优先 + public static final int NET_EM_EXPOSURE_SHUTTERFIRST = 8; // 快门优先 + public static final int NET_EM_EXPOSURE_FLASHMATCH = 9; // 闪光灯匹配模式 + } + + // 背光模式 + public static class NET_EM_BACK_MODE extends Structure { + public static final int NET_EM_BACKLIGHT_MODE_UNKNOW = 0; // 未知模式 + public static final int NET_EM_BACKLIGHT_MODE_OFF = 1; // 关闭 + public static final int NET_EM_BACKLIGHT_MODE_BACKLIGHT = 2; // 背光补偿 + public static final int NET_EM_BACKLIGHT_MODE_WIDEDYNAMIC = 3; // 宽动态 + public static final int NET_EM_BACKLIGHT_MODE_GLAREINHIBITION = 4; // 强光抑制 + public static final int NET_EM_BACKLIGHT_MODE_SSA = 5; // 场景自适应 + } + + // 背光补偿模式 + public static class NET_EM_BLACKLIGHT_MODE extends Structure { + public static final int NET_EM_BLACKLIGHT_UNKNOW = 0; // 未知模式 + public static final int NET_EM_BLACKLIGHT_DEFAULT = 1; // 默认模式 + public static final int NET_EM_BLACKLIGHT_REGION = 2; // 自定义区域模式 + } + + // 背光配置 + public static class NET_VIDEOIN_BACKLIGHT_INFO extends Structure { + public int dwSize; + public int emCfgType; // 配置类型,获取和设置时都要指定, 对应枚举 NET_EM_CONFIG_TYPE + public int emBlackMode; // 背光模式, 对应枚举 NET_EM_BACK_MODE + public int emBlackLightMode; // 背光补偿模式, 对应枚举 NET_EM_BLACKLIGHT_MODE + public NET_RECT stuBacklightRegion; // 背光补偿区域 + public int nWideDynamicRange; // 宽动态值,emBlackMode为NET_EM_BACKLIGHT_MODE_WIDEDYNAMIC时生效 + public int nGlareInhibition; // 强光抑制0-100,emBlackMode为NET_EM_BACKLIGHT_MODE_GLAREINHIBITION时生效 + + public NET_VIDEOIN_BACKLIGHT_INFO() { + this.dwSize = this.size(); + } + } + + // 聚焦模式配置 + public static class NET_VIDEOIN_FOCUSMODE_INFO extends Structure { + public int dwSize; + public int emCfgType; // 配置类型,获取和设置时都要指定,对应枚举 NET_EM_CONFIG_TYPE + public int emFocusMode; // 聚焦模式, 对应枚举 NET_EM_FOCUS_MODE + + public NET_VIDEOIN_FOCUSMODE_INFO() { + this.dwSize = this.size(); + } + } + + // 聚焦模式 + public static class NET_EM_FOCUS_MODE extends Structure { + public static final int NET_EM_FOCUS_OFF = 0; // 关闭 + public static final int NET_EM_FOCUS_ASSIST = 1; // 辅助聚焦 + public static final int NET_EM_FOCUS_AUTO = 2; // 自动聚焦 + public static final int NET_EM_FOCUS_SEMI_AUTO = 3; // 半自动聚焦 + public static final int NET_EM_FOCUS_MANUAL = 4; // 手动聚焦 + } + + // 图像属性配置 + public static class NET_VIDEOIN_IMAGE_INFO extends Structure { + public int dwSize; + public int emCfgType; // 配置类型,获取和设置时都要制定,对应枚举 NET_EM_CONFIG_TYPE + public int bMirror; // 是否开启画面镜像功能 + public int bFlip; // 是否开启画面翻转功能 + public int nRotate90; // 0-不旋转,1-顺时针90°,2-逆时针90° + + public NET_VIDEOIN_IMAGE_INFO() { + this.dwSize = this.size(); + } + } + + // 网络协议配置 + public static class CFG_DVRIP_INFO extends Structure { + public int nTcpPort; // TCP服务端口,1025~65535 + public int nSSLPort; // SSL服务端口,1025~65535 + public int nUDPPort; // UDP服务端口,1025~65535 + public int nMaxConnections; // 最大连接数 + public int bMCASTEnable; // 组播使能 + public int nMCASTPort; // 组播端口号 + public byte[] szMCASTAddress = new byte[MAX_ADDRESS_LEN]; // 组播地址 + public int nRegistersNum; // 主动注册配置个数 + public CFG_REGISTER_SERVER_INFO[] stuRegisters = (CFG_REGISTER_SERVER_INFO[]) new CFG_REGISTER_SERVER_INFO().toArray(MAX_REGISTER_NUM);// 主动注册配置 + public int emStreamPolicy; // 带宽不足时码流策略,对应枚举 EM_STREAM_POLICY + public CFG_REGISTERSERVER_VEHICLE stuRegisterServerVehicle; // 车载专用主动注册配置 + } + + // 带宽不足时码流策略 + public static class EM_STREAM_POLICY extends Structure { + public static final int STREAM_POLICY_UNKNOWN = 0; + public static final int STREAM_POLICY_NONE = 1; // 无策略,不开启使能"None" + public static final int STREAM_POLICY_QUALITY = 2; // 画质优先"Quality" + public static final int STREAM_POLICY_FLUENCY = 3; // 流畅度优先"Fluency" + public static final int STREAM_POLICY_AUTOADAPT = 4; // 自动"AutoAdapt" + } + + // 主动注册配置 + public static class CFG_REGISTER_SERVER_INFO extends Structure { + public int bEnable; // 主动注册使能 + public byte[] szDeviceID = new byte[MAX_ADDRESS_LEN]; // 设备ID + public int nServersNum; // 服务器个数 + public CFG_SERVER_INFO[] stuServers = (CFG_SERVER_INFO[]) new CFG_SERVER_INFO().toArray(MAX_SERVER_NUM); // 服务器数组 + } + + // 服务器 + public static class CFG_SERVER_INFO extends Structure { + public int nPort; // 服务器端口号 + public byte[] szAddress = new byte[MAX_ADDRESS_LEN]; // IP地址或网络名 + } + + // 车载专用主动注册配置 + public static class CFG_REGISTERSERVER_VEHICLE extends Structure { + public int bEnable; // 主动注册使能 + public int bRepeatEnable; // 是否发送相同坐标数据 + public byte[] szDeviceID = new byte[MAX_ADDRESS_LEN]; // 子设备ID + public int nSendInterval; // 发送间隔, 单位:秒 + public byte[] szAddress = new byte[MAX_ADDRESS_LEN]; // IP地址或网络名 + public int nPort; // 端口号 + public int emSendPolicy; // 上传策略,对应枚举 EM_CFG_SENDPOLICY + public byte[] szTestAddress = new byte[MAX_ADDRESS_LEN]; // 测试IP地址或网络名 + public int nTestPort; // 测试端口号 + public byte[] byReserved = new byte[1024]; // 保留字节 + } + + // 上传策略 + public static class EM_CFG_SENDPOLICY extends Structure { + public static final int EM_SNEDPOLICY_UNKNOWN = -1; + public static final int EM_SENDPOLICY_TIMING = 0; // 定时上报 + public static final int EM_SENDPOLICY_EVENT = 1; // 事件触发上报 + } + + // 网络接口配置 + public static class CFG_NETWORK_INFO extends Structure { + public byte[] szHostName = new byte[MAX_NAME_LEN]; // 主机名称 + public byte[] szDomain = new byte[MAX_NAME_LEN]; // 所属域 + public byte[] szDefInterface = new byte[MAX_NAME_LEN]; // 默认使用的网卡 + public int nInterfaceNum; // 网卡数量 + public CFG_NETWORK_INTERFACE[] stuInterfaces = (CFG_NETWORK_INTERFACE[]) new CFG_NETWORK_INTERFACE().toArray(MAX_NETWORK_INTERFACE_NUM); // 网卡列表 + } + + // 网络接口 + public static class CFG_NETWORK_INTERFACE extends Structure { + public byte[] szName = new byte[MAX_NAME_LEN]; // 网络接口名称 + public byte[] szIP = new byte[MAX_ADDRESS_LEN]; // ip地址 + public byte[] szSubnetMask = new byte[MAX_ADDRESS_LEN]; // 子网掩码 + public byte[] szDefGateway = new byte[MAX_ADDRESS_LEN]; // 默认网关 + public int bDhcpEnable; // 是否开启DHCP + public int bDnsAutoGet; // DNS获取方式,dhcp使能时可以设置为true,支持通过dhcp获取 + public DNS_SERVERS[] szDnsServersArr = (DNS_SERVERS[]) new DNS_SERVERS().toArray(MAX_DNS_SERVER_NUM); // DNS服务器地址 + public int nMTU; // 网络最大传输单元 + public byte[] szMacAddress = new byte[MAX_ADDRESS_LEN]; // mac地址 + public int bInterfaceEnable; // 网络接口使能开关,表示该网口配置是否生效。不生效时,IP地址不设置到网卡上。 + public int bReservedIPEnable; // DHCP失败时是否使用保留IP,使用保留IP时还继续发DHCP请求 + public int emNetTranmissionMode; // 网络传输模式,默认adapt自适应模式, 对应枚举 CFG_ENUM_NET_TRANSMISSION_MODE + public int emInterfaceType; // 网口类型, 对应枚举 CFG_ENUM_NET_INTERFACE_TYPE + public int bBond; // 是否绑定虚拟网口,对应枚举 CFG_THREE_STATUS_BOOL + } + + public static class DNS_SERVERS extends Structure { + public byte[] szDnsServers = new byte[MAX_ADDRESS_LEN]; // DNS服务器地址 + } + + // 网络传输模式 + public static class CFG_ENUM_NET_TRANSMISSION_MODE extends Structure { + public static final int CFG_ENUM_NET_MODE_ADAPT = 0; // 自适应 + public static final int CFG_ENUM_NET_MODE_HALF10M = 1; // 10M半双工 + public static final int CFG_ENUM_NET_MODE_FULL10M = 2; // 10M全双工 + public static final int CFG_ENUM_NET_MODE_HALF100M = 3; // 100M半双工 + public static final int CFG_ENUM_NET_MODE_FULL100M = 4; // 100M全双工 + } + + // 网口类型 + public static class CFG_ENUM_NET_INTERFACE_TYPE extends Structure { + public static final int CFG_ENUM_NET_INTERFACE_TYPE_UNKNOWN = 0; // 未知 + public static final int CFG_ENUM_NET_INTERFACE_TYPE_STANDARD = 1; // 标准网口 + public static final int CFG_ENUM_NET_INTERFACE_TYPE_MANAGER = 2; // 管理网口 + public static final int CFG_ENUM_NET_INTERFACE_TYPE_EXTEND = 3; // 扩展网口 + } + + //三态布尔类型 + public static class CFG_THREE_STATUS_BOOL extends Structure { + public static final int CFG_BOOL_STATUS_UNKNOWN = -1; //未知 + public static final int CFG_BOOL_STATUS_FALSE = 0; + public static final int CFG_BOOL_STATUS_TRUE = 1; + } + + + // RTMP配置 + public static class CFG_RTMP_INFO extends Structure { + public int bEnable; // RTMP配置是否开启 + public byte[] szAddr = new byte[MAX_ADDRESS_LEN]; // RTMP服务器地址 + public int nPort; // RTMP服务器端口 + public int nMainChnNum; // 主码流通道个数 + public int[] szMainChannel = new int[AV_CFG_Max_Channel_Num]; // 启用主码流通道号列表:每个成员表示对应的通道需要上传到RTMP服务器,通道号从0开始 + public int nExtraChnNum; // 辅码流通道个数 + public int[] szExtraChannel = new int[AV_CFG_Max_Channel_Num]; // 启用辅码流通道号列表:每个成员表示对应的通道需要上传到RTMP服务器,通道号从0开始 + public byte[] szCustomPath = new byte[MAX_ADDRESS_LEN]; // 定制路径名 + public byte[] szStreamPath = new byte[MAX_ADDRESS_LEN]; // 码流路径前缀:不同通道以后缀数字区分 + } + + // 下载远程文件事件,对应 NET_ALARM_DOWNLOAD_REMOTE_FILE + public static class ALARM_DOWNLOAD_REMOTE_FILE_INFO extends Structure { + public double dbPTS; // 时间戳(单位是毫秒) + public NET_TIME_EX stuTime; // 事件发生的时间 + public int nEventID; // 事件ID + public byte[] szURL = new byte[NET_COMMON_STRING_256]; // 下载文件对应的URL地址 + public int nProgress; // 下载进度[0,100] + public byte[] byReserved = new byte[1020]; // 保留字节 + } + + // CLIENT_GetSplitWindowsInfo接口输入参数 + public static class NET_IN_SPLIT_GET_WINDOWS extends Structure { + public int dwSize; + public int nChannel; // 通道号 + + public NET_IN_SPLIT_GET_WINDOWS() { + this.dwSize = this.size(); + } + } + + // CLIENT_GetSplitWindowsInfo接口输出参数 + public static class NET_OUT_SPLIT_GET_WINDOWS extends Structure { + public int dwSize; + public NET_BLOCK_COLLECTION stuWindows; // 窗口信息 + + public NET_OUT_SPLIT_GET_WINDOWS() { + this.dwSize = this.size(); + } + } + + // 融合屏通道信息 + public static class NET_COMPOSITE_CHANNEL extends Structure { + public int dwSize; + public byte[] szMonitorWallName = new byte[NET_DEVICE_NAME_LEN]; // 电视墙名称 + public byte[] szCompositeID = new byte[NET_DEV_ID_LEN_EX]; // 融合屏ID + public int nVirtualChannel; // 虚拟通道号 + + public NET_COMPOSITE_CHANNEL() { + this.dwSize = this.size(); + } + } + + // 电视墙 + public static class AV_CFG_MonitorWall extends Structure { + public int nStructSize; + public byte[] szName = new byte[AV_CFG_Monitor_Name_Len]; // 名称 + public int nLine; // 网络行数 + public int nColumn; // 网格列数 + public int nBlockCount; // 区块数量 + public AV_CFG_MonitorWallBlock[] stuBlocks = (AV_CFG_MonitorWallBlock[]) new AV_CFG_MonitorWallBlock().toArray(AV_CFG_Max_Block_In_Wall);// 区块数组 + public int bDisable; // 是否禁用, 0-该电视墙有效, 1-该电视墙无效 + public byte[] szDesc = new byte[CFG_COMMON_STRING_256]; // 电视墙描述信息 + + public AV_CFG_MonitorWall() { + this.nStructSize = this.size(); + } + } + + // 电视墙区块 + public static class AV_CFG_MonitorWallBlock extends Structure { + public int nStructSize; + public int nLine; // 单个TV占的网格行数 + public int nColumn; // 单个TV占的网格列数 + public AV_CFG_Rect stuRect; // 区块的区域坐标 + public int nTVCount; // TV数量 + public AV_CFG_MonitorWallTVOut[] stuTVs = (AV_CFG_MonitorWallTVOut[]) new AV_CFG_MonitorWallTVOut().toArray(AV_CFG_Max_TV_In_Block); // TV数组 + public TIME_SECTION_WEEK_DAY_6[] stuTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_6[]) new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM); // 开关机时间 + public byte[] szName = new byte[AV_CFG_Channel_Name_Len]; // 区块名称 + public byte[] szCompositeID = new byte[AV_CFG_Device_ID_Len]; // 融合屏ID + public byte[] szBlockType = new byte[NET_COMMON_STRING_32]; // 显示单元组类型,为支持由接收卡组成单元的小间距LED区块而增加该字段,其他类型的区块填写为"LCD",如不存在该字段,默认采用LCD + + public AV_CFG_MonitorWallBlock() { + this.nStructSize = this.size(); + } + } + + // 区域 + public static class AV_CFG_Rect extends Structure { + public int nStructSize; + public int nLeft; + public int nTop; + public int nRight; + public int nBottom; + + public AV_CFG_Rect() { + this.nStructSize = this.size(); + } + } + + ; + + // 电视墙输出通道信息 + public static class AV_CFG_MonitorWallTVOut extends Structure { + public int nStructSize; + public byte[] szDeviceID = new byte[AV_CFG_Device_ID_Len]; // 设备ID, 为空或"Local"表示本地设备 + public int nChannelID; // 通道ID + public byte[] szName = new byte[AV_CFG_Channel_Name_Len]; // 屏幕名称 + + public AV_CFG_MonitorWallTVOut() { + this.nStructSize = this.size(); + } + } + + // CLIENT_OpenSplitWindow接口输入参数(开窗) + public static class NET_IN_SPLIT_OPEN_WINDOW extends Structure { + public int dwSize; + public int nChannel; // 通道号(屏号) + public DH_RECT stuRect; // 窗口位置, 0~8192 + public int bDirectable; // 坐标是否满足直通条件, 直通是指拼接屏方式下,此窗口区域正好为物理屏区域 + + public NET_IN_SPLIT_OPEN_WINDOW() { + this.dwSize = this.size(); + } + } + + // CLIENT_OpenSplitWindow接口输出参数(开窗) + public static class NET_OUT_SPLIT_OPEN_WINDOW extends Structure { + public int dwSize; + public int nWindowID; // 窗口序号 + public int nZOrder; // 窗口次序 + + public NET_OUT_SPLIT_OPEN_WINDOW() { + this.dwSize = this.size(); + } + } + + // CLIENT_CloseSplitWindow接口输入参数(关窗) + public static class NET_IN_SPLIT_CLOSE_WINDOW extends Structure { + public int dwSize; + public int nChannel; // 输出通道号或融合屏虚拟通道号, pszCompositeID为NULL时有效 + public int nWindowID; // 窗口序号 + public String pszCompositeID; // 融合屏ID + + public NET_IN_SPLIT_CLOSE_WINDOW() { + this.dwSize = this.size(); + } + } + + // CLIENT_CloseSplitWindow接口输出参数(关窗) + public static class NET_OUT_SPLIT_CLOSE_WINDOW extends Structure { + public int dwSize; + + public NET_OUT_SPLIT_CLOSE_WINDOW() { + this.dwSize = this.size(); + } + } + + // CLIENT_GetGroupInfoForChannel接口输入参数 + public static class NET_IN_GET_GROUPINFO_FOR_CHANNEL extends Structure { + public int dwSize; + public int nChannelID; // 通道号 + + public NET_IN_GET_GROUPINFO_FOR_CHANNEL() { + this.dwSize = this.size(); + } + } + + // CLIENT_GetGroupInfoForChannel接口输出参数 + public static class NET_OUT_GET_GROUPINFO_FOR_CHANNEL extends Structure { + public int dwSize; + public int nGroupIdNum; // 人员组数 + public GROUP_ID[] szGroupIdArr = (GROUP_ID[]) new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID + public int nSimilaryNum; // 相似度阈值个数, 与人员组数相同 + public int[] nSimilary = new int[MAX_GOURP_NUM]; // 每个人脸组的相似度阈值, 0-100 + + public NET_OUT_GET_GROUPINFO_FOR_CHANNEL() { + this.dwSize = this.size(); + } + } + + // CLIENT_FaceRecognitionPutDisposition 接口输入参数 + public static class NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO extends Structure { + public int dwSize; + public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID + public int nDispositionChnNum; // 布控视频通道个数 + public NET_DISPOSITION_CHANNEL_INFO[] stuDispositionChnInfo = (NET_DISPOSITION_CHANNEL_INFO[]) new NET_DISPOSITION_CHANNEL_INFO().toArray(NET_MAX_CAMERA_CHANNEL_NUM); // 布控视频通道信息 + + public NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO() { + this.dwSize = this.size(); + } + } + + // 布控的视频通道信息 + public static class NET_DISPOSITION_CHANNEL_INFO extends Structure { + public int nChannelID; // 视频通道号 + public int nSimilary; // 相似度阈值, 0-100 + public byte[] bReserved = new byte[256]; // 保留 + } + + // CLIENT_FaceRecognitionPutDisposition 接口输出参数 + public static class NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO extends Structure { + public int dwSize; + public int nReportCnt; // 通道布控结果个数 + public int[] bReport = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 通道布控结果, TRUE追加成功, FALSE追加失败 + + public NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_FaceRecognitionDelDisposition 接口输入参数 + public static class NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO extends Structure { + public int dwSize; + public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID + public int nDispositionChnNum; // 撤控视频通道个数 + public int[] nDispositionChn = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 撤控视频通道列表 + + public NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_FaceRecognitionDelDisposition 接口输出参数 + public static class NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO extends Structure { + public int dwSize; + public int nReportCnt; // 通道布控结果个数 + public int[] bReport = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 通道布控结果, TRUE删除成功, FALSE删除失败 + + public NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO() { + this.dwSize = this.size(); + } + } + + // 人证比对事件,用实时拍摄的人脸照片,和该人持有的身份证照片进行比对,并上报检测结果 + // 对应事件类型为 EVENT_IVS_CITIZEN_PICTURE_COMPARE + public static class DEV_EVENT_CITIZEN_PICTURE_COMPARE_INFO extends Structure { + //公共字段 + public int nChannelID; // 通道号,从0开始 + public int nEventAction; // 事件动作, 0表示脉冲, -1表示未知 + public double dbPTS; // 时间戳(单位是毫秒) + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public NET_TIME_EX stuUTC; // 事件发生的时间 + public int nEventID; // 事件ID + + //事件对应字段 + public byte bCompareResult; // 人证比对结果,相似度大于等于阈值认为比对成功,true表示成功,false表示失败 + public byte nSimilarity; // 两张图片的相似度,单位百分比,范围[1,100] + public byte nThreshold; // 检测阈值,范围[1,100] + public int emSex; // 性别, 参考 EM_CITIZENIDCARD_SEX_TYPE + public int nEthnicity; // 民族(参照 DEV_EVENT_ALARM_CITIZENIDCARD_INFO 的 nEthnicity 定义) + public byte[] szCitizen = new byte[NET_COMMON_STRING_64]; // 居民姓名 + public byte[] szAddress = new byte[NET_COMMON_STRING_256]; // 住址 + public byte[] szNumber = new byte[NET_COMMON_STRING_64]; // 身份证号 + public byte[] szAuthority = new byte[NET_COMMON_STRING_256]; // 签发机关 + public NET_TIME stuBirth; // 出生日期(年月日) + public NET_TIME stuValidityStart; // 有效期限起始日期(年月日) + public int bLongTimeValidFlag; // 该值为 TRUE, 截止日期 表示长期有效,此时 stuValidityEnd 值无意义 + // 该值为 FALSE, 此时 截止日期 查看 stuValidityEnd 值 + public NET_TIME stuValidityEnd; // 有效期限结束日期(年月日) + public CITIZEN_PICTURE_COMPARE_IMAGE_INFO[] stuImageInfo + = (CITIZEN_PICTURE_COMPARE_IMAGE_INFO[]) new CITIZEN_PICTURE_COMPARE_IMAGE_INFO().toArray(2); // 图片信息,第一张为拍摄照片,第二张为身份证照片 + + public byte[] byReserved = new byte[1024]; // 保留字节 + } + + // 人证对比图片信息 + public static class CITIZEN_PICTURE_COMPARE_IMAGE_INFO extends Structure { + public int dwOffSet; // 文件在二进制数据块中的偏移位置, 单位:字节 + public int dwFileLenth; // 文件大小, 单位:字节 + public short wWidth; // 图片宽度, 单位:像素 + public short wHeight; // 图片高度, 单位:像素 + public byte[] byReserved = new byte[256]; // 保留字节 + } + + // 事件类型 EVENT_IVS_HUMANTRAIT(人体特征事件)对应的数据块描述信息 + public static class DEV_EVENT_HUMANTRAIT_INFO extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public int nEventID; // 事件ID + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nAction; // 1:开始 2:停止 + public int emClassType; // 智能事件所属大类, 详见 EM_CLASS_TYPE + public int nGroupID; // 事件组ID,一次检测的多个人体特征nGroupID相同 + public int nCountInGroup; // 一个事件组内的抓拍张数(人体个数),一次检测的多个人体特征nCountInGroup相同 + public int nIndexInGroup; // 一个事件组内的抓拍序号,从1开始 + public HUMAN_IMAGE_INFO stuHumanImage; // 人体图片信息 + public FACE_IMAGE_INFO stuFaceImage; // 人脸图片信息 + public int emDetectObject; // 检测到的人的信息, 详见 EM_DETECT_OBJECT + public HUMAN_ATTRIBUTES_INFO stuHumanAttributes; // 人体属性 + public SCENE_IMAGE_INFO stuSceneImage; // 全景大图信息 + public NET_FACE_ATTRIBUTE stuFaceAttributes; // 人脸属性 + public FACE_SCENE_IMAGE stuFaceSceneImage; // 人脸全景图 + public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息 + public NET_HUMANTRAIT_EXTENSION_INFO stuHumanTrait; // 补充事件,表示当前人体特征是由该事件产生的 + public byte[] byReserved = new byte[88]; // 保留字节,留待扩展. + } + + // 人体图片信息 + public static class HUMAN_IMAGE_INFO extends Structure { + public int nOffSet; // 偏移 + public int nLength; // 图片大小,单位字节 + public int nWidth; // 图片宽度 + public int nHeight; // 图片高度 + public byte[] byReserved = new byte[56]; // 预留字节 + } + + // 人脸图片信息 + public static class FACE_IMAGE_INFO extends Structure { + public int nOffSet; // 偏移 + public int nLength; // 图片大小,单位字节 + public int nWidth; // 图片宽度 + public int nHeight; // 图片高度 + public byte[] byReserved = new byte[56]; // 预留字节 + } + + // 检测到的人的信息 + public static class EM_DETECT_OBJECT extends Structure { + public static final int EM_DETECT_OBJECT_UNKNOWN = 0; // 未知信息 + public static final int EM_DETECT_OBJECT_HUMAN_BODY_AND_FACE = 1; // 人体和人脸都有 + public static final int EM_DETECT_OBJECT_HUMAN_BODY = 2; // 仅有人体 + public static final int EM_DETECT_OBJECT_HUMAN_FACE = 3; // 仅有人脸 + } + + // 人体属性信息 + public static class HUMAN_ATTRIBUTES_INFO extends Structure { + public int emCoatColor; // 上衣颜色, 详见 EM_CLOTHES_COLOR + public int emCoatType; // 上衣类型, 详见 EM_COAT_TYPE + public int emTrousersColor; // 裤子颜色, 详见 EM_CLOTHES_COLOR + public int emTrousersType; // 裤子类型, 详见 EM_TROUSERS_TYPE + public int emHasHat; // 是否戴帽子, 详见 EM_HAS_HAT + public int emHasBag; // 是否带包, 详见 EM_HAS_BAG + public NET_RECT stuBoundingBox; // 包围盒(8192坐标系) + public byte[] byReserved = new byte[112]; // 预留字节 + } + + // 衣服颜色 + public static class EM_CLOTHES_COLOR extends Structure { + public static final int EM_CLOTHES_COLOR_UNKNOWN = 0; // 未知 + public static final int EM_CLOTHES_COLOR_WHITE = 1; // 白色 + public static final int EM_CLOTHES_COLOR_ORANGE = 2; // 橙色 + public static final int EM_CLOTHES_COLOR_PINK = 3; // 粉色 + public static final int EM_CLOTHES_COLOR_BLACK = 4; // 黑色 + public static final int EM_CLOTHES_COLOR_RED = 5; // 红色 + public static final int EM_CLOTHES_COLOR_YELLOW = 6; // 黄色 + public static final int EM_CLOTHES_COLOR_GRAY = 7; // 灰色 + public static final int EM_CLOTHES_COLOR_BLUE = 8; // 蓝色 + public static final int EM_CLOTHES_COLOR_GREEN = 9; // 绿色 + public static final int EM_CLOTHES_COLOR_PURPLE = 10; // 紫色 + public static final int EM_CLOTHES_COLOR_BROWN = 11; // 棕色 + public static final int EM_CLOTHES_COLOR_OTHER = 12; // 棕色 + } + + //上衣类型 + public static class EM_COAT_TYPE extends Structure { + public static final int EM_COAT_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_COAT_TYPE_LONG_SLEEVE = 1; // 长袖 + public static final int EM_COAT_TYPE_COTTA = 2; // 短袖 + } + + // 裤子类型 + public static class EM_TROUSERS_TYPE extends Structure { + public static final int EM_TROUSERS_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_TROUSERS_TYPE_TROUSERS = 1; // 长裤 + public static final int EM_TROUSERS_TYPE_SHORTS = 2; // 短裤 + public static final int EM_TROUSERS_TYPE_SKIRT = 3; // 裙子 + } + + // 是否戴帽子 + public static class EM_HAS_HAT extends Structure { + public static final int EM_HAS_HAT_UNKNOWN = 0; // 未知 + public static final int EM_HAS_HAT_NO = 1; // 不戴帽子 + public static final int EM_HAS_HAT_YES = 2; // 戴帽子 + } + + // 是否戴包(包括背包或拎包) + public static class EM_HAS_BAG extends Structure { + public static final int EM_HAS_BAG_UNKNOWN = 0; // 未知 + public static final int EM_HAS_BAG_NO = 1; // 不带包 + public static final int EM_HAS_BAG_YES = 2; // 带包 + } + + // 全景广角图 + public static class SCENE_IMAGE_INFO extends Structure { + public int nOffSet; // 在二进制数据块中的偏移 + public int nLength; // 图片大小,单位字节 + public int nWidth; // 图片宽度(像素) + public int nHeight; // 图片高度(像素) + public byte[] byReserved = new byte[56]; // 预留字节 + } + + // 人脸属性 + public static class NET_FACE_ATTRIBUTE extends Structure { + public int emSex; // 性别, 详见 EM_DEV_EVENT_FACEDETECT_SEX_TYPE + public int nAge; // 年龄,-1表示该字段数据无效 + public int nFeatureValidNum; // 人脸特征数组有效个数,与 emFeature 结合使用 + public int[] emFeatures = new int[NET_MAX_FACEDETECT_FEATURE_NUM]; // 人脸特征数组,与 nFeatureValidNum 结合使用 , 详见 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE + public int emComplexion; // 肤色, 详见 EM_COMPLEXION_TYPE + public int emEye; // 眼睛状态, 详见 EM_EYE_STATE_TYPE + public int emMouth; // 嘴巴状态, 详见 EM_MOUTH_STATE_TYPE + public int emMask; // 口罩状态, 详见 EM_MASK_STATE_TYPE + public int emBeard; // 胡子状态, 详见 EM_BEARD_STATE_TYPE + public int nAttractive; // 魅力值, 0未识别,识别时范围1-100,得分高魅力高 + public NET_RECT stuBoundingBox; // 包围盒(8192坐标系) + public byte[] bReserved = new byte[112]; // 保留字节,留待扩展. + } + + // 肤色 + public static class EM_COMPLEXION_TYPE extends Structure { + public static final int EM_COMPLEXION_NODISTI = 0; // 未识别 + public static final int EM_COMPLEXION_YELLOW = 1; // 黄 + public static final int EM_COMPLEXION_BLACK = 2; // 黑 + public static final int EM_COMPLEXION_WHITE = 3; // 白 + } + + // 人脸全景图 + public static class FACE_SCENE_IMAGE extends Structure { + public int nOffSet; // 在二进制数据块中的偏移 + public int nLength; // 图片大小,单位字节 + public int nWidth; // 图片宽度(像素) + public int nHeight; // 图片高度(像素) + public byte[] byReserved = new byte[56]; // 预留字节 + } + + // 事件扩展信息 + public static class NET_EXTENSION_INFO extends Structure { + public byte[] szEventID = new byte[MAX_EVENT_ID_LEN]; // 国标事件ID + public byte[] byReserved = new byte[80]; // 保留字节 + } + + // 当前人体特征是由什么事件产生的 + public static class NET_HUMANTRAIT_EXTENSION_INFO extends Structure { + public byte[] szAdditionalCode = new byte[MAX_HUMANTRAIT_EVENT_LEN]; // 当前人体特征是由什么事件产生的,设备刚好返回32个字节数据,多加4个字节用于字节对齐和添加字符结束符 + public byte[] byReserved = new byte[32]; // 保留字节 + } + + // 事件类型 NET_ALARM_WIFI_SEARCH (搜索WIFI设备)对应的数据描述信息 + public static class ALARM_WIFI_SEARCH_INFO extends Structure { + public int nWifiNum; // WIFI设备数量, 指示stuWifi的有效数量 + public NET_WIFI_DEV_INFO[] stuWifi = (NET_WIFI_DEV_INFO[]) new NET_WIFI_DEV_INFO().toArray(1024); // 周围Wifi设备的信息 + public int nChannel; // 通道号 + public NET_WIFI_BASIC_INFO stuWifiBasiInfo; // Wifi事件上报基础信息 + public int bGPSinfo; // 是否包含GPS信息 + public NET_WIFI_GPS_INFO stuWifiGPSInfo; // GPS信息 + public byte[] reserved = new byte[376]; // 预留 + } + + // 搜索到的WIFI设备信息 + public static class NET_WIFI_DEV_INFO extends Structure { + public byte[] szMac = new byte[NET_MACADDR_LEN]; // Wifi设备的Mac地址 + public int nLinkQuality; // 链接质量百分比, 0~100 + public NET_TIME_EX stuEnterTime; // 第一被搜索到的时间 + public NET_TIME_EX stuLeaveTime; // 消失的时间 + public int nSearchedCount; // 被搜索到的次数 + public byte[] szSSID = new byte[24]; // 网络名称 + public NET_TIME_EX UTC; // 事件发生时间 + public int emDevType; // WIFI设备类型, 参考 EM_WIRELESS_DEV_TYPE + public int nChannel; // Wifi设备当前所在的信道 + public int emAuth; // 认证方式, 参考 EM_WIRELESS_AUTHENTICATION + public int emEncrypt; // 数据加密方式, 参考 EM_WIRELESS_DATA_ENCRYPT + public byte[] szAPMac = new byte[NET_MACADDR_LEN]; // 接入热点Mac + public int nAPChannel; // 接入热点频道 + public byte[] szAPSSID = new byte[24]; // 接入热点SSID + public int emAPEncrypt; // 接入热点加密类型, 参考 EM_WIRELESS_DATA_ENCRYPT + public int nRssiQuality; // 信号强度 + public byte[] szManufacturer = new byte[MAX_MANUFACTURER_LEN];// Mac地址所属制造商 + public MACHISTORY_SSID[] szMacHistorySSIDList = (MACHISTORY_SSID[]) new MACHISTORY_SSID().toArray(MAX_MACHISTORY_SSID_NUM); // 此设备曾经连接过的历史SSID列表 + public int nRetMacHistorySSIDNum; // 此设备实际连接过的SSID个数 + public byte[] reserved = new byte[264]; // 预留 + } + + // 历史SSID + public static class MACHISTORY_SSID extends Structure { + public byte[] szMacHistorySSID = new byte[MAX_MACHISTORY_SSID_LEN]; // 历史SSID + } + + // 搜索到的WIFI基本信息 + public static class NET_WIFI_BASIC_INFO extends Structure { + public int nPeriodUTC; // 本周期上报的起始时间,为同一上报周期的标识;当同一上报周期内设备总数超过单次上报数量上限时需要多次上报事件,该值作为同一上报周期内多次上报事件的标识码; + public int nDeviceSum; // 本周期上报的wifi总数,同一上报周期内的事件中的该值均应为本周期上报的wifi总数 + public int nCurDeviceCount; // 本次事件上报的Wifi设备数量,应与ALARM_WIFI_SEARCH_INFO结构体中的nWifiNum值一致;同一上报周期内该值的累积总数与nDeviceSum一致。 + public byte[] reserved = new byte[500]; // 预留字节 + } + + // 事件类型 NET_ALARM_WIFI_VIRTUALINFO_SEARCH (获取周围wifi设备虚拟信息事件)对应的数据描述信息 + public static class ALARM_WIFI_VIRTUALINFO_SEARCH_INFO extends Structure { + public int nVirtualInfoNum; // WIFI设备虚拟身份数量, 指示stuVirtualInfo的有效数量 + public NET_WIFI_VIRTUALINFO[] stuVirtualInfo = (NET_WIFI_VIRTUALINFO[]) new NET_WIFI_VIRTUALINFO().toArray(MAX_VIRTUALINFO_NUM); // 周围Wifi虚拟身份信息 + public int nChannel; // 通道号 + public byte[] reserved = new byte[512]; // 预留 + } + + // 搜索到的WIFI设备虚拟身份信息 + public static class NET_WIFI_VIRTUALINFO extends Structure { + public NET_TIME_EX stuAccessTime; // 访问时间,时间不精确仅供参考 + public byte[] szSrcMac = new byte[NET_MACADDR_LEN]; // 虚拟信息的来源MAC,字母大写,用"-"分隔 + public byte[] szDstMac = new byte[NET_MACADDR_LEN]; // 虚拟信息的目标MAC,字母大写,用"-"分隔 + public int nProtocal; // 协议代号,上网应用对应的标识码 + public byte[] szUrl = new byte[NET_MAX_URL_LEN]; // 上网url + public byte[] szDomain = new byte[MAX_VIRTUALINFO_DOMAIN_LEN]; // 上网域 + public byte[] szTitle = new byte[MAX_VIRTUALINFO_TITLE_LEN]; // 上网标题 + public byte[] szUsrName = new byte[MAX_VIRTUALINFO_USERNAME_LEN]; // 用户名 + public byte[] szPassWord = new byte[MAX_VIRTUALINFO_PASSWORD_LEN]; // 密码 + public byte[] szPhoneNum = new byte[MAX_VIRTUALINFO_PHONENUM_LEN]; // 手机号 + public byte[] szImei = new byte[MAX_VIRTUALINFO_IMEI_LEN]; // 国际移动设备标识 + public byte[] szImsi = new byte[MAX_VIRTUALINFO_IMSI_LEN]; // 国际移动用户识别码 + public byte[] szLatitude = new byte[MAX_VIRTUALINFO_LATITUDE_LEN]; // 经度 + public byte[] szLongitude = new byte[MAX_VIRTUALINFO_LONGITUDE_LEN]; // 纬度 + public byte[] szSrcIP = new byte[NET_MAX_IPADDR_LEN_EX]; // 源IP + public byte[] szDstIP = new byte[NET_MAX_IPADDR_LEN_EX]; // 目的IP + public int nSrcPort; // 源端口 + public int nDstPort; // 目的端口 + public byte[] szSiteNum = new byte[MAX_COMMON_STRING_16]; // 场所编号 + public byte[] szDevNum = new byte[MAX_COMMON_STRING_32]; // 采集设备编号 + public byte[] szUserID = new byte[MAX_COMMON_STRING_32]; // 虚拟用户ID + public byte[] szIDFA = new byte[MAX_COMMON_STRING_64]; // 苹果手机的IDFA + public byte[] reserved = new byte[368]; // 预留 + } + + // 事件类型 EVENT_IVS_ACCESS_CTL (门禁事件)对应数据块描述信息 + public static class DEV_EVENT_ACCESS_CTL_INFO extends Structure { + public int nChannelID; // 门通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + public NET_MSG_OBJECT stuObject; // 检测到的物体 + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public int emEventType; // 门禁事件类型, 参考 NET_ACCESS_CTL_EVENT_TYPE + public int bStatus; // 刷卡结果, 1表示成功, 0表示失败 + public int emCardType; // 卡类型, 参考 NET_ACCESSCTLCARD_TYPE + public int emOpenMethod; // 开门方式, 参考 NET_ACCESS_DOOROPEN_METHOD + public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 + public byte[] szPwd = new byte[NET_MAX_CARDPWD_LEN]; // 密码 + public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 门读卡器ID + public byte[] szUserID = new byte[NET_COMMON_STRING_64]; // 开门用户 + public byte[] szSnapURL = new byte[NET_COMMON_STRING_128]; // 抓拍照片存储地址 + + public int nErrorCode; // 开门失败的原因,仅在bStatus为FALSE时有效 + // 0x00 没有错误 + // 0x10 未授权 + // 0x11 卡挂失或注销 + // 0x12 没有该门权限 + // 0x13 开门模式错误 + // 0x14 有效期错误 + // 0x15 防反潜模式 + // 0x16 胁迫报警未打开 + // 0x17 门常闭状态 + // 0x18 AB互锁状态 + // 0x19 巡逻卡 + // 0x1A 设备处于闯入报警状态 + // 0x20 时间段错误 + // 0x21 假期内开门时间段错误 + // 0x30 需要先验证有首卡权限的卡片 + // 0x40 卡片正确,输入密码错误 + // 0x41 卡片正确,输入密码超时 + // 0x42 卡片正确,输入指纹错误 + // 0x43 卡片正确,输入指纹超时 + // 0x44 指纹正确,输入密码错误 + // 0x45 指纹正确,输入密码超时 + // 0x50 组合开门顺序错误 + // 0x51 组合开门需要继续验证 + // 0x60 验证通过,控制台未授权 + + public int nPunchingRecNo; // 刷卡记录集中的记录编号 + public int nNumbers; // 抓图张数 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public byte[] byReserved = new byte[3]; // 字节对齐 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON + public int emAttendanceState; // 考勤状态, 参考 NET_ATTENDANCESTATE + public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN]; // 班级(考勤肯尼亚定制) + public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN]; // 电话(考勤肯尼亚定制) + public byte[] szCardName = new byte[NET_MAX_CARDNAME_LEN]; // 卡命名 + public byte[] bReserved = new byte[908]; // 保留字节,留待扩展. + } + + // 门禁事件类型 + public static class NET_ACCESS_CTL_EVENT_TYPE extends Structure { + public static final int NET_ACCESS_CTL_EVENT_UNKNOWN = 0; + public static final int NET_ACCESS_CTL_EVENT_ENTRY = 1; // 进门 + public static final int NET_ACCESS_CTL_EVENT_EXIT = 2; // 出门 + } + + // 获取热度统计信息, 对应命令 NET_DEVSTATE_GET_HEAT_MAP + public static class NET_QUERY_HEAT_MAP extends Structure { + public int dwSize; // 该结构体大小 + public NET_IN_QUERY_HEAT_MAP stuIn; // 热度统计信息查询条件 + public NET_OUT_QUERY_HEAT_MAP stuOut; // 热度统计信息查询结果 + + public NET_QUERY_HEAT_MAP() { + this.dwSize = this.size(); + } + } + + // 获取热度统计信息入参 + public static class NET_IN_QUERY_HEAT_MAP extends Structure { + public int nChannel; // 通道号 + public NET_TIME_EX stuBegin; // 开始时间 + public NET_TIME_EX stuEnd; // 结束时间 + public int nPlanID; // 计划ID,仅球机有效,从1开始 + public int emDataType; // 希望获取的数据类型, 参考 EM_HEAT_PIC_DATA_TYPE + public byte[] reserved = new byte[1016]; // 预留 + } + + // 获取热度统计信息出参 + public static class NET_OUT_QUERY_HEAT_MAP extends Structure { + public int nWidth; // 图片宽度 + public int nHeight; // 图片高度 + public Pointer pBufData; // 热度数据灰阶位图, 用户申请内存,大小为nBufLen + // 若emDataType为EM_HEAT_PIC_DATA_TYPE_GRAYDATA,则一个字节表示一个点 + // 若emDataType为EM_HEAT_PIC_DATA_TYPE_SOURCEDATA,则四个字节表示一个点 + public int nBufLen; // pBufData最大长度 + public int nBufRet; // 实际返回的长度 + public int nAverage; // 均值信息 + public int nPlanID; // 计划ID,与请求NET_IN_QUERY_HEAT_MAP的nPlanID对应 + public int emDataType; // 获取到的数据类型, 参考 EM_HEAT_PIC_DATA_TYPE + public int nPixelMax; // 实际像素点的最大值 + public int nPixelMin; // 实际像素点的最小值 + public byte[] reserved = new byte[1004]; // 预留 + } + + // 热度图数据类型 + public static class EM_HEAT_PIC_DATA_TYPE extends Structure { + public static final int EM_HEAT_PIC_DATA_TYPE_UNKNOWN = 0; // 未知类型 + public static final int EM_HEAT_PIC_DATA_TYPE_GRAYDATA = 1; // 灰度数据 + public static final int EM_HEAT_PIC_DATA_TYPE_SOURCEDATA = 2; // 原始数据 + } + + + // 通道名称配置 + public static class NET_ENCODE_CHANNELTITLE_INFO extends Structure { + public int dwSize; + public byte[] szChannelName = new byte[MAX_CHANNEL_NAME_LEN]; // 通道名称 + + public NET_ENCODE_CHANNELTITLE_INFO() { + this.dwSize = this.size(); + } + } + + // 视频分析全局配置 + public static class CFG_ANALYSEGLOBAL_INFO extends Structure { + // 信息 + public byte[] szSceneType = new byte[MAX_NAME_LEN]; // 应用场景,详见"支持的场景列表", 参考 EM_SCENE_TYPE 里的场景 + + //交通场景信息 + public double CameraHeight; // 摄像头离地高度 单位:米 + public double CameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 + public CFG_POLYGON stuNearDetectPoint; // 近景检测点 + public CFG_POLYGON stuFarDectectPoint; // 远景检测点 + public int nNearDistance; // NearDetectPoint,转换到实际场景中时,离摄像头垂直线的水平距离 + public int nFarDistance; // FarDectectPoint,转换到实际场景中时,离摄像头垂直线的水平距离 + public byte[] szSubType = new byte[MAX_NAME_LEN]; // 交通场景的子类型,"Gate",卡口类型,"Junction" 路口类型,"ParkingSpace" 车位检测类型 + public int nLaneNum; // 车道数 + public CFG_LANE[] stuLanes = (CFG_LANE[]) new CFG_LANE().toArray(MAX_LANE_NUM); // 车道信息 + public int nPlateHintNum; // 车牌字符暗示个数 + public PLATE_HINT[] szPlateHintsArr = (PLATE_HINT[]) new PLATE_HINT().toArray(MAX_PLATEHINT_NUM); // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 + public int nLightGroupNum; // 灯组数 + public CFG_LIGHTGROUPS[] stLightGroups = (CFG_LIGHTGROUPS[]) new CFG_LIGHTGROUPS().toArray(MAX_LIGHTGROUP_NUM); // 灯组配置信息 + public int bHangingWordPlate; // 是否识别挂字车牌 + public int bNonStdPolicePlate; // 是否识别非标准警牌 + public int bYellowPlateLetter; // 是否识别黄牌字母 + public int nReportMode; // 上报模式,0:未定义,1:上报所有违章车辆,2:上报车牌识别成功的违章车辆 + public int nPlateMatch; // 车牌匹配率,0~100,多次识别车牌使用,表示重复识别车牌和前一次识别车牌的一致性要求 + public int nJudgment; // 违章判定依据,0:未定义,1:按车道,2:按行驶方向,3:按车道和行驶方向 + public int nLeftDivisionPtCount; // 左转弯分界线点数 + public CFG_POLYLINE[] stLeftDivisionLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 左转弯分界线 + public int nRightDivisionPtCount; // 右转弯分界线点数 + public CFG_POLYLINE[] stRightDivisionLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 右转弯分界线 + public CFG_ADJUST_LIGHT_COLOR stAdjustLightColor; // 交通灯颜色校正配置 + public int nParkingSpaceNum; // 车位数 + public CFG_PARKING_SPACE[] stParkingSpaces = (CFG_PARKING_SPACE[]) new CFG_PARKING_SPACE().toArray(MAX_PARKING_SPACE_NUM); // 车位配置信息,每个元素代表一个车位 + + + // 一般场景信息 + public int nStaffNum; // 标尺数 + public CFG_STAFF[] stuStaffs = (CFG_STAFF[]) new CFG_STAFF().toArray(MAX_STAFF_NUM); // 标尺 + + public int nCalibrateAreaNum; // 标定区域数 + public CFG_CALIBRATEAREA_INFO[] stuCalibrateArea = (CFG_CALIBRATEAREA_INFO[]) new CFG_CALIBRATEAREA_INFO().toArray(MAX_CALIBRATEBOX_NUM); // 标定区域(若该字段不存在,则以整幅场景为标定区域) + + public int bFaceRecognition; // 人脸识别场景是否有效 + public CFG_FACERECOGNITION_SCENCE_INFO stuFaceRecognitionScene; // 人脸识别场景 + + public byte abJitter; + public byte abDejitter; + public byte[] bReserved = new byte[2]; // 保留字段 + + public int nJitter; // 摄像机抖动率 : 摄像机抖动率,取值0-100,反应静止摄像机抖动程度,抖动越厉害,值越大。 + public int bDejitter; // 是否开启去抖动模块 目前不实现 + + public int abCompatibleMode; + public int nCompatibleMode; // 0:"OldTrafficRule" : 交通老规则兼容模式;1:"NewTrafficRule" : 交通新规则兼容模式;-1:字符串错误 + + public int nCustomDataLen; // 实际数据长度,不能大于1024 + public byte[] byCustomData = new byte[1024]; // 第三方自定义配置数据 + public double CameraAngle; // 摄像头与垂方向的夹角 + public CFG_POLYGON stuLandLineStart; // 地平线线段起始点(点的坐标坐标归一化到[0,8192)区间。) + public CFG_POLYGON stuLandLineEnd; // 地平线线段终止点(点的坐标坐标归一化到[0,8192)区间。) + + public int bFaceDetection; // 人脸检测场景是否有效 + public CFG_FACEDETECTION_SCENCE_INFO stuFaceDetectionScene; // 人脸检测场景 + public CFG_TIME_PERIOD stuDayTimePeriod; // 标定白天的时间段.(8,20),表示从8点到晚上20点为白天 + public CFG_TIME_PERIOD stuNightTimePeriod; // 标定黑夜的时间段.(20,7),表示从晚8点到凌晨7点为黑夜 + public CFG_TIME_PERIOD_SCENE_INFO stuTimePeriodSceneInfo; // 多场景标定白天和黑夜时间段 + public CFG_CALIBRATEAREA_SCENE_INFO stuCalibrateAreaSceneInfo; // 多场景标定区域配置信息 + public int emSwitchMode; // 昼夜算法切换模式,详见 CFG_TIMEPERIOD_SWITCH_MODE + + public int nSceneNum; // 场景数, >0时表示支持多场景, stuMultiScene有效 + public CFG_ANALYSEGLOBAL_SCENE[] stuMultiScene = (CFG_ANALYSEGLOBAL_SCENE[]) new CFG_ANALYSEGLOBAL_SCENE().toArray(MAX_ANALYSE_SCENE_NUM); // 多场景配置 + + public int nSceneCount; // 实际场景个数 + public SCENE_TYPE_LIST[] szSceneTypeListArr = (SCENE_TYPE_LIST[]) new SCENE_TYPE_LIST().toArray(MAX_SCENE_TYPE_LIST_SIZE);// 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案(可选) + public int emDepthType; // 画面景深, 参考 EM_DEPTH_TYPE + public int nPtzPresetId; // 云台预置点编号,0~255 + public int unLongitude; // 经度 单位百万分之一度 + public int unLatitude; // 纬度 单位百万分之一度 + } + + public static class PLATE_HINT extends Structure { + public byte[] szPlateHints = new byte[MAX_NAME_LEN]; // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 + } + + public static class SCENE_TYPE_LIST extends Structure { + public byte[] szSceneTypeList = new byte[CFG_COMMON_STRING_16]; // 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案(可选) + } + + // 车道信息 + public static class CFG_LANE extends Structure { + public int nLaneId; // 车道编号 + public int nDirection; // 车道方向(车开往的方向),0-北 1-东北 2-东 3-东南 4-南 5-西南 6-西 7-西北 + public CFG_POLYLINE[] stuLeftLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 左车道线,车道线的方向表示车道方向,沿车道方向左边的称为左车道线 + public int nLeftLineNum; // 左车道线顶点数 + public CFG_POLYLINE[] stuRightLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 右车道线,车道线的方向表示车道方向,沿车道方向右边的称为右车道线 + public int nRightLineNum; // 右车道线顶点数 + public int nLeftLineType; // 左车道线属性,1-表示白实线,2- 白虚线,3- 黄线 + public int nRightLineType; // 右车道线属性,1-表示白实线,2- 白虚线,3- 黄线 + public int bDriveDirectionEnable; // 车道行驶方向使能, 1-true 0-false + public int nDriveDirectionNum; // 车道行驶方向数 + public DRIVE_DIRECTION[] szDriveDirectionArr = (DRIVE_DIRECTION[]) new DRIVE_DIRECTION().toArray(MAX_LIGHT_DIRECTION); // 车道行驶方向,"Straight" 直行,"TurnLeft" 左转,"TurnRight" 右转,"U-Turn":掉头 + public int nStopLineNum; // 车道对应停止线顶点数 + public CFG_POLYLINE[] stuStopLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应停止线 + public int nTrafficLightNumber; // 车道对应的红绿灯组编号 + + public byte abDetectLine; // 对应能力集 + public byte abPreLine; + public byte abPostLine; + public byte[] byReserved = new byte[1]; + + public int nDetectLine; + public CFG_POLYLINE[] stuDetectLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的检测线 + public int nPreLine; + public CFG_POLYLINE[] stuPreLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的前置线 + public int nPostLine; + public CFG_POLYLINE[] stuPostLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的后置线 + public CFG_TRAFFIC_FLOWSTAT_DIR_INFO stuTrafficFlowDir; // 车道流量信息 + public int emRankType; // 道路等级,用于车流量统计上报交通状态, 参考 EM_LANE_RANK_TYPE + } + + public static class DRIVE_DIRECTION extends Structure { + public byte[] szDriveDirection = new byte[MAX_NAME_LEN]; // 车道行驶方向,"Straight" 直行,"TurnLeft" 左转,"TurnRight" 右转,"U-Turn":掉头 + } + + // 折线的端点信息 + public static class CFG_POLYLINE extends Structure { + public int nX; //0~8191 + public int nY; + } + + // 车辆流量统计车道方向信息 + public static class CFG_TRAFFIC_FLOWSTAT_DIR_INFO extends Structure { + public int emDrivingDir; //行驶方向, 参考 CFG_FLOWSTAT_DIRECTION + public byte[] szUpGoing = new byte[CFG_FLOWSTAT_ADDR_NAME]; //上行地点 + public byte[] szDownGoing = new byte[CFG_FLOWSTAT_ADDR_NAME]; //下行地点 + } + + // 交通灯组配置信息 + public static class CFG_LIGHTGROUPS extends Structure { + public int nLightGroupId; // 灯组编号 + public CFG_RECT stuLightLocation; // 灯组坐标 + public int nDirection; // 灯组的方向,1- 灯组水平向,2- 灯组垂直向 + public int bExternalDetection; // 是否为外接红绿灯信号,当外接红绿灯时,以外界信号为判断依据。外界信号每次跳变时通知 + public int bSwingDetection; // 是否支持自适应灯组摇摆检测,在风吹或者容易震动的场景下,位置会进行一定的浮动偏差。如果由算法自行检测,会增加检测时间 + public int nLightNum; // 灯组中交通灯的数量 + public CFG_LIGHTATTRIBUTE[] stuLightAtrributes = (CFG_LIGHTATTRIBUTE[]) new CFG_LIGHTATTRIBUTE().toArray(MAX_LIGHT_NUM); // 灯组中各交通灯的属性 + + } + + // 交通灯属性 + public static class CFG_LIGHTATTRIBUTE extends Structure { + public int bEnable; // 当前交通灯是否有效,与车辆通行无关的交通需要设置无效 + public int nTypeNum; + public LIGHT_TYPE[] szLightTypeArr = (LIGHT_TYPE[]) new LIGHT_TYPE().toArray(MAX_LIGHT_TYPE); // 当前交通灯显现内容(包括:红-Red,黄-Yellow,绿-Green,倒计时-Countdown),如某交通灯可以显示红黄绿三种颜色,某交通灯只显示倒计时 + public int nDirectionNum; + public DIRECTION[] szDirectionArr = (DIRECTION[]) new DIRECTION().toArray(MAX_LIGHT_DIRECTION); // 交通灯指示的行车方向,"Straight": 直行,"TurnLeft":左转,"TurnRight":右转,"U-Turn": 掉头 + public int nYellowTime; // 黄灯亮时间 + } + + public static class LIGHT_TYPE extends Structure { + public byte[] szLightType = new byte[MAX_NAME_LEN]; // 当前交通灯显现内容(包括:红-Red,黄-Yellow,绿-Green,倒计时-Countdown),如某交通灯可以显示红黄绿三种颜色,某交通灯只显示倒计时 + } + + public static class DIRECTION extends Structure { + public byte[] szDirection = new byte[MAX_NAME_LEN]; // 交通灯指示的行车方向,"Straight": 直行,"TurnLeft":左转,"TurnRight":右转,"U-Turn": 掉头 + } + + // 交通灯颜色校正配置 + public static class CFG_ADJUST_LIGHT_COLOR extends Structure { + public int nMode; // 红灯颜色校正模式 0:未定义 1:红绿灯才校正 2:一直校正 + public int bEnable; // 是否允许图片红绿灯颜色校正 + public int nLevel; // 校正等级 范围0~100,数值越大矫正越明显 + public int bVideoEnable; // 是否启用视频涂红功能,存在此项时,Level值使用LevelSeparate下的Level值 + public ADJUST_LEVEL_SEP[] stLevelSep = (ADJUST_LEVEL_SEP[]) new ADJUST_LEVEL_SEP().toArray(4); // 分立等级,目前为4个 + } + + // 交通灯颜色校正配置,分立项 + public static class ADJUST_LEVEL_SEP extends Structure { + public int nType; // 0:未定义,1:视频,2:图片 + public int nTime; // 0:未定义,1:白天,2:夜晚 + public int nLevel; // 范围0~100,数值越大矫正越明显 + } + + public static class CFG_PARKING_SPACE extends Structure { + public int nNumber; //车位编号 + public CFG_REGION stArea; //检测区域 + public int nShieldAreaNum; //有效屏蔽区个数 + public CFG_REGION[] stShieldArea = + (CFG_REGION[]) new CFG_REGION().toArray(MAX_SHIELD_AREA_NUM); //屏蔽区域 + } + + public static class CFG_STAFF extends Structure { + public CFG_POLYLINE stuStartLocation; // 起始坐标点 + public CFG_POLYLINE stuEndLocation; // 终止坐标点 + public float nLenth; // 实际长度,单位米 + public int emType; // 标尺类型, 参考 EM_STAFF_TYPE + } + + // 标定区域,普通场景使用 + public static class CFG_CALIBRATEAREA_INFO extends Structure { + public int nLinePoint; // 水平方向标尺线顶点数 + public CFG_POLYGON[] stuLine = + (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYLINE_NUM);// 水平方向标尺线 + public float fLenth; // 实际长度 + public CFG_REGION stuArea; // 区域 + public int nStaffNum; // 垂直标尺数 + public CFG_STAFF[] stuStaffs = + (CFG_STAFF[]) new CFG_STAFF().toArray(MAX_STAFF_NUM); // 垂直标尺 + public int emType; // 区域类型, 参考 EM_CALIBRATEAREA_TYPE + public int emMethodType; // 标定方式, 参考 EM_METHOD_TYPE + } + + // 人脸识别场景 + public static class CFG_FACERECOGNITION_SCENCE_INFO extends Structure { + public double dbCameraHeight; // 摄像头离地高度 单位:米 + public double dbCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 + public int nMainDirection; // 人流主要方向顶点数 + public CFG_POLYGON[] stuMainDirection = + (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYLINE_NUM); // 人流主要方向,第一个点是起始点,第二个点是终止点 + public byte byFaceAngleDown; // 需要检测的人脸向下最大偏角, 单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。 + public byte byFaceAngleUp; // 需要检测的人脸向上最大偏角,单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。 + public byte byFaceAngleLeft; // 需要检测的人脸向左最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头 + public byte byFaceAngleRight; // 需要检测的人脸向右最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头 + public int emDetectType; // 人脸检测类型, 参考 EM_FACEDETECTION_TYPE + } + + // 人脸检测场景 + public static class CFG_FACEDETECTION_SCENCE_INFO extends Structure { + public double dbCameraHeight; // 摄像头离地高度 单位:米 + public double dbCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 + public int nMainDirection; // 人流主要方向顶点数 + public CFG_POLYGON[] stuMainDirection = (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYLINE_NUM); // 人流主要方向,第一个点是起始点,第二个点是终止点 + public byte byFaceAngleDown; // 需要检测的人脸向下最大偏角, 单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。 + public byte byFaceAngleUp; // 需要检测的人脸向上最大偏角,单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。 + public byte byFaceAngleLeft; // 需要检测的人脸向左最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头 + public byte byFaceAngleRight; // 需要检测的人脸向右最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头 + public int emDetectType; // 人脸检测类型, 参考 EM_FACEDETECTION_TYPE + } + + public static class CFG_TIME_PERIOD extends Structure { + public CFG_TIME stuStartTime; + public CFG_TIME stuEndTime; + } + + public static class CFG_TIME extends Structure { + public int dwHour; // 时 + public int dwMinute; // 分 + public int dwSecond; // 秒 + } + + // 多场景标定白天和黑夜配置 + public static class CFG_TIME_PERIOD_SCENE_INFO extends Structure { + public int dwMaxTimePeriodSceneNum; // 多场景标定白天和黑夜配置最大个数(需要申请此大小内存) + public int dwRetTimePeriodSceneNum; // 实际包含多场景标定白天和黑夜配置个数 + public Pointer pstuTimePeriodScene; // 多场景标白天和黑夜配置域单元,由用户申请内存,大小为sizeof(CFG_TIME_PERIOD_SCENE_UNIT)*dwMaxTimePeriodSceneNum + // 指向 CFG_TIME_PERIOD_SCENE_UNIT[] + } + + // 多场景标定区域配置 + public static class CFG_CALIBRATEAREA_SCENE_INFO extends Structure { + public int dwMaxSceneCalibrateAreaNum; // 多场景标定区域最大个数(需要申请此大小内存) + public int dwRetSceneCalibrateAreaNum; // 实际包含多场景标定区域个数 + public Pointer pstuCalibrateArea; // 多场景标定区域单元, 由用户申请内存, 指向 CFG_CALIBRATEAREA_SCENE_UNIT[]。 + // 大小为 sizeof(CFG_CALIBRATEAREA_SCENE_UNIT)*dwMaxSceneCalibrateAreaNum + } + + // 昼夜算法切换模式 + public static class CFG_TIMEPERIOD_SWITCH_MODE extends Structure { + public static final int CFG_TIMEPERIOD_SWITCH_MODE_UNKNOWN = 0; // 未知 + public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYCOLOR = 1; // 通过色彩切换 + public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYBRIGHTNESS = 2; // 通过亮度切换 + public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYPOS = 3; // 通过经纬度计算日出日落时间切换 + } + + // 视频分析全局配置场景 + public static class CFG_ANALYSEGLOBAL_SCENE extends Structure { + public byte[] szSceneType = new byte[MAX_NAME_LEN]; // 应用场景,详见"支持的场景列表" + + public union union = new union(); + + // 以下为场景具体信息, 根据szSceneType决定哪个场景有效 + public static class union extends Union { + public CFG_FACEDETECTION_SCENCE_INFO stuFaceDetectionScene; // 人脸检测场景/人脸识别检查 + public CFG_TRAFFIC_SCENE_INFO stuTrafficScene; // 交通场景 + public CFG_NORMAL_SCENE_INFO stuNormalScene; // 普通场景/远景场景/中景场景/近景场景/室内场景/人数统计场景 + public CFG_TRAFFIC_TOUR_SCENE_INFO stuTrafficTourScene; // 交通巡视场景 + } + + public int emDepthType; // 画面景深, 参考 EM_DEPTH_TYPE + public int nPtzPresetId; // 云台预置点编号,0~255 + // 以下是有多个大类业务的情况 + public int nSceneListCount; // 实际场景个数 + public SCENE_TYPE_LIST[] szSceneTypeListArr = (SCENE_TYPE_LIST[]) new SCENE_TYPE_LIST().toArray(MAX_SCENE_TYPE_LIST_SIZE);// 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案 + // 多个大类业务时有效 + public CFG_INTELLI_UNIFORM_SCENE stuUniformScene; // 统一场景配置 + } + + // 交通场景 + public static class CFG_TRAFFIC_SCENE_INFO extends Structure { + public int abCompatibleMode; + public int nCompatibleMode; // 0:"OldTrafficRule" : 交通老规则兼容模式;1:"NewTrafficRule" : 交通新规则兼容模式;-1:字符串错误 + public float fCameraHeight; // 摄像头离地高度 单位:米 + public float fCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 + public byte[] szSubType = new byte[MAX_NAME_LEN]; // 交通场景的子类型,"Gate" 卡口类型,"Junction" 路口类型 + // "Tunnel"隧道类型 , "ParkingSpace"车位检测类型 + // "Bridge"桥梁类型 + // "Freeway"高速公路类型 + public CFG_POLYGON stuNearDetectPoint; // 近景检测点 + public CFG_POLYGON stuFarDectectPoint; // 远景检测点 + public int nNearDistance; // NearDetectPoint,转换到实际场景中时,离摄像头垂直线的水平距离 + public int nFarDistance; // FarDectectPoint,转换到实际场景中时,离摄像头垂直线的水平距离 + public int nPlateHintNum; // 车牌字符暗示个数 + public PLATE_HINT[] szPlateHintsArr = (PLATE_HINT[]) new PLATE_HINT().toArray(MAX_PLATEHINT_NUM); // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 + public int nLaneNum; // 车道数 + public CFG_LANE[] stuLanes = (CFG_LANE[]) new CFG_LANE().toArray(MAX_LANE_NUM); // 车道信息 + public int nLightGroupNum; // 灯组数 + public CFG_LIGHTGROUPS[] stLightGroups = (CFG_LIGHTGROUPS[]) new CFG_LIGHTGROUPS().toArray(MAX_LIGHTGROUP_NUM); // 灯组配置信息 + public int bHangingWordPlate; // 是否识别挂字车牌 + public int bNonStdPolicePlate; // 是否识别非标准警牌 + public int bYellowPlateLetter; // 是否识别黄牌字母 + public int nReportMode; // 上报模式,0:未定义,1:上报所有违章车辆,2:上报车牌识别成功的违章车辆 + public int nPlateMatch; // 车牌匹配率,0~100,多次识别车牌使用,表示重复识别车牌和前一次识别车牌的一致性要求 + public int nJudgment; // 违章判定依据,0:未定义,1:按车道,2:按行驶方向,3:按车道和行驶方向 + public int nLeftDivisionPtCount; // 左转弯分界线点数 + public CFG_POLYLINE[] stLeftDivisionLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 左转弯分界线 + public int nRightDivisionPtCount; // 右转弯分界线点数 + public CFG_POLYLINE[] stRightDivisionLine = (CFG_POLYLINE[]) new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 右转弯分界线 + public CFG_ADJUST_LIGHT_COLOR stAdjustLightColor; // 交通灯颜色校正配置 + public int nParkingSpaceNum; // 车位数 + public CFG_PARKING_SPACE[] stParkingSpaces = (CFG_PARKING_SPACE[]) new CFG_PARKING_SPACE().toArray(MAX_PARKING_SPACE_NUM);// 车位配置信息,每个元素代表一个车位 + + } + + // 普遍场景 + public static class CFG_NORMAL_SCENE_INFO extends Structure { + public float fCameraHeight; // 摄像头离地高度 单位:米 + public float fCameraAngle; // 摄像头与垂方向的夹角 单位度,0~90, + public float fCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 + public CFG_POLYGON stuLandLineStart; // 地平线线段起始点(点的坐标坐标归一化到[0,8192)区间。) + public CFG_POLYGON stuLandLineEnd; // 地平线线段终止点(点的坐标坐标归一化到[0,8192)区间。) + } + + // 交通巡视场景 + public static class CFG_TRAFFIC_TOUR_SCENE_INFO extends Structure { + public int nPlateHintNum; // 车牌字符暗示个数 + public PLATE_HINT[] szPlateHintsArr = (PLATE_HINT[]) new PLATE_HINT().toArray(MAX_PLATEHINT_NUM); // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 + } + + // 统一场景配置,TypeList存在时配置此场景 + public static class CFG_INTELLI_UNIFORM_SCENE extends Structure { + public byte[] szSubType = new byte[MAX_NAME_LEN]; // 交通场景的子类型,"Gate" 卡口类型,"Junction" 路口类型 + // "Tunnel"隧道类型 , "ParkingSpace"车位检测类型 + // "Bridge"桥梁类型 + // "Freeway"高速公路类型 + public int nPlateHintNum; // 车牌字符暗示个数 + public PLATE_HINT[] szPlateHints = (PLATE_HINT[]) new PLATE_HINT[MAX_PLATEHINT_NUM]; // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 + public int nLaneNum; // 车道数 + public CFG_LANE[] stuLanes = (CFG_LANE[]) new CFG_LANE().toArray(MAX_LANE_NUM); // 车道信息 + } + + // CLIENT_MatrixAddCamerasByDevice 接口输入参数 + public static class NET_IN_ADD_LOGIC_BYDEVICE_CAMERA extends Structure { + public int dwSize; + public byte[] pszDeviceID = new byte[NET_DEV_ID_LEN]; // 设备ID + public NET_REMOTE_DEVICE stuRemoteDevice; // 远程设备信息 + public int nCameraCount; // 视频源信息数量 + public Pointer pCameras; // 视频源信息数组,用户分配内存,大小为sizeof(NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM)*nCameraCount + // 对应 NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM[] + + public NET_IN_ADD_LOGIC_BYDEVICE_CAMERA() { + this.dwSize = this.size(); + } + } + + // CLIENT_MatrixAddCamerasByDevice 接口输出参数 + public static class NET_OUT_ADD_LOGIC_BYDEVICE_CAMERA extends Structure { + public int dwSize; + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN]; // 设备ID + public int nMaxResultCount; // 结果数组大小, 用户填写 + public int nRetResultCount; // 实际结果数量 + public Pointer pResults; // 添加视频源结果数组,用户分配内存,大小为sizeof(NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT)*nMaxResultCount + // 对应 NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT[] + + public NET_OUT_ADD_LOGIC_BYDEVICE_CAMERA() { + this.dwSize = this.size(); + } + } + + // 视频源信息 + public static class NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM extends Structure { + public int dwSize; + public int nUniqueChannel; // 统一编号 + public int nChannel; // 通道号 + + public NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM() { + this.dwSize = this.size(); + } + } + + // 添加视频源结果信息 + public static class NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT extends Structure { + public int dwSize; + public int nUniqueChannel; // 统一编号 + public int nFailedCode; // 失败码, 0-成功,1-通道不支持设置 + + public NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT() { + this.dwSize = this.size(); + } + } + + // 事件类型 EVENT_IVS_FACEDETECT (人脸检测事件)对应的规则配置 + public static class CFG_FACEDETECT_INFO extends Structure { + public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 + public byte bRuleEnable; // 规则使能, 1-true 0-false + public byte[] bReserved = new byte[3]; // 保留字段 + public int nObjectTypeNum; // 相应物体类型个数 + public MAX_OBJECT_LIST[] szObjectTypesArr = (MAX_OBJECT_LIST[]) new MAX_OBJECT_LIST().toArray(MAX_OBJECT_LIST_SIZE); // 相应物体类型列表 + public int nDetectRegionPoint; // 检测区顶点数 + public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区 + public int nHumanFaceTypeCount; // 触发事件的人脸类型个数 + public MAX_HUMANFACE_LIST[] szHumanFaceTypeArr = (MAX_HUMANFACE_LIST[]) new MAX_HUMANFACE_LIST().toArray(MAX_HUMANFACE_LIST_SIZE); // 触发事件的人脸类型 + public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 + public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_10[]) new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM); // 事件响应时间段 + public int nPtzPresetId; // 云台预置点编号 0~65535 + public int nMinDuration; // 最短触发时间,单位:秒 + public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测 + public int nReportInterval; // 重复报警间隔,单位:秒,[0,600](等于0表示不重复报警) + public int bSizeFileter; // 规则特定的尺寸过滤器是否有效 + public CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器, 1-true 0-false + public int bFeatureEnable; // 是否开启人脸属性识别, IPC增加, 1-true 0-false + // (通过FaceDetection能力中的FeatureSupport来确定该配置是否可以设置) + public int nFaceFeatureNum; // 需要检测的人脸属性个数 + public int[] emFaceFeatureType = new int[MAX_FEATURE_LIST_SIZE]; // 需检测的人脸属性, 通过FaceDetection能力来获取支持哪些人脸属性, 参考 EM_FACEFEATURE_TYPE + } + + public static class MAX_OBJECT_LIST extends Structure { + public byte[] szObjectTypes = new byte[MAX_NAME_LEN]; // 相应物体类型列表 + } + + public static class MAX_HUMANFACE_LIST extends Structure { + public byte[] szHumanFaceType = new byte[MAX_NAME_LEN]; // 触发事件的人脸类型 + } + + public static class TIME_SECTION_WEEK_DAY_10 extends Structure { + public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[]) new CFG_TIME_SECTION().toArray(MAX_REC_TSECT_EX); // 事件响应时间段 + } + + public static class TIME_SECTION_WEEK_DAY_6 extends Structure { + public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[]) new CFG_TIME_SECTION().toArray(MAX_REC_TSECT); // 事件响应时间段, 每天最多6个时间段 + } + + public static class TIME_SECTION_WEEK_DAY_4 extends Structure { + public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[]) new CFG_TIME_SECTION().toArray(MAX_DOOR_TIME_SECTION); // 事件响应时间段, 每天最多4个时间段 + } + + public static class TIME_SECTION_WEEK_DAY_2 extends Structure { + public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[]) new CFG_TIME_SECTION().toArray(MAX_NAS_TIME_SECTION); // 事件响应时间段, 每天最多4个时间段 + } + + // 设备ID + public static class DEVICE_ID extends Structure { + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID + } + + // 设备通知类型 + public static class EM_DEVICE_NOTIFY_TYPE extends Structure { + public static final int EM_DEVICE_NOTIFY_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_DEVICE_NOTIFY_TYPE_NEW = 1; // 新设备添加 + public static final int EM_DEVICE_NOTIFY_TYPE_UPDATE = 2; // 设备信息更新 + public static final int EM_DEVICE_NOTIFY_TYPE_REMOVE = 3; // 设备删除 + public static final int EM_DEVICE_NOTIFY_TYPE_CONNECT = 4; // 设备有通道上下线 + } + + // 向设备注册的回调返回信息 + public static class NET_CB_ATTACH_DEVICE_STATE extends Structure { + public int emNotifyType; // 通知类型, 详见 EM_DEVICE_NOTIFY_TYPE + public int nRetCount; // 设备个数 + public DEVICE_ID[] szDeviceIDsArr = (DEVICE_ID[]) new DEVICE_ID().toArray(MAX_LINK_DEVICE_NUM); // 设备列表 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // CLIENT_AttachDeviceState 注册设备状态回调入参结构 + public static class NET_IN_ATTACH_DEVICE_STATE extends Structure { + public int dwSize; + public StdCallCallback cbDeviceState; //回调函数 + public Pointer dwUser; //用户数据 + + public NET_IN_ATTACH_DEVICE_STATE() { + this.dwSize = this.size(); + } + } + + // CLIENT_AttachDeviceState 注册设备状态回调出参结构 + public static class NET_OUT_ATTACH_DEVICE_STATE extends Structure { + public int dwSize; + + public NET_OUT_ATTACH_DEVICE_STATE() { + this.dwSize = this.size(); + } + } + + // CLIENT_AsyncAddDevice 添加设备入参结构 + public static class NET_IN_ASYNC_ADD_DEVICE extends Structure { + public int dwSize; + public int nCount; // URL个数 + public DEVICE_URL[] szUrlsArr = (DEVICE_URL[]) new DEVICE_URL().toArray(MAX_ADD_DEVICE_NUM); // URL组 + + public NET_IN_ASYNC_ADD_DEVICE() { + this.dwSize = this.size(); + } + } + + // 设备URL + public static class DEVICE_URL extends Structure { + public byte[] szUrl = new byte[MAX_COMMON_STRING_512]; // URL + } + + // CLIENT_AsyncAddDevice 添加设备出参结构 + public static class NET_OUT_ASYNC_ADD_DEVICE extends Structure { + public int dwSize; + public int nTaskID; //任务ID + + public NET_OUT_ASYNC_ADD_DEVICE() { + this.dwSize = this.size(); + } + } + + // 设备的添加状态 + public static class EM_DEVICE_ADD_STATE extends Structure { + public static final int EM_DEVICE_ADD_STATE_UNKNOWN = 0; // 未知 + public static final int EM_DEVICE_ADD_STATE_WAIT = 1; // 等待添加 + public static final int EM_DEVICE_ADD_STATE_CONNECT = 2; // 连接中 + public static final int EM_DEVICE_ADD_STATE_FAILURE = 3; // 添加失败 + public static final int EM_DEVICE_ADD_STATE_SUCCESS = 4; // 添加成功 + public static final int EM_DEVICE_ADD_STATE_STOP = 5; // 停止添加 + } + + // 注册添加设备的回调返回信息 + public static class NET_CB_ATTACH_ADD_DEVICE extends Structure { + public int nTaskID; // 任务ID + public int emAddState; // 添加设备结果 + public int nIndex; // 任务中设备序号 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // CLIENT_AttachAddDevice 注册添加设备回调入参结构 + public static class NET_IN_ATTACH_ADD_DEVICE extends Structure { + public int dwSize; + public StdCallCallback cbAddDevice; //回调函数 + public Pointer dwUser; //用户数据 + + public NET_IN_ATTACH_ADD_DEVICE() { + this.dwSize = this.size(); + } + } + + // CLIENT_AttachAddDevice 注册添加设备回调出参结构 + public static class NET_OUT_ATTACH_ADD_DEVICE extends Structure { + public int dwSize; + + public NET_OUT_ATTACH_ADD_DEVICE() { + this.dwSize = this.size(); + } + } + + // CLIENT_GetAddDeviceInfo 获取添加中的设备状态入参结构 + public static class NET_IN_GET_ADD_DEVICE_LIST_INFO extends Structure { + public int dwSize; + public int nTaskID; // 任务ID + public int nCount; // 设备个数 + public int[] nIndex = new int[MAX_ADD_DEVICE_NUM]; // 设备序号列表(NET_IN_ADD_DEVICE中szUrls的序号,从0开始) + + public NET_IN_GET_ADD_DEVICE_LIST_INFO() { + this.dwSize = this.size(); + } + } + + // 添加中设备的结果信息 + public static class NET_GET_ADD_DEVICE_INFO extends Structure { + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID + public byte[] szUrl = new byte[NET_COMMON_STRING_512]; // url + public int emAddState; // 当前添加状态,详见 EM_DEVICE_ADD_STATE + public int nErrorCode; // 错误码 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // CLIENT_GetAddDeviceInfo 获取添加中的设备状态出参结构 + public static class NET_OUT_GET_ADD_DEVICE_LIST_INFO extends Structure { + public int dwSize; + public int nRetCount; // 设备个数 + public NET_GET_ADD_DEVICE_INFO[] stuDeviceInfo = + (NET_GET_ADD_DEVICE_INFO[]) new NET_GET_ADD_DEVICE_INFO().toArray(MAX_ADD_DEVICE_NUM); // 设备信息列表 + + public NET_OUT_GET_ADD_DEVICE_LIST_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_GetDeviceInfo 获取已添加的设备状态入参结构 + public static class NET_IN_GET_DEVICE_LIST_INFO extends Structure { + public int dwSize; + public int nCount; // 设备个数 + public DEVICE_ID[] szDeviceIDsArr = (DEVICE_ID[]) new DEVICE_ID().toArray(MAX_LINK_DEVICE_NUM); // 设备列表 + + public NET_IN_GET_DEVICE_LIST_INFO() { + this.dwSize = this.size(); + } + } + + // 已添加设备的结果信息 + public static class NET_GET_DEVICE_INFO extends Structure { + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID + public byte[] szUrl = new byte[NET_COMMON_STRING_512]; // url + public byte[] szSerialNo = new byte[NET_COMMON_STRING_32]; // 设备序列号 + public byte[] szDeviceType = new byte[NET_COMMON_STRING_64]; // 设备类型 + public byte[] szDeviceClass = new byte[NET_DEV_CLASS_LEN]; // 设备大类 + public int nMacCount; // 设备mac个数 + public DEVICE_MAC[] szMacsArr = (DEVICE_MAC[]) new DEVICE_MAC().toArray(MAX_MACADDR_NUM); // 设备mac地址组 + public byte[] szDevSoftVersion = new byte[NET_COMMON_STRING_128]; // 设备软件版本号 + public byte[] szDeviceName = new byte[NET_DEV_NAME_LEN]; // 设备名称 + public byte[] szDetail = new byte[NET_COMMON_STRING_512]; // 设备详细信息 + public int nVideoInputCh; // 视频输入通道数 + public int nVideoOutputCh; // 视频输出通道数 + public int nAudioInputCh; // 音频输入通道数 + public int nAudioOutputCh; // 音频输出通道数 + public int nAlarmInputCh; // 报警输入通道数 + public int nAlarmOutputCh; // 报警输出通道数 + public int nErrorCode; // 设备离线错误码 + public int nVtoDoors; // 门禁设备可控制的门的总数 + public byte byOnline; // 设备是否在线 0:离线 1:在线 + public byte[] byReserved = new byte[511]; // 保留字节 + } + + // 设备mac地址 + public static class DEVICE_MAC extends Structure { + public byte[] szMac = new byte[NET_MACADDR_LEN]; // 设备mac地址 + } + + // CLIENT_GetDeviceInfo 获取已添加的设备状态出参结构 + public static class NET_OUT_GET_DEVICE_LIST_INFO extends Structure { + public int dwSize; + public int nMaxCount; // 用户申请的设备个数 + public int nRetCount; // 实际返回的设备个数 + public Pointer pstuDeviceInfo; // 设备信息列表 用户分配内存,大小为sizeof(NET_GET_DEVICE_INFO)*nMaxCount, 对应 NET_GET_DEVICE_INFO[] + + public NET_OUT_GET_DEVICE_LIST_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_SetConnectChannel 设置连接通道入参结构 + public static class NET_IN_SET_CONNECT_CHANNEL extends Structure { + public int dwSize; + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID + public int nCount; // 通道个数 + public int[] nChannels = new int[MAX_DEVICE_CHANNEL_NUM]; // 通道列表 + + public NET_IN_SET_CONNECT_CHANNEL() { + this.dwSize = this.size(); + } + } + + // CLIENT_SetConnectChannel 设置连接通道出参结构 + public static class NET_OUT_SET_CONNECT_CHANNEL extends Structure { + public int dwSize; + + public NET_OUT_SET_CONNECT_CHANNEL() { + this.dwSize = this.size(); + } + } + + // CLIENT_GetChannelInfo 获取设备通道信息入参结构 + public static class NET_IN_GET_CHANNEL_INFO extends Structure { + public int dwSize; + public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID + + public NET_IN_GET_CHANNEL_INFO() { + this.dwSize = this.size(); + } + } + + // 获取设备通道信息结果信息 + public static class NET_GET_CHANNEL_INFO extends Structure { + public int nRemoteChannel; // 远程通道号 + public int nLogicChannel; // 分配的逻辑通道 + public byte[] szName = new byte[NET_DEV_NAME_LEN]; // 通道名称 + public byte[] szDetail = new byte[NET_COMMON_STRING_512]; // 设备详细信息 + public byte[] szDeviceType = new byte[NET_COMMON_STRING_64]; // 设备类型 + public byte[] szDeviceClass = new byte[NET_DEV_CLASS_LEN]; // 设备大类 + public byte[] szIP = new byte[NET_MAX_IPADDR_LEN]; // ip地址 + public byte[] szMac = new byte[NET_MACADDR_LEN]; // 设备mac地址 + public byte[] szSerialNo = new byte[NET_DEV_SERIALNO_LEN]; // 设备序列号 + public byte[] szDevSoftVersion = new byte[NET_COMMON_STRING_128]; // 设备软件版本号 + public int nVideoInputCh; // 视频输入通道数 + public int nVideoOutputCh; // 视频输出通道数 + public int nAudioInputCh; // 音频输入通道数 + public int nAudioOutputCh; // 音频输出通道数 + public int nAlarmInputCh; // 报警输入通道数 + public int nAlarmOutputCh; // 报警输出通道数 + public byte byOnline; // 通道是否在线0:离线 1:在线 + public byte byUsed; // 该通道是否被本地设备使用 0:未使用 1:使用 + public byte[] byReserved = new byte[510]; // 保留字节 + } + + // CLIENT_GetChannelInfo 获取设备通道信息出参结构 + public static class NET_OUT_GET_CHANNEL_INFO extends Structure { + public int dwSize; + public int nMaxCount; // 用户申请的通道个数 + public int nRetCount; // 实际返回的通道个数 + public Pointer pstuChannelInfo; // 通道信息列表 用户分配内存,大小为sizeof(NET_GET_CHANNEL_INFO)*nMaxCount, 对应 NET_GET_CHANNEL_INFO[] + + public NET_OUT_GET_CHANNEL_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_RemoveDevice 删除设备入参结构 + public static class NET_IN_REMOVE_DEVICE extends Structure { + public int dwSize; + public int nCount; // 设备个数 + public DEVICE_ID[] szDeviceIDsArr = (DEVICE_ID[]) new DEVICE_ID().toArray(MAX_LINK_DEVICE_NUM); // 设备列表 + + public NET_IN_REMOVE_DEVICE() { + this.dwSize = this.size(); + } + } + + // CLIENT_RemoveDevice 删除设备出参结构 + public static class NET_OUT_REMOVE_DEVICE extends Structure { + public int dwSize; + + public NET_OUT_REMOVE_DEVICE() { + this.dwSize = this.size(); + } + } + + // CLIENT_CancelAddDeviceTask 接口输入参数 + public static class NET_IN_CANCEL_ADD_TASK extends Structure { + public int dwSize; + public int nTaskID; // 任务ID + + public NET_IN_CANCEL_ADD_TASK() { + this.dwSize = this.size(); + } + } + + // CLIENT_CancelAddDeviceTask 接口输出参数 + public static class NET_OUT_CANCEL_ADD_TASK extends Structure { + public int dwSize; + + public NET_OUT_CANCEL_ADD_TASK() { + this.dwSize = this.size(); + } + } + + // CLIENT_ConfirmAddDeviceTask 接口输入参数 + public static class NET_IN_CONFIRM_ADD_TASK extends Structure { + public int dwSize; + public int nTaskID; // 任务ID + + public NET_IN_CONFIRM_ADD_TASK() { + this.dwSize = this.size(); + } + } + + // CLIENT_ConfirmAddDeviceTask 接口输出参数 + public static class NET_OUT_CONFIRM_ADD_TASK extends Structure { + public int dwSize; + + public NET_OUT_CONFIRM_ADD_TASK() { + this.dwSize = this.size(); + } + } + + // CLIENT_SCADAAlarmAttachInfo()接口输入参数 + public static class NET_IN_SCADA_ALARM_ATTACH_INFO extends Structure { + public int dwSize; + public StdCallCallback cbCallBack; // 数据回调函数,对应回调 fSCADAAlarmAttachInfoCallBack + public Pointer dwUser; // 用户定义参数 + + public NET_IN_SCADA_ALARM_ATTACH_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_SCADAAlarmAttachInfo()接口输出参数 + public static class NET_OUT_SCADA_ALARM_ATTACH_INFO extends Structure { + public int dwSize; + + public NET_OUT_SCADA_ALARM_ATTACH_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_SyncParkingInfo 接口输入参数 + public static class NET_IN_SYNC_PARKING_INFO extends Structure { + public int dwSize; + public int nChannel; // 通道号 + public byte[] szParkingNum = new byte[32]; // 车位编号 + public int dwPresetNum; // 预置点编号 + public int bHaveCar; // 车位是否有车 + public int bParkingFault; // 车位是否有故障 + + public NET_IN_SYNC_PARKING_INFO() { + this.dwSize = this.size(); + } + } + + // CLIENT_SyncParkingInfo 接口输出参数 + public static class NET_OUT_SYNC_PARKING_INFO extends Structure { + public int dwSize; + + public NET_OUT_SYNC_PARKING_INFO() { + this.dwSize = this.size(); + } + } + + // 监测点位报警信息列表 + public static class NET_SCADA_NOTIFY_POINT_ALARM_INFO_LIST extends Structure { + public int dwSize; + public int nList; // 监测点位报警信息个数 + public NET_SCADA_NOTIFY_POINT_ALARM_INFO[] stuList = (NET_SCADA_NOTIFY_POINT_ALARM_INFO[]) new NET_SCADA_NOTIFY_POINT_ALARM_INFO().toArray(MAX_SCADA_POINT_LIST_ALARM_INFO_NUM); // 监测点位报警信息 + + public NET_SCADA_NOTIFY_POINT_ALARM_INFO_LIST() { + this.dwSize = this.size(); + } + } + + // 监测点位报警信息 + public static class NET_SCADA_NOTIFY_POINT_ALARM_INFO extends Structure { + public int dwSize; + public byte[] szDevID = new byte[NET_COMMON_STRING_16]; // 设备ID + public byte[] szPointID = new byte[NET_COMMON_STRING_128]; // 点位ID + public int bAlarmFlag; // 报警标志, 1-true 0-false + public NET_TIME stuAlarmTime; // 报警时间 + public int nAlarmLevel; // 报警级别(0~6) + public int nSerialNo; // 报警编号,同一个告警的开始和结束的编号是相同的。 + public byte[] szAlarmDesc = new byte[NET_COMMON_STRING_128]; // 报警描述 + + public NET_SCADA_NOTIFY_POINT_ALARM_INFO() { + this.dwSize = this.size(); + } + } + + // 获取指纹事件(对应 NET_ALARM_FINGER_PRINT类型) + public static class ALARM_CAPTURE_FINGER_PRINT_INFO extends Structure { + public int dwSize; + public int nChannelID; // 门通道号(从0开始) + public NET_TIME stuTime; // 事件时间 + public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 门读卡器ID + public int nPacketLen; // 单个指纹数据包长度 + public int nPacketNum; // 指纹数据包个数 + public Pointer szFingerPrintInfo; // 指纹数据(数据总长度即 nPacketLen * nPacketNum) + + public ALARM_CAPTURE_FINGER_PRINT_INFO() { + this.dwSize = this.size(); + } + } + + // 指纹采集(对应 CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT 命令) + public static class NET_CTRL_CAPTURE_FINGER_PRINT extends Structure { + public int dwSize; + public int nChannelID; // 门禁序号(从开始) + public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 读卡器ID + + public NET_CTRL_CAPTURE_FINGER_PRINT() { + this.dwSize = this.size(); + } + } + + // 门禁状态事件 + public static class ALARM_ACCESS_CTL_STATUS_INFO extends Structure { + public int dwSize; + public int nDoor; // 门通道号 + public NET_TIME stuTime; // 事件发生的时间 + public int emStatus; // 门禁状态, 对应 NET_ACCESS_CTL_STATUS_TYPE + public byte[] szSerialNumber = new byte[256]; //无线设备序列号(智能锁) + + public ALARM_ACCESS_CTL_STATUS_INFO() { + this.dwSize = this.size(); + } + } + + // 门禁状态类型 + public static class NET_ACCESS_CTL_STATUS_TYPE extends Structure { + public static final int NET_ACCESS_CTL_STATUS_TYPE_UNKNOWN = 0; + public static final int NET_ACCESS_CTL_STATUS_TYPE_OPEN = 1; // 开门 + public static final int NET_ACCESS_CTL_STATUS_TYPE_CLOSE = 2; // 关门 + public static final int NET_ACCESS_CTL_STATUS_TYPE_ABNORMAL = 3; // 异常 + } + + + //事件类型 EVENT_IVS_SNAPMANUAL(SnapManual事件)对应数据块描述信息 + public static class DEV_EVENT_SNAPMANUAL extends Structure { + public int nChannelID; // 通道号 + public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 + public byte[] bReserved1 = new byte[4]; // 字节对齐 + public double PTS; // 时间戳(单位是毫秒) + public NET_TIME_EX UTC; // 事件发生的时间 + public int nEventID; // 事件ID + + public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 + public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 + public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON + public byte[] bReserved = new byte[1024]; // 保留字节,留待扩展. + } + + // 即时抓图(又名手动抓图)入参, 对应命令 CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT + public static class NET_IN_SNAP_MNG_SHOT extends Structure { + public int dwSize; // 该结构体大小 + public int nChannel; // 通道号 + public int nTime; // 连拍次数, 0表示停止抓拍,正数表示连续抓拍的张数 + + public NET_IN_SNAP_MNG_SHOT() { + this.dwSize = this.size(); + } + } + + // 即时抓图(又名手动抓图)出参, 对应命令 CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT + public static class NET_OUT_SNAP_MNG_SHOT extends Structure { + public int dwSize; // 该结构体大小 + + public NET_OUT_SNAP_MNG_SHOT() { + this.dwSize = this.size(); + } + } + + // 获取摄像机状态, CLIENT_QueryDevInfo 接口 NET_QUERY_GET_CAMERA_STATE 命令入参 + public static class NET_IN_GET_CAMERA_STATEINFO extends Structure { + public int dwSize; + public int bGetAllFlag; // 是否查询所有摄像机状态,若该成员为 TRUE,则 nChannels 成员无需设置, 1-true; 0-false + public int nValidNum; // 该成员,bGetAllFlag 为 FALSE时有效,表示 nChannels 成员有效个数 + public int[] nChannels = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 该成员,bGetAllFlag 为 FALSE时有效,将需要查询的通道号依次填入 + + public NET_IN_GET_CAMERA_STATEINFO() { + this.dwSize = this.size(); + } + } + + // 获取摄像机状态, CLIENT_QueryDevInfo 接口 NET_QUERY_GET_CAMERA_STATE 命令出参 + public static class NET_OUT_GET_CAMERA_STATEINFO extends Structure { + public int dwSize; + public int nValidNum; // 查询到的摄像机通道状态有效个数,由sdk返回 + public int nMaxNum; // pCameraStateInfo 数组最大个数,由用户填写 + public Pointer pCameraStateInfo; // 摄像机通道信息数组,由用户分配, 对应 NET_CAMERA_STATE_INFO[] + + public NET_OUT_GET_CAMERA_STATEINFO() { + this.dwSize = this.size(); + } + } + + public static class NET_CAMERA_STATE_INFO extends Structure { + public int nChannel; // 摄像机通道号, -1表示通道号无效 + public int emConnectionState; // 连接状态, 参考 EM_CAMERA_STATE_TYPE + public byte[] szReserved = new byte[1024]; // 保留字节 + } + + public static class EM_CAMERA_STATE_TYPE extends Structure { + public static final int EM_CAMERA_STATE_TYPE_UNKNOWN = 0; // 未知 + public static final int EM_CAMERA_STATE_TYPE_CONNECTING = 1; // 正在连接 + public static final int EM_CAMERA_STATE_TYPE_CONNECTED = 2; // 已连接 + public static final int EM_CAMERA_STATE_TYPE_UNCONNECT = 3; // 未连接 + public static final int EM_CAMERA_STATE_TYPE_EMPTY = 4; // 通道未配置,无信息 + public static final int EM_CAMERA_STATE_TYPE_DISABLE = 5; // 通道有配置,但被禁用 + } + + // CLIENT_StartFindFaceInfo 输入参数 + public static class NET_IN_FACEINFO_START_FIND extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + + public NET_IN_FACEINFO_START_FIND() { + this.dwSize = this.size(); + } + } + + // CLIENT_StartFindFaceInfo 输出参数 + public static class NET_OUT_FACEINFO_START_FIND extends Structure { + public int dwSize; + public int nTotalCount; // 符合查询条件的总数 + + public NET_OUT_FACEINFO_START_FIND() { + this.dwSize = this.size(); + } + } + + // CLIENT_DoFindFaceInfo 输入参数 + public static class NET_IN_FACEINFO_DO_FIND extends Structure { + public int dwSize; + public int nStartNo; // 起始序号 + public int nCount; // 本次查询的条数 + + public NET_IN_FACEINFO_DO_FIND() { + this.dwSize = this.size(); + } + } + + // CLIENT_DoFindFaceInfo 输出参数 + public static class NET_OUT_FACEINFO_DO_FIND extends Structure { + public int dwSize; + public int nRetNum; // 本次查询到的个数 + public Pointer pstuInfo; // 查询结果, 用户分配内存,大小为sizeof(NET_FACEINFO)*nMaxNum, 对应 NET_FACEINFO[] + public int nMaxNum; // 用户分配内存的个数 + public byte[] byReserved = new byte[4]; + + public NET_OUT_FACEINFO_DO_FIND() { + this.dwSize = this.size(); + } + } + + // 人脸信息 + public static class NET_FACEINFO extends Structure { + public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID + public int nMD5; // 有效的MD5编码数量 + public MD5[] szMD5Arr = (MD5[]) new MD5().toArray(5); // 图片对应的32字节MD5编码加密 + public byte[] byReserved = new byte[512]; + } + + // 图片对应的32字节MD5编码加密 + public static class MD5 extends Structure { + public byte[] szMD5 = new byte[NET_COMMON_STRING_64]; + } + + // 初始化设备账户输入结构体 + public static class NET_IN_INIT_DEVICE_ACCOUNT extends Structure { + public int dwSize; // 结构体大小:初始化结构体时赋值 + public byte[] szMac = new byte[NET_MACADDR_LEN]; // 设备mac地址 + public byte[] szUserName = new byte[MAX_USER_NAME_LEN]; // 用户名 + public byte[] szPwd = new byte[MAX_PWD_LEN]; // 设备密码 + public byte[] szCellPhone = new byte[MAX_CELL_PHONE_NUMBER_LEN]; // 预留手机号 + public byte[] szMail = new byte[MAX_MAIL_LEN]; // 预留邮箱 + public byte byInitStatus; // 此字段已经废弃 + public byte byPwdResetWay; // 设备支持的密码重置方式:搜索设备接口(CLIENT_SearchDevices、CLIENT_StartSearchDevices的回调函数、CLIENT_SearchDevicesByIPs)返回字段byPwdResetWay的值 + // 该值的具体含义见 DEVICE_NET_INFO_EX 结构体,需要与设备搜索接口返回的 byPwdResetWay 值保持一致 + // bit0 : 1-支持预留手机号,此时需要在szCellPhone数组中填入预留手机号(如果需要设置预留手机) ; + // bit1 : 1-支持预留邮箱,此时需要在szMail数组中填入预留邮箱(如果需要设置预留邮箱) + public byte[] byReserved = new byte[2]; // 保留字段 + + public NET_IN_INIT_DEVICE_ACCOUNT() { + this.dwSize = this.size(); + } + } + + // 初始化设备账户输出结构体 + public static class NET_OUT_INIT_DEVICE_ACCOUNT extends Structure { + public int dwSize; // 结构体大小:初始化结构体时赋值 + + public NET_OUT_INIT_DEVICE_ACCOUNT() { + this.dwSize = this.size(); + } + } + + //用户权限 + public static class NET_ATTENDANCE_AUTHORITY extends Structure { + public int NET_ATTENDANCE_AUTHORITY_UNKNOWN = -1; + public int NET_ATTENDANCE_AUTHORITY_CUSTOMER = 0; //普通用户 + public int NET_ATTENDANCE_AUTHORITY_ADMINISTRATORS = 1; //管理员 + } + + //考勤用户信息 + public static class NET_ATTENDANCE_USERINFO extends Structure { + public byte[] szUserID = new byte[MAX_COMMON_STRING_32]; //用户编号ID + public byte[] szUserName = new byte[MAX_ATTENDANCE_USERNAME_LEN]; //人员姓名 + public byte[] szCardNo = new byte[MAX_COMMON_STRING_32]; // 卡号 + public int emAuthority; // 用户权限 + public byte[] szPassword = new byte[MAX_COMMON_STRING_32]; // 密码 + public int nPhotoLength; // 照片数据长度 + public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN]; // 班级(肯尼亚定制) + public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN]; // 电话(肯尼亚定制) + public byte[] byReserved = new byte[208]; // 保留字节 + } + + // CLIENT_Attendance_AddUser 入参 + public static class NET_IN_ATTENDANCE_ADDUSER extends Structure { + public int dwSize; + public NET_ATTENDANCE_USERINFO stuUserInfo = new NET_ATTENDANCE_USERINFO(); // 用户信息 + public Pointer pbyPhotoData; // 照片数据 + + public NET_IN_ATTENDANCE_ADDUSER() { + this.dwSize = this.size(); + } + } + + // CLIENT_Attendance_AddUser 出参 + public static class NET_OUT_ATTENDANCE_ADDUSER extends Structure { + public int dwSize; + + public NET_OUT_ATTENDANCE_ADDUSER() { + this.dwSize = this.size(); + } + } + + // CLIENT_Attendance_DelUser 入参 + public static class NET_IN_ATTENDANCE_DELUSER extends Structure { + public int dwSize; + public byte[] szUserID = new byte[MAX_COMMON_STRING_32]; // 用户ID + + public NET_IN_ATTENDANCE_DELUSER() { + this.dwSize = this.size(); + } + } + + // CLIENT_Attendance_DelUser 出参 + public static class NET_OUT_ATTENDANCE_DELUSER extends Structure { + public int dwSize; + + public NET_OUT_ATTENDANCE_DELUSER() { + this.dwSize = this.size(); + } + } + + // CLIENT_Attendance_ModifyUser 入参 + public static class NET_IN_ATTENDANCE_ModifyUSER extends Structure { + public int dwSize; + public NET_ATTENDANCE_USERINFO stuUserInfo = new NET_ATTENDANCE_USERINFO(); // 用户信息 + public Pointer pbyPhotoData; // 照片数据 + + public NET_IN_ATTENDANCE_ModifyUSER() { + this.dwSize = this.size(); + } + } + + // CLIENT_Attendance_ModifyUser 出参 + public static class NET_OUT_ATTENDANCE_ModifyUSER extends Structure { + public int dwSize; + + public NET_OUT_ATTENDANCE_ModifyUSER() { + this.dwSize = this.size(); + } + } + + + // CLIENT_Attendance_GetUser 入参 + public static class NET_IN_ATTENDANCE_GetUSER extends Structure { + public int dwSize; + public byte[] szUserID = new byte[MAX_COMMON_STRING_32]; // 用户ID + + public NET_IN_ATTENDANCE_GetUSER() { + this.dwSize = this.size(); + } + } + + // CLIENT_Attendance_GetUser 出参 + public static class NET_OUT_ATTENDANCE_GetUSER extends Structure { + public int dwSize; + public NET_ATTENDANCE_USERINFO stuUserInfo = new NET_ATTENDANCE_USERINFO(); // 用户信息 + public int nMaxLength; // 最大存放照片数据的长度 + public Pointer pbyPhotoData; // 照片数据 + + public NET_OUT_ATTENDANCE_GetUSER() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_InsertFingerByUserID 入参 + public static class NET_IN_FINGERPRINT_INSERT_BY_USERID extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_COMMON_STRING_32]; // 用户ID + public int nSinglePacketLen; // 单个指纹数据包长度 + public int nPacketCount; // 指纹数据包的个数 + public Pointer szFingerPrintInfo; // 指纹数据(数据总长度即nSinglePacketLen*nPacketCount) + + public NET_IN_FINGERPRINT_INSERT_BY_USERID() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_InsertFingerByUserID 出参 + public static class NET_OUT_FINGERPRINT_INSERT_BY_USERID extends Structure { + public int dwSize; + public int[] nFingerPrintID = new int[NET_MAX_FINGER_PRINT]; //指纹ID数组 + public int nReturnedCount; //数组中实际返回的个数 + public int nFailedCode; //错误码 0:成功; 1:其他错误; 2:超过本用户下指纹能力的限制. + + public NET_OUT_FINGERPRINT_INSERT_BY_USERID() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_RemoveFingerByUserID 入参(removeByUserID) + public static class NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_COMMON_STRING_32]; // 用户ID + + public NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_RemoveFingerByUserID 出参 + public static class NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID extends Structure { + public int dwSize; + + public NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_RemoveFingerRecord 入参(remove) + public static class NET_CTRL_IN_FINGERPRINT_REMOVE extends Structure { + public int dwSize; + public int nFingerPrintID; // 指纹编号 + + public NET_CTRL_IN_FINGERPRINT_REMOVE() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_RemoveFingerRecord 出参 + public static class NET_CTRL_OUT_FINGERPRINT_REMOVE extends Structure { + public int dwSize; + + public NET_CTRL_OUT_FINGERPRINT_REMOVE() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_GetFingerRecord 入参 + public static class NET_CTRL_IN_FINGERPRINT_GET extends Structure { + public int dwSize; + public int nFingerPrintID; // 指纹编号 + + public NET_CTRL_IN_FINGERPRINT_GET() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_GetFingerRecord 出参 + public static class NET_CTRL_OUT_FINGERPRINT_GET extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_COMMON_STRING_32]; // 所属用户的用户ID + public byte[] szFingerPrintName = new byte[NET_COMMON_STRING_32]; // 指纹名称 + public int nFingerPrintID; // 指纹ID + public int nRetLength; // 实际返回的二进制指纹数据长度 + public int nMaxFingerDataLength; // 二进制指纹数据的最大长度 + public Pointer szFingerPrintInfo; // 指纹数据 + + public NET_CTRL_OUT_FINGERPRINT_GET() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_FindUser 入参 + public static class NET_IN_ATTENDANCE_FINDUSER extends Structure { + public int dwSize; + public int nOffset; // 查询偏移 + public int nPagedQueryCount; // 查询个数,分页查询,最多不超过100 + + public NET_IN_ATTENDANCE_FINDUSER() { + this.dwSize = this.size(); + } + } + + ; + + //CLIENT_Attendance_FindUser 出参 + public static class NET_OUT_ATTENDANCE_FINDUSER extends Structure { + public int dwSize; + public int nTotalUser; // 总的用户数 + public int nMaxUserCount; // 用户信息最大缓存数 + public Pointer stuUserInfo; // 用户信息,内存由用户申请,大小为(sizeof(NET_ATTENDANCE_USERINFO)*nMaxUserCount) + public int nRetUserCount; // 实际返回的用户个数 + public int nMaxPhotoDataLength; // 照片数据最大长度 + public int nRetPhoteLength; // 实际返回的照片数据长度 + public Pointer pbyPhotoData; // 照片数据 + + public NET_OUT_ATTENDANCE_FINDUSER() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_GetFingerByUserID 入参 + public static class NET_IN_FINGERPRINT_GETBYUSER extends Structure { + public int dwSize; + public byte[] szUserID = new byte[NET_COMMON_STRING_32]; // 用户ID + + public NET_IN_FINGERPRINT_GETBYUSER() { + this.dwSize = this.size(); + } + } + + //CLIENT_Attendance_GetFingerByUserID 出参 + public static class NET_OUT_FINGERPRINT_GETBYUSER extends Structure { + public int dwSize; + public int[] nFingerPrintIDs = new int[NET_MAX_FINGER_PRINT];// 指纹ID数组 + public int nRetFingerPrintCount; // 实际返回的指纹ID个数,即nFingerPrintIDs数组中实际有效个数 + public int nSinglePacketLength; // 单个指纹数据包长度 + public int nMaxFingerDataLength; // 接受指纹数据的缓存的最大长度 + public int nRetFingerDataLength; // 实际返回的总的指纹数据包的长度 + public Pointer pbyFingerData; // 指纹数据 + + public NET_OUT_FINGERPRINT_GETBYUSER() { + this.dwSize = this.size(); + } + } + + // 获取考勤机在线状态入参 + public static class NET_IN_ATTENDANCE_GETDEVSTATE extends Structure { + public int dwSize; + + public NET_IN_ATTENDANCE_GETDEVSTATE() { + this.dwSize = this.size(); + } + } + + // 获取考勤机在线状态出参 + public static class NET_OUT_ATTENDANCE_GETDEVSTATE extends Structure { + public int dwSize; + public int nState; // 0:离线;1:在线;其他:未知;考勤机状态 + + public NET_OUT_ATTENDANCE_GETDEVSTATE() { + this.dwSize = this.size(); + } + } + + // 门禁事件配置 + public static class CFG_ACCESS_EVENT_INFO extends Structure { + public byte[] szChannelName = new byte[MAX_NAME_LEN]; // 门禁通道名称 + public int emState; // 门禁状态, 参考 CFG_ACCESS_STATE + public int emMode; // 门禁模式, 参考 CFG_ACCESS_MODE + public int nEnableMode; // 门禁使能电平值, 0:低电平有效(断电启动); 1:高电平有效(通电启动); + public int bSnapshotEnable; // 事件联动抓图使能, 1-true, 0-false + + // 能力 + public byte abDoorOpenMethod; + public byte abUnlockHoldInterval; + public byte abCloseTimeout; + public byte abOpenAlwaysTimeIndex; + public byte abCloseAlwaysTimeIndex; + public byte abHolidayTimeIndex; + public byte abBreakInAlarmEnable; + public byte abRepeatEnterAlarmEnable; + public byte abDoorNotClosedAlarmEnable; + public byte abDuressAlarmEnable; + public byte abDoorTimeSection; + public byte abSensorEnable; + public byte abFirstEnterEnable; + public byte abRemoteCheck; + public byte abRemoteDetail; + public byte abHandicapTimeOut; + public byte abCheckCloseSensor; + public byte abAutoRemoteCheck; + public byte[] reverse = new byte[2]; + + public int emDoorOpenMethod; // 开门方式, 参考 CFG_DOOR_OPEN_METHOD + public int nUnlockHoldInterval; // 门锁保持时间(自动关门时间),单位毫秒,[250, 20000] + public int nCloseTimeout; // 关门超时时间, 超过阈值未关会触发报警,单位秒,[0,9999];0表示不检测超时 + public int nOpenAlwaysTimeIndex; // 常开时间段, 值为CFG_ACCESS_TIMESCHEDULE_INFO配置的数组下标 + public int nCloseAlwaysTimeIndex; // 常关时间段, 值为CFG_ACCESS_TIMESCHEDULE_INFO配置的数组下标 + public int nHolidayTimeRecoNo; // 假期内时间段, 值为假日记录集的记录编号,对应NET_RECORDSET_HOLIDAY的nRecNo + public int bBreakInAlarmEnable; // 闯入报警使能, 1-true, 0-false + public int bRepeatEnterAlarm; // 反潜报警使能, 1-true, 0-false + public int bDoorNotClosedAlarmEnable; // 门未关报警使能, 1-true, 0-false + public int bDuressAlarmEnable; // 胁迫报警使能, 1-true, 0-false + public CFG_DOOROPEN_TIMESECTION_WEEK_DAY[] stuDoorTimeSectionArr = + (CFG_DOOROPEN_TIMESECTION_WEEK_DAY[]) new CFG_DOOROPEN_TIMESECTION_WEEK_DAY().toArray(WEEK_DAY_NUM);// 分时段开门信息 + public int bSensorEnable; // 门磁使能, 1-true, 0-false + public CFG_ACCESS_FIRSTENTER_INFO stuFirstEnterInfo; // 首卡开门信息 + public int bRemoteCheck; // 1-true, 0-false, 是否需要平台验证, TRUE表示权限通过后必须要平台验证后才能开门, FALSE表示权限验证通过后可立即开门 + public CFG_REMOTE_DETAIL_INFO stuRemoteDetail; // 与bRemoteCheck配合使用, 如果远端验证未应答, 设定的设备超时时间到后, 是正常开门还是不开门 + public CFG_HANDICAP_TIMEOUT_INFO stuHandicapTimeOut; // 针对残疾人的开门参数 + public int bCloseCheckSensor; // 闭锁前是否检测门磁, 1-true, 0-false + // true:则当开锁保持时间计时结束后,只有监测到有效门磁信号时,才可以恢复关闭锁的动作。 + // 反之,如果开锁保持时间已到,但未检测到有效门磁信号,则一直保持开锁状态; + // false(默认):则直接按照设定的开锁保持时间进行开锁保持和恢复关闭的动作。 + public CFG_AUTO_REMOTE_CHECK_INFO stuAutoRemoteCheck; // 开门远程验证, 如果开启, 在该时间段内, 设备通过多人组合开门事件通知到平台确认是否可以开门 + public int bLocalControlEnable; // 本地控制启用, 1-TRUE 启用, 0-false 停用 + public int bRemoteControlEnable; // 远程控制启用, 1-true 启用, 0-false 停用 + public int nSensorDelay; // 传感器输出延时,超过此时间判断有人, 单位:秒。 0~10 + public int nHumanStatusSensitivity; // 人状态变化检测灵敏度,在此时间内,判断有人 单位: 秒。 0~300 + public int nDetectSensitivity; // 传感器本身的检测灵敏度 单位:%, 0~100 + public int bLockTongueEnable; // 锁舌使能, 1-true, 0-false + public int nABLockRoute; // AB互锁路线与AB互锁的index对应;-1代表无效 + public int nDoorNotClosedReaderAlarmTime; // 门未关超时读卡器报警, 单位:秒 + public int bEnable; // 使能项,此通道配置是否启用, 1-true为使能, 0-false为关闭 + public byte[] szSN = new byte[CFG_MAX_SN_LEN]; // 无线设备序列号,只获取,不能设置 + public int nCloseDuration; // 门闭合时间,单位:秒 + public int nUnlockReloadInterval; // 开锁命令响应间隔时间,单位:毫秒 + public int emAccessProtocol; // 门禁协议, 参考 CFG_EM_ACCESS_PROTOCOL + public int emProtocolType; // 参考 CFG_EM_SERIAL_PROTOCOL_TYPE, 串口协议下的具体协议功能,当emAccessProtocol为CFG_EM_ACCESS_PROTOCOL_SERIAL时有效 + public CFG_ACCESS_CONTROL_UDP_INFO stuAccessControlUdpInfo; // 门禁udp开锁信息,当emAccessProtocol为CFG_EM_ACCESS_PROTOCOL_REMOTE时有效 + public int nEntranceLockChannel; // 门禁控制器下的子通道,当emAccessProtocol为CFG_EM_ACCESS_PROTOCOL_REMOTE时有效 + public int bSnapshotUpload; // 使能项,抓图是否上传, 1-true为抓图上传, 0-false为抓图不上传 + public int nSnapUploadPos; // 抓图上传地址,对应的是NAS配置项的下标,NAS配置为CFG_CMD_NASEX + public int bCustomPasswordEnable; // 是否启用个性化密码, 1-true, 0-false + public int nRepeatEnterTime; // 重复进入时间,0~180秒,0表示不启用 + public int nCardNoConvert; // 卡号转换,0:不需要转换,1:字节取反,2:按HIDpro转换 + public int bUnAuthorizedMaliciousSwipEnable; // 未授权恶意刷卡事件使能, 1-true, 0-false + public int bFakeLockedAlarmEnable; // 假锁报警使能, 1-true, 0-false + } + + // 分时段开门信息 + public static class CFG_DOOROPEN_TIMESECTION_WEEK_DAY extends Structure { + + public CFG_DOOROPEN_TIMESECTION_INFO[] stuDoorTimeSection = + (CFG_DOOROPEN_TIMESECTION_INFO[]) new CFG_DOOROPEN_TIMESECTION_INFO().toArray(MAX_DOOR_TIME_SECTION); + } + + // 分时段开门 + public static class CFG_DOOROPEN_TIMESECTION_INFO extends Structure { + public CFG_TIME_PERIOD stuTime; // 时间段 + public int emDoorOpenMethod; // 开门模式, 参考 CFG_DOOR_OPEN_METHOD + } + + // 首卡开门信息 + public static class CFG_ACCESS_FIRSTENTER_INFO extends Structure { + public int bEnable; // 在指定的时间,只有拥有首卡权限的用户验证通过后,其他的用户才能刷卡(指纹等)进入,1-true 使能, 0-false 关闭 + public int emStatus; // 首卡权限验证通过后的门禁状态, 参考 CFG_ACCESS_FIRSTENTER_STATUS + public int nTimeIndex; // 需要首卡验证的时间段, 值为 配置 "AccessTimeSchedule"的门禁刷卡时间段的下标 + } + + // 远程开门验证 + public static class CFG_REMOTE_DETAIL_INFO extends Structure { + public int nTimeOut; // 超时时间, 0表示永久等待, 其他值表示超时时间(单位为秒) + public int bTimeOutDoorStatus; // 超时后的门状态, 1-true:打开, 0-false:关闭 + } + + // 针对残疾人的开门信息 + public static class CFG_HANDICAP_TIMEOUT_INFO extends Structure { + public int nUnlockHoldInterval; // 门锁保持时间(自动关门时间),单位毫秒,[250, 60000] + public int nCloseTimeout; // 关门超时时间, 超过阈值未关会触发报警,单位秒,[0,9999];0表示不检测超时 + } + + // 开门远程验证 + public static class CFG_AUTO_REMOTE_CHECK_INFO extends Structure { + public int bEnable; // 使能项, 1-true: 开启, 0-false: 关闭 + public int nTimeSechdule; // 对应CFG_CMD_ACCESSTIMESCHEDULE配置的索引 + } + + // 大华门禁udp开锁信息 + public static class CFG_ACCESS_CONTROL_UDP_INFO extends Structure { + public byte[] szAddress = new byte[CFG_MAX_ACCESS_CONTROL_ADDRESS_LEN];// 地址 + public int nPort; // 端口 + } + + // 门禁状态 + public static class CFG_ACCESS_STATE extends Structure { + public static final int ACCESS_STATE_NORMAL = 0; // 普通 + public static final int ACCESS_STATE_CLOSEALWAYS = 1; // 常关 + public static final int ACCESS_STATE_OPENALWAYS = 2; // 常开 + // 常开常闭状态下,Opendoor开门无效. + public static final int ACCESS_STATE_NOPERSONNC = 3; // 无人状态常闭 + public static final int ACCESS_STATE_NOPERSONNO = 4; // 无人状态常开 + } + + // 门禁模式 + public static class CFG_ACCESS_MODE extends Structure { + public static final int ACCESS_MODE_HANDPROTECTED = 0; // 防夹模式 + public static final int ACCESS_MODE_SAFEROOM = 1; // 防护房间模式 + public static final int ACCESS_MODE_OTHER = 2; // 其它 + } + + // 自定义开门方式 + public static class CFG_DOOR_OPEN_METHOD extends Structure { + public static final int CFG_DOOR_OPEN_METHOD_UNKNOWN = 0; + public static final int CFG_DOOR_OPEN_METHOD_PWD_ONLY = 1; // 只允许密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD = 2; // 只允许刷卡开锁 + public static final int CFG_DOOR_OPEN_METHOD_PWD_OR_CARD = 3; // 密码或刷卡开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_FIRST = 4; // 先刷卡后密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_PWD_FIRST = 5; // 先密码后刷卡开锁 + public static final int CFG_DOOR_OPEN_METHOD_SECTION = 6; // 分时段开门 + public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINTONLY = 7; // 仅指纹开锁 + public static final int CFG_DOOR_OPEN_METHOD_PWD_OR_CARD_OR_FINGERPRINT = 8; // 密码或刷卡或指纹开锁 + public static final int CFG_DOOR_OPEN_METHOD_PWD_AND_CARD_AND_FINGERPINT = 9; // 密码+刷卡+指纹组合开锁 + public static final int CFG_DOOR_OPEN_METHOD_PWD_AND_FINGERPRINT = 10; // 密码+指纹组合开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FINGERPRINT = 11; // 刷卡+指纹开锁 + public static final int CFG_DOOR_OPEN_METHOD_MULTI_PERSON = 12; // 多人开锁 + public static final int CFG_DOOR_OPEN_METHOD_FACEIDCARD = 13; // 人证对比 + public static final int CFG_DOOR_OPEN_METHOD_FACEIDCARD_AND_IDCARD = 14; // 身份证+ 人证比对 + public static final int CFG_DOOR_OPEN_METHOD_FACEIDCARD_OR_CARD_OR_FINGER = 15; // 人证比对或刷卡或指纹 + public static final int CFG_DOOR_OPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FINGER = 16;// (身份证+认证比对)或刷卡或指纹 + public static final int CFG_DOOR_OPEN_METHOD_USERID_AND_PWD = 17; // UserID+密码 + public static final int CFG_DOOR_OPEN_METHOD_FACE_ONLY = 18; // 只允许人脸开锁 + public static final int CFG_DOOR_OPEN_METHOD_FACE_AND_PWD = 19; // 人脸+密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_AND_PWD = 20; // 指纹+密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_AND_FACE = 21; // 指纹+人脸开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FACE = 22; // 刷卡+人脸开锁 + public static final int CFG_DOOR_OPEN_METHOD_FACE_OR_PWD = 23; // 人脸或密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_OR_PWD = 24; // 指纹或密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_OR_FACE = 25; // 指纹或人脸开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FACE = 26; // 刷卡或人脸开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FINGERPRINT = 27; // 刷卡或指纹开锁 + public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD = 28; // 指纹+人脸+密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FACE_AND_PWD = 29; // 刷卡+人脸+密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD = 30; // 刷卡+指纹+密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_PWD_AND_FACE = 31; // 卡+指纹+人脸组合开锁 + public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD = 32; // 指纹或人脸或密码 + public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FACE_OR_PWD = 33; // 卡或人脸或密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE = 34; // 卡或指纹或人脸开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD = 35;// 卡+指纹+人脸+密码组合开锁 + public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD = 36;// 卡或指纹或人脸或密码开锁 + public static final int CFG_DOOR_OPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE = 37;//(身份证+人证比对)或 刷卡 或 人脸 + public static final int CFG_DOOR_OPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE = 38; // 人证比对 或 刷卡(二维码) 或 人脸 + } + + // 首卡权限验证通过后的门禁状态 + public static class CFG_ACCESS_FIRSTENTER_STATUS extends Structure { + public static final int ACCESS_FIRSTENTER_STATUS_UNKNOWN = 0; // 未知状态 + public static final int ACCESS_FIRSTENTER_STATUS_KEEPOPEN = 1; // KeepOpen-首卡权限验证通过后,门保持常开 + public static final int ACCESS_FIRSTENTER_STATUS_NORMAL = 2; // Normal-首卡权限验证通过后,其他用户才能刷卡(指纹等)验证通过 + } + + // 门禁协议 + public static class CFG_EM_ACCESS_PROTOCOL extends Structure { + public static final int CFG_EM_ACCESS_PROTOCOL_UNKNOWN = 0; // 未知 + public static final int CFG_EM_ACCESS_PROTOCOL_LOCAL = 1; // 本机开关量控制 + public static final int CFG_EM_ACCESS_PROTOCOL_SERIAL = 2; // 串口协议 + public static final int CFG_EM_ACCESS_PROTOCOL_REMOTE = 3; // 门禁udp开锁 + } + + // 串口协议下的具体协议功能 + public static class CFG_EM_SERIAL_PROTOCOL_TYPE extends Structure { + public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_UNKNOWN = -1; // 未知 + public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_UNUSED = 0; // 未使用 + public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_DAHUA_ACCESS_485 = 1; // 门禁485 + public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_LADDER_CONTROL = 2; // 梯控 + public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_REMOTE_READ_HEAD = 3; // 远距离读头 + } + + // CLIENT_MatrixSetCameras接口的输入参数 + public static class NET_IN_MATRIX_SET_CAMERAS extends Structure { + public int dwSize; + public Pointer pstuCameras; // 显示源信息 NET_MATRIX_CAMERA_INFO 数组, 用户分配内存,大小为sizeof(NET_MATRIX_CAMERA_INFO)*nCameraCount + public int nCameraCount; // 显示源数组大小 + + public NET_IN_MATRIX_SET_CAMERAS() { + this.dwSize = this.size(); + } + } + + // CLIENT_MatrixSetCameras接口的输出参数 + public static class NET_OUT_MATRIX_SET_CAMERAS extends Structure { + public int dwSize; + + public NET_OUT_MATRIX_SET_CAMERAS() { + this.dwSize = this.size(); + } + } + + // 各种违章事件联动报警输出事件 (NET_ALARM_TRAFFIC_LINKAGEALARM) + public static class ALARM_TRAFFIC_LINKAGEALARM_INFO extends Structure { + public NET_TIME_EX stuTime; // 事件发生的时间 + public byte[] szCode = new byte[NET_COMMON_STRING_32]; // 违章联动报警事件 + public byte[] byReserved = new byte[1024]; // 保留字节 + } + + // 门禁控制器操作类型 + public static class NET_EM_ACCESS_CTL_MANAGER extends Structure { + public static final int NET_EM_ACCESS_CTL_MANAGER_ADDDEVICE = 0; // 添加单个分控器, 对应结构体 pstInParam = NET_IN_ACCESS_CTL_MANAGER_ADDDEVICE, pstOutParam = NET_OUT_ACCESS_CTL_MANAGER_ADDDEVICE + public static final int NET_EM_ACCESS_CTL_MANAGER_MODIFYDEVICE = 1; // 修改分控器名称, 对应结构体 pstInParam = NET_IN_ACCESS_CTL_MANAGER_MODIFYDEVICE, pstOutParam = NET_OUT_ACCESS_CTL_MANAGER_MODIFYDEVICE + public static final int NET_EM_ACCESS_CTL_MANAGER_REMOVEDEVICE = 2; // 删除分控器, 对应结构体 pstInParam = NET_IN_ACCESS_CTL_MANAGER_REMOVEDEVICE, pstOutParam = NET_OUT_ACCESS_CTL_MANAGER_REMOVEDEVICE + public static final int NET_EM_ACCESS_CTL_GETSUBCONTROLLER_INFO = 3; // 获取分控器信息, 对应结构体 pstInParam = NET_IN_GET_SUB_CONTROLLER_INFO, pstOutParam = NET_OUT_GET_SUB_CONTROLLER_INFO + public static final int NET_EM_ACCESS_CTL_GETSUBCONTROLLER_STATE = 4; // 获取分控器状态, 对应结构体 pstInParam = NET_IN_GET_SUB_CONTROLLER_STATE, pstOutParam = NET_OUT_GET_SUB_CONTROLLER_STATE + public static final int NET_EM_ACCESS_CTL_SET_REPEAT_ENTERROUTE = 5; // 设置反潜路径信息, 对应结构体 pstInparam = NET_IN_SET_REPEAT_ENTERROUTE, pstOutParam = NET_OUT_SET_REPEAT_ENTERROUTE + public static final int NET_EM_ACCESS_CTL_GET_REPEAT_ENTERROUTE = 6; // 获取反潜路径信息, 对应结构体 pstInparam = NET_IN_GET_REPEAT_ENTERROUTE, pstOutParam = NET_OUT_GET_REPEAT_ENTERROUTE + public static final int NET_EM_ACCESS_CTL_SET_ABLOCK_ROUTE = 7; // 设置AB互锁路径信息, 对应结构体 pstInparam = NET_IN_SET_ABLOCK_ROUTE, pstOutParam = NET_OUT_SET_ABLOCK_ROUTE + public static final int NET_EM_ACCESS_CTL_GET_ABLOCK_ROUTE = 8; // 获取AB互锁路径信息, 对应结构体 pstInparam = NET_IN_GET_ABLOCK_ROUTE, pstOutParam = NET_OUT_GET_ABLOCK_ROUTE + public static final int NET_EM_ACCESS_CTL_GET_LOGSTATUS = 9; // 获取日志同步状态,对应结构体 pstInparam = NET_IN_GET_LOGSTATUS, pstOutParam = NET_OUT_GET_LOGSTATUS + public static final int NET_EM_ACCESS_CTL_SYNCHRO_OFFLINE_LOG = 10; // 同步离线日志, 对应结构体 pstInparam = NET_IN_SYNCHRO_OFFLINE_LOG, pstOutParam = NET_OUT_SYNCHRO_OFFLINE_LOG + public static final int NET_EM_ACCESS_CTL_SYNCHRO_TIME = 11; // 同步分控器时间,对应结构体 pstInparam = NET_IN_SYNCHRO_CONTROLLER_TIME, pstOutParam = NET_OUT_SYNCHRO_CONTROLLER_TIME + public static final int NET_EM_ACCESS_CTL_SET_QRCODEDECODE_INFO = 12; // 设置二维码的解码信息, 对应结构体 pstInparam = NET_IN_SET_QRCODE_DECODE_INFO, pstOutParam = NET_OUT_SET_QRCODE_DECODE_INFO + } + + // 获取分控器信息入参 + public static class NET_IN_GET_SUB_CONTROLLER_INFO extends Structure { + public int dwSize; + public int[] nSubControllerID = new int[MAX_ACCESSSUBCONTROLLER_NUM]; // 分控器ID, 取值范围 -1~255, -1:获取所有,0:获取本地,1~255:外置分控 + public int nSubControllerNum; // 需要查询的分控器数量 + + public NET_IN_GET_SUB_CONTROLLER_INFO() { + this.dwSize = this.size(); + } + } + + // 获取分控器信息出参 + public static class NET_OUT_GET_SUB_CONTROLLER_INFO extends Structure { + public int dwSize; + public NET_SUB_CONTROLLER_INFO[] stuSubControllerInfo = + (NET_SUB_CONTROLLER_INFO[]) new NET_SUB_CONTROLLER_INFO().toArray(MAX_ACCESSSUBCONTROLLER_NUM); // 分控器信息 + public int nRetNum; // 查询到的分控器数量 + + public NET_OUT_GET_SUB_CONTROLLER_INFO() { + this.dwSize = this.size(); + } + } + + // 分控器信息 + public static class NET_SUB_CONTROLLER_INFO extends Structure { + public int nSubControllerID; // 分控器ID,取值范围 0~255,0为本地 + public byte[] szSubControllerName = new byte[MAX_COMMON_STRING_128]; // 分控器名称 + public int emProperty; // 门禁单双向, 对应枚举 NET_ACCESS_PROPERTY + public byte[] szDeviceType = new byte[MAX_COMMON_STRING_128]; // 分控器型号 + public byte[] szVesion = new byte[MAX_COMMON_STRING_128]; // 分控器版本号 + public int nDoorNum; // 门数量 + public NET_CARDREAD_INFO[] stuReaderInfo = + (NET_CARDREAD_INFO[]) new NET_CARDREAD_INFO().toArray(MAX_ACCESSDOOR_NUM); // 门对应的读卡器号 + public byte[] byReserved = new byte[128]; + } + + // 读卡器信息 + public static class NET_CARDREAD_INFO extends Structure { + public int nDoor; // 门序号 + public int nReadNum; // 读卡器数量 + public READ_ID[] szReadIDArr = + (READ_ID[]) new READ_ID().toArray(MAX_ACCESS_READER_NUM);// 读卡器ID + public byte[] byReserved = new byte[64]; + } + + // 读卡器ID + public static class READ_ID extends Structure { + public byte[] szReadID = new byte[NET_COMMON_STRING_32]; // 读卡器ID + } + + // 单双向 + public static class NET_ACCESS_PROPERTY extends Structure { + public static final int NET_EM_ACCESS_PROPERTY_UNKNOWN = 0; // 未知 + public static final int NET_EM_ACCESS_PROPERTY_BIDIRECT = 1; // 双向门禁 + public static final int NET_EM_ACCESS_PROPERTY_UNIDIRECT = 2; // 单向门径 + } + + + // 门禁刷卡时间段,对此配置,通道号实际表示配置索引, 对应命令 CFG_CMD_ACCESSTIMESCHEDULE + public static class CFG_ACCESS_TIMESCHEDULE_INFO extends Structure { + public TIME_SECTION_WEEK_DAY_4[] stuTimeWeekDay = + (TIME_SECTION_WEEK_DAY_4[]) new TIME_SECTION_WEEK_DAY_4().toArray(WEEK_DAY_NUM); // 刷卡时间段 + public int bEnable; // 时间段使能开关, 1-true; 0-false + public byte[] szName = new byte[CFG_COMMON_STRING_128]; // 自定义名称 + } + + // 普通配置 (CFG_CMD_DEV_GENERRAL) General + public static class CFG_DEV_DISPOSITION_INFO extends Structure { + public int nLocalNo; // 本机编号,主要用于遥控器区分不同设备 0~998 + public byte[] szMachineName = new byte[256]; // 机器名称或编号 + public byte[] szMachineAddress = new byte[256]; // 机器部署地点即道路编码 + public byte[] szMachineGroup = new byte[256]; // 机器分组或叫设备所属单位 默认为空,用户可以将不同的设备编为一组,便于管理,可重复。 + public byte[] szMachineID = new byte[64]; // 机器编号, 联网平台内唯一 + public int nLockLoginTimes; // 登陆失败可尝试次数 + public int nLoginFailLockTime; // 登陆失败锁定时间 + public int bLockLoginEnable; // 登陆失败可尝试次数使能, 1-true; 0-false + public byte[] bReserved = new byte[948]; // 保留字节 + } + + // 接口 CLIENT_StartVideoDiagnosis 的输入参数 + public static class NET_IN_VIDEODIAGNOSIS extends Structure { + public int dwSize; // 此结构体大小 + public int nDiagnosisID; // 视频诊断ID,从0开始 + public int dwWaitTime; // 接口超时等待时间 + public StdCallCallback cbVideoDiagnosis; // 视频诊断结果回调函数, 对应回调函数 fRealVideoDiagnosis + public Pointer dwUser; // 用户自定义参数 + + public NET_IN_VIDEODIAGNOSIS() { + this.dwSize = this.size(); + } + } + + // 接口 CLIENT_StartVideoDiagnosis 的输出参数 + public static class NET_OUT_VIDEODIAGNOSIS extends Structure { + public int dwSize; // 此结构体大小 + public LLong lDiagnosisHandle; // 订阅句柄 + + public NET_OUT_VIDEODIAGNOSIS() { + this.dwSize = this.size(); + } + } + + // cbVideoDiagnosis 回调参数类型 + public static class NET_REAL_DIAGNOSIS_RESULT extends Structure { + public int dwSize; // 此结构体大小 + public Pointer pstDiagnosisCommonInfo; // 视频诊断通用信息, 对应 NET_VIDEODIAGNOSIS_COMMON_INFO + public int nTypeCount; // 诊断结果数据诊断类型个数 + public Pointer pDiagnosisResult; // 一次诊断结果数据, 大小为 dwBufSize, 格式如 NET_DIAGNOSIS_RESULT_HEADER+诊断类型1+NET_DIAGNOSIS_RESULT_HEADER+诊断类型2+... + public int dwBufSize; // 缓冲长度 + + public NET_REAL_DIAGNOSIS_RESULT() { + this.dwSize = this.size(); + } + } + + public static class NET_DIAGNOSIS_RESULT_HEADER extends Structure { + public int dwSize; // 此结构体大小 + public byte[] szDiagnosisType = new byte[MAX_PATH]; // 诊断类型,详见"视频诊断上报结果检测类型定义" 如 NET_DIAGNOSIS_DITHER + public int nDiagnosisTypeLen; // 该诊断类型结构体大小 + + public NET_DIAGNOSIS_RESULT_HEADER() { + this.dwSize = this.size(); + } + } + + // 视频诊断结果上报通用数据 + public static class NET_VIDEODIAGNOSIS_COMMON_INFO extends Structure { + public int dwSize; // 此结构体大小 + public int nDiagnosisID; // 检测通道 + public NET_ARRAY stProject; // 计划名称 + public NET_ARRAY stTask; // 任务名称 + public NET_ARRAY stProfile; // 参数表名称 + public NET_ARRAY stDeviceID; // 设备唯一标志 + public NET_TIME stStartTime; // 开始时间 + public NET_TIME stEndTime; // 结束时间 + public int nVideoChannelID; // 视频通道号 前端设备比如DVR,IPC的通道 + public int emVideoStream; // 视频码流, 参考 NET_STREAM_TYPE + public int emResultType; // 诊断结果类型, 参考 NET_VIDEODIAGNOSIS_RESULT_TYPE + public int bCollectivityState; // 诊断结果, 1-true, 0-false + public int emFailedCause; // 失败原因, 参考 NET_VIDEODIAGNOSIS_FAIL_TYPE + public byte[] szFailedCode = new byte[NET_COMMON_STRING_64]; // 失败原因描述 + public byte[] szResultAddress = new byte[NET_COMMON_STRING_128]; // 诊断结果存放地址 + public int nFrameRate; // 码率 单位 kb/s, 每天上报一次 + public int nFrameWidth; // 宽 每天上报一次 + public int nFrameHeight; // 高 每天上报一次 + public int nBackPic; // 背景图片个数 + public BACK_PICTURE_ADDRESS[] szBackPicAddressArr = (BACK_PICTURE_ADDRESS[]) new BACK_PICTURE_ADDRESS().toArray(MAX_BACKPIC_COUNT); // 背景图片路径列表 + + public NET_VIDEODIAGNOSIS_COMMON_INFO() { + this.dwSize = this.size(); + } + } + + // 背景图片路径 + public static class BACK_PICTURE_ADDRESS extends Structure { + public byte[] szBackPicAddress = new byte[NET_COMMON_STRING_128]; // 背景图片路径 + } + + // 通用变长字符串以‘\0’结束 + public static class NET_ARRAY extends Structure { + public int dwSize; // 此结构体大小 + public Pointer pArray; // 缓冲区 目前最小260字节,调用者申请内存 填充数据保证是'\0'结束 + public int dwArrayLen; // 缓冲空间长度 + + public NET_ARRAY() { + this.dwSize = this.size(); + } + } + + // 视频码流类型 + public static class NET_STREAM_TYPE extends Structure { + public static final int NET_EM_STREAM_ERR = 0; // 其它 + public static final int NET_EM_STREAM_MAIN = 1; // "Main"-主码流 + public static final int NET_EM_STREAM_EXTRA_1 = 2; // "Extra1"-辅码流1 + public static final int NET_EM_STREAM_EXTRA_2 = 3; // "Extra2"-辅码流2 + public static final int NET_EM_STREAM_EXTRA_3 = 4; // "Extra3"-辅码流3 + public static final int NET_EM_STREAM_SNAPSHOT = 5; // "Snapshot"-抓图码流 + public static final int NET_EM_STREAM_OBJECT = 6; // "Object"-物体流 + public static final int NET_EM_STREAM_AUTO = 7; // "Auto"-自动选择合适码流 + public static final int NET_EM_STREAM_PREVIEW = 8; // "Preview"-预览裸数据码流 + public static final int NET_EM_STREAM_NONE = 9; // 无视频码流(纯音频) + } + + // 视频诊断结果类型 + public static class NET_VIDEODIAGNOSIS_RESULT_TYPE extends Structure { + public static final int NET_EM_ROTATION = 0; // "Rotation" -视频轮巡分析结果 + public static final int NET_EM_REAL = 1; // "Real" -实时视频分析结果 + public static final int NET_EM_NR_UNKNOW = 2; // 未定义 + } + + //视频诊断错误原因 + public static class NET_VIDEODIAGNOSIS_FAIL_TYPE extends Structure { + public static final int NET_EM_NO_ERROR = 0; // 诊断成功 + public static final int NET_EM_DISCONNECT = 1; // "Disconnect" - 末能连接设备 + public static final int NET_EM_CH_NOT_EXIST = 2; // "ChannelNotExist" - 通道不存在 + public static final int NET_EM_LOGIN_OVER_TIME = 3; // "LoginOverTime" - 登录超时 + public static final int NET_EM_NO_VIDEO = 4; // "NoVideo" - 登录成功无视频 + public static final int NET_EM_NO_RIGHT = 5; // "NoRight" - 无操作权限 + public static final int NET_EM_PLATFROM_LOGIN_FAILED = 6; // "PlatformLoginFailed" - 平台登入失败 + public static final int NET_EM_PLATFROM_DISCONNECT = 7; // "PlatformDisconnect" - 平台断开连接 + public static final int NET_EM_GET_STREAM_OVER_TIME = 8; // "GetStreamOverTime" - 获取码流超时 + public static final int NET_EM_GET_NO_ENOUGH_STREAM = 9; // "NoEnoughStream" - 码流不足 + public static final int NET_EM_DECODE_STREAM_FAILED = 10; // "DecodeStreamFailed" - 解码失败 + public static final int NET_EM_GET_OFF_LINE = 11; // "OffLine" - 前端设备离线 + public static final int NET_EM_NF_UNKNOW = 12; // 其他原因,详见结构体里的失败原因描述 + public static final int NET_EM_NOT_SD = 13; // "NotSD" - 设备非球机,云台类检测无效 + } + + // 接口 CLIENT_StartFindDiagnosisResult 的输入参数 + public static class NET_IN_FIND_DIAGNOSIS extends Structure { + public int dwSize; // 此结构体大小 + public int nDiagnosisID; // 视频诊断ID,从0开始 + public int dwWaitTime; // 接口超时等待时间 + public NET_ARRAY stuDeviceID; // 设备唯一标志,pArray : null表示不使用设备ID查询 + public NET_TIME stuStartTime; // 开始时间 + public NET_TIME stuEndTime; // 结束时间 + public int nVideoChannel; // 视频通道号,-1:所有通道号 + public int nTypeCount; // 诊断类型个数,0:不使用诊断类型查询 + public Pointer pstDiagnosisTypes; // 诊断类型数组,表示需要查询的诊断类型, 对应 NET_ARRAY[] + // 由用户申请内存,大小为sizeof(NET_ARRAY)*nTypeCount + public byte[] szProjectName = new byte[MAX_PATH]; // 计划名称 + + public NET_IN_FIND_DIAGNOSIS() { + this.dwSize = this.size(); + } + } + + // 接口 CLIENT_StartFindDiagnosisResult 的输出参数 + public static class NET_OUT_FIND_DIAGNOSIS extends Structure { + public int dwSize; // 此结构体大小 + public LLong lFindHandle; // 查询句柄 + public int dwTotalCount; // 符合条件的总个数 + + public NET_OUT_FIND_DIAGNOSIS() { + this.dwSize = this.size(); + } + } + + // 接口 CLIENT_DoFindDiagnosisResult 的输入参数 + public static class NET_IN_DIAGNOSIS_INFO extends Structure { + public int dwSize; // 此结构体大小 + public int nDiagnosisID; // 视频诊断ID,从0开始 + public int dwWaitTime; // 接口超时等待时间 + public int nFindCount; // 每次查询的视频诊断结果条数 + public int nBeginNumber; // 查询起始序号 0<=beginNumber<= totalCount-1 + + public NET_IN_DIAGNOSIS_INFO() { + this.dwSize = this.size(); + } + } + + // 接口 CLIENT_DoFindDiagnosisResult 的输出参数 + public static class NET_OUT_DIAGNOSIS_INFO extends Structure { + public int dwSize; // 此结构体大小 + public int nInputNum; // 用户分配的 NET_VIDEODIAGNOSIS_RESULT_INFO 个数 + public int nReturnNum; // 返回结果个数 + public Pointer pstDiagnosisResult; // 结果数据 结构体指针需要调用者分配, 对应 NET_VIDEODIAGNOSIS_RESULT_INFO[] + // 申请内存大小为sizeof(NET_VIDEODIAGNOSIS_RESULT_INFO)*nInputNum + + public NET_OUT_DIAGNOSIS_INFO() { + this.dwSize = this.size(); + } + } + + public static class NET_VIDEODIAGNOSIS_RESULT_INFO extends Structure { + public int dwSize; // 此结构体大小 + + public Pointer pstDiagnosisCommonInfo; // 视频诊断通用信息 以下结构体指针需要调用者分配, 对应 NET_VIDEODIAGNOSIS_COMMON_INFO + + public int abDither; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstDither; // 视频抖动检测, 对应 NET_VIDEO_DITHER_DETECTIONRESULT + + public int abStration; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstStration; // 视频条纹检测, 对应 NET_VIDEO_STRIATION_DETECTIONRESULT + + public int abLoss; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstLoss; // 视频丢失检测, 对应 NET_VIDEO_LOSS_DETECTIONRESULT + + public int abCover; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstCover; // 视频遮挡检测, 对应 NET_VIDEO_COVER_DETECTIONRESULT + + public int abFrozen; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstFrozen; // 视频冻结检测, 对应 NET_VIDEO_FROZEN_DETECTIONRESULT + + public int abBrightness; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstBrightness; // 视频亮度异常检测, 对应 NET_VIDEO_BRIGHTNESS_DETECTIONRESULT + + public int abContrast; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstContrast; // 视频对比度异常检测, 对应 NET_VIDEO_CONTRAST_DETECTIONRESULT + + public int abUnbalance; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstUnbalance; // 视频偏色检测, 对应 NET_VIDEO_UNBALANCE_DETECTIONRESULT + + public int abNoise; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstNoise; // 视频噪声检测, 对应 NET_VIDEO_NOISE_DETECTIONRESULT + + public int abBlur; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstBlur; // 视频模糊检测, 对应 NET_VIDEO_BLUR_DETECTIONRESULT + + public int abSceneChange; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstSceneChange; // 视频场景变化检测, 对应 NET_VIDEO_SCENECHANGE_DETECTIONRESULT + + public int abVideoDelay; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstVideoDelay; // 视频延迟检测, 对应 NET_VIDEO_DELAY_DETECTIONRESUL + + public int abPTZMoving; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstPTZMoving; // 云台操作检测, 对应 NET_PTZ_MOVING_DETECTIONRESULT + + public int abBlackAndWhite; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstBlackAndWhite; // 黑白图像检测, 对应 NET_BLACK_WHITE_DETECTIONRESULT + + public int abDramaticChange; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false + public Pointer pstDramaticChange; // 场景剧变检测, 对应 NET_DIAGNOSIS_DRAMATIC_DETECTIONRESULT + + public NET_VIDEODIAGNOSIS_RESULT_INFO() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_DITHER) 视频抖动检测结果 -- 画面变化 风吹,晃动,转动包括云台转动 + public static class NET_VIDEO_DITHER_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态 一般小于是正常,大于是异常,中间是警告, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 检测项持续检测时间 暂时无用 + + public NET_VIDEO_DITHER_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + public static class NET_STATE_TYPE extends Structure { + public static final int NET_EM_STATE_ERR = 0; // 其它 + public static final int NET_EM_STATE_NORMAL = 1; // "Normal" 正常 + public static final int NET_EM_STATE_WARNING = 2; // "Warning" 警告 + public static final int NET_EM_STATE_ABNORMAL = 3; // "Abnormal" 异常 + } + + // 对应检测类型(NET_DIAGNOSIS_STRIATION)视频条纹检测结果 -- 相机受到干扰出现异常条纹 + public static class NET_VIDEO_STRIATION_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_STRIATION_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_LOSS)视频丢失检测结果 -- 断电 断线等造成的 + public static class NET_VIDEO_LOSS_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_LOSS_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_COVER)视频遮挡检测结果 -- 相机被遮挡了 + public static class NET_VIDEO_COVER_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_COVER_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_FROZEN)视频冻结检测结果 -- 画面不动多久为冻结 + public static class NET_VIDEO_FROZEN_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_FROZEN_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_BRIGHTNESS)视频亮度异常检测结果 --以下是相机配置不正确的一些现象检测 + public static class NET_VIDEO_BRIGHTNESS_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_BRIGHTNESS_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_CONTRAST)视频对比度异常检测结果 + public static class NET_VIDEO_CONTRAST_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_CONTRAST_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_UNBALANCE)视频偏色异常检测结果 + public static class NET_VIDEO_UNBALANCE_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_UNBALANCE_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_NOISE)视频噪声异常检测结果 + public static class NET_VIDEO_NOISE_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_NOISE_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_BLUR)视频模糊异常检测结果 + public static class NET_VIDEO_BLUR_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_BLUR_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // 对应检测类型(NET_DIAGNOSIS_SCENECHANGE)视频场景变化检测结果 + public static class NET_VIDEO_SCENECHANGE_DETECTIONRESULT extends Structure { + public int dwSize; // 此结构体大小 + public int nValue; // 检测结果量化值 + public int emState; // 检测结果状态, 参考 NET_STATE_TYPE + public int nDuration; // 状态持续时间 + + public NET_VIDEO_SCENECHANGE_DETECTIONRESULT() { + this.dwSize = this.size(); + } + } + + // CLIENT_DeleteDevConfig 输入参数 + public static class NET_IN_DELETECFG extends Structure { + public int dwSize; // 结构体大小 + public String szCommand; // 配置命令 + + public NET_IN_DELETECFG() { + this.dwSize = this.size(); + } + } + + // CLIENT_DeleteDevConfig 输出参数 + public static class NET_OUT_DELETECFG extends Structure { + public int dwSize; // 结构体大小 + public int nError; // 设备返回的错误码 + public int nRestart; // 设备是否重启 + public int dwOptionMask; // 选项 具体见枚举 NET_EM_CONFIGOPTION + + public NET_OUT_DELETECFG() { + this.dwSize = this.size(); + } + } + + public static class NET_EM_CONFIGOPTION extends Structure { + public static final int NET_EM_CONFIGOPTION_OK = 0; + public static final int NET_EM_CONFIGOPTION_NEEDRESTART = 1; // 需要重启应用程序 + public static final int NET_EM_CONFIGOPTION_NEEDREBOOT = 2; // 需要重启系统 + public static final int NET_EM_CONFIGOPTION_WRITEFILEERROR = 4; // 写文件出错 + public static final int NET_EM_CONFIGOPTION_CAPSNOTSUPPORT = 8; // 设备特性不支持 + public static final int NET_EM_CONFIGOPTION_VALIDATEFAILED = 16; // 配置校验失败 + } + + // CLIENT_GetMemberNames 输入参数 + public static class NET_IN_MEMBERNAME extends Structure { + public int dwSize; // 结构体大小 + public String szCommand; // 配置命令 + + public NET_IN_MEMBERNAME() { + this.dwSize = this.size(); + } + } + + // CLIENT_GetMemberNames 输出参数 + public static class NET_OUT_MEMBERNAME extends Structure { + public int dwSize; // 结构体大小 + public int nError; // 设备返回的错误码 + public int nRestart; // 设备是否重启 + public int nTotalNameCount; // 名称个数 通过能力集得到,调用者填写 + public int nRetNameCount; // 返回的实际名称个数 + public Pointer pstNames; // 名称数组 调用者申请内存,个数是 nTotalNameCount 个 NET_ARRAY + // 由用户申请内存,大小为sizeof(NET_ARRAY)*nTotalNameCount + + public NET_OUT_MEMBERNAME() { + this.dwSize = this.size(); + } + } + + // 视频诊断参数表(CFG_CMD_VIDEODIAGNOSIS_PROFILE),支持多种参数表,用表名称来索引 调用者申请内存并初始化 + public static class CFG_VIDEODIAGNOSIS_PROFILE extends Structure { + public int nTotalProfileNum; // 调用者分配参数表数 根据能力集获取 + public int nReturnProfileNum; // 返回的实际参数表数 + public Pointer pstProfiles; // 调用者分配 nTotalProfileNum 个 CFG_VIDEO_DIAGNOSIS_PROFILE + } + + public static class CFG_VIDEO_DIAGNOSIS_PROFILE extends Structure { + public byte[] szName = new byte[MAX_PATH]; // 名称Ansi编码 + + public Pointer pstDither; // 视频抖动检测, 对应 CFG_VIDEO_DITHER_DETECTION + public Pointer pstStriation; // 视频条纹检测, 对应 CFG_VIDEO_STRIATION_DETECTION + public Pointer pstLoss; // 视频丢失检测, 对应 CFG_VIDEO_LOSS_DETECTION + public Pointer pstCover; // 视频遮挡检测, 对应 CFG_VIDEO_COVER_DETECTION + public Pointer pstFrozen; // 视频冻结检测, 对应 CFG_VIDEO_FROZEN_DETECTION + public Pointer pstBrightness; // 视频亮度异常检测, 对应 CFG_VIDEO_BRIGHTNESS_DETECTION + public Pointer pstContrast; // 对比度异常检测, 对应 CFG_VIDEO_CONTRAST_DETECTION + public Pointer pstUnbalance; // 偏色异常检测, 对应 CFG_VIDEO_UNBALANCE_DETECTION + public Pointer pstNoise; // 噪声检测, 对应 CFG_VIDEO_NOISE_DETECTION + public Pointer pstBlur; // 模糊检测, 对应 CFG_VIDEO_BLUR_DETECTION + public Pointer pstSceneChange; // 场景变化检测, 对应 CFG_VIDEO_SCENECHANGE_DETECTION + public Pointer pstVideoDelay; // 视频延时检测, 对应 CFG_VIDEO_DELAY_DETECTION + public Pointer pstPTZMoving; // 云台移动检测, 对应 CFG_PTZ_MOVING_DETECTION + public Pointer pstBlackAndWhite; // 黑白图像检测, 对应 CFG_VIDEO_BLACKWHITE_DETECTION + public Pointer pstDramaticChange; // 场景剧变检测, 对应 CFG_VIDEO_DRAMATICCHANGE_DETECTION + } + + ///////////////////////////////////视频诊断参数配置/////////////////////////////////////// + // 视频抖动检测 + public static class CFG_VIDEO_DITHER_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte byThrehold1; // 预警阀值 取值1-100 + public byte byThrehold2; // 报警阀值 取值1-100 + } + + // 条纹检测 + public static class CFG_VIDEO_STRIATION_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte byThrehold1; // 预警阀值 取值1-100 + public byte byThrehold2; // 报警阀值 取值1-100 + public byte[] byReserved1 = new byte[2]; // 字节对齐 + public int bUVDetection; // UV分量是否检测, 1-true, 0-false + } + + // 视频丢失检测 + public static class CFG_VIDEO_LOSS_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + } + + // 视频遮挡检测 + public static class CFG_VIDEO_COVER_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte byThrehold1; // 预警阀值 取值1-100 + public byte byThrehold2; // 报警阀值 取值1-100 + } + + // 画面冻结检测 + public static class CFG_VIDEO_FROZEN_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + } + + // 亮度异常检测 + public static class CFG_VIDEO_BRIGHTNESS_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte bylowerThrehold1; // 预警阀值 取值1-100 + public byte bylowerThrehold2; // 报警阀值 取值1-100 + public byte byUpperThrehold1; // 预警阀值 取值1-100 + public byte byUpperThrehold2; // 报警阀值 取值1-100 + } + + // 对比度异常检测 + public static class CFG_VIDEO_CONTRAST_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte bylowerThrehold1; // 预警阀值 取值1-100 + public byte bylowerThrehold2; // 报警阀值 取值1-100 + public byte byUpperThrehold1; // 预警阀值 取值1-100 + public byte byUpperThrehold2; // 报警阀值 取值1-100 + } + + // 偏色检测 + public static class CFG_VIDEO_UNBALANCE_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte byThrehold1; // 预警阀值 取值1-100 + public byte byThrehold2; // 报警阀值 取值1-100 + } + + // 噪声检测 + public static class CFG_VIDEO_NOISE_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte byThrehold1; // 预警阀值 取值1-100 + public byte byThrehold2; // 报警阀值 取值1-100 + } + + // 模糊检测 + public static class CFG_VIDEO_BLUR_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte byThrehold1; // 预警阀值 取值1-100 + public byte byThrehold2; // 报警阀值 取值1-100 + } + + // 场景变化检测 + public static class CFG_VIDEO_SCENECHANGE_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nMinDuration; // 最短持续时间 单位:秒 0~65535 + public byte byThrehold1; // 预警阀值 取值1-100 + public byte byThrehold2; // 报警阀值 取值1-100 + } + + // 视频延时检测 + public static class CFG_VIDEO_DELAY_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + } + + // 云台移动检测 + public static class CFG_PTZ_MOVING_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + } + + // 黑白图像检测 + public static class CFG_VIDEO_BLACKWHITE_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nEarlyWarning; // 预警阈值 + public int nAlarm; // 报警阈值 + public int nMinDuration; // 最短持续时间 + } + + // 场景剧变检测 + public static class CFG_VIDEO_DRAMATICCHANGE_DETECTION extends Structure { + public int bEnable; // 使能配置, 1-true, 0-false + public int nEarlyWarning; // 预警阈值 + public int nAlarm; // 报警阈值 + public int nMinDuration; // 最短持续时间 + } + + // 视频诊断任务表(CFG_CMD_VIDEODIAGNOSIS_TASK),不同的任务通过名子索引 调用者申请内存并初始化 + public static class CFG_VIDEODIAGNOSIS_TASK extends Structure { + public int nTotalTaskNum; // 调用者分配任务个数 根据能力集获取 + public int nReturnTaskNum; // 返回实际任务个数 + public Pointer pstTasks; // 任务配置 调用者分配内存 nTotalTaskNum 个 CFG_DIAGNOSIS_TASK + } + + public static class CFG_DIAGNOSIS_TASK extends Structure { + public byte[] szTaskName = new byte[MAX_PATH]; // 任务名称Ansi编码 + public byte[] szProfileName = new byte[MAX_PATH]; // 本任务使用的诊断参数表名Ansi编码 + public int nTotalSourceNum; // 调用者分配任务数据源的个数 根据能力集获取 + public int nReturnSourceNum; // 返回实际任务数据源的个数 + public Pointer pstSources; // 任务数据源 调用者分配内存 nTotalSourceNum 个 CFG_TAST_SOURCES + } + + public static class CFG_TAST_SOURCES extends Structure { + // 能力 + public byte abDeviceID; // abDeviceID(使用szDeviceID) 和 abRemoteDevice(使用stRemoteDevice) 必须有一个为true,否则Sources是null + public byte abRemoteDevice; + + public byte[] szDeviceID = new byte[MAX_PATH]; // 设备ID + public CFG_TASK_REMOTEDEVICE stRemoteDevice = new CFG_TASK_REMOTEDEVICE(); // 设备详细信息 + public int nVideoChannel; // 视频通道号 + public int emVideoStream; // 视频码流类型, 参考 CFG_EM_STREAM_TYPE + public int nDuration; // 持续诊断时间 + public int abStartTime; // 0 表示源为实时码流, stuStartTime字段无效; 1表示源为录像文件, stuStartTime字段有效 + public CFG_NET_TIME stuStartTime; // 当abStartTime为TRUE时有效,表示源不是实时监视码流, 而是录像文件,该时间表示要分析的录像的开始时间 + } + + // 设备详细信息 + public static class CFG_TASK_REMOTEDEVICE extends Structure { + public byte[] szAddress = new byte[MAX_PATH]; // 设备地址或域名 + public int dwPort; // 端口号 + public byte[] szUserName = new byte[MAX_PATH]; // 用户名 + public byte[] szPassword = new byte[MAX_PATH]; // 密码明文 + public byte[] szProtocolType = new byte[MAX_PATH];// 连接设备的协议类型 + public Pointer pVideoInput; // 视频输入通道,用户申请nMaxVideoInputs 个 CFG_RemoteDeviceVideoInput + public int nMaxVideoInputs; // 视频输入通道最大数 + public int nRetVideoInputs; // 返回的视频输入通道数 + } + + public static class CFG_EM_STREAM_TYPE extends Structure { + public static final int CFG_EM_STREAM_ERR = 0; // 其它 + public static final int CFG_EM_STREAM_MAIN = 1; // "Main"-主码流 + public static final int CFG_EM_STREAM_EXTRA_1 = 2; // "Extra1"-辅码流1 + public static final int CFG_EM_STREAM_EXTRA_2 = 3; // "Extra2"-辅码流2 + public static final int CFG_EM_STREAM_EXTRA_3 = 4; // "Extra3"-辅码流3 + public static final int CFG_EM_STREAM_SNAPSHOT = 5; // "Snapshot"-抓图码流 + public static final int CFG_EM_STREAM_OBJECT = 6; // "Object"-物体流 + } + + // 频诊断计划表(CFG_CMD_VIDEODIAGNOSIS_PROJECT),不同的计划通过名字索引 调用者申请内存并初始化 + public static class CFG_VIDEODIAGNOSIS_PROJECT extends Structure { + public int nTotalProjectNum; // 调用者分配计划个数 根据能力集获取 + public int nReturnProjectNum; // 返回实际计划个数 + public Pointer pstProjects; // 计划配置 调用者分配内存 nTotalProjectNum 个 CFG_DIAGNOSIS_PROJECT + } + + public static class CFG_DIAGNOSIS_PROJECT extends Structure { + public byte[] szProjectName = new byte[MAX_PATH]; // 计划名称Ansi编码 + public int nTotalTaskNum; // 调用者分配任务列表个数 根据能力集获取 + public int nReturnTaskNum; // 返回实际任务列表个数 + public Pointer pstProjectTasks; // 任务列表 调用者分配内存 nTotalTaskNum 个 CFG_PROJECT_TASK + } + + // 视频诊断计划 + public static class CFG_PROJECT_TASK extends Structure { + public int bEnable; // 任务是否使能, 1-true, 0-false + public byte[] szTaskName = new byte[MAX_PATH]; // 任务名称Ansi编码 + public TIME_SECTION_WEEK_DAY_6[] stTimeSectionWeekDay = + (TIME_SECTION_WEEK_DAY_6[]) new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM); // 任务时间段 + public int bIsCycle; // 任务是否循环, 1表示循环, 0表示不循环 + } + + // 获取视频诊断进行状态( CFG_CMD_VIDEODIAGNOSIS_GETSTATE )对应结构体 + public static class CFG_VIDEODIAGNOSIS_STATE_INFO extends Structure { + public int bEnable; // 是否使能, 1-true, 0-false + public int bRunning; // 是否正在运行, 1-true, 0-false, 使能开启,并且当前有工作任务正在进行,没有错误发生。 + public byte[] szCurrentProject = new byte[MAX_PATH]; // 当前计划名称 + public byte[] szCurrentTask = new byte[MAX_PATH]; // 当前任务名称 + public byte[] szCurrentProfile = new byte[MAX_PATH]; // 当前任务配置参数表名称 + public int nCurrentSourceCount; // 当前任务轮训视频源个数 + public int nCurrentSourceIndex; // 当前任务当前视频源序号 从0开始 + public CFG_TIME_SECTION stCurrentTimeSection; // 当前计划时间段 + public int nTaskCountOfProject; // 当前计划总任务数 + public int nIndexOfCurrentTask; // 当前任务序号 从0开始 + } + + // CLIENT_GetVideoDiagnosisState 入参 + public static class NET_IN_GET_VIDEODIAGNOSIS_STATE extends Structure { + public int dwSize; // 结构体大小 + public byte[] szProject = new byte[128]; // 计划名,为空表示所有执行的计划 + + public NET_IN_GET_VIDEODIAGNOSIS_STATE() { + this.dwSize = this.size(); + } + } + + // 诊断状态 + public static class VIDEODIAGNOSIS_STATE extends Structure { + public int bEnable; // 是否使能 + public int bRunning; // 是否正在运行 使能开启,并且当前有工作任务正在进行,没有错误发生。 + public byte[] szCurrentProject = new byte[MAX_PATH]; // 当前计划名称 + public byte[] szCurrentTask = new byte[MAX_PATH]; // 当前任务名称 + public byte[] szCurrentProfile = new byte[MAX_PATH]; // 当前任务配置参数表名称 + public int nCurrentSourceCount; // 当前任务轮训视频源个数 + public int nCurrentSourceIndex; // 当前任务当前视频源序号 从0开始 + public NET_TSECT stCurrentTimeSection; // 当前计划时间段 + public int nTaskCountOfProject; // 当前计划总任务数 + public int nIndexOfCurrentTask; // 当前任务序号 从0开始 + public byte[] byReserved = new byte[512]; // 保留字节 + } + + // CLIENT_GetVideoDiagnosisState 出参 + public static class NET_OUT_GET_VIDEODIAGNOSIS_STATE extends Structure { + public int dwSize; // 结构体大小 + public VIDEODIAGNOSIS_STATE[] stuState = (VIDEODIAGNOSIS_STATE[]) new VIDEODIAGNOSIS_STATE().toArray(2);// 工作状态,数组下标0:Tour,1:RealTime + + public NET_OUT_GET_VIDEODIAGNOSIS_STATE() { + this.dwSize = this.size(); + } + } + + // CLIENT_RadiometryAttach 入参 + public static class NET_IN_RADIOMETRY_ATTACH extends Structure { + public int dwSize; + public int nChannel; // 视频通道号 -1 表示全部 + public StdCallCallback cbNotify; // 状态回调函数指针, 对应回调函数 fRadiometryAttachCB + public Pointer dwUser; // 用户数据 + + public NET_IN_RADIOMETRY_ATTACH() { + this.dwSize = this.size(); + } + } + + // CLIENT_RadiometryAttach 出参 + public static class NET_OUT_RADIOMETRY_ATTACH extends Structure { + public int dwSize; + + public NET_OUT_RADIOMETRY_ATTACH() { + this.dwSize = this.size(); + } + } + + // 热图数据 + public static class NET_RADIOMETRY_DATA extends Structure { + public NET_RADIOMETRY_METADATA stMetaData; // 元数据 + public Pointer pbDataBuf; // 热图数据缓冲区(压缩过的数据,里面是每个像素点的温度数据,可以使用元数据信息解压) + public int dwBufSize; // 热图数据缓冲区大小 + public byte[] reserved = new byte[512]; + } + + // 热图元数据信息 + public static class NET_RADIOMETRY_METADATA extends Structure { + public int nHeight; // 高 + public int nWidth; // 宽 + public int nChannel; // 通道 + public NET_TIME stTime; // 获取数据时间 + public int nLength; // 数据大小 + public byte[] szSensorType = new byte[64]; // 机芯类型 + public int nUnzipParamR; // 解压缩参数R + public int nUnzipParamB; // 解压缩参数B + public int nUnzipParamF; // 解压缩参数F + public int nUnzipParamO; // 解压缩参数O + public byte[] Reserved = new byte[256]; + } + + // CLIENT_RadiometryFetch 入参 + public static class NET_IN_RADIOMETRY_FETCH extends Structure { + public int dwSize; + public int nChannel; // 通道号, 通道号要与订阅时一致, -1除外 + + public NET_IN_RADIOMETRY_FETCH() { + this.dwSize = this.size(); + } + } + + // CLIENT_RadiometryFetch 出参 + public static class NET_OUT_RADIOMETRY_FETCH extends Structure { + public int dwSize; + public int nStatus; // 0: 未知, 1: 空闲, 2: 获取热图中 + + public NET_OUT_RADIOMETRY_FETCH() { + this.dwSize = this.size(); + } + } + + // 设备信息类型,对应 CLIENT_StartFind CLIENT_DoFind CLIENT_StopFind 接口 + public static class NET_FIND extends Structure { + public static int NET_FIND_RADIOMETRY = 0; // 热成像温度查询, pInBuf= NET_IN_RADIOMETRY_*FIND*, pOutBuf= NET_OUT_RADIOMETRY_*FIND* + public static int NET_FIND_POS_EXCHANGE = 1; // POS交易信息查询,pInBuf = NET_IN_POSEXCHANGE_*FIND*,pOutBuf= NET_OUT_POSEXCHANGE_*FIND* + } + + //热成像查询保存周期 + public static class EM_RADIOMETRY_PERIOD extends Structure { + public static int EM_RADIOMETRY_PERIOD_UNKNOWN = 0; // 未知 + public static int EM_RADIOMETRY_PERIOD_5 = 5; // 5分钟记录表,默认 + public static int EM_RADIOMETRY_PERIOD_10 = 10; // 10分钟记录表 + public static int EM_RADIOMETRY_PERIOD_15 = 15; // 15分钟记录表 + public static int EM_RADIOMETRY_PERIOD_30 = 30; // 30分钟记录表 + } + + // CLIENT_StartFind 接口 NET_FIND_RADIOMETRY 命令入参 + public static class NET_IN_RADIOMETRY_STARTFIND extends Structure { + public int dwSize; + public NET_TIME stStartTime; // 查询开始时间 + public NET_TIME stEndTime; // 查询结束时间 + public int nMeterType; // 查询类别,见NET_RADIOMETRY_METERTYPE + public int nChannel; // 通道号 + public int emPeriod; // 所查询表的保存周期,详见EM_RADIOMETRY_PERIOD + + public NET_IN_RADIOMETRY_STARTFIND() { + this.dwSize = this.size(); + } + } + + // CLIENT_StartFind 接口 NET_FIND_RADIOMETRY 命令出参 + public static class NET_OUT_RADIOMETRY_STARTFIND extends Structure { + public int dwSize; + public int nFinderHanle; // 取到的查询句柄 + public int nTotalCount; // 符合此次查询条件的结果总条数 + + public NET_OUT_RADIOMETRY_STARTFIND() { + this.dwSize = this.size(); + } + } + + + // CLIENT_DoFind 接口 NET_FIND_RADIOMETRY 命令入参 + public static class NET_IN_RADIOMETRY_DOFIND extends Structure { + public int dwSize; + public int nFinderHanle; // 查询句柄 + public int nBeginNumber; // 本次查询开始的索引号 + public int nCount; // 本次查询条数,最大为NET_IN_RADIOMETRY_DOFIND_MAX + + public NET_IN_RADIOMETRY_DOFIND() { + this.dwSize = this.size(); + } + } + + // 热成像查询返回的查询结果 + public static class NET_RADIOMETRY_QUERY extends Structure { + public NET_TIME stTime; // 记录时间 + public int nPresetId; // 预置点编号 + public int nRuleId; // 规则编号 + public byte[] szName = new byte[64]; // 查询项名称 + public NET_POINT stCoordinate; // 查询测温点坐标 + public int nChannel; // 通道号 + public NET_RADIOMETRYINFO stTemperInfo; // 测温信息,目前nTemperMid, nTemperStd 成员无效 + public byte[] reserved = new byte[256]; + } + + // CLIENT_DoFind 接口 NET_FIND_RADIOMETRY 命令出参 + public static class NET_OUT_RADIOMETRY_DOFIND extends Structure { + public int dwSize; + public int nFound; // 实际查询到的点数 + public NET_RADIOMETRY_QUERY[] stInfo = (NET_RADIOMETRY_QUERY[]) new NET_RADIOMETRY_QUERY().toArray(NET_RADIOMETRY_DOFIND_MAX); // 温度统计信息 + + public NET_OUT_RADIOMETRY_DOFIND() { + this.dwSize = this.size(); + } + } + + // CLIENT_StopFind 接口 NET_FIND_RADIOMETRY 命令入参 + public static class NET_IN_RADIOMETRY_STOPFIND extends Structure { + public int dwSize; + public int nFinderHanle; // 查询句柄 + + public NET_IN_RADIOMETRY_STOPFIND() { + this.dwSize = this.size(); + } + } + + // CLIENT_StopFind 接口 NET_FIND_RADIOMETRY 命令出参 + public static class NET_OUT_RADIOMETRY_STOPFIND extends Structure { + public int dwSize; + + public NET_OUT_RADIOMETRY_STOPFIND() { + this.dwSize = this.size(); + } + } + + // IPC报警,IPC通过DVR或NVR上报的本地报警(对应事件 NET_ALARM_IPC) + public static class ALARM_IPC_INFO extends Structure { + public int dwSize; + public int nChannelID; // 通道号 + public int nEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; + public NET_TIME_EX UTC; // 事件发生的时间 + public byte[] szName = new byte[MAX_ALARM_CHANNEL_NAME_LEN]; // 报警通道名称 + + public ALARM_IPC_INFO() { + this.dwSize = this.size(); + } + } + + // 蓝牙开门记录集信息查询条件 + public static class FIND_RECORD_ACCESS_BLUETOOTH_INFO_CONDITION extends Structure { + public int dwSize; + public byte[] szUserName = new byte[NET_COMMON_STRING_128]; // 用户名 + + public FIND_RECORD_ACCESS_BLUETOOTH_INFO_CONDITION() { + this.dwSize = this.size(); + } + } + + // 蓝牙开门记录集信息 + public static class NET_RECORD_ACCESS_BLUETOOTH_INFO extends Structure { + public int dwSize; // 结构体大小 + public int nRecNo; // 记录集编号,只读 + public byte[] szUserName = new byte[NET_COMMON_STRING_128]; // 用户名 + public byte[] szPassword = new byte[NET_COMMON_STRING_128]; // 密码 + public byte[] szMac = new byte[NET_COMMON_STRING_32]; // mac地址 + public byte[] szNote = new byte[NET_COMMON_STRING_128]; // 用户备注信息 + + public NET_RECORD_ACCESS_BLUETOOTH_INFO() { + this.dwSize = this.size(); + } + } + + // 智能锁添加更新用户信息接口 CLIENT_UpdateSmartLockUser 入参 + public static class NET_IN_SMARTLOCK_UPDATE_USER_INFO extends Structure { + public int dwSize; // 结构体大小 + public byte[] szSerialNumber = new byte[32]; // 设备序列号 + public byte[] szCredentialHolder = new byte[16]; // 身份拥有者(与AccessControlCard记录集中的UserID概念一致) + public byte[] szUserName = new byte[32]; // 用户名称 + public NET_TIME stuStartTime; // 起始时间 + public NET_TIME stuEndTime; // 结束时间 + public byte[] szReserve = new byte[512]; // 保留字段 + public int nCardInfoNum; // 卡信息数量 + public NET_SMARTLOCK_CARDINFO[] stuCardInfo = + (NET_SMARTLOCK_CARDINFO[]) new NET_SMARTLOCK_CARDINFO().toArray(4); // 卡的信息 + public int nPwdInfoNum; // 密码信息数量 + public NET_SMARTLOCK_PWDINFO[] stuPwdInfo = + (NET_SMARTLOCK_PWDINFO[]) new NET_SMARTLOCK_PWDINFO().toArray(4); // 密码信息 + public int nFingerPrintInfoNum; // 密码信息数量 + public NET_SMARTLOCK_FPINFO[] stuFingerPrintInfo = + (NET_SMARTLOCK_FPINFO[]) new NET_SMARTLOCK_FPINFO().toArray(4); // 指纹信息 + public int nTaskID; // 任务ID + + public NET_IN_SMARTLOCK_UPDATE_USER_INFO() { + this.dwSize = this.size(); + } + } + + // 智能锁添加更新用户信息接口 CLIENT_UpdateSmartLockUser 出参 + public static class NET_OUT_SMARTLOCK_UPDATE_USER_INFO extends Structure { + public int dwSize; // 结构体大小 + + public NET_OUT_SMARTLOCK_UPDATE_USER_INFO() { + this.dwSize = this.size(); + } + } + + // 卡片信息 + public static class NET_SMARTLOCK_CARDINFO extends Structure { + public int emType; // 开门类型, 参考 NET_ACCESS_METHOD + public int nIndex; // 用户信息序号 + public byte[] szCardNo = new byte[32]; // 卡号 + public int emCardType; // 卡类型, 参考 NET_ACCESSCTLCARD_TYPE + public byte[] szReserve = new byte[512]; // 保留字段 + } + + // 密码信息 + public static class NET_SMARTLOCK_PWDINFO extends Structure { + public int emType; // 开门类型, 参考 NET_ACCESS_METHOD + public int nIndex; // 用户信息序号 + public byte[] szPassword = new byte[32]; // 密码 + public int dwUseTime; // 使用次数 + public byte[] szReserve = new byte[512]; // 保留字段 + } + + // 指纹信息 + public static class NET_SMARTLOCK_FPINFO extends Structure { + public int emType; // 开门类型, 参考 NET_ACCESS_METHOD + public int nIndex; // 用户信息序号 + public int nFingerprintLen; // 指纹数据长度,不超过1.5K + public Pointer pFingerprintData; // 指纹数据 + public byte[] szReserve = new byte[512]; // 保留字段 + } + + // 控制方式 + public static class NET_ACCESS_METHOD extends Structure { + public static final int NET_ACCESS_METHOD_UNKNOWN = 0; // 未知 + public static final int NET_ACCESS_METHOD_CARD = 1; // 卡 + public static final int NET_ACCESS_METHOD_PASSWORD = 2; // 密码 + public static final int NET_ACCESS_METHOD_FINGERPRINT = 3; // 指纹 + } + + // 获取当前智能锁的注册用户信息 CLIENT_GetSmartLockRegisterInfo 入参 (每次获取最多获取32条信息) + public static class NET_IN_GET_SMART_LOCK_REGISTER_INFO extends Structure { + public int dwSize; // 结构体大小 + public byte[] szSerialNumber = new byte[MAX_COMMON_STRING_32]; // 设备序列号 + public int nOffset; // 用户列表的偏移量 + + public NET_IN_GET_SMART_LOCK_REGISTER_INFO() { + this.dwSize = this.size(); + } + } + + // 注册用户的信息 + public static class NET_SMART_LOCK_REGISTER_INFO extends Structure { + public int emType; // 开锁方式类型, 参考 NET_ACCESS_METHOD + public byte[] szUserID = new byte[MAX_COMMON_STRING_16]; // 用户ID(非AccessControlCard记录集中的UserID概念) + public byte[] szName = new byte[MAX_COMMON_STRING_32]; // 用户名称 + public byte[] byReserved = new byte[512]; // 保留字段 + } + + // 获取当前智能锁的注册用户信息 CLIENT_GetSmartLockRegisterInfo 出参 + public static class NET_OUT_GET_SMART_LOCK_REGISTER_INFO extends Structure { + public int dwSize; // 结构体大小 + public int nTotalCount; // 总的用户数量 + public int nReturnCount; // 实际返回的用户数量 + public NET_SMART_LOCK_REGISTER_INFO[] stuRegisterInfo = + (NET_SMART_LOCK_REGISTER_INFO[]) new NET_SMART_LOCK_REGISTER_INFO().toArray(MAX_NUMBER_REGISTER_INFO); // 注册用户的信息 + + public NET_OUT_GET_SMART_LOCK_REGISTER_INFO() { + this.dwSize = this.size(); + } + } + + // 智能锁修改用户信息 CLIENT_SetSmartLockUserName 入参 + public static class NET_IN_SET_SMART_LOCK_USERNAME extends Structure { + public int dwSize; // 结构体大小 + public int emType; // 开锁方式类型, 参考 NET_ACCESS_METHOD + public byte[] szSerialNumber = new byte[MAX_COMMON_STRING_32]; // 智能锁序列号 + public byte[] szUserID = new byte[MAX_COMMON_STRING_16]; // 用户ID(非AccessControlCard记录集中的UserID概念) + public byte[] szName = new byte[MAX_COMMON_STRING_32]; // 需要修改成的名称 + + public NET_IN_SET_SMART_LOCK_USERNAME() { + this.dwSize = this.size(); + } + } + + // 智能锁修改用户信息 CLIENT_SetSmartLockUserName 出参 + public static class NET_OUT_SET_SMART_LOCK_USERNAME extends Structure { + public int dwSize; // 结构体大小 + + public NET_OUT_SET_SMART_LOCK_USERNAME() { + this.dwSize = this.size(); + } + } + + // 智能锁删除用户接口 CLIENT_RemoveSmartLockUser 入参 + public static class NET_IN_SMARTLOCK_REMOVE_USER_INFO extends Structure { + public int dwSize; // 结构体大小 + public byte[] szSerialNumber = new byte[32]; // 设备序列号 + public byte[] szCredentialHolder = new byte[16]; // 身份拥有者(与AccessControlCard记录集中的UserID概念一致) + public int emType; // 开门类型,unknown 表示全部, 参考 NET_ACCESS_METHOD + public int nIndex; // 某种开门方式的索引号,-1表示全部 + public int nTaskID; // 任务ID + + public NET_IN_SMARTLOCK_REMOVE_USER_INFO() { + this.dwSize = this.size(); + } + } + + // 智能锁删除用户接口 CLIENT_RemoveSmartLockUser 出参 + public static class NET_OUT_SMARTLOCK_REMOVE_USER_INFO extends Structure { + public int dwSize; // 结构体大小 + + public NET_OUT_SMARTLOCK_REMOVE_USER_INFO() { + this.dwSize = this.size(); + } + } + + // 获取对码信息, 对应命令 NET_DEVSTATE_GET_CODEID_LIST + public static class NET_GET_CODEID_LIST extends Structure { + public int dwSize; + public int nStartIndex; // 开始的索引号,开始第一次查询可设为0 + public int nQueryNum; // 本次获取的对码条数,此值小于等于能力集中nMaxPageSize字段的值 + public int nRetCodeIDNum; // 实际返回的对码条数 + public Pointer pstuCodeIDInfo; // 获取对码的内容, 对应 NET_CODEID_INFO[],内存由用户分配,不能小于nQueryNum*sizeof(NET_CODEID_INFO) + + public NET_GET_CODEID_LIST() { + this.dwSize = this.size(); + } + } + + // 对码信息 + public static class NET_CODEID_INFO extends Structure { + public int dwSize; + public long nWirelessId; // 无线ID号 + public int emType; // 无线设备类型, 对应枚举 NET_WIRELESS_DEVICE_TYPE + public byte[] szName = new byte[NET_USER_NAME_LENGTH]; // 用户名 + public int bEnable; // 是否启用了此设备, 1-true; 0-false + public byte[] szCustomName = new byte[NET_COMMON_STRING_64]; // 自定义名称 + public int nChannel; // 无线防区的alarm通道号,Alarm配置的下标,只有Type为Defence时此字段才有效。 + public int emMode; // 无线设备工作模式, 对应枚举 EM_WIRELESS_DEVICE_MODE + public int emSenseMethod; // 传感器方式, 对应枚举 EM_CODEID_SENSE_METHOD_TYPE + public byte[] szSerialNumber = new byte[NET_WIRELESS_DEVICE_SERIAL_NUMBER_MAX_LEN]; // 无线设备序列号 + + public NET_CODEID_INFO() { + this.dwSize = this.size(); + } + } + + // 无线设备类型 + public static class NET_WIRELESS_DEVICE_TYPE extends Structure { + public static final int NET_WIRELESS_DEVICE_TYPE_UNKNOWN = 0; + public static final int NET_WIRELESS_DEVICE_TYPE_KEYBOARD = 1; // 无线键盘 + public static final int NET_WIRELESS_DEVICE_TYPE_DEFENCE = 2; // 无线防区 + public static final int NET_WIRELESS_DEVICE_TYPE_REMOTECONTROL = 3; // 无线遥控 + public static final int NET_WIRELESS_DEVICE_TYPE_MAGNETOMER = 4; // 无线门磁 + public static final int NET_WIRELESS_DEVICE_TYPE_ALARMBELL = 5; // 无线警号 + public static final int NET_WIRELESS_DEVICE_TYPE_SWITCHER = 6; // 无线插座 + public static final int NET_WIRELESS_DEVICE_TYPE_SMARTLOCK = 7; // 无线智能锁 + public static final int NET_WIRELESS_DEVICE_TYPE_REPEATER = 8; // 无线中继器 + } + + // 无线设备工作模式 + public static class EM_WIRELESS_DEVICE_MODE extends Structure { + public static final int EM_WIRELESS_DEVICE_MODE_UNKNOWN = 0; // 模式未识别 + public static final int EM_WIRELESS_DEVICE_MODE_NORMAL = 1; // Normal 普通模式 + public static final int EM_WIRELESS_DEVICE_MODE_POLLING = 2; // Polling 巡检模式 只有Type为RemoteControl时才能处于巡检模式 + } + + // 传感器方式 + public static class EM_CODEID_SENSE_METHOD_TYPE extends Structure { + public static final int EM_CODEID_SENSE_METHOD_TYPE_UNKOWN = 0; // 未知的 + public static final int EM_CODEID_SENSE_METHOD_TYPE_DOOR_MAGNETISM = 1; // 门磁 + public static final int EM_CODEID_SENSE_METHOD_TYPE_GAS_SENSOR = 2; // 燃气传感 + public static final int EM_CODEID_SENSE_METHOD_TYPE_CURTAIN_SENSOR = 3; // 幕帘传感器 + public static final int EM_CODEID_SENSE_METHOD_TYPE_MOBILE_SENSOR = 4; // 移动传感器 + public static final int EM_CODEID_SENSE_METHOD_TYPE_PASSIVEINFRA = 5; // 被动红外传感器 + public static final int EM_CODEID_SENSE_METHOD_TYPE_URGENCY_BUTTON = 6; // 紧急按钮 + public static final int EM_CODEID_SENSE_METHOD_TYPE_SMOKING_SENSOR = 7; // 烟雾传感器 + public static final int EM_CODEID_SENSE_METHOD_TYPE_DOUBLEMETHOD = 8; // 双鉴传感器(红外+微波) + public static final int EM_CODEID_SENSE_METHOD_TYPE_WATER_SENSOR = 9; // 水浸传感器 + public static final int EM_CODEID_SENSE_METHOD_TYPE_THREEMETHOD = 10; // 三技术 + } + + // CLIENT_EncryptString 接口入参 + public static class NET_IN_ENCRYPT_STRING extends Structure { + public int dwSize; // 结构体大小 + public byte[] szCard = new byte[33]; // 需要加密的字符串 + public byte[] byReserved1 = new byte[3]; // 字节对齐 + public byte[] szKey = new byte[33]; // 秘钥 + public byte[] byReserved2 = new byte[3]; // 字节对齐 + + public NET_IN_ENCRYPT_STRING() { + this.dwSize = this.size(); + } + } + + // CLIENT_EncryptString 接口出参 + public static class NET_OUT_ENCRYPT_STRING extends Structure { + public int dwSize; // 结构体大小 + public byte[] szEncryptString = new byte[1024]; // 加密后字符串 + + public NET_OUT_ENCRYPT_STRING() { + this.dwSize = this.size(); + } + } + + // 设置二维码的解码信息入参 + public static class NET_IN_SET_QRCODE_DECODE_INFO extends Structure { + public int dwSize; + public int emCipher; // 加密方式, 参考枚举 NET_ENUM_QRCODE_CIPHER + public byte[] szKey = new byte[33]; // 秘钥 + public byte[] byReserved = new byte[3]; // 字节对齐 + + public NET_IN_SET_QRCODE_DECODE_INFO() { + this.dwSize = this.size(); + } + } + + // 设置二维码的解码信息出参 + public static class NET_OUT_SET_QRCODE_DECODE_INFO extends Structure { + public int dwSize; + + public NET_OUT_SET_QRCODE_DECODE_INFO() { + this.dwSize = this.size(); + } + } + + // 使用的加密算法 + public static class NET_ENUM_QRCODE_CIPHER extends Structure { + public static final int NET_ENUM_QRCODE_CIPHER_UNKNOWN = 0; + public static final int NET_ENUM_QRCODE_CIPHER_AES256 = 1; // AES-256 + } + + //门禁卡数据操作事件 + public static class ALARM_ACCESS_CARD_OPERATE_INFO extends Structure { + public int dwSize; + public int emActionType; // 门禁卡数据操作类型, 参考 NET_ACCESS_ACTION_TYPE + public byte[] szCardNo = new byte[NET_MAX_CARDINFO_LEN]; // 门禁卡卡号 + public int emResult; // 操作结果,-1为未知,0为失败,1为成功,参考 NET_THREE_STATUS_BOOL + public int nChannelID; // 门通道号(或者门锁,门和门锁一一对应), 从0开始 + public byte[] szCredentialHolder = new byte[16]; // 身份拥有者 + public int emType; // 用户类型, 参考 NET_ACCESS_METHOD + public byte[] szSerialNum = new byte[32]; // 序列号 + public int nIndex; // 某开门方式下的索引号 + public int nTaskID; // 任务ID + + public ALARM_ACCESS_CARD_OPERATE_INFO() { + this.dwSize = this.size(); + } + } + + + //门禁卡数据操作类型 + public static class NET_ACCESS_ACTION_TYPE extends Structure { + public static final int NET_ACCESS_ACTION_TYPE_UNKNOWN = 0; // 未知 + public static final int NET_ACCESS_ACTION_TYPE_INSERT = 1; // 插入 + public static final int NET_ACCESS_ACTION_TYPE_UPDATE = 2; // 更新 + public static final int NET_ACCESS_ACTION_TYPE_REMOVE = 3; // 删除 + } + + // 门禁未关事件详细信息 + public static class ALARM_ACCESS_CTL_NOT_CLOSE_INFO extends Structure { + public int dwSize; + public int nDoor; // 门通道号 + public byte[] szDoorName = new byte[NET_MAX_DOORNAME_LEN]; // 门禁名称 + public NET_TIME stuTime; // 报警事件发生的时间 + public int nAction; // 0:开始 1:停止 + public int nEventID; // 事件ID + + public ALARM_ACCESS_CTL_NOT_CLOSE_INFO() { + this.dwSize = this.size(); + } + } + + // 闯入事件详细信息 + public static class ALARM_ACCESS_CTL_BREAK_IN_INFO extends Structure { + public int dwSize; + public int nDoor; // 门通道号 + public byte[] szDoorName = new byte[NET_MAX_DOORNAME_LEN]; // 门禁名称 + public NET_TIME stuTime; // 报警事件发生的时间 + public int nEventID; //事件ID + + public ALARM_ACCESS_CTL_BREAK_IN_INFO() { + this.dwSize = this.size(); + } + } + + + // CLIENT_ListenServer 接口回调fServiceCallBack函数支持的命令类型 + public static class EM_LISTEN_TYPE extends Structure { + public static final int NET_DVR_DISCONNECT = -1; // 验证期间设备断线回调 + public static final int NET_DVR_SERIAL_RETURN = 1; // 设备注册携带序列号 对应 char* szDevSerial + public static final int NET_DEV_AUTOREGISTER_RETURN = 2; // 设备注册携带序列号和令牌 对应NET_CB_AUTOREGISTER + public static final int NET_DEV_NOTIFY_IP_RETURN = 3; // 设备仅上报IP, 不作为主动注册用, 用户获取ip后只能按照约定的端口按照非主动注册的类型登录 + } - // CLIENT_FileStreamGetTags 接口输出参数 - public static class NET_OUT_FILE_STREAM_GET_TAGS_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int nMaxNumber; // 标签数组最大个数 - public int nRetTagsCount; // 实际返回的标签信息个数 - public Pointer pstuTagInfo; // 标签数组 NET_FILE_STREAM_TAG_INFO_EX - - public NET_OUT_FILE_STREAM_GET_TAGS_INFO() { - this.dwSize = this.size(); - } - } - - // 查询到的标签信息 - public static class NET_FILE_STREAM_TAG_INFO_EX extends Structure - { - public int dwSize; // 结构体大小 - public NET_TIME stuTime; // 标签所对于视频的时间,精确到秒 - public int nMillisecond; // 毫秒 - public int nSequence; // 视频序列号 - public byte[] szContext = new byte[NET_COMMON_STRING_64]; // 标签内容,中文必须使用utf8编码 - public NET_TIME stuStartTime; // 录像文件开始时间 - public NET_TIME stuEndTime; // 录像文件结束时间 - public int emType; // 文件类型,对应 NET_FILE_STREAM_TYPE - public byte[] szUserName = new byte[NET_COMMON_STRING_32]; // 用户名,中文必须使用utf8编码,EVS定制增加 - public byte[] szChannelName = new byte[NET_COMMON_STRING_64]; // 通道名称,中文必须使用utf8编码,EVS定制增加 - public int nDuration; // 打标的录像持续时间,单位秒 - - public NET_FILE_STREAM_TAG_INFO_EX() { - this.dwSize = this.size(); - } - } - - // 文件类型 - public static class NET_FILE_STREAM_TYPE extends Structure - { - public static final int NET_FILE_STREAM_TYPE_UNKNOWN = 0; // 未知 - public static final int NET_FILE_STREAM_TYPE_NORMAL = 1; // 普通 - public static final int NET_FILE_STREAM_TYPE_ALARM = 2; // 报警 - public static final int NET_FILE_STREAM_TYPE_DETECTION = 3; // 动检 - } - - // 一屏幕的分割模式信息, CLIENT_GetSplitMode/CLIENT_SetSplitMode参数 - public static class NET_SPLIT_MODE_INFO extends Structure - { - public int dwSize; - public int emSplitMode; // 分割模式, NET_SPLIT_MODE - public int nGroupID; // 分组序号 - public int dwDisplayType; // 显示类型;具体见NET_SPLIT_DISPLAY_TYPE(注释各模式下显示内容由"PicInPic"决定, 各模式下显示内容按NVD旧有规则决定(即DisChn字段决定)。兼容,没有这一个项时,默认为普通显示类型,即"General") - - public NET_SPLIT_MODE_INFO() { - this.dwSize = this.size(); - } - } - - // 分割能力, CLIENT_GetSplitCaps 参数 - public static class NET_SPLIT_CAPS extends Structure - { - public int dwSize; - public int nModeCount; // 支持的分割模式数量 - public int[] emSplitMode = new int[NET_MAX_SPLIT_MODE_NUM]; // 支持的分割模式, 见 NET_SPLIT_MODE - public int nMaxSourceCount; // 最大显示源配置数 - public int nFreeWindowCount; // 支持的最大自由开窗数目 - public int bCollectionSupported; // 是否支持区块收藏, BOOL类型,0或1 - public int dwDisplayType; // 掩码表示多个显示类型,具体见NET_SPLIT_DISPLAY_TYPE(注释各模式下显示内容由"PicInPic"决定, 各模式下显示内容按NVD旧有规则决定(即DisChn字段决定)。兼容,没有这一个项时,默认为普通显示类型,即"General") - public int nPIPModeCount; // 画中画支持的分割模式数量 - public int[] emPIPSplitMode = new int[NET_MAX_SPLIT_MODE_NUM]; // 画中画支持的分割模式, 见 NET_SPLIT_MODE - public int[] nInputChannels = new int[NET_SPLIT_INPUT_NUM]; // 支持的输入通道 - public int nInputChannelCount; // 支持的输入通道个数, 0表示没有输入通道限制 - public int nBootModeCount; // 启动分割模式数量 - public int[] emBootMode = new int[NET_MAX_SPLIT_MODE_NUM]; // 支持的启动默认画面分割模式, 见 NET_SPLIT_MODE - - public NET_SPLIT_CAPS() { - this.dwSize = this.size(); - } - } - - // (设置显示源, 支持同时设置多个窗口)CLIENT_SplitSetMultiSource 接口的输入参数 - public static class NET_IN_SPLIT_SET_MULTI_SOURCE extends Structure - { - public int dwSize; - public int emCtrlType; // 视频输出控制方式,见 EM_VIDEO_OUT_CTRL_TYPE - public int nChannel; // 视频输出逻辑通道号, emCtrlType为EM_VIDEO_OUT_CTRL_CHANNEL时有效 - public String pszCompositeID; // 拼接屏ID, emCtrlType为EM_VIDEO_OUT_CTRL_COMPOSITE_ID时有效 - public int bSplitModeEnable; // 是否改变分割模式, BOOL类型,0或1 - public int emSplitMode; // 分割模式, bSplitModeEnable=TRUE时有效,见 NET_SPLIT_MODE - public int nGroupID; // 分割分组号, bSplitModeEnable=TRUE时有效 - public Pointer pnWindows; // 窗口号数组 int[],由用户申请内存,大小为sizeof(int)*nWindowCount - public int nWindowCount; // 窗口数量 - public Pointer pstuSources; // 视频源信息, 分别对应每个窗口, 数量同窗口数 NET_SPLIT_SOURCE[] ,由用户申请内存,大小为sizeof(NET_SPLIT_SOURCE)*nWindowCount - - public NET_IN_SPLIT_SET_MULTI_SOURCE() { - this.dwSize = this.size(); - } - } - - // (设置显示源, 支持同时设置多个窗口) CLIENT_SplitSetMultiSource 接口的输出参数 - public static class NET_OUT_SPLIT_SET_MULTI_SOURCE extends Structure - { - public int dwSize; - - public NET_OUT_SPLIT_SET_MULTI_SOURCE() { - this.dwSize = this.size(); - } - } - - // (下位矩阵切换) CLIENT_MatrixSwitch 输入参数 - public static class NET_IN_MATRIX_SWITCH extends Structure - { - public int dwSize; - public int emSplitMode; // 分割模式,见 NET_SPLIT_MODE - public Pointer pnOutputChannels; // 输出通道, 可同时指定多个输出通道一起切换, 内容一致 - // 由用户申请内存 int[] ,大小为sizeof(int)*nOutputChannelCount - public int nOutputChannelCount; // 输出通道数 - public Pointer pnInputChannels; // 输入通道, 每个分割窗口一个对应一个输入通道 - // 由用户申请内存 int[] ,大小为sizeof(int)*nInputChannelCount - public int nInputChannelCount; // 输入通道数 - - public NET_IN_MATRIX_SWITCH() { - this.dwSize = this.size(); - } - } - - // (下位矩阵切换) CLIENT_MatrixSwitch 输出参数 - public static class NET_OUT_MATRIX_SWITCH extends Structure - { - public int dwSize; - - public NET_OUT_MATRIX_SWITCH() { - this.dwSize = this.size(); - } - } - - // 刻录模式 - public static class NET_BURN_MODE extends Structure - { - public static final int BURN_MODE_SYNC = 0; // 同步 - public static final int BURN_MODE_TURN = 1; // 轮流 - public static final int BURN_MODE_CYCLE = 2; // 循环 - } - - // 刻录流格式 - public static class NET_BURN_RECORD_PACK extends Structure - { - public static final int BURN_PACK_DHAV = 0; // DHAV - public static final int BURN_PACK_PS = 1; // PS - public static final int BURN_PACK_ASF = 2; // ASF - public static final int BURN_PACK_MP4 = 3; // MP4 - public static final int BURN_PACK_TS = 4; // TS - } - - // 刻录扩展模式 - public static class NET_BURN_EXTMODE extends Structure - { - public static final int BURN_EXTMODE_UNKNOWN = 0; // 未知 - public static final int BURN_EXTMODE_NORMAL = 1; // 正常刻录 - public static final int BURN_EXTMODE_NODISK = 2; // 无盘刻录 - } - - // (开始刻录) CLIENT_StartBurn 接口输入参数 - public static class NET_IN_START_BURN extends Structure - { - public int dwSize; - public int dwDevMask; // 刻录设备掩码, 按位表示多个刻录设备组合 - public int[] nChannels = new int[NET_MAX_BURN_CHANNEL_NUM]; // 刻录通道数组 - public int nChannelCount; // 刻录通道数 - public int emMode; // 刻录模式,见 NET_BURN_MODE - public int emPack; // 刻录流格式,见 NET_BURN_RECORD_PACK - public int emExtMode; // 刻录扩展模式, 见 NET_BURN_EXTMODE - - public NET_IN_START_BURN() { - this.dwSize = this.size(); - } - } - - // (开始刻录)CLIENT_StartBurn 接口输出参数 - public static class NET_OUT_START_BURN extends Structure - { - public int dwSize; - - public NET_OUT_START_BURN() { - this.dwSize = this.size(); - } - } - - // (打开会话)CLIENT_StartBurnSession 接口输入参数 - public static class NET_IN_START_BURN_SESSION extends Structure - { - public int dwSize; - public int nSessionID; // 会话ID - - public NET_IN_START_BURN_SESSION() { - this.dwSize = this.size(); - } - } - - // (打开会话)CLIENT_StartBurnSession 接口输出参数 - public static class NET_OUT_START_BURN_SESSION extends Structure - { - public int dwSize; - - public NET_OUT_START_BURN_SESSION() { - this.dwSize = this.size(); - } - } - - // CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_EJECT_BURNER、CTRLTYPE_CTRL_CLOSE_BURNER 等 命令参数 - public static class NET_CTRL_BURNERDOOR extends Structure - { - public int dwSize; - public Pointer szBurnerName; // 光盘名称,如“/dev/sda”, 用户申请内存 - public int bResult; // 操作结果 - public int bSafeEject; // 是否安全弹出光驱, 1-弹出前做数据保存, 0-直接弹出 - - public NET_CTRL_BURNERDOOR() { - this.dwSize = this.size(); - } - } - - // 光驱托盘状态 - public static class EM_NET_BURN_DEV_TRAY_TYPE extends Structure - { - public static final int EM_NET_BURN_DEV_TRAY_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_NET_BURN_DEV_TRAY_TYPE_READY = 1; // 光盘就绪 - public static final int EM_NET_BURN_DEV_TRAY_TYPE_OPEN = 2; // 托盘弹出 - public static final int EM_NET_BURN_DEV_TRAY_TYPE_NODISK = 3; // 无盘 - public static final int EM_NET_BURN_DEV_TRAY_TYPE_NOT_READY = 4; // 光盘未就绪 - } - - // 光驱使用状态 - public static class EM_NET_BURN_DEV_OPERATE_TYPE extends Structure - { - public static final int EM_NET_BURN_DEV_OPERATE_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_NET_BURN_DEV_OPERATE_TYPE_WRITE = 1; // 执行写 - public static final int EM_NET_BURN_DEV_OPERATE_TYPE_READ = 2; // 执行读 - public static final int EM_NET_BURN_DEV_OPERATE_TYPE_IDLE = 3; // 空闲 - } - - // 刻录机信息 - public static class NET_DEV_BURNING extends Structure - { - public int dwDriverType; // 刻录驱动器类型;0:DHFS,1:DISK,2:CDRW - public int dwBusType; // 总线类型;0:USB,1:1394,2:IDE, 3: SATA, 4: ESATA - public int dwTotalSpace; // 总容量(KB) - public int dwRemainSpace; // 剩余容量(KB) - public byte[] dwDriverName = new byte[NET_BURNING_DEV_NAMELEN]; // 刻录驱动器名称 - public int emTrayType; // 光驱托盘状态, 详见EM_NET_BURN_DEV_TRAY_TYPE - public int emOperateType; // 光盘使用状态, 详见EM_NET_BURN_DEV_OPERATE_TYPE - } - - // 设备刻录机信息 - public static class NET_BURNING_DEVINFO extends Structure - { - public int dwDevNum; // 刻录设备个数 - public NET_DEV_BURNING[] stuList = (NET_DEV_BURNING[])new NET_DEV_BURNING().toArray(NET_MAX_BURNING_DEV_NUM); // 各刻录设备信息 - } - - // CLIENT_AttachBurnState()输入参数 - public static class NET_IN_ATTACH_STATE extends Structure - { - public int dwSize; - public Pointer szDeviceName; // 光盘名称,如"/dev/sda" - public fAttachBurnStateCB cbAttachState; // 刻录监听回调 - public Pointer dwUser; // 用户数据 - public LLong lBurnSession; // 刻录会话句柄, CLIENT_StartBurnSession的返回值. 该值为0时, szDeviceName有效, 此时按刻录设备订阅刻录状态 - public fAttachBurnStateCBEx cbAttachStateEx; // 扩展刻录监听回调 - public Pointer dwUserEx; // 扩展刻录监听回调用户数据 - - public NET_IN_ATTACH_STATE() { - this.dwSize = this.size(); - } - } - - // CLIENT_AttachBurnState 输出参数 - public static class NET_OUT_ATTACH_STATE extends Structure - { - public int dwSize; - - public NET_OUT_ATTACH_STATE() { - this.dwSize = this.size(); - } - } - - // fAttachBurnStateCB 参数 - public static class NET_CB_BURNSTATE extends Structure - { - public int dwSize; - public Pointer szState; // 消息类型 - //"UploadFileStart":可以开始附件上传 - //"InitBurnDevice":初始化刻录设备 - //"Burning":刻录中 - //"BurnExtraFileStop":刻录停止 - //"BurnFilePause":刻录暂停 - //"SpaceFull":刻录空间满 - //"BurnFileError":刻录出错 - public Pointer szFileName; // 当前刻录附件文件名,用于"UploadFileStart"开始附件上传消息 - public int dwTotalSpace; // 总容量,单位KB,用于"Burning"刻录中,显示容量或计算进度 - public int dwRemainSpace; // 剩余容量,单位KB,用于"Burning"刻录中 - public Pointer szDeviceName; // 刻录设备名称,用于区分不同的刻录设备 - public int nRemainTime; // 刻录剩余时间, 单位秒, -1代表无效 - } - - // 刻录状态 - public static class NET_BURN_STATE extends Structure - { - public static final int BURN_STATE_STOP = 0; // 停止 - public static final int BURN_STATE_STOPING = 1; // 停止中 - public static final int BURN_STATE_INIT = 2; // 初始化 - public static final int BURN_STATE_BURNING = 3; // 刻录中 - public static final int BURN_STATE_PAUSE = 4; // 暂停 - public static final int BURN_STATE_CHANGE_DISK = 5; // 换盘中 - public static final int BURN_STATE_PREPARE_EXTRA_FILE = 6; // 附件初始化 - public static final int BURN_STATE_WAIT_EXTRA_FILE = 7; // 等待附件刻录 - public static final int BURN_STATE_UPLOAD_FILE_START = 8; // 附件刻录中 - public static final int BURN_STATE_CHECKING_DISK = 9; // 检测光盘中 - public static final int BURN_STATE_DISK_READY = 10; // 光盘准备就绪 - } - - // 刻录错误码 - public static class NET_BURN_ERROR_CODE extends Structure - { - public static final int BURN_CODE_NORMAL = 0; // 正常 - public static final int BURN_CODE_UNKNOWN_ERROR = 1; // 未知错误 - public static final int BURN_CODE_SPACE_FULL = 2; // 刻录满 - public static final int BURN_CODE_START_ERROR = 3; // 开始刻录出错 - public static final int BURN_CODE_STOP_ERROR = 4; // 停止刻录出错 - public static final int BURN_CODE_WRITE_ERROR = 5; // 刻录出错 - public static final int BURN_CODE_UNKNOWN = 6; // 未知 - } - - // CLIENT_BurnGetState 接口输入参数 - public static class NET_IN_BURN_GET_STATE extends Structure - { - public int dwSize; - - public NET_IN_BURN_GET_STATE() { - this.dwSize = this.size(); - } - } - - // 光驱使用状态 - public static class EM_NET_BURN_DEV_USED_STATE extends Structure - { - public static final int EM_NET_BURN_DEV_USED_STATE_UNKNOWN = 0; //未知 - public static final int EM_NET_BURN_DEV_USED_STATE_STOP = 1; //停止 - public static final int EM_NET_BURN_DEV_USED_STATE_BURNING = 2; //刻录中 - } - - // 刻录设备状态 - public static class NET_BURN_DEV_STATE extends Structure - { - public int dwSize; - public int nDeviceID; // 光驱设备ID - public byte[] szDevName = new byte[NET_BURNING_DEV_NAMELEN]; // 光驱设备名称 - public int dwTotalSpace; // 光驱总容量, 单位KB - public int dwRemainSpace; // 光驱剩余容量, 单位KB - public int emUsedType; // 光驱使用状态, 详见EM_NET_BURN_DEV_USED_STATE - public int emError; // 单个光驱出错状态, 详见NET_BURN_ERROR_CODE - - public NET_BURN_DEV_STATE() { - this.dwSize = this.size(); - } - } - - // CLIENT_BurnGetState 接口输出参数 - public static class NET_OUT_BURN_GET_STATE extends Structure - { - public int dwSize; - public int emState; // 刻录状态, 详见NET_BURN_STATE - public int emErrorCode; // 错误码, 详见NET_BURN_ERROR_CODE - public int dwDevMask; // 刻录设备掩码, 按位表示多个刻录设备组合 - public int[] nChannels = new int[NET_MAX_BURN_CHANNEL_NUM]; // 刻录通道数组 - public int nChannelCount; // 刻录通道数 - public int emMode; // 刻录模式, 详见NET_BURN_MODE - public int emPack; // 刻录流格式, 详见NET_BURN_RECORD_PACK - public int nFileIndex; // 当前刻录文件编号 - public NET_TIME stuStartTime; // 刻录开始时间 - public NET_BURN_DEV_STATE[] stuDevState = (NET_BURN_DEV_STATE[])new NET_BURN_DEV_STATE().toArray(NET_MAX_BURNING_DEV_NUM); // 刻录设备状态 - public int nRemainTime; // 刻录剩余时间, 单位秒, -1代表无效 - public int emExtMode; // 扩展模式,当为无盘刻录时,stuDevState可能无效, 详见NET_BURN_EXTMODE - - public NET_OUT_BURN_GET_STATE() { - this.dwSize = this.size(); - } - } - - // 雷达监测超速报警事件 智能楼宇专用 ( NET_ALARM_RADAR_HIGH_SPEED ) - public static class ALARM_RADAR_HIGH_SPEED_INFO extends Structure - { - public NET_TIME_EX stuTime; // 事件发生时间 - public float fSpeed; // 速度(单位:km/h) - public byte[] szPlateNumber = new byte[16]; // 车牌 - public byte[] byReserved = new byte[1008]; // 预留字段 - } - - // 设备巡检报警事件 智网专用 ( NET_ALARM_POLLING_ALARM ) - public static class ALARM_POLLING_ALARM_INFO extends Structure - { - public NET_TIME_EX stuTime; // 事件发生时间 - public byte[] byReserved = new byte[1024]; // 预留字段 - } - - // 门禁事件 ALARM_ACCESS_CTL_EVENT - public static class ALARM_ACCESS_CTL_EVENT_INFO extends Structure { - public int dwSize; - public int nDoor; // 门通道号 - public byte[] szDoorName = new byte[NET_MAX_DOORNAME_LEN]; // 门禁名称 - public NET_TIME stuTime; // 报警事件发生的时间 - public int emEventType; // 门禁事件类型 参考 NET_ACCESS_CTL_EVENT_TYPE - public int bStatus; // 刷卡结果,TRUE表示成功,FALSE表示失败 - public int emCardType; // 卡类型, 参考 NET_ACCESSCTLCARD_TYPE - public int emOpenMethod; // 开门方式, 参考 NET_ACCESS_DOOROPEN_METHOD - public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 - public byte[] szPwd = new byte[NET_MAX_CARDPWD_LEN]; // 密码 - public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 门读卡器ID - public byte[] szUserID = new byte[NET_COMMON_STRING_64]; // 开门用户 - public byte[] szSnapURL = new byte[NET_COMMON_STRING_256]; // 抓拍照片存储地址 - public int nErrorCode; // 开门失败的原因,仅在bStatus为FALSE时有效 - // 0x00 没有错误 - // 0x10 未授权 - // 0x11 卡挂失或注销 - // 0x12 没有该门权限 - // 0x13 开门模式错误 - // 0x14 有效期错误 - // 0x15 防反潜模式 - // 0x16 胁迫报警未打开 - // 0x17 门常闭状态 - // 0x18 AB互锁状态 - // 0x19 巡逻卡 - // 0x1A 设备处于闯入报警状态 - // 0x20 时间段错误 - // 0x21 假期内开门时间段错误 - // 0x30 需要先验证有首卡权限的卡片 - // 0x40 卡片正确,输入密码错误 - // 0x41 卡片正确,输入密码超时 - // 0x42 卡片正确,输入指纹错误 - // 0x43 卡片正确,输入指纹超时 - // 0x44 指纹正确,输入密码错误 - // 0x45 指纹正确,输入密码超时 - // 0x50 组合开门顺序错误 - // 0x51 组合开门需要继续验证 - // 0x60 验证通过,控制台未授权 - public int nPunchingRecNo; // 刷卡记录集中的记录编号 - public int nNumbers; // 抓图张数 - public int emStatus; // 卡状态 NET_ACCESSCTLCARD_STATE - public byte[] szSN = new byte[32]; // 智能锁序列号 - public int emAttendanceState; // 考勤状态, 参考 NET_ATTENDANCESTATE - public byte[] szQRCode = new byte[512]; // 二维码 - public byte[] szCallLiftFloor = new byte[16]; // 呼梯楼层号 - - public ALARM_ACCESS_CTL_EVENT_INFO() { - super(); - this.dwSize = this.size(); - } - @Override - public String toString() { - return "ALARM_ACCESS_CTL_EVENT_INFO [dwSize=" + dwSize + ", nDoor=" - + nDoor + ", szDoorName=" + Arrays.toString(szDoorName) - + ", stuTime=" + stuTime + ", emEventType=" + emEventType - + ", bStatus=" + bStatus + ", emCardType=" + emCardType - + ", emOpenMethod=" + emOpenMethod + ", szCardNo=" - + Arrays.toString(szCardNo) + ", szPwd=" - + Arrays.toString(szPwd) + ", szReaderID=" - + Arrays.toString(szReaderID) + ", szUserID=" - + Arrays.toString(szUserID) + ", szSnapURL=" - + Arrays.toString(szSnapURL) + ", nErrorCode=" + nErrorCode - + ", nPunchingRecNo=" + nPunchingRecNo + "]"; - } - } - - // 消警事件 - public static class ALARM_ALARMCLEAR_INFO extends Structure - { - public int dwSize; - public int nChannelID; // 通道号 - public NET_TIME stuTime; // 报警事件发生的时间 - public int bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public ALARM_ALARMCLEAR_INFO() { - this.dwSize = this.size(); - } - @Override - public String toString() { - return "ALARM_ALARMCLEAR_INFO [dwSize=" + dwSize + ", nChannelID=" - + nChannelID + ", stuTime=" + stuTime + ", bEventAction=" - + bEventAction + "]"; - } - } - - public static class NET_ALARM_TYPE - { - public static final int NET_ALARM_LOCAL = 0; //开关量防区的报警事件(对应 NET_ALARM_ALARM_EX2 事件) - public static final int NET_ALARM_ALARMEXTENDED = 1; //扩展模块报警事件(对应 NET_ALARM_ALARMEXTENDED 事件) - public static final int NET_ALARM_TEMP = 2; //温度报警事件(对应 NET_ALARM_TEMPERATURE 事件) - public static final int NET_ALARM_URGENCY = 3; //紧急报警事件(对应 NET_URGENCY_ALARM_EX 事件) - public static final int NET_ALARM_RCEMERGENCYCALL = 4; //紧急呼叫报警事件(对应 NET_ALARM_RCEMERGENCY_CALL 事件) - public static final int NET_ALARM_ALL = 5; //所有报警事件 - } - - // CLIENT_ControlDevice 接口的 NET_CTRL_CLEAR_ALARM 命令参数 - public static class NET_CTRL_CLEAR_ALARM extends Structure { - public int dwSize; - public int nChannelID; // 防区通道号, -1 表示所有通道 - public int emAlarmType; // 事件类型(支持的类型较少,建议用nEventType字段) NET_ALARM_TYPE - public String szDevPwd; // 登陆设备的密码,如不使用加密消警,直接赋值为NULL - public int bEventType; // 表示是否启用nEventType字段, TRUE:nEventType代替emAlarmType字段, FALSE:沿用emAlarmType字段,忽略nEventType字段 - public int nEventType; // 事件类型, 对应 fMessCallBack 回调来上的lCommand字段, 即CLIENT_StartListenEx接口获得事件类型 - // 比如NET_ALARM_ALARM_EX2表示本地报警事件 - public NET_CTRL_CLEAR_ALARM() { - this.dwSize = this.size(); - } - @Override - public String toString() { - return "NET_CTRL_CLEAR_ALARM [dwSize=" + dwSize + ", nChannelID=" - + nChannelID + ", emAlarmType=" + emAlarmType + ", szDevPwd=" - + szDevPwd + ", bEventType=" + bEventType + ", nEventType=" - + nEventType + "]"; - } - } - - // CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_START_ALARMBELL / CTRLTYPE_CTRL_STOP_ALARMBELL命令参数 - public static class NET_CTRL_ALARMBELL extends Structure - { - public int dwSize; - public int nChannelID; // 通道号(0开始) - - public NET_CTRL_ALARMBELL(){ - this.dwSize = this.size(); - } - } - - // 警灯配置(对应 CFG_CMD_ALARMLAMP) - public static class CFG_ALARMLAMP_INFO extends Structure - { - public int emAlarmLamp; // 警灯状态,参考 EM_ALARMLAMP_MODE - } - - // 警灯状态 - public static class EM_ALARMLAMP_MODE extends Structure - { - public static final int EM_ALARMLAMP_MODE_UNKNOWN = -1; // 未知 - public static final int EM_ALARMLAMP_MODE_OFF = 0; // 灭 - public static final int EM_ALARMLAMP_MODE_ON = 1; // 亮 - public static final int EM_ALARMLAMP_MODE_BLINK = 2; // 闪烁 - } - - // 发送的通知类型,对应CLIENT_SendNotifyToDev接口 - public static class NET_EM_NOTIFY_TYPE extends Structure - { - public static final int NET_EM_NOTIFY_PATROL_STATUS = 1; // 发送巡更通知 (对应结构体 NET_IN_PATROL_STATUS_INFO, NET_OUT_PATROL_STATUS_INFO ) - } - - // 巡更状态 - public static class NET_EM_PATROL_STATUS extends Structure - { - public static final int NET_EM_PATROL_STATUS_UNKNOWN = 0; // 未知状态 - public static final int NET_EM_PATROL_STATUS_BEGIN = 1; // 巡更开始 - public static final int NET_EM_PATROL_STATUS_END = 2; // 巡更结束 - public static final int NET_EM_PATROL_STATUS_FAIL = 3; // 巡更失败 - } - - // CLIENT_SendNotifyToDev 入参 (对应枚举 NET_EM_NOTIFY_PATROL_STATUS) - public static class NET_IN_PATROL_STATUS_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int emPatrolStatus; // 巡更状态,参考 NET_EM_PATROL_STATUS - - public NET_IN_PATROL_STATUS_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_SendNotifyToDev 出参 (对应枚举 NET_EM_NOTIFY_PATROL_STATUS) - public static class NET_OUT_PATROL_STATUS_INFO extends Structure - { - public int dwSize; // 结构体大小 - - public NET_OUT_PATROL_STATUS_INFO() { - this.dwSize = this.size(); - } - } - - // 报警事件类型 NET_ALARM_TALKING_INVITE (设备请求对方发起对讲事件)对应的数据描述信息 - public static class ALARM_TALKING_INVITE_INFO extends Structure - { - public int dwSize; - public int emCaller; // 设备希望的对讲发起方,取值参考 EM_TALKING_CALLER - public NET_TIME stuTime; // 事件触发时间 - public byte[] szCallID = new byte[NET_COMMON_STRING_64]; // 呼叫惟一标识符 - public int nLevel; // 表示所呼叫设备所处层级 - public TALKINGINVITE_REMOTEDEVICEINFO stuRemoteDeviceInfo; // 远端设备信息 - - public ALARM_TALKING_INVITE_INFO() { - this.dwSize = this.size(); - } - } - - // 对讲发起方 - public static class EM_TALKING_CALLER extends Structure - { - public static final int EM_TALKING_CALLER_UNKNOWN = 0; // 未知发起方 - public static final int EM_TALKING_CALLER_PLATFORM = 1; // 对讲发起方为平台 - } - - // Invite事件远程设备协议 - public static class TALKINGINVITE_REMOTEDEVICE_PROTOCOL extends Structure - { - public static final int EM_TALKINGINVITE_REMOTEDEVICE_PROTOCOL_UNKNOWN = 0; // 未知 - public static final int EM_TALKINGINVITE_REMOTEDEVICE_PROTOCOL_HIKVISION = 1; // 海康 - } - - // Invite事件远端设备信息 - public static class TALKINGINVITE_REMOTEDEVICEINFO extends Structure - { - public byte[] szIP = new byte[MAX_REMOTEDEVICEINFO_IPADDR_LEN]; // 设备IP - public int nPort; // 端口 - public int emProtocol; // 协议类型,取值参考 EM_TALKINGINVITE_REMOTEDEVICE_PROTOCOL - public byte[] szUser = new byte[MAX_REMOTEDEVICEINFO_USERNAME_LEN]; // 用户名 - public byte[] szPassword = new byte[MAX_REMOTEDEVICEINFO_USERPSW_LENGTH];// 密码 - public byte[] szReverse = new byte[1024]; // 保留字段 - } - - // IO控制命令,对应 CLIENT_QueryIOControlState 接口 和 CLIENT_IOControl 接口 - public static class NET_IOTYPE extends Structure - { - public static final int NET_ALARMINPUT = 1; // 控制报警输入,对应结构体为 ALARM_CONTROL - public static final int NET_ALARMOUTPUT = 2; // 控制报警输出,对应结构体为 ALARM_CONTROL - public static final int NET_DECODER_ALARMOUT = 3; // 控制报警解码器输出,对应结构体为 DECODER_ALARM_CONTROL - public static final int NET_WIRELESS_ALARMOUT = 5; // 控制无线报警输出,对应结构体为 ALARM_CONTROL - public static final int NET_ALARM_TRIGGER_MODE = 7; // 报警触发方式(手动,自动,关闭),使用 TRIGGER_MODE_CONTROL 结构体 - } - - // 报警IO控制 - public static class ALARM_CONTROL extends Structure - { - public short index; // 端口序号 - public short state; // 端口状态,0 - 关闭,1 - 打开 - } - - // 报警解码器控制 - public static class DECODER_ALARM_CONTROL extends Structure - { - public int decoderNo; // 报警解码器号,从0开始 - public short alarmChn; // 报警输出口,从0开始 - public short alarmState; // 报警输出状态;1:打开,0:关闭 - } - - // 触发方式 - public static class TRIGGER_MODE_CONTROL extends Structure - { - public short index; // 端口序号 - public short mode; // 触发方式(0关闭1手动2自动);不设置的通道,sdk默认将保持原来的设置。 - public byte[] bReserved = new byte[28]; - } - - // 报警输出通道的状态的配置, 对应 命令 CFG_CMD_ALARMOUT - public static class CFG_ALARMOUT_INFO extends Structure - { - public int nChannelID; // 报警通道号(0开始) - public byte[] szChnName = new byte[MAX_CHANNELNAME_LEN]; // 报警通道名称 - public byte[] szOutputType = new byte[MAX_NAME_LEN]; // 输出类型, 用户自定义 - public int nOutputMode; // 输出模式, 0-自动报警, 1-强制报警, 2-关闭报警 - public int nPulseDelay; // 脉冲模式输出时间, 单位为秒(0-255秒) - public int nSlot; // 根地址, 0表示本地通道, 1表示连接在第一个串口上的扩展通道, 2、3...以此类推, -1表示无效 - public int nLevel1; // 第一级级联地址, 表示连接在第nSlot串口上的第nLevel1个探测器或仪表, 从0开始, -1表示无效 - public byte abLevel2; // 类型为bool, 表示nLevel2字段是否存在 - public int nLevel2; // 第二级级联地址, 表示连接在第nLevel1个的仪表上的探测器序号, 从0开始 - } - - // 检测采集设备报警事件, 对应事件类型 NET_ALARM_SCADA_DEV_ALARM - public static class ALARM_SCADA_DEV_INFO extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - public NET_TIME stuTime; // 事件发生的时间 - public byte[] szDevName = new byte[NET_COMMON_STRING_64]; // 故障设备名称 - public byte[] szDesc = new byte[NET_COMMON_STRING_256]; // 报警描述 - public int nAction; // -1:未知 0:脉冲 1:开始 2:停止 - public byte[] szID = new byte[NET_COMMON_STRING_32]; // 点位ID, 目前使用16字节 - public byte[] szSensorID = new byte[NET_COMMON_STRING_32]; // 探测器ID, 目前使用16字节 - public byte[] szDevID = new byte[NET_COMMON_STRING_32]; // 设备ID, 目前使用16字节 - public byte[] szPointName = new byte[NET_COMMON_STRING_64]; // 点位名,与点表匹配 - public int nAlarmFlag; // 0:开始, 1:结束 - - public ALARM_SCADA_DEV_INFO() { - this.dwSize = this.size(); - } - } - - // 点位类型 - public static class EM_NET_SCADA_POINT_TYPE extends Structure - { - public static final int EM_NET_SCADA_POINT_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_NET_SCADA_POINT_TYPE_ALL = 1; // 所有类型 - public static final int EM_NET_SCADA_POINT_TYPE_YC = 2; // 遥测 模拟量输入 - public static final int EM_NET_SCADA_POINT_TYPE_YX = 3; // 遥信 开关量输入 - public static final int EM_NET_SCADA_POINT_TYPE_YT = 4; // 遥调 模拟量输出 - public static final int EM_NET_SCADA_POINT_TYPE_YK = 5; // 遥控 开关量输出 - } - - // CLIENT_SCADAAttachInfo()接口输入参数 - public static class NET_IN_SCADA_ATTACH_INFO extends Structure - { - public int dwSize; - public StdCallCallback cbCallBack; // 数据回调函数, fSCADAAttachInfoCallBack 回调 - public int emPointType; // 点位类型,取值参考 EM_NET_SCADA_POINT_TYPE - public Pointer dwUser; // 用户定义参数 - - public NET_IN_SCADA_ATTACH_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_SCADAAttachInfo()接口输出参数 - public static class NET_OUT_SCADA_ATTACH_INFO extends Structure - { - public int dwSize; - - public NET_OUT_SCADA_ATTACH_INFO() { - this.dwSize = this.size(); - } - } - - // 监测点位信息列表 - public static class NET_SCADA_NOTIFY_POINT_INFO_LIST extends Structure - { - public int dwSize; - public int nList; // 监测点位信息个数 - public NET_SCADA_NOTIFY_POINT_INFO[] stuList = (NET_SCADA_NOTIFY_POINT_INFO[])new NET_SCADA_NOTIFY_POINT_INFO().toArray(MAX_SCADA_POINT_LIST_INFO_NUM); // 监测点位信息 - - public NET_SCADA_NOTIFY_POINT_INFO_LIST() { - this.dwSize = this.size(); - } - } - - // 监测点位信息 - public static class NET_SCADA_NOTIFY_POINT_INFO extends Structure - { - public int dwSize; - public byte[] szDevName = new byte[NET_COMMON_STRING_64]; // 设备名称,与getInfo获取的名称一致 - public int emPointType; // 点位类型,取值参考 EM_NET_SCADA_POINT_TYPE - public byte[] szPointName = new byte[NET_COMMON_STRING_64]; // 点位名,与点位表的取值一致 - public float fValue; // Type为YC时为浮点数 - public int nValue; // Type为YX时为整数 - public byte[] szFSUID = new byte[NET_COMMON_STRING_64]; // 现场监控单元ID(Field Supervision Unit), 即设备本身 - public byte[] szID = new byte[NET_COMMON_STRING_64]; // 点位ID - public byte[] szSensorID = new byte[NET_COMMON_STRING_64]; // 探测器ID - public NET_TIME_EX stuCollectTime; // 采集时间 - - public NET_SCADA_NOTIFY_POINT_INFO() { - this.dwSize = this.size(); - } - } - - public static class CFG_TRAFFICSNAPSHOT_NEW_INFO extends Structure - { - public int nCount; // 有效成员个数 - public CFG_TRAFFICSNAPSHOT_INFO[] stInfo = (CFG_TRAFFICSNAPSHOT_INFO[])new CFG_TRAFFICSNAPSHOT_INFO().toArray(8); // 交通抓拍表数组 - } - - // CFG_CMD_INTELLECTIVETRAFFIC - public static class CFG_TRAFFICSNAPSHOT_INFO extends Structure - { - public byte[] szDeviceAddress = new byte[MAX_DEVICE_ADDRESS]; // 设备地址 UTF-8编码,256字节 - public int nVideoTitleMask; // OSD叠加类型掩码 从低位到高位分别表示:0-时间 1-地点 2-车牌3-车长 4-车速 5-限速6-大车限速 7-小车限速8-超速 9-违法代码10-车道号 11-车身颜色 12-车牌类型 13-车牌颜色14-红灯点亮时间 15-违章类型 16-雷达方向 17-设备编号 18-标定到期时间 19-车型 20-行驶方向 - public int nRedLightMargin; // 红灯冗余间隔时间 红灯开始的一段时间内,车辆通行不算闯红灯,单位:秒 - public float fLongVehicleLengthLevel; // 超长车长度最小阈值 单位:米,包含 - public float[] arfLargeVehicleLengthLevel = new float[2]; // 大车长度阈值 单位:米,包含小值 - public float[] arfMediumVehicleLengthLevel = new float[2]; // 中型车长度阈值 单位:米,包含小值 - public float[] arfSmallVehicleLengthLevel = new float[2]; // 小车长度阈值 单位:米,包含小值 - public float fMotoVehicleLengthLevel; // 摩托车长度最大阈值 单位:米,不包含 - public BREAKINGSNAPTIMES_INFO stBreakingSnapTimes; // 违章抓拍张数 - public DETECTOR_INFO[] arstDetector = (DETECTOR_INFO[])new DETECTOR_INFO().toArray(MAX_DETECTOR); // 车检器配置,下标是车道号 - public int nCarType; // 抓拍车辆类型 0-大小车都抓拍1-抓拍小车2-抓拍大车3-大小车都不抓拍 - public int nMaxSpeed; // 当测得的速度超过最大速度时,则以最大速度计 0~255km/h - public int nFrameMode; // 帧间隔模式 1-速度自适应(超过速度上限取0间隔,低于速度下限取2间隔,中间取1间隔)2-由联动参数决定 - public int[] arnAdaptiveSpeed = new int[2]; // 速度自适应下限和上限 - public CFG_ALARM_MSG_HANDLE stuEventHandler; // 交通抓拍联动参数 - public int abSchemeRange; // BOOL类型,TRUE:方案针对相机,以车到0的值为准;FALSE:方案针对车道。不可以修改此字段数据, 只内部使用 - public int nVideoTitleMask1; // 从低位到高位分别表示:0-车标 1-红灯结束时间 2-设备制造厂商 3-小车低限速 4-大车低限速 5-小车高限速 6-大车高限速 7-设备工作模式 8-通用自定义 9-车道自定义 10-抓拍触发源 11-停车场区域12-车辆类型(面包车、轿车等等) 13-中车低限速 14-中车高限速 15-道路方向 16-GPS信息 - public int nMergeVideoTitleMask; // 合成图片OSD叠加类型掩码 参照nVideoTitleMask字段 - public int nMergeVideoTitleMask1; // 合成图片OSD叠加类型掩码 参照nVideoTitleMask1字段 - public int nTriggerSource; // 触发源掩码 0-RS232 1-RS485 2-IO 3-Video 4-Net - public int nSnapMode; // 抓拍模式 0-全部抓拍 1-超速抓拍 2-逆向抓拍 3-PK模式 - public int nWorkMode; // 工作模式 0-自动模式,1-线圈抓拍模式,2-线圈抓拍识别,3-视频抓拍,4-视频识别, 5-混合抓拍(带识别) - public int nCarThreShold; // 车长阈值 区分大小车长的阈值,单位: cm - public int nSnapType; // 抓拍或抓录选择 0-正常抓拍模式 1-视频抓拍模式 2-黑屏快抓模式 - public int[] nCustomFrameInterval = new int[3]; // 自定义抓拍帧间隔 第一个元素指车速小于速度自适应下限时的抓拍帧间隔,依次类推 - public int nKeepAlive; // 与雷达、车检器的默认保活周期 单位秒 - public OSD_INFO stOSD; // 原始图片OSD参数配置 - public OSD_INFO stMergeOSD; // 合成图片OSD参数配置 - public CFG_NET_TIME stValidUntilTime; // 标定到期时间,指该时间点之前抓拍照片有效 - public RADAR_INFO stRadar; - public byte[] szRoadwayCode = new byte[MAX_ROADWAYNO]; // 道路代码 - public int nVideoTitleMask2; // 原始图片OSD叠加类型掩码2 从低位到高位分别表示:0-国别 1-尾气数据 - public int nMergeVideoTitleMask2; // 合成图片OSD叠加类型掩码2 参照nVideoTitleMask2字段 - public int nParkType; // 出入口类型,0-默认( 兼容以前,不区分出口/入口 ),1-入口相机, 2-出口相机 - } - - // 车检器配置 - public static class DETECTOR_INFO extends Structure - { - public int nDetectBreaking; // 违章类型掩码 从低位到高位依次是:0-正常1-闯红灯2-压线3-逆行4-欠速5-超速6-有车占道 - // 7-黄牌占道 8-闯黄灯 9-违章占公交车道 10-不系安全带 11-驾驶员抽烟 12-驾驶员打电话 - public COILCONFIG_INFO[] arstCoilCfg = (COILCONFIG_INFO[])new COILCONFIG_INFO().toArray(MAX_COILCONFIG); // 线圈配置数组 - public int nRoadwayNumber; // 车道号 1-16 ; 0表示不启用 - public int nRoadwayDirection; // 车道方向(车开往的方向) 0-南向北 1-西南向东北 2-东 3-西北向东南 4-北向南 5-东北向西南 6-东向西 7-东南向西北 8-忽略 - public int nRedLightCardNum; // 卡口图片序号 表示将电警中的某一张图片作为卡口图片(共三张),0表示不采用,1~3,表示采用对应序号的图片 - public int nCoilsNumber; // 线圈个数 1-3 - public int nOperationType; // 业务模式 0-卡口电警1-电警2-卡口 - public int[] arnCoilsDistance = new int[3]; // 两两线圈的间隔 范围0-1000,单位为厘米 - public int nCoilsWidth; // 每个线圈的宽度 0~200cm - public int[] arnSmallCarSpeedLimit = new int[2]; // 小型车辆速度下限和上限 0~255km/h,不启用大小车限速时作为普通车辆限速 - public int[] arnBigCarSpeedLimit = new int[2]; // 大型车辆速度下限和上限 0~255km/h,启用大小车限速时有效 - public int nOverSpeedMargin; // 限高速宽限值 单位:km/h - public int nBigCarOverSpeedMargin; // 大车限高速宽限值 单位:km/h,启用大小车限速时有效 - public int nUnderSpeedMargin; // 限低速宽限值 单位:km/h - public int nBigCarUnderSpeedMargin; // 大车限低速宽限值 单位:km/h,启用大小车限速时有效 - public byte bSpeedLimitForSize; // bool类型,是否启用大小车限速 - public byte bMaskRetrograde; // bool类型,逆行是否视为违章行为 - public byte[] byReserved = new byte[2]; // 保留对齐 - public byte[] szDrivingDirection = new byte[3*MAX_DRIVINGDIRECTION]; // "DrivingDirection" : ["Approach", "上海", "杭州"],行驶方向 - // "Approach"-上行,即车辆离设备部署点越来越近;"Leave"-下行, - // 即车辆离设备部署点越来越远,第二和第三个参数分别代表上行和 - // 下行的两个地点,UTF-8编码 - public int nOverPercentage; // 超速百分比,超过限速百分比后抓拍 - public int nCarScheme; // 具体的方案Index,具体方案含义参参考打包环境local.png;根据CFG_TRAFFICSNAPSHOT_INFO.abSchemeRange字段区分作用范围 - public int nSigScheme; // 同上,非卡口使用 - public int bEnable; // BOOL类型,车道是否有效,只有有效时才抓拍 - public int[] nYellowSpeedLimit = new int[2]; //黄牌车限速上限和下限 范围0~255km/h - public int nRoadType; //工作路段 0 普通公路 1 高速公路 - public int nSnapMode; //抓拍模式 0-全部抓拍 1-超速抓拍 2-逆向抓拍(鄞州项目用) - public int nDelayMode; //延时抓拍方案 0-使DelaySnapshotDistance,1-使用DelayTime - public int nDelayTime; //延时抓拍时间 闯红灯第三张抓拍位置距离最后一个线圈的时间,单位毫秒 - public int nTriggerMode; //触发模式 0-入线圈触发 1-出线圈触发 2-出入都抓拍 3-关闭 - public int nErrorRange; //速度误差值,进线圈2与进线圈3之间的速度误差值,若实际误差大于或等于该值,视速度无效,否则取平均速度 0-20 - public double dSpeedCorrection; //速度校正系数,即速度值为测出的值乘以该系数 - public int[] nDirection = new int[2]; //相对车道方向需要上报车辆行驶方向,nDirection[0] 0--空 1--正向 ; nDirection[1] 0--空 1--反向 - public byte[] szCustomParkNo = new byte[CFG_COMMON_STRING_32 + 1];// 自定义车位号(停车场用) - public byte[] btReserved = new byte[3]; - } - - // 线圈配置 - public static class COILCONFIG_INFO extends Structure - { - public int nDelayFlashID; // 延时闪光灯序号 每个线圈对应的延时闪关灯序号,范围0~5,0表示不延时任何闪光灯 - public int nFlashSerialNum; // 闪光灯序号 范围0~5,0表示不打开闪光灯(鄞州项目用) - public int nRedDirection; // 红灯方向 每个线圈对应的红灯方向:0-不关联,1-左转红灯,2-直行红灯,3-右转红灯,4-待左,5-待直,6-待右, 只在电警中有效 - public int nTriggerMode ; // 线圈触发模式 触发模式:0-入线圈触发1-出线圈触发(鄞州项目用) - public int nFlashSerialNum2; //多抓第二张对应闪光灯序号 范围0~5,0表示不打开闪光灯 - public int nFlashSerialNum3; //多抓第三张对应闪光灯序号 范围0~5,0表示不打开闪光灯 - } - - // 违章抓拍张数 - public static class BREAKINGSNAPTIMES_INFO extends Structure - { - public int nNormal; // 正常 - public int nRunRedLight; // 闯红灯 - public int nOverLine; // 压线 - public int nOverYellowLine; // 压黄线 - public int nRetrograde; // 逆向 - public int nUnderSpeed; // 欠速 - public int nOverSpeed; // 超速 - public int nWrongRunningRoute; // 有车占道 - public int nYellowInRoute; // 黄牌占道 - public int nSpecialRetrograde; // 特殊逆行 - public int nTurnLeft; // 违章左转 - public int nTurnRight; // 违章右转 - public int nCrossLane; // 违章变道 - public int nU_Turn; // 违章调头 - public int nParking; // 违章停车 - public int nWaitingArea; // 违章进入待行区 - public int nWrongRoute; // 不按车道行驶 - public int nParkingSpaceParking; // 车位有车 - public int nParkingSpaceNoParking; // 车位无车 - public int nRunYellowLight; // 闯黄灯 - public int nStay; // 违章停留 - public int nPedestrainPriority; // 斑马线行人优先违章 - public int nVehicleInBusRoute; // 违章占道 - public int nBacking; // 违章倒车 - public int nOverStopLine; // 压停止线 - public int nParkingOnYellowBox; // 黄网格线停车 - public int nRestrictedPlate; // 受限车牌 - public int nNoPassing; // 禁行 - public int nWithoutSafeBelt; // 不系安全带 - public int nDriverSmoking; // 驾驶员抽烟 - public int nDriverCalling; // 驾驶员打电话 - public int nPedestrianRunRedLight; // 行人闯红灯 - public int nPassNotInOrder; // 未按规定依次通行 - } - - // OSD属性 - public static class OSD_INFO extends Structure - { - public BLACK_REGION_INFO stBackRegionInfo; //OSD黑边属性 - public int nOSDAttrScheme; //OSD属性配置方案 0=未知 , 1=全体OSD项共用属性 , 2=每个OSD项一个属性 - public OSD_ATTR_SCHEME stOSDAttrScheme; //OSD属性配置方案内容 - public OSD_CUSTOM_SORT[] stOSDCustomSorts = (OSD_CUSTOM_SORT[])new OSD_CUSTOM_SORT().toArray(MAX_OSD_CUSTOM_SORT_NUM); //OSD叠加内容自定义排序 - public int nOSDCustomSortNum; - public int nRedLightTimeDisplay; //OSD红灯时间配置 0=未知,1=违法最后一张,2=所有张 - public byte cSeperater; //OSD不同项之间的分隔符 - public byte[] bReserved = new byte[3]; //字节对齐 - public byte[] szOSDOrder = new byte[MAX_CONF_CHAR]; - public int nOSDContentScheme; //0=未知, 1=Mask , 2=CustomizeSort - public OSD_CUSTOM_INFO stOSDCustomInfo; //OSD自定义项 - } - - // OSD黑边 - public static class BLACK_REGION_INFO extends Structure - { - public int nHeight; //黑边高度 取值范围:0 ~ ( 8192-原图片高度) - public int nOSDPosition; //黑边位置 0=未知 , 1=顶部 , 2=底部 - } - - // OSD属性配置方案内容 - public static class OSD_ATTR_SCHEME extends Structure - { - public OSD_WHOLE_ATTR stWholeAttr; //全体OSD项共用属性 - } - - // 全体OSD项共用属性 - public static class OSD_WHOLE_ATTR extends Structure - { - public int bPositionAsBlackRegion; //BOOL类型,位置是否同黑边相同,true时,下面的Position无效,BOOL类型 - public CFG_RECT stPostion; //位置,不能超过图片范围 - public int bNewLine; //BOOL类型,超出矩形范围是否换行,bPositionAsBlackRegion为true时有效,BOOL类型 - public int bLoneVehicle; //BOOL类型,车辆信息独立显示,true 一行显示一辆车信息,false 允许多辆车信息显示在一行,BOOL类型 - } - - // OSD叠加内容自定义排序 - public static class OSD_CUSTOM_SORT extends Structure - { - public OSD_CUSTOM_ELEMENT[] stElements = (OSD_CUSTOM_ELEMENT[])new OSD_CUSTOM_ELEMENT().toArray(MAX_OSD_CUSTOM_SORT_ELEM_NUM); //具体叠加元素 - public int nElementNum; - } - - // OSD具体叠加元素 - public static class OSD_CUSTOM_ELEMENT extends Structure - { - public int nNameType; //名称类型, 0:szName字段含义参照szOSDOrder字段定义的项 - // 1:"Name"字段表示自定义项,无需解析 - public byte[] szName = new byte[MAX_OSD_CUSTOM_VALUE_LEN]; // 该项名称 - public byte[] szPrefix = new byte[MAX_PRE_POX_STR_LEN]; // 叠加前缀字符串 - public byte[] szPostfix = new byte[MAX_PRE_POX_STR_LEN]; //叠加后缀字符串 - public int nSeperaterCount; //后面添加分隔符个数 - - } - - // OSD自定义项 - public static class OSD_CUSTOM_INFO extends Structure - { - public OSD_CUSTOM_GENERAL_INFO[] stGeneralInfos = (OSD_CUSTOM_GENERAL_INFO[])new OSD_CUSTOM_GENERAL_INFO().toArray(MAX_OSD_CUSTOM_GENERAL_NUM); //具体叠加元素 - public int nGeneralInfoNum; - } - - public static class OSD_CUSTOM_GENERAL_INFO extends Structure - { - public int bEnable; //BOOL类型,是否叠加 - } - - public static class RADAR_INFO extends Structure - { - public int nAngle; //角度,用于修正雷达探头安装的角度造成的速度误差,范围[0,90] - public int nAntiJammingValue; //抗干扰门槛值 - public int nComeInValue; //来向进入门槛值,取值范围[0,65535] - public int nComeOutValue; //来向离开门槛值 - public int nDelayTime; //雷达延时,单位ms,范围[0,255] - public int nDetectBreaking; //违章类型掩码,从低位到高位依次是: - //0-正常,1-闯红灯, 2-压线, 3-逆行,4-欠速 - //5-超速,6-有车占道,7-黄牌占道,8-闯黄灯,9-违章占公交车道 - public int nDetectMode; //检测模式 0-车头检测 1-车尾检测 2-双向检测 - public int nInstallMode; //雷达安装方式 0-侧面安装 1-上方安装 - public int nLevel; //灵敏度,0级灵敏度最高,范围[0,5] - public int nMultiTargetFilter; //多目标过滤模式,0-正常 1-过滤 - public int nWentEndValue; //去向信号结束门槛值 - public int nWentInValue; //去向进入门槛值 - public int nWentOutValue; //去向离开门槛值 - } - - // 串口状态 - public static class NET_COMM_STATE extends Structure - { - public int uBeOpened; // 串口是否打开,0:未打开 1:打开. - public int uBaudRate; // 波特率, 1~8分别表示 1200 2400 4800 9600 19200 38400 57600 115200 - public int uDataBites; // 数据位,4~8表示4位~8位 - public int uStopBits; // 停止位, 232串口 : 数值0 代表停止位1; 数值1 代表停止位1.5; 数值2 代表停止位2. 485串口 : 数值1 代表停止位1; 数值2 代表停止位2. - public int uParity; // 检验, 0:无校验,1:奇校验;2:偶校验; - public byte[] bReserved = new byte[32]; - } - - - // 门禁卡记录查询条件 - public static class FIND_RECORD_ACCESSCTLCARD_CONDITION extends Structure - { - public int dwSize; - public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - public int bIsValid; // 是否有效, 1:有效, 0:无效 , boolean类型,为1或者0 - public int abCardNo; // 卡号查询条件是否有效,针对成员 szCardNo,boolean类型,为1或者0 - public int abUserID; // 用户ID查询条件是否有效,针对成员 szUserID, boolean类型,为1或者0 - public int abIsValid; // IsValid查询条件是否有效,针对成员 bIsValid, boolean类型,为1或者0 - - public FIND_RECORD_ACCESSCTLCARD_CONDITION() { - this.dwSize = this.size(); - } - } - - // 门禁卡记录集信息 - public static class NET_RECORDSET_ACCESS_CTL_CARD extends Structure - { - public int dwSize; - public int nRecNo; // 记录集编号,只读 - public NET_TIME stuCreateTime = new NET_TIME(); // 创建时间 - public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID, 设备暂不支持 - public int emStatus; // 卡状态 NET_ACCESSCTLCARD_STATE - public int emType; // 卡类型 NET_ACCESSCTLCARD_TYPE - public byte[] szPsw = new byte[NET_MAX_CARDPWD_LEN]; // 卡密码 - public int nDoorNum; // 有效的门数目; - public int[] sznDoors = new int[NET_MAX_DOOR_NUM]; // 有权限的门序号,即CFG_CMD_ACCESS_EVENT配置的数组下标 - public int nTimeSectionNum; // 有效的的开门时间段数目 - public int[] sznTimeSectionNo = new int[NET_MAX_TIMESECTION_NUM]; // 开门时间段索引,即CFG_ACCESS_TIMESCHEDULE_INFO的数组下标 - public int nUserTime; // 使用次数,仅当来宾卡时有效 - public NET_TIME stuValidStartTime = new NET_TIME(); // 开始有效期, 设备暂不支持时分秒 - public NET_TIME stuValidEndTime = new NET_TIME(); // 结束有效期, 设备暂不支持时分秒 - public int bIsValid; // 是否有效,1有效; 0无效, boolean类型,为1或者0 - public NET_ACCESSCTLCARD_FINGERPRINT_PACKET stuFingerPrintInfo; // 下发指纹数据信息,仅为兼容性保留,请使用 stuFingerPrintInfoEx, 如果使用,内部的 pPacketData,请初始化 - public int bFirstEnter; // 是否拥有首卡权限, boolean类型,为1或者0 - public byte[] szCardName = new byte[NET_MAX_CARDNAME_LEN]; // 卡命名 - public byte[] szVTOPosition = new byte[NET_COMMON_STRING_64]; // 门口机关联位置 - public int bHandicap; // 是否为残疾人卡, boolean类型,为1或者0 - public int bEnableExtended; // 启用成员 stuFingerPrintInfoEx, boolean类型,为1或者0 - public NET_ACCESSCTLCARD_FINGERPRINT_PACKET_EX stuFingerPrintInfoEx; // 指纹数据信息, 如果使用,内部的 pPacketData,请初始化 - public int nFaceDataNum; // 人脸数据个数不超过20 - public NET_FACE_FACEDATA[] szFaceDataArr = (NET_FACE_FACEDATA[])new NET_FACE_FACEDATA().toArray(MAX_FACE_COUTN);// 人脸模板数据 - public byte[] szDynamicCheckCode = new byte[MAX_COMMON_STRING_16];// 动态校验码。 - // VTO等设备会保存此校验码,以后每次刷卡都以一定的算法生成新校验码并写入IC卡中,同时更新VTO设备的校验码,只有卡号和此校验码同时验证通过时才可开门。 - public int nRepeatEnterRouteNum; // 反潜路径个数 - public int[] arRepeatEnterRoute = new int[MAX_REPEATENTERROUTE_NUM]; // 反潜路径 - public int nRepeatEnterRouteTimeout; // 反潜超时时间 - public int bNewDoor; // 是否启动新开门授权字段,TRUE表示使用nNewDoorNum和nNewDoors字段下发开门权限, BOOL类型 - public int nNewDoorNum; // 有效的门数目; - public int[] nNewDoors = new int[MAX_ACCESSDOOR_NUM]; // 有权限的门序号,即CFG_CMD_ACCESS_EVENT配置的数组下标 - public int nNewTimeSectionNum; // 有效的的开门时间段数目 - public int[] nNewTimeSectionNo = new int[MAX_ACCESSDOOR_NUM]; // 开门时间段索引,即CFG_ACCESS_TIMESCHEDULE_INFO的数组下标 - public byte[] szCitizenIDNo = new byte[MAX_COMMON_STRING_32]; // 身份证号码 - public int nSpecialDaysScheduleNum; // 假日计划表示数量 - public int[] arSpecialDaysSchedule = new int[MAX_ACCESSDOOR_NUM];// 假日计划标识// 缺点:目前方案只支持一卡刷一个设备。 - public int nUserType; // 用户类型, 0 普通用户, 1 黑名单用户 - public int nFloorNum; // 有效的楼层数量 - public FLOOR_NO[] szFloorNoArr = (FLOOR_NO[])new FLOOR_NO().toArray(MAX_ACCESS_FLOOR_NUM); // 楼层号 - - public NET_RECORDSET_ACCESS_CTL_CARD() { - this.dwSize = this.size(); - } - } - - public static class FLOOR_NO extends Structure - { - public byte[] szFloorNo = new byte[NET_COMMON_STRING_4]; // 楼层号 - } - - // 卡状态 - public static class NET_ACCESSCTLCARD_STATE extends Structure - { - public static final int NET_ACCESSCTLCARD_STATE_UNKNOWN = -1; - public static final int NET_ACCESSCTLCARD_STATE_NORMAL = 0; // 正常 - public static final int NET_ACCESSCTLCARD_STATE_LOSE = 0x01; // 挂失 - public static final int NET_ACCESSCTLCARD_STATE_LOGOFF = 0x02; // 注销 - public static final int NET_ACCESSCTLCARD_STATE_FREEZE = 0x04; // 冻结 - public static final int NET_ACCESSCTLCARD_STATE_ARREARAGE = 0x08; // 欠费 - public static final int NET_ACCESSCTLCARD_STATE_OVERDUE = 0x10; // 逾期 - public static final int NET_ACCESSCTLCARD_STATE_PREARREARAGE = 0x20; // 预欠费(还是可以开门,但有语音提示) - } - - // 指纹数据,只用于下发信息 - public static class NET_ACCESSCTLCARD_FINGERPRINT_PACKET extends Structure - { - public int dwSize; - public int nLength; // 单个数据包长度,单位字节 - public int nCount; // 包个数 - public Pointer pPacketData; // 所有指纹数据包,用户申请内存并填充,长度为 nLength*nCount - - public NET_ACCESSCTLCARD_FINGERPRINT_PACKET() { - this.dwSize = this.size(); - } - } - - // 指纹数据扩展,可用于下发和获取信息 - public static class NET_ACCESSCTLCARD_FINGERPRINT_PACKET_EX extends Structure - { - public int nLength; // 单个数据包长度,单位字节 - public int nCount; // 包个数 - public Pointer pPacketData; // 所有指纹数据包, 用户申请内存,大小至少为nLength * nCount - public int nPacketLen; // pPacketData 指向内存区的大小,用户填写 - public int nRealPacketLen; // 返回给用户实际指纹总大小 - public byte[] byReverseed = new byte[1024]; //保留大小 - } - - - // 查询记录能力集能力集 - public static class CFG_CAP_RECORDFINDER_INFO extends Structure - { - public int nMaxPageSize;//最大分页条数 - } - - // 时间同步服务器配置 - public static class CFG_NTP_INFO extends Structure - { - public int bEnable; // 使能开关,BOOL类型 - public byte[] szAddress = new byte[MAX_ADDRESS_LEN]; // IP地址或网络名 - public int nPort; // 端口号 - public int nUpdatePeriod; // 更新周期,单位为分钟 - public int emTimeZoneType; // 时区, 参考 EM_CFG_TIME_ZONE_TYPE - public byte[] szTimeZoneDesc = new byte[MAX_NAME_LEN]; // 时区描述 - public int nSandbyServerNum; // 实际备用NTP服务器个数 - public CFG_NTP_SERVER[] stuStandbyServer = (CFG_NTP_SERVER[])new CFG_NTP_SERVER().toArray(MAX_NTP_SERVER); // 备选NTP服务器地址 - } - - // NTP服务器 - public static class CFG_NTP_SERVER extends Structure - { - public int bEnable; // BOOL类型 - public byte[] szAddress = new byte[MAX_ADDRESS_LEN]; // IP地址或网络名 - public int nPort; // 端口号 - } - - // 时区定义(NTP) - public static class EM_CFG_TIME_ZONE_TYPE extends Structure - { - public static final int EM_CFG_TIME_ZONE_0 = 0; // {0, 0*3600,"GMT+00:00"} - public static final int EM_CFG_TIME_ZONE_1 = 1; // {1, 1*3600,"GMT+01:00"} - public static final int EM_CFG_TIME_ZONE_2 = 2; // {2, 2*3600,"GMT+02:00"} - public static final int EM_CFG_TIME_ZONE_3 = 3; // {3, 3*3600,"GMT+03:00"} - public static final int EM_CFG_TIME_ZONE_4 = 4; // {4, 3*3600+1800,"GMT+03:30"} - public static final int EM_CFG_TIME_ZONE_5 = 5; // {5, 4*3600,"GMT+04:00"} - public static final int EM_CFG_TIME_ZONE_6 = 6; // {6, 4*3600+1800,"GMT+04:30"} - public static final int EM_CFG_TIME_ZONE_7 = 7; // {7, 5*3600,"GMT+05:00"} - public static final int EM_CFG_TIME_ZONE_8 = 8; // {8, 5*3600+1800,"GMT+05:30"} - public static final int EM_CFG_TIME_ZONE_9 = 9; // {9, 5*3600+1800+900,"GMT+05:45"} - public static final int EM_CFG_TIME_ZONE_10 = 10; // {10, 6*3600,"GMT+06:00"} - public static final int EM_CFG_TIME_ZONE_11 = 11; // {11, 6*3600+1800,"GMT+06:30"} - public static final int EM_CFG_TIME_ZONE_12 = 12; // {12, 7*3600,"GMT+07:00"} - public static final int EM_CFG_TIME_ZONE_13 = 13; // {13, 8*3600,"GMT+08:00"} - public static final int EM_CFG_TIME_ZONE_14 = 14; // {14, 9*3600,"GMT+09:00"} - public static final int EM_CFG_TIME_ZONE_15 = 15; // {15, 9*3600+1800,"GMT+09:30"} - public static final int EM_CFG_TIME_ZONE_16 = 16; // {16, 10*3600,"GMT+10:00"} - public static final int EM_CFG_TIME_ZONE_17 = 17; // {17, 11*3600,"GMT+11:00"} - public static final int EM_CFG_TIME_ZONE_18 = 18; // {18, 12*3600,"GMT+12:00"} - public static final int EM_CFG_TIME_ZONE_19 = 19; // {19, 13*3600,"GMT+13:00"} - public static final int EM_CFG_TIME_ZONE_20 = 20; // {20, -1*3600,"GMT-01:00"} - public static final int EM_CFG_TIME_ZONE_21 = 21; // {21, -2*3600,"GMT-02:00"} - public static final int EM_CFG_TIME_ZONE_22 = 22; // {22, -3*3600,"GMT-03:00"} - public static final int EM_CFG_TIME_ZONE_23 = 23; // {23, -3*3600-1800,"GMT-03:30"} - public static final int EM_CFG_TIME_ZONE_24 = 24; // {24, -4*3600,"GMT-04:00"} - public static final int EM_CFG_TIME_ZONE_25 = 25; // {25, -5*3600,"GMT-05:00"} - public static final int EM_CFG_TIME_ZONE_26 = 26; // {26, -6*3600,"GMT-06:00"} - public static final int EM_CFG_TIME_ZONE_27 = 27; // {27, -7*3600,"GMT-07:00"} - public static final int EM_CFG_TIME_ZONE_28 = 28; // {28, -8*3600,"GMT-08:00"} - public static final int EM_CFG_TIME_ZONE_29 = 29; // {29, -9*3600,"GMT-09:00"} - public static final int EM_CFG_TIME_ZONE_30 = 30; // {30, -10*3600,"GMT-10:00"} - public static final int EM_CFG_TIME_ZONE_31 = 31; // {31, -11*3600,"GMT-11:00"} - public static final int EM_CFG_TIME_ZONE_32 = 32; // {32, -12*3600,"GMT-12:00"} - } - - // 录像信息对应 CLIENT_FindFileEx 接口的 NET_FILE_QUERY_FILE 命令 查询条件 - // 目前支持通过路径查询 - public static class NET_IN_MEDIA_QUERY_FILE extends Structure - { - public int dwSize; // 结构体大小 - public String szDirs; // 工作目录列表,一次可查询多个目录,为空表示查询所有目录。目录之间以分号分隔,如“/mnt/dvr/sda0;/mnt/dvr/sda1”,szDirs==null 或"" 表示查询所有 - public int nMediaType; // 文件类型,0:查询任意类型,1:查询jpg图片,2:查询dav - public int nChannelID; // 通道号从0开始,-1表示查询所有通道 - public NET_TIME stuStartTime; // 开始时间 - public NET_TIME stuEndTime; // 结束时间 - public int[] nEventLists = new int[MAX_IVS_EVENT_NUM]; // 事件类型列表,参见智能分析事件类型 - public int nEventCount; // 事件总数 - public byte byVideoStream; // 视频码流 0-未知 1-主码流 2-辅码流1 3-辅码流2 4-辅码流3 - public byte[] bReserved = new byte[3]; // 字节对齐 - public int[] emFalgLists = new int[EM_RECORD_SNAP_FLAG_TYPE.FLAG_TYPE_MAX]; // 录像或抓图文件标志, 不设置标志表示查询所有文件, 参考 EM_RECORD_SNAP_FLAG_TYPE - public int nFalgCount; // 标志总数 - public NET_RECORD_CARD_INFO stuCardInfo; // 卡号录像信息, emFalgLists包含卡号录像时有效 - public int nUserCount; // 用户名有效个数 - public byte[] szUserName = new byte[MAX_QUERY_USER_NUM * NET_NEW_USER_NAME_LENGTH]; // 用户名 - public int emResultOrder; // 查询结果排序方式, 参考 EM_RESULT_ORDER_TYPE - public int bTime; // 是否按时间查询 - - public NET_IN_MEDIA_QUERY_FILE() { - this.dwSize = this.size(); - } - } - - // 录像信息对应 CLIENT_FindFileEx 接口的 NET_FILE_QUERY_FILE 命令 查询结果 - public static class NET_OUT_MEDIA_QUERY_FILE extends Structure - { - public int dwSize; // 结构体大小 - public int nChannelID; // 通道号从0开始,-1表示查询所有通道 - public NET_TIME stuStartTime; // 开始时间 - public NET_TIME stuEndTime; // 结束时间 - public int nFileSize; // 文件长度 - public byte byFileType; // 文件类型 1:jpg图片, 2: dav - public byte byDriveNo; // 该字段已废弃,后续开发使用 nDriveNo成员 - public byte byPartition; // 分区号 - public byte byVideoStream; // 视频码流 0-未知 1-主码流 2-辅码流1 3-辅码流 4-辅码流 - public int nCluster; // 簇号 - public byte[] szFilePath = new byte[MAX_PATH]; // 文件路径 - public int[] nEventLists = new int[MAX_IVS_EVENT_NUM]; // 关联的事件列表,事件类型列表,参见智能分析事件类型 - public int nEventCount; //事件总数 - public int[] emFalgLists = new int[EM_RECORD_SNAP_FLAG_TYPE.FLAG_TYPE_MAX]; // 录像或抓图文件标志, 参考 EM_RECORD_SNAP_FLAG_TYPE - public int nFalgCount; //标志总数 - public int nDriveNo; // 磁盘号 - - //频浓缩文件相关信息 - public byte[] szSynopsisPicPath = new byte[NET_COMMON_STRING_512]; // 预处理文件提取到的快照 文件路径 - // 支持HTTP URL表示:"http://www.dahuate.com/1.jpg" - // 支持FTP URL表示: "ftp://ftp.dahuate.com/1.jpg" - // 支持服务器本地路径 - // a)"C:/pic/1.jpg" - // b)"/mnt//2010/8/11/dav/15:40:50.jpg" - public int nSynopsisMaxTime; // 支持浓缩视频最大时间长度,单位 秒 - public int nSynopsisMinTime; // 支持浓缩视频最小时间长度,单位 秒 - - //文件摘要信息 - public int nFileSummaryNum; // 文件摘要信息数 - public NET_FILE_SUMMARY_INFO[] stFileSummaryInfo = (NET_FILE_SUMMARY_INFO[])new NET_FILE_SUMMARY_INFO().toArray(MAX_FILE_SUMMARY_NUM); // 文件摘要信息 - public long nFileSizeEx; // 文件长度扩展,支持文件长度大于4G,单位字节 - - public NET_OUT_MEDIA_QUERY_FILE() { - this.dwSize = this.size(); - } - } - - // 卡号录像信息 - public static class NET_RECORD_CARD_INFO extends Structure - { - public int dwSize; - public int nType; // 类型, 0-Card, 1-Field - public byte[] szCardNo = new byte[NET_MAX_CARD_INFO_LEN]; // 卡号 - public int emTradeType; // 交易类型, 参考 EM_ATM_TRADE_TYPE - public byte[] szAmount = new byte[NET_COMMON_STRING_64]; // 交易金额, 空字符串表示不限金额 - public int nError; // 错误码, 0-所有错误, 1-吞钞, 2-吞卡 - public int nFieldCount; // 域数量, 按域查询时有效 - public byte[] szFields = new byte[MAX_CARD_RECORD_FIELD_NUM * NET_COMMON_STRING_256]; // 域信息, 按域查询时有效 - public byte[] szChange = new byte[NET_COMMON_STRING_32]; // 零钱 - - public NET_RECORD_CARD_INFO() { - this.dwSize = this.size(); - } - } - - // 文件摘要信息 - public static class NET_FILE_SUMMARY_INFO extends Structure - { - public byte[] szKey = new byte[NET_COMMON_STRING_64]; // 摘要名称 - public byte[] szValue = new byte[NET_COMMON_STRING_512]; // 摘要内容 - public byte[] bReserved = new byte[256]; // 保留字段 - } - - // 录像或抓图文件标志 - public static class EM_RECORD_SNAP_FLAG_TYPE extends Structure - { - public static final int FLAG_TYPE_TIMING = 0; //定时文件 - public static final int FLAG_TYPE_MANUAL = 1; //手动文件 - public static final int FLAG_TYPE_MARKED = 2; //重要文件 - public static final int FLAG_TYPE_EVENT = 3; //事件文件 - public static final int FLAG_TYPE_MOSAIC = 4; //合成图片 - public static final int FLAG_TYPE_CUTOUT = 5; //抠图图片 - public static final int FLAG_TYPE_LEAVE_WORD = 6; //留言文件 - public static final int FLAG_TYPE_TALKBACK_LOCAL_SIDE = 7; //对讲本地方文件 - public static final int FLAG_TYPE_TALKBACK_REMOTE_SIDE = 8; //对讲远程方文件 - public static final int FLAG_TYPE_SYNOPSIS_VIDEO = 9; //浓缩视频 - public static final int FLAG_TYPE_ORIGINAL_VIDEO = 10; //原始视频 - public static final int FLAG_TYPE_PRE_ORIGINAL_VIDEO = 11; //已经预处理的原始视频 - public static final int FLAG_TYPE_BLACK_PLATE = 12; //黑名单图片 - public static final int FLAG_TYPE_ORIGINAL_PIC = 13; //原始图片 - public static final int FLAG_TYPE_CARD = 14; //卡号录像 - public static final int FLAG_TYPE_MAX = 128; - } - - // 交易类型 - public static class EM_ATM_TRADE_TYPE extends Structure - { - public static final int ATM_TRADE_ALL = 0; // 所有类型 - public static final int ATM_TRADE_ENQUIRY = 1; // 查询 - public static final int ATM_TRADE_WITHDRAW = 2; // 取款 - public static final int ATM_TRADE_MODIFY_PASSWORD = 3; // 修改密码 - public static final int ATM_TRADE_TRANSFER = 4; // 转账 - public static final int ATM_TRADE_DEPOSIT = 5; // 存款 - public static final int ATM_TRADE_CARDLESS_ENQUIRY = 6; // 无卡查询 - public static final int ATM_TRADE_CARDLESS_DEPOSIT = 7; // 无卡存款 - public static final int ATM_TRADE_OTHER = 8; // 其他 - } - - // 查询结果排序方式 - public static class EM_RESULT_ORDER_TYPE extends Structure - { - public static final int EM_RESULT_ORDER_UNKNOWN = 0; // 未知 - public static final int EM_RESULT_ORDER_ASCENT_BYTIME = 1; // 按时间升序排序 - public static final int EM_RESULT_ORDER_DESCENT_BYTIME = 2; // 按时间降序排序 - } - - // CLIENT_ControlDevice 接口的 CTRLTYPE_CTRL_START_VIDEO_ANALYSE 命令参数, 开始视频智能分析 - public static class NET_CTRL_START_VIDEO_ANALYSE extends Structure - { - public int dwSize; - public int nChannelId; // 通道号 - - public NET_CTRL_START_VIDEO_ANALYSE() { - this.dwSize = this.size(); - } - } - - // CLIENT_ControlDevice 接口的 CTRLTYPE_CTRL_STOP_VIDEO_ANALYSE 命令参数, 停止视频智能分析 - public static class NET_CTRL_STOP_VIDEO_ANALYSE extends Structure - { - public int dwSize; - public int nChannelId; // 通道号 - - public NET_CTRL_STOP_VIDEO_ANALYSE() { - this.dwSize = this.size(); - } - } - - // CLIENT_AttachVideoAnalyseState 接口输入参数 - public static class NET_IN_ATTACH_VIDEOANALYSE_STATE extends Structure - { - public int dwSize; - public int nChannleId; // 通道号 - public StdCallCallback cbVideoAnalyseState; // 视频分析状态回调函数,fVideoAnalyseState 回调 - public Pointer dwUser; // 用户信息 - - public NET_IN_ATTACH_VIDEOANALYSE_STATE() { - this.dwSize = this.size(); - } - } - - // CLIENT_AttachVideoAnalyseState 接口输出参数 - public static class NET_OUT_ATTACH_VIDEOANALYSE_STATE extends Structure - { - public int dwSize; - public LLong lAttachHandle; // 分析进度句柄,唯一标识某一通道的分析进度 - - public NET_OUT_ATTACH_VIDEOANALYSE_STATE() { - this.dwSize = this.size(); - } - } - - public static class NET_VIDEOANALYSE_STATE extends Structure - { - public int dwSize; - public int dwProgress; // 分析进度,0-100 - public byte[] szState = new byte[NET_COMMON_STRING_64]; // 通道状态,Running":运行,"Stop":停止,"NoStart":未启动,"Failed":失败,"Successed":成功 - public byte[] szFailedCode = new byte[NET_COMMON_STRING_64]; // 错误码 - - public NET_VIDEOANALYSE_STATE() { - this.dwSize = this.size(); - } - } - - // 热成像火情报警信息上报事件, 对应事件 NET_ALARM_FIREWARNING_INFO - public static class ALARM_FIREWARNING_INFO_DETAIL extends Structure - { - public int nChannel; // 对应视频通道号 - public int nWarningInfoCount; // 报警信息个数 - public NET_FIREWARNING_INFO[] stuFireWarningInfo - = new NET_FIREWARNING_INFO[MAX_FIREWARNING_INFO_NUM]; // 具体报警信息 - public byte[] reserved = new byte[256]; - - public ALARM_FIREWARNING_INFO_DETAIL() { - for(int i = 0; i < stuFireWarningInfo.length; i++) { - stuFireWarningInfo[i] = new NET_FIREWARNING_INFO(); - } - } - } - - //热成像火情报警信息 - public static class NET_FIREWARNING_INFO extends Structure - { - public int nPresetId; // 预置点编号 从测温规则配置 CFG_RADIOMETRY_RULE_INFO 中选择 - public NET_RECT stuBoundingBox; // 着火点矩形框 - public int nTemperatureUnit; // 温度单位(当前配置的温度单位),见 NET_TEMPERATURE_UNIT - public float fTemperature; // 最高点温度值 同帧检测和差分检测提供 - public int nDistance; // 着火点距离,单位米 0表示无效 - public GPS_POINT stuGpsPoint; // 着火点经纬度 - public PTZ_POSITION_UNIT stuPTZPosition; // 云台运行信息 - public float fAltitude; // 高度(单位:米) - public byte[] reserved = new byte[208]; - } - - // 着火点经纬度 - public static class GPS_POINT extends Structure - { - public int dwLongitude; // 经度(单位是百万分之度,范围0-360度)如东经120.178274度表示为300178274 - public int dwLatidude; // 纬度(单位是百万分之度,范围0-180度)如北纬30.183382度表示为120183382 - // 经纬度的具体转换方式可以参考结构体 NET_WIFI_GPS_INFO 中的注释 - } - - //云台控制坐标单元 - public static class PTZ_POSITION_UNIT extends Structure - { - public int nPositionX; // 云台水平方向角度,归一化到-1~1 - public int nPositionY; // 云台垂直方向角度,归一化到-1~1 - public int nZoom; // 云台光圈放大倍率,归一化到 0~1 - public byte[] szReserve = new byte[32]; // 预留32字节 - } - - // 搜索到的地点信息 - public static class NET_WIFI_GPS_INFO extends Structure - { - public int emPositioningResult; // 定位结果, 参考 NET_GPS_POSITION_RESULT - public int nLongitude; // 经度(单位是百万分之一度) - // 西经:0 - 180000000 实际值应为: 180*1000000 – dwLongitude - // 东经:180000000 - 360000000 实际值应为: dwLongitude – 180*1000000 - // 如: 300168866应为(300168866 - 180*1000000)/1000000 即东经120.168866度 - public int nLatidude; // 纬度(单位是百万分之一度) - // 南纬:0 - 90000000 实际值应为: 90*1000000 – dwLatidude - // 北纬:90000000 – 180000000 实际值应为: dwLatidude – 90*1000000 - // 如: 120186268应为 (120186268 - 90*1000000)/1000000 即北纬30. 186268度 - public int nSpeed; // 速度, 单位千分之一km/H - public byte[] reserved = new byte[112]; // 保留字段 - } - - // 定位结果 - public static class NET_GPS_POSITION_RESULT extends Structure - { - public static final int NET_GPS_POSITION_RESULT_UNKNOWN = 0; // 未知 - public static final int NET_GPS_POSITION_RESULT_FAILED = 1; // 有GPS数据,但定位失败,此时定位数据无意义 - public static final int NET_GPS_POSITION_RESULT_SUCCEED = 2; // 有GPS数据,且定位成功,此时定位数据有意义 - } - - // 热成像增益模式 - public static class CFG_THERMO_GAIN_MODE extends Structure - { - public static final int CFG_THERMO_GAIN_MODE_UNKNOWN = 0; - public static final int CFG_THERMO_GAIN_MODE_HIGHTEMP = 1; // 高温 - public static final int CFG_THERMO_GAIN_MODE_LOWTEMP = 2; // 低温 - public static final int CFG_THERMO_GAIN_MODE_AUTO = 3; // 自动 - } - - // 热成像自动增益设置 - public static class CFG_THERMO_AUTO_GAIN extends Structure - { - public int nLowToHigh; // 温度超过此设定值时,自动切换到高温模式 - public int nLHROI; // 由低温切换到高温时的ROI 百分比0~100 - public int nHighToLow; // 温度下降到此设定值时,自动切换到低温模式 - public int nHLROI; // 由高温切换到低温时的ROI 百分比0~100 - } - - // 热成像配置,单个模式的配置 - public static class CFG_THERMOGRAPHY_OPTION extends Structure - { - public int nEZoom; // 倍数 - public int nThermographyGamma; // 伽马值 - public int nColorization; // 伪彩色,见 NET_THERMO_COLORIZATION - public int nSmartOptimizer; // 智能场景优化指数 0 ~100, 具体取值范围由能力决定 - public int bOptimizedRegion; // 是否开启感兴趣区域,只有感兴趣区域内的信息会被纳入统计用来做自动亮度调整(AGC) - public int nOptimizedROIType; // 感兴趣区域类型,见 NET_THERMO_ROI - public int nCustomRegion; // 自定义区域个数 - public CFG_RECT[] stCustomRegions = (CFG_RECT[])new CFG_RECT().toArray(64); // 自定义区域,仅在 nOptimizedROIType 为 NET_THERMO_ROI_CUSTOM 时有效 - public byte[] Reserved = new byte[256]; // 此保留字段确保此结构布局与 NET_THERMO_GRAPHY_INFO 相同 - public int nAgc; // 自动增益控制 [0-255]具体取值范围由能力决定 - public int nAgcMaxGain; // 最大自动增益 [0-255]具体取值范围由能力决定 - public int nAgcPlateau; // 增益均衡 具体取值范围由能力决定 - public int nGainMode; // 增益模式,参见 CFG_THERMO_GAIN_MODE - public CFG_THERMO_AUTO_GAIN stAutoGain; // 自动增益设置,只在增益模式为 CFG_THERMO_GAIN_MODE_AUTO 有效 - } - - // 热成像配置 - public static class CFG_THERMOGRAPHY_INFO extends Structure - { - public int nModeCount; // 模式个数,目前只有一个 - public CFG_THERMOGRAPHY_OPTION[] stOptions = new CFG_THERMOGRAPHY_OPTION[16]; // 对应不同模式的配置 - - public CFG_THERMOGRAPHY_INFO() { - for(int i = 0; i < stOptions.length; i++) { - stOptions[i] = new CFG_THERMOGRAPHY_OPTION(); - } - } - } - - // 温度单位 - public static class NET_TEMPERATURE_UNIT extends Structure - { - public static final int NET_TEMPERATURE_UNIT_UNKNOWN = 0; - public static final int NET_TEMPERATURE_UNIT_CENTIGRADE = 1; // 摄氏度 - public static final int NET_TEMPERATURE_UNIT_FAHRENHEIT = 2; // 华氏度 - } - - // 测温规则配置结构, 对应命令 CFG_CMD_THERMOMETRY_RULE - public static class CFG_RADIOMETRY_RULE_INFO extends Structure - { - public int nCount; // 规则个数 - public CFG_RADIOMETRY_RULE[] stRule = new CFG_RADIOMETRY_RULE[512]; // 测温规则 - - public CFG_RADIOMETRY_RULE_INFO() { - for(int i = 0; i < stRule.length; i++) { - stRule[i] = new CFG_RADIOMETRY_RULE(); - } - } - } - - // 区域测温的子类型 - public static class EM_CFG_AREA_SUBTYPE extends Structure - { - public static final int EM_CFG_AREA_SUBTYPE_UNKNOWN = 0; - public static final int EM_CFG_AREA_SUBTYPE_RECT = 1; // 矩形 - public static final int EM_CFG_AREA_SUBTYPE_ELLIPSE = 2; // 椭圆 - public static final int EM_CFG_AREA_SUBTYPE_POLYGON = 3; // 多边形 - } - - // 测温规则 - public static class CFG_RADIOMETRY_RULE extends Structure - { - public int bEnable; // 测温使能, BOOL类型 - public int nPresetId; // 预置点编号 - public int nRuleId; // 规则编号 - public byte[] szName = new byte[128]; // 自定义名称 - public int nMeterType; // 测温模式的类型,见 NET_RADIOMETRY_METERTYPE - public CFG_POLYGON[] stCoordinates = new CFG_POLYGON[64]; // 测温点坐标 使用相对坐标体系,取值均为0~8191 - public int nCoordinateCnt; // 测温点坐标实际个数 - public int nSamplePeriod; // 温度采样周期 单位 : 秒 - public CFG_RADIOMETRY_ALARMSETTING[] stAlarmSetting = new CFG_RADIOMETRY_ALARMSETTING[64]; // 测温点报警设置 - public int nAlarmSettingCnt; // 测温点报警设置实际个数 - public CFG_RADIOMETRY_LOCALPARAM stLocalParameters; // 本地参数配置 - public int emAreaSubType; // 区域测温的子类型, 见EM_CFG_AREA_SUBTYPE - public CFG_RADIOMETRY_RULE() { - for(int i = 0; i < stCoordinates.length; i++) { - stCoordinates[i] = new CFG_POLYGON(); - } - - for(int i = 0; i < stAlarmSetting.length; i++) { - stAlarmSetting[i] = new CFG_RADIOMETRY_ALARMSETTING(); - } - } - } - - // 温度统计 - public static class CFG_TEMP_STATISTICS extends Structure - { - public int bEnable; // 是否开启温度统计 - public byte[] szName = new byte[128]; // 测温项的名字 - public int nMeterType; // 测温模式的类型,见 NET_RADIOMETRY_METERTYPE - public int nPeriod; // 保存温度数据周期 - } - - // 温度统计配置结构 - public static class CFG_TEMP_STATISTICS_INFO extends Structure - { - public int nCount; // 个数 - public CFG_TEMP_STATISTICS[] stStatistics = new CFG_TEMP_STATISTICS[64]; // 温度统计 - - public CFG_TEMP_STATISTICS_INFO() { - for(int i = 0; i < stStatistics.length; i++) { - stStatistics[i] = new CFG_TEMP_STATISTICS(); - } - } - } - - // 温度单位 - public static class CFG_TEMPERATURE_UNIT extends Structure - { - public static final int TEMPERATURE_UNIT_UNKNOWN = 0; - public static final int TEMPERATURE_UNIT_CENTIGRADE = 1; // 摄氏度 - public static final int TEMPERATURE_UNIT_FAHRENHEIT = 2; // 华氏度 - } - - // 热成像测温全局配置 - public static class CFG_THERMOMETRY_INFO extends Structure - { - public int nRelativeHumidity; // 相对湿度 - public float fAtmosphericTemperature; // 大气温度 - public float fObjectEmissivity; // 物体辐射系数 - public int nObjectDistance; // 物体距离 - public float fReflectedTemperature; // 物体反射温度 - public int nTemperatureUnit; // 温度单位,见 TEMPERATURE_UNIT - public int bIsothermEnable; // 色标功能使能 - public int nMinLimitTemp; // 等温线下限温度值 - public int nMediumTemp; // 等温线中位温度值 - public int nMaxLimitTemp; // 等温线上限温度值 - public int nSaturationTemp; // 等温线饱和温度值 - public CFG_RECT stIsothermRect; // 色温条矩形区域(OSD 位置),使用相对坐标体系,取值均为0-8191 - public int bColorBarDisplay; // 是否显示色标条(OSD 叠加) - public int bHotSpotFollow; // 是否开启热点探测追踪使能 - public int bTemperEnable; // 测温开关 - public CFG_RGBA stHighCTMakerColor; // 高色温标注颜色 - public CFG_RGBA stLowCTMakerColor; // 低色温标注颜色 - } - - // 测温点报警设置 - public static class CFG_RADIOMETRY_ALARMSETTING extends Structure - { - public int nId; // 报警唯一编号 报警编号统一编码 - public int bEnable; // 是否开启该点报警, BOOL类型 - public int nResultType; // 测温报警结果类型,见 CFG_STATISTIC_TYPE,可取值: - // 点测温:具体值, - // 线测温:最大, 最小, 平均 - // 区域测温:最大, 最小, 平均, 标准, 中间, ISO - public int nAlarmCondition; // 报警条件,见 CFG_COMPARE_RESULT - public float fThreshold; // 报警阈值温度 浮点数 - public float fHysteresis; // 温度误差,浮点数,比如0.1 表示正负误差在0.1范围内 - public int nDuration; // 阈值温度持续时间 单位:秒 - } - - // 测温规则本地参数配置 - public static class CFG_RADIOMETRY_LOCALPARAM extends Structure - { - public int bEnable; // 是否启用本地配置, BOOL类型 - public float fObjectEmissivity; // 目标辐射系数 浮点数 0~1 - public int nObjectDistance; // 目标距离 - public int nRefalectedTemp; // 目标反射温度 - } - - // 统计量类型 - public static class CFG_STATISTIC_TYPE extends Structure - { - public static final int CFG_STATISTIC_TYPE_UNKNOWN = 0; - public static final int CFG_STATISTIC_TYPE_VAL = 1; // 具体值 - public static final int CFG_STATISTIC_TYPE_MAX = 2; // 最大 - public static final int CFG_STATISTIC_TYPE_MIN = 3; // 最小 - public static final int CFG_STATISTIC_TYPE_AVR = 4; // 平均 - public static final int CFG_STATISTIC_TYPE_STD = 5; // 标准 - public static final int CFG_STATISTIC_TYPE_MID = 6; // 中间 - public static final int CFG_STATISTIC_TYPE_ISO = 7; // ISO - } - - // 比较运算结果 - public static class CFG_COMPARE_RESULT extends Structure - { - public static final int CFG_COMPARE_RESULT_UNKNOWN = 0; - public static final int CFG_COMPARE_RESULT_BELOW = 1; // 低于 - public static final int CFG_COMPARE_RESULT_MATCH = 2; // 匹配 - public static final int CFG_COMPARE_RESULT_ABOVE = 3; // 高于 - } - - // 记录集新增操作(insert)参数 - public static class NET_CTRL_RECORDSET_INSERT_PARAM extends Structure - { - public int dwSize; - public NET_CTRL_RECORDSET_INSERT_IN stuCtrlRecordSetInfo; // 记录集信息(用户填写) - public NET_CTRL_RECORDSET_INSERT_OUT stuCtrlRecordSetResult; // 记录集信息(设备返回) - - public NET_CTRL_RECORDSET_INSERT_PARAM() { - this.dwSize = this.size(); - } - } - - // 记录集新增操作(insert)输入参数 - public static class NET_CTRL_RECORDSET_INSERT_IN extends Structure - { - public int dwSize; - public int emType; // 记录集信息类型, 取值参考 EM_NET_RECORD_TYPE - public Pointer pBuf; // 记录集信息缓存,详见EM_NET_RECORD_TYPE注释,由用户申请内存. - public int nBufLen; // 记录集信息缓存大小,大小参照记录集信息类型对应的结构体 - - public NET_CTRL_RECORDSET_INSERT_IN() { - this.dwSize = this.size(); - } - } - - // 记录集新增操作(insert)输出参数 - public static class NET_CTRL_RECORDSET_INSERT_OUT extends Structure - { - public int dwSize; - public int nRecNo; // 记录编号(新增insert时设备返回) - - public NET_CTRL_RECORDSET_INSERT_OUT() { - this.dwSize = this.size(); - } - } - - // 门禁密码记录查询条件 - public static class FIND_RECORD_ACCESSCTLPWD_CONDITION extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - - public FIND_RECORD_ACCESSCTLPWD_CONDITION() { - this.dwSize = this.size(); - } - } - - // 门禁密码记录集信息 - public static class NET_RECORDSET_ACCESS_CTL_PWD extends Structure - { - public int dwSize; - public int nRecNo; // 记录集编号,只读 - public NET_TIME stuCreateTime; // 创建时间 - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID, 设备暂不支持 - public byte[] szDoorOpenPwd = new byte[NET_MAX_CARDPWD_LEN]; // 开门密码 - public byte[] szAlarmPwd = new byte[NET_MAX_CARDPWD_LEN]; // 报警密码 - public int nDoorNum; // 有效的的门数目 - public int[] sznDoors = new int[NET_MAX_DOOR_NUM]; // 有权限的门序号,即 CFG_CMD_ACCESS_EVENT 配置CFG_ACCESS_EVENT_INFO的数组下标 - public byte[] szVTOPosition = new byte[NET_COMMON_STRING_64]; // 门口机关联位置 - public int nTimeSectionNum; // 开门时间段个数 - public int[] nTimeSectionIndex = new int[NET_MAX_TIMESECTION_NUM]; // 开门时间段索引,是个数组,每个元素与sznDoors中的门对应 - public int bNewDoor; // BOOL类型, 是否启动新开门授权字段,TRUE表示使用 nNewDoorNum 和 nNewDoors 字段下发开门权限 - public int nNewDoorNum; // 有效的门数目; - public int[] nNewDoors = new int[MAX_ACCESSDOOR_NUM]; // 有权限的门序号,即 CFG_CMD_ACCESS_EVENT 配置的数组下标 - public int nNewTimeSectionNum; // 有效的的开门时间段数目 - public int[] nNewTimeSectionNo = new int[MAX_ACCESSDOOR_NUM]; // 开门时间段索引,即 CFG_ACCESS_TIMESCHEDULE_INFO 的数组下标 - public NET_TIME stuValidStartTime; // 开始有效期 - public NET_TIME stuValidEndTime; // 结束有效期 - public int nValidCounts; // 有效次数 - - public NET_RECORDSET_ACCESS_CTL_PWD() { - this.dwSize = this.size(); - } - } - - // 开门二维码记录集信息 - public static class NET_RECORD_ACCESSQRCODE_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int nRecNo; // 记录集编号,只读 - public byte[] szQRCode = new byte[NET_MAX_QRCODE_LEN]; // 二维码 - public int nLeftTimes; // 剩余的有效次数 - public NET_TIME stuStartTime; // 有效期开始时间 - public NET_TIME stuEndTime; // 有效期截止时间 - public byte[] szRoomNumber = new byte[16]; // 房间号 - - public NET_RECORD_ACCESSQRCODE_INFO(){ - this.dwSize = this.size(); - } - } - - // 查询盒子工作状态, 对应命令 NET_DEVSTATE_GET_WORK_STATE - public static class NET_QUERY_WORK_STATE extends Structure - { - public int dwSize; // 保留字段 - public NET_WORKSTATE stuWorkState; // 运行状态 - - public NET_QUERY_WORK_STATE() { - this.dwSize = this.size(); - } - } - - // 设备工作状态 - public static class NET_WORKSTATE extends Structure - { - public int bOnline; // 设备是否在线,BOOL类型 - public byte[] szFirmwareVersion = new byte[NET_COMMON_STRING_128]; // 固件版本号 - public float fTemperature; // 温度值, 单位摄氏度 - public float fPowerDissipation; // 功耗, 单位W - public int nUtilizationOfCPU; // CPU 使用率 - public int nStorageNum; // 存储设备个数 - public NET_STORAGE_INFO[] stuStorages = new NET_STORAGE_INFO[MAX_STORAGE_NUM]; // 存储设备信息 - public int nUpTimeLast; // 上次上电时间, 单位: 秒 - public int nUpTimeTotal; // 总共上电时间, 单位: 秒 - public double dbMemInfoTotal; // 总内存大小, 单位: 字节 - public double dbMemInfoFree; // 剩余内存大小, 单位: 字节 - public byte[] byReserved1 = new byte[4]; // 字节对齐,非保留字节 - public byte[] szDevType = new byte[32]; // 设备型号 - public NET_RESOURCE_STATE stuResourceStat; // 网络资源 - public byte[] byReserved = new byte[8]; // 保留字节 - - public NET_WORKSTATE() { - for(int i = 0; i < MAX_STORAGE_NUM; i++) { - stuStorages[i] = new NET_STORAGE_INFO(); - } - } - } - - // 存储设备信息 - public static class NET_STORAGE_INFO extends Structure - { - public int emState; // 存储设备状态, ENUM_STORAGE_STATE - public int nPartitonNum; // 分区个数 - public NET_PARTITION_INFO[] stuPartions = new NET_PARTITION_INFO[MAX_PARTITION_NUM]; // 分区信息 - public byte[] byReserved = new byte[128]; // 保留字段 - - public NET_STORAGE_INFO() { - for(int i = 0; i < MAX_PARTITION_NUM; i++) { - stuPartions[i] = new NET_PARTITION_INFO(); - } - } - } - - // 网络资源 - public static class NET_RESOURCE_STATE extends Structure - { - public int nIPChanneIn; // IP通道接入速度, 单位: kbps - public int nNetRemain; // 网络接收剩余能力, 单位: kbps - public int nNetCapability; // 网络接收总能力, 单位: kbps - public int nRemotePreview; // 远程预览能力, 单位: kbps - public int nRmtPlayDownload; // 远程回放及下载能力, 单位: kbps - public int nRemoteSendRemain; // 远程发送剩余能力, 单位: kbps - public int nRemoteSendCapability; // 远程发送总能力, 单位: kbps - public byte[] byReserved = new byte[32]; // 保留字节 - } - - // 存储设备分区信息 - public static class NET_PARTITION_INFO extends Structure - { - public double dbTotalBytes; // 分区总空间 - public double dbUsedBytes; // 分区使用的空间 - public int bError; // 是否异常, BOOL类型 - public byte[] byReserved = new byte[64]; // 保留字段 - } - - // CLIENT_GetSelfCheckInfo 输入参数 - public static class NET_IN_GET_SELTCHECK_INFO extends Structure - { - public int dwSize; // 用户使用该结构体时,dwSize 需赋值为 sizeof (NET_IN_GET_SELTCHECK_INFO) - - public NET_IN_GET_SELTCHECK_INFO() { - this.dwSize = this.size(); - } - } - - // 设备自检信息 - public static class NET_SELFCHECK_INFO extends Structure - { - public int dwSize; - public int nAlarmIn; // 报警输入通道数 - public int nAlarmOut; // 报警输出通道数 - public NET_TIME stuTime; // 上报时间 - public byte[] szPlateNo = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌 - public byte[] szICCID = new byte[NET_MAX_SIM_LEN]; // SIM卡号,建议使用szICCIDExInfo字段 - public byte byOrientation; // 定位状态,0-未定位,1-定位 - public byte byACCState; // ACC 状态,0-关闭,1-打开 - public byte byConstantElecState; // 常电状态,0-正常连接,1-断开,2-欠压,3-高压 - public byte byAntennaState; // 通信信号状态,0-正常,1-未知故障,2-未接,3-短路 - - // 外部设备状态 - public byte byReportStation; // 报站器状态,0-未接,1-正常,2-异常 - public byte byControlScreen; // 调度屏状态,0-未接,1-正常,2-异常 - public byte byPOS; // POS机状态,0-未接,1-正常,2-异常 - public byte byCoinBox; // 投币箱状态,0-未接,1-正常,2-异常 - - // 能力集 - public int bTimerSnap; // 定时抓图,TRUE-支持,FALSE-不支持, BOOL类型 - public int bElectronEnclosure; // 电子围栏,TRUE-支持,FALSE-不支持, BOOL类型 - public int bTeleUpgrade; // 远程升级,TRUE-支持,FALSE-不支持, BOOL类型 - - public int nHddNum; // 硬盘个数 - public NET_HDD_STATE[] stuHddStates = new NET_HDD_STATE[NET_MAX_DISKNUM]; // 硬盘状态 - - public Pointer pChannleState; // 通道状态,是一个 NET_CHANNLE_STATE 数组, - // CLIENT_AttachMission接口,NET_MISSION_TYPE_SELFCHECK类型,回调函数,内存由SDK申请,SDK释放 - // CLIENT_GetSelfCheckInfo接口,出参,内存由用户申请,用户释放,大小为sizeof(NET_CHANNLE_STATE)*nChannelMax - public int nChannleNum; // 实际上报的通道个数 - public int nChannelMax; // CLIENT_GetSelfCheckInfo接口,pChannleState内存的最大NET_CHANNLE_STATE个数 - public int emConnState; // PAD/DVR连接状态, 参考 NET_PAD_CONNECT_STATE - public int emHomeState; // Home键状态, 参考 NET_HOME_STATE - public byte[] szICCIDExInfo = new byte[NET_COMMON_STRING_256]; // SIM卡号扩展信息,用于字段扩展使用 - public byte by3GState; // 3G/4G状态, 0-未连接,1-连接,2-模块未找到 - public byte byWifiState; // Wifi状态, 0-未连接,1-连接,2-模块未找到 - public byte byGpsState; // Gps状态, 0-未连接,1-连接,2-模块未找到 - public byte byBlackBoxState; // BlackBox状态, 0-未接,1-正常 - public int nCpuUsage; // CPU使用百分比, 单位% - public int nTemperature; // 设备内部温度, 摄氏度 - - public NET_SELFCHECK_INFO() { - this.dwSize = this.size(); - - for(int i = 0; i < NET_MAX_DISKNUM; i++) { - stuHddStates[i] = new NET_HDD_STATE(); - } - } - } - - // 硬盘状态 - public static class NET_HDD_STATE extends Structure - { - public int dwSize; - public int nState; // 硬盘状态,0-正常,1-错误 - public double dbTotalSize; // 硬盘总容量,字节为单位 - public NET_PARTITION_STATE[] stuPartitions = new NET_PARTITION_STATE[NET_MAX_STORAGE_PARTITION_NUM]; // 分区状态 - public int nPartitionNum; // 分区数 - - public NET_HDD_STATE() { - this.dwSize = this.size(); - - for(int i = 0; i < NET_MAX_STORAGE_PARTITION_NUM; i++) { - stuPartitions[i] = new NET_PARTITION_STATE(); - } - } - } - - // 分区状态 - public static class NET_PARTITION_STATE extends Structure - { - public int dwSize; - public int nStatus; // 分区状态,0-正常,1-错误 - public double dbTotalSize; // 分区总容量,字节为单位 - public double dbRemainSize; // 剩余容量,字节为单位 - - public NET_PARTITION_STATE() { - this.dwSize = this.size(); - } - } - - // 扩展网络配置结构体 - public static class NETDEV_NET_CFG_EX extends Structure - { - public int dwSize; - public byte[] sDevName = new byte[NET_MAX_NAME_LEN]; // 设备主机名 - public short wTcpMaxConnectNum; // TCP最大连接数 - public short wTcpPort; // TCP帧听端口 - public short wUdpPort; // UDP侦听端口 - public short wHttpPort; // HTTP端口号 - public short wHttpsPort; // HTTPS端口号 - public short wSslPort; // SSL端口号 - public int nEtherNetNum; // 以太网口数 - public NET_ETHERNET_EX[] stEtherNet = new NET_ETHERNET_EX[NET_MAX_ETHERNET_NUM_EX]; // 以太网口 - public NET_REMOTE_HOST struAlarmHost; // 报警服务器 - public NET_REMOTE_HOST struLogHost; // 日志服务器 - public NET_REMOTE_HOST struSmtpHost; // SMTP服务器 - public NET_REMOTE_HOST struMultiCast; // 多播组 - public NET_REMOTE_HOST struNfs; // NFS服务器 - public NET_REMOTE_HOST struPppoe; // PPPoE服务器 - public byte[] sPppoeIP = new byte[NET_MAX_IPADDR_LEN]; // PPPoE注册返回的IP - public NET_REMOTE_HOST struDdns; // DDNS服务器 - public byte[] sDdnsHostName = new byte[NET_MAX_HOST_NAMELEN]; // DDNS主机名 - public NET_REMOTE_HOST struDns; // DNS服务器 - public NET_MAIL_CFG struMail; // 邮件配置 - public byte[] bReserved = new byte[128]; // 保留字节 - - public NETDEV_NET_CFG_EX() { - this.dwSize = this.size(); - - for(int i = 0; i < NET_MAX_ETHERNET_NUM_EX; i++) { - stEtherNet[i] = new NET_ETHERNET_EX(); - } - } - } - - // 以太网扩展配置 - public static class NET_ETHERNET_EX extends Structure - { - public byte[] sDevIPAddr = new byte[NET_MAX_IPADDR_LEN]; // DVR IP 地址 - public byte[] sDevIPMask = new byte[NET_MAX_IPADDR_LEN]; // DVR IP 地址掩码 - public byte[] sGatewayIP = new byte[NET_MAX_IPADDR_LEN]; // 网关地址 - - /* - * 1:10Mbps 全双工 - * 2:10Mbps 自适应 - * 3:10Mbps 半双工 - * 4:100Mbps 全双工 - * 5:100Mbps 自适应 - * 6:100Mbps 半双工 - * 7:自适应 - */ - // 为了扩展将DWORD拆成四个 - public byte dwNetInterface; // NSP - public byte bTranMedia; // 0:有线,1:无线 - public byte bValid; // 按位表示,第一位:1:有效 0:无效;第二位:0:DHCP关闭 1:DHCP使能;第三位:0:不支持DHCP 1:支持DHCP - public byte bDefaultEth; // 是否作为默认的网卡 1:默认 0:非默认 - public byte[] byMACAddr = new byte[NET_MACADDR_LEN]; // MAC地址,只读 - public byte bMode; // 网卡所处模式, 0:绑定模式, 1:负载均衡模式, 2:多址模式, 3:容错模式 - public byte[] bReserved1 = new byte[3]; // 字节对齐 - public byte[] szEthernetName = new byte[NET_MAX_NAME_LEN]; // 网卡名,只读 - public byte[] bReserved = new byte[12]; // 保留字节 - } - - - // 远程主机配置 - public static class NET_REMOTE_HOST extends Structure - { - public byte byEnable; // 连接使能 - public byte byAssistant; // 目前只对于PPPoE服务器有用,0:在有线网卡拨号;1:在无线网卡上拨号 - public short wHostPort; // 远程主机 端口 - public byte[] sHostIPAddr = new byte[NET_MAX_IPADDR_LEN]; // 远程主机 IP 地址 - public byte[] sHostUser = new byte[NET_MAX_HOST_NAMELEN]; // 远程主机 用户名 - public byte[] sHostPassword = new byte[NET_MAX_HOST_PSWLEN]; // 远程主机 密码 - } - - // 邮件配置 - public static class NET_MAIL_CFG extends Structure - { - public byte[] sMailIPAddr = new byte[NET_MAX_IPADDR_LEN]; // 邮件服务器IP地址 - public short wMailPort; // 邮件服务器端口 - public short wReserved; // 保留 - public byte[] sSenderAddr = new byte[NET_MAX_MAIL_ADDR_LEN]; // 发送地址 - public byte[] sUserName = new byte[NET_MAX_NAME_LEN]; // 用户名 - public byte[] sUserPsw = new byte[NET_MAX_NAME_LEN]; // 用户密码 - public byte[] sDestAddr = new byte[NET_MAX_MAIL_ADDR_LEN]; // 目的地址 - public byte[] sCcAddr = new byte[NET_MAX_MAIL_ADDR_LEN]; // 抄送地址 - public byte[] sBccAddr = new byte[NET_MAX_MAIL_ADDR_LEN]; // 暗抄地址 - public byte[] sSubject = new byte[NET_MAX_MAIL_SUBJECT_LEN]; // 标题 - } - - // 向视频输出口投放视频和图片文件, CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_DELIVERY_FILE 命令参数 - public static class NET_CTRL_DELIVERY_FILE extends Structure - { - public int dwSize; // 结构体大小 - public int nPort; // 视频输出口 - public int emPlayMode; // 播放类型, 参考 EM_VIDEO_PLAY_MODE_TYPE - public NET_TIME stuStartPlayTime; // 开始播放的时间 - public NET_TIME stuStopPlayTime; // 结束播放的时间,emPlayMode为 EM_VIDEO_PLAY_MODE_TYPE_REPEAT 时,此值有效 - public int nFileCount; // 投放的文件个数 - public NET_DELIVERY_FILE_INFO[] stuFileInfo = new NET_DELIVERY_FILE_INFO[MAX_DELIVERY_FILE_NUM]; // 投放的文件信息 - - public NET_CTRL_DELIVERY_FILE() { - this.dwSize = this.size(); - } - } - - // 投放文件信息 - public static class NET_DELIVERY_FILE_INFO extends Structure - { - public int emFileType; // 文件类型, 参考 EM_DELIVERY_FILE_TYPE - public byte[] szFileURL = new byte[DELIVERY_FILE_URL_LEN]; // 文件的资源地址 - public int nImageSustain; // 每张图片停留多长时间,单位秒 (emFileType为 EM_DELIVERY_FILE_TYPE_IMAGE 时此字段有效) - public byte[] byReserved = new byte[1024]; // 保留字节 - } - - // 视频播放模式 - public static class EM_VIDEO_PLAY_MODE_TYPE extends Structure - { - public static final int EM_VIDEO_PLAY_MODE_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_VIDEO_PLAY_MODE_TYPE_ONCE = 1; // 播放一次 - public static final int EM_VIDEO_PLAY_MODE_TYPE_REPEAT = 2; // 循环播放 - } - - // 投放的文件类型 - public static class EM_DELIVERY_FILE_TYPE extends Structure - { - public static final int EM_DELIVERY_FILE_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_DELIVERY_FILE_TYPE_VIDEO = 1; // 视频 - public static final int EM_DELIVERY_FILE_TYPE_IMAGE = 2; // 图片 - } - - // CLIENT_ControlDevice接口的 CTRLTYPE_CTRL_START_PLAYAUDIO 命令参数 - public static class NET_CTRL_START_PLAYAUDIO extends Structure - { - public int dwSize; - public byte[] szAudioPath = new byte[NET_MAX_AUDIO_PATH]; - - public NET_CTRL_START_PLAYAUDIO() { - this.dwSize = this.size(); - } - } - - // 公告记录信息查询条件 - public static class FIND_RECORD_ANNOUNCEMENT_CONDITION extends Structure - { - public int dwSize; - public int bTimeEnable; // 启用时间段查询, BOOL类型 - public NET_TIME stStartTime; // 起始时间 - public NET_TIME stEndTime; // 结束时间 - - public FIND_RECORD_ANNOUNCEMENT_CONDITION() { - this.dwSize = this.size(); - } - } - - //公告记录信息 - public static class NET_RECORD_ANNOUNCEMENT_INFO extends Structure - { - public int dwSize; - public int nRecNo; // 记录集编号,只读 - public NET_TIME stuCreateTime; // 创建时间 - public NET_TIME stuIssueTime; // 公告发布时间 - public byte[] szAnnounceTitle = new byte[NET_COMMON_STRING_64]; // 公告标题 - public byte[] szAnnounceContent = new byte[NET_COMMON_STRING_256];//公告内容 - public byte[] szAnnounceDoor = new byte[NET_COMMON_STRING_16]; //公告要发送的房间号 - public NET_TIME stuExpireTime; //公告过期的时间 - public int emAnnounceState; //公告的状态 , 参考 NET_ANNOUNCE_STATE - public int emAnnounceReadFlag; //公告是否已经浏览, 参考 NET_ANNOUNCE_READFLAG - - public NET_RECORD_ANNOUNCEMENT_INFO() { - this.dwSize = this.size(); - } - } - - //公告的状态 - public static class NET_ANNOUNCE_STATE extends Structure - { - public static final int NET_ANNOUNCE_STATE_UNSENDED = 0; //初始状态(未发送) - public static final int NET_ANNOUNCE_STATE_SENDED = 1; //已经发送 - public static final int NET_ANNOUNCE_STATE_EXPIRED = 2; //已经过期 - public static final int NET_ANNOUNCE_STATE_UNKNOWN = 3; //未知 - } - - //公告是否已经浏览 - public static class NET_ANNOUNCE_READFLAG extends Structure - { - public static final int NET_ANNOUNCE_READFLAG_UNREADED = 0; //未读 - public static final int NET_ANNOUNCE_READFLAG_READED = 1; //已读 - public static final int NET_ANNOUNCE_READFLAG_UNKNOWN = 2; //未知 - } - - // 开始实时监视并指定回调数据格式入参 - public static class NET_IN_REALPLAY_BY_DATA_TYPE extends Structure - { - public int dwSize; // 结构体大小 - public int nChannelID; // 通道编号 - public Pointer hWnd; // 窗口句柄, HWND类型 - public int rType; // 码流类型 ,参考 NET_RealPlayType - public fRealDataCallBackEx cbRealData; // 数据回调函数 - public int emDataType; // 回调的数据类型,参考 EM_REAL_DATA_TYPE - public Pointer dwUser; // 用户数据 - public String szSaveFileName; // 转换后的文件名 - - public NET_IN_REALPLAY_BY_DATA_TYPE() { - this.dwSize = this.size(); - } - } - - // 开始实时监视并指定回调数据格式出参 - public static class NET_OUT_REALPLAY_BY_DATA_TYPE extends Structure - { - public int dwSize; // 结构体大小 - - public NET_OUT_REALPLAY_BY_DATA_TYPE() { - this.dwSize = this.size(); - } - } - - // 实时监视回调数据类型 - public static class EM_REAL_DATA_TYPE extends Structure - { - public static final int EM_REAL_DATA_TYPE_PRIVATE = 0; // 私有码流 - public static final int EM_REAL_DATA_TYPE_GBPS = 1; // 国标PS码流 - public static final int EM_REAL_DATA_TYPE_TS = 2; // TS码流 - public static final int EM_REAL_DATA_TYPE_MP4 = 3; // MP4文件(从回调函数出来的是私有码流数据,参数dwDataType值为0) - public static final int EM_REAL_DATA_TYPE_H264 = 4; // 裸H264码流 - } - - // 开始回放并指定回调数据格式 入参 - public static class NET_IN_PLAYBACK_BY_DATA_TYPE extends Structure - { - public int dwSize; // 结构体大小 - public int nChannelID; // 通道编号 - public NET_TIME stStartTime; // 开始时间 - public NET_TIME stStopTime; // 结束时间 - public Pointer hWnd; // 播放窗格, 可为NULL - public StdCallCallback cbDownLoadPos; // 进度回调 - public Pointer dwPosUser; // 进度回调用户信息 - public StdCallCallback fDownLoadDataCallBack; // 数据回调 - public int emDataType; // 回调的数据类型 - public Pointer dwDataUser; // 数据回调用户信息 - public int nPlayDirection; // 播放方向, 0:正放; 1:倒放; - - public NET_IN_PLAYBACK_BY_DATA_TYPE() { - this.dwSize = this.size(); - } - } - - // 开始回放并指定回调数据格式 出参 - public static class NET_OUT_PLAYBACK_BY_DATA_TYPE extends Structure - { - public int dwSize; // 结构体大小 - - public NET_OUT_PLAYBACK_BY_DATA_TYPE() { - this.dwSize = this.size(); - } - } - - // 开始下载并指定回调数据格式 入参 - public static class NET_IN_DOWNLOAD_BY_DATA_TYPE extends Structure - { - public int dwSize; // 结构体大小 - public int nChannelID; // 通道编号 - public int emRecordType; // 录像类型, 详见EM_QUERY_RECORD_TYPE - public String szSavedFileName; // 下载的文件路径 - public NET_TIME stStartTime; // 开始时间 - public NET_TIME stStopTime; // 结束时间 - public StdCallCallback cbDownLoadPos; // 进度回调 - public Pointer dwPosUser; // 进度回调用户信息 - public StdCallCallback fDownLoadDataCallBack; // 数据回调 - public int emDataType; // 回调的数据类型,详见 EM_REAL_DATA_TYPE - public Pointer dwDataUser; // 数据回调用户信息 - - public NET_IN_DOWNLOAD_BY_DATA_TYPE() { - this.dwSize = this.size(); - } - } - - // 开始下载并指定回调数据格式 出参 - public static class NET_OUT_DOWNLOAD_BY_DATA_TYPE extends Structure - { - public int dwSize; // 结构体大小 - - public NET_OUT_DOWNLOAD_BY_DATA_TYPE() { - this.dwSize = this.size(); - } - } - - // 事件类型 NET_ALARM_HIGH_SPEED (车辆超速报警事件)对应的数据块描述信息 - public static class ALARM_HIGH_SPEED_INFO extends Structure - { - public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; - public NET_TIME_EX stuTime; // 事件发生的时间 - public double dbPTS; // 时间戳(单位是毫秒) - public NET_GPS_STATUS_INFO stGPSStatusInfo; // GPS信息 - public int nSpeedLimit; // 车连限速值km/h - public int nCurSpeed; // 当前车辆速度km/h - public int nMaxSpeed; // 最高速度Km/h - public byte[] byReserved = new byte[508]; // 保留字节 - } - - // GPS状态信息 - public static class NET_GPS_STATUS_INFO extends Structure - { - public NET_TIME revTime; // 定位时间 - public byte[] DvrSerial = new byte[50]; // 设备序列号 - public byte[] byRserved1 = new byte[6]; // 对齐字节 - public double longitude; // 经度(单位是百万分之度,范围0-360度) - public double latidude; // 纬度(单位是百万分之度,范围0-180度) - public double height; // 高度(米) - public double angle; // 方向角(正北方向为原点,顺时针为正) - public double speed; // 速度(单位km/H) - public short starCount; // 定位星数, emDateSource为 EM_DATE_SOURCE_GPS时有效 - public byte[] byRserved2 = new byte[2]; // 对齐字节 - public int antennaState; // 天线状态, 参考 NET_THREE_STATUS_BOOL, emDateSource为 EM_DATE_SOURCE_GPS时有效 - public int orientationState; // 定位状态, 参考 NET_THREE_STATUS_BOOL - public int workStae; // 工作状态(0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算 - // emDateSource为 EM_DATE_SOURCE_GPS时有效 - public int nAlarmCount; // 发生的报警位置个数 - public int[] nAlarmState = new int[128]; // 发生的报警位置,值可能多个, emDateSource为 EM_DATE_SOURCE_GPS时有效 - public byte bOffline; // 0-实时 1-补传 - public byte bSNR; // GPS信噪比,表示GPS信号强度,值越大,信号越强 范围:0~100,0表示不可用 - public byte[] byRserved3 = new byte[2]; // 对齐字节 - public int emDateSource; // 数据来源, 参考 EM_DATE_SOURCE - public byte[] byRserved = new byte[124]; // 保留字节 - } - - //三态布尔类型 - public static class NET_THREE_STATUS_BOOL extends Structure - { - public static final int BOOL_STATUS_FALSE = 0; - public static final int BOOL_STATUS_TRUE = 1; - public static final int BOOL_STATUS_UNKNOWN = 2; //未知 - } - - // 数据来源 - public static class EM_DATE_SOURCE extends Structure - { - public static final int EM_DATE_SOURCE_GPS = 0; // GPS - public static final int EM_DATE_SOURCE_INERTIALNAVIGATION = 1; // 惯性导航数据 - } - - // Gps定位信息 - public static class NET_GPS_LOCATION_INFO extends Structure - { - public GPS_Info stuGpsInfo; // GPS信息 - public ALARM_STATE_INFO stuAlarmStateInfo; // 报警状态信息 - public int nTemperature; // 温度(单位:0.1摄氏度) - public int nHumidity; // 湿度(单位:0.1%) - public int nIdleTime; // 怠速时长(单位:秒) - public int nMileage; // 里程(单位:0.1km) - public int nVoltage; // 设置电压值(单位:0.1伏) - public byte[] byReserved = new byte[1024]; - } - - // 事件类型 NET_ALARM_VIDEO_LOSS (视频丢失事件)对应的数据块描述信息 - public static class ALARM_VIDEO_LOSS_INFO extends Structure - { - public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; - public int nChannelID; // 通道号 - public double dbPTS; // 时间戳(单位是毫秒) - public byte[] byReserved1 = new byte[4]; // 字节对齐 - public NET_TIME_EX stuTime; // 事件发生的时间 - public byte[] byReserved = new byte[512]; // 保留字节 - } - - //报警事件类型 NET_ALARM_BUS_SHARP_ACCELERATE(车辆急加速事件)对应的数据描述信息 - public static class ALARM_BUS_SHARP_ACCELERATE_INFO extends Structure - { - public int dwSize; - public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息 - public NET_TIME_EX stuTime; // 事件发生的时间 - - public ALARM_BUS_SHARP_ACCELERATE_INFO() { - this.dwSize = this.size(); - } - } - - //报警事件类型 NET_ALARM_BUS_SHARP_DECELERATE(车辆急减速事件)对应的数据描述信息 - public static class ALARM_BUS_SHARP_DECELERATE_INFO extends Structure - { - public int dwSize; - public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息 - public NET_TIME_EX stuTime; // 事件发生的时间 - - public ALARM_BUS_SHARP_DECELERATE_INFO() { - this.dwSize = this.size(); - } - } - - // GPS未定位报警(NET_ALARM_GPS_NOT_ALIGNED) - public static class ALARM_GPS_NOT_ALIGNED_INFO extends Structure - { - public int nAction; // 事件动作,0表示脉冲事件,1表示报警开始,2表示报警结束; - public NET_TIME_EX stuTime; // 事件发生的时间 - public byte[] byReserved = new byte[1024]; // 保留字节 - } - - // 前端断网报警信息, 对应 NET_ALARM_FRONTDISCONNECT - public static class ALARM_FRONTDISCONNET_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int nChannelID; // 通道号 - public int nAction; // 0:开始 1:停止 - public NET_TIME stuTime; // 事件发生时间 - public byte[] szIpAddress = new byte[MAX_PATH]; // 前端IPC的IP地址 - - public ALARM_FRONTDISCONNET_INFO() { - this.dwSize = this.size(); - } - } - - // 存储错误报警, 对应 NET_ALARM_STORAGE_FAILURE_EX - public static class ALARM_STORAGE_FAILURE_EX extends Structure - { - public int dwSize; - public int nAction; // 0:开始 1:停止 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] szDevice = new byte[NET_STORAGE_NAME_LEN]; // 存储设备名称 - public byte[] szGroup = new byte[NET_STORAGE_NAME_LEN]; // 存储组名称 - public byte[] szPath = new byte[MAX_PATH]; // 路径 - public int emError; // 错误类型, 参考 EM_STORAGE_ERROR - public int nPhysicNo; // 硬盘所在槽编码, 从1开始 - public NET_TIME_EX stuTime; // 事件发生的时间 - - public ALARM_STORAGE_FAILURE_EX() { - this.dwSize = this.size(); - } - } - - // 存储组不存在事件信息, 对应 NET_ALARM_STORAGE_NOT_EXIST - public static class ALARM_STORAGE_NOT_EXIST_INFO extends Structure - { - public int dwSize; - public int nAction; // 0:开始 1:停止 - public byte[] szGroup = new byte[NET_STORAGE_NAME_LEN]; // 在录像或抓图存储点中设置但不存在的组 - public NET_TIME stuTime; // 事件触发时间 - - public ALARM_STORAGE_NOT_EXIST_INFO() { - this.dwSize = this.size(); - } - } - - // 车辆ACC报警事件, 对应事件类型 NET_ALARM_VEHICLE_ACC - public static class ALARM_VEHICLE_ACC_INFO extends Structure - { - public int dwSize; - public int nACCStatus; // ACC状态, 0:无效, 1:开启, 2:关闭 - public int nAction; // 事件动作, 0:Start, 1:Stop - public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息 - public int nConstantElectricStatus; // 常电状态, 0:未知, 1:连接, 2:断开 - public NET_TIME_EX stuTime; // 事件发生的时间 - public int nTotalMileage; // 总的里程数,单位:米,当nACCStatus为2时,将ntotalMileage进行上报 - public NET_TIME_EX stuStartTime; // nACCStatus为1时刻的时间 - public NET_GPS_STATUS_INFO stuStartGPS; // nACCStatus为1时刻的GPS信息 - - public ALARM_VEHICLE_ACC_INFO() { - this.dwSize = this.size(); - } - } - - // 事件类型 NET_ALARM_VIDEOBLIND(视频遮挡事件)对应的数据块描述信息 - public static class ALARM_VIDEO_BLIND_INFO extends Structure - { - public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; - public int nChannelID; // 通道号 - public double dbPTS; // 时间戳(单位是毫秒) - public NET_TIME_EX stuTime; // 事件发生的时间 - public int nEventID; // 事件ID - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // 紧急事件(对应 NET_URGENCY_ALARM_EX2, 对原有的 NET_URGENCY_ALARM_EX 类型的升级, 指人为触发的紧急事件, 一般处理是联动外部通讯功能请求帮助) - public static class ALARM_URGENCY_ALARM_EX2 extends Structure - { - public int dwSize; - public NET_TIME stuTime; // 事件产生的时间 - public int nID; // 用于标识不同的紧急事件 - - public ALARM_URGENCY_ALARM_EX2() { - this.dwSize = this.size(); - } - } - - // 事件类型 NET_ALARM_DRIVER_NOTCONFIRM (司机未按确认按钮报警事件)对应的数据块描述信息 - public static class ALARM_DRIVER_NOTCONFIRM_INFO extends Structure - { - public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; - public NET_TIME_EX stuTime; // 事件发生的时间 - public double dbPTS; // 时间戳(单位是毫秒) - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // CLIENT_AttachBusState, 订阅Bus状态输入参结构 - public static class NET_IN_BUS_ATTACH extends Structure - { - public int dwSize; - public fBusStateCallBack cbBusState; // 状态回调函数 - public Pointer dwUser; // 用户数据 - - public NET_IN_BUS_ATTACH() { - this.dwSize = this.size(); - } - } - - // CLIENT_AttachBusState, 订阅Bus状态输出参结构 - public static class NET_OUT_BUS_ATTACH extends Structure - { - public int dwSize; - - public NET_OUT_BUS_ATTACH() { - this.dwSize = this.size(); - } - } - - // 事件类型 NET_ALARM_BUS_PASSENGER_CARD_CHECK (乘客刷卡事件)对应的数据描述信息 - public static class ALARM_PASSENGER_CARD_CHECK extends Structure - { - public int bEventConfirm; // 是否需要回复, BOOL类型 - public byte[] szCardNum = new byte[NET_MAX_BUSCARD_NUM]; // 公交卡号 - public NET_GPS_STATUS_INFO stuGPS; // GPS信息 - public NET_TIME_EX UTC; // 刷卡时间 - public int nTime; // UTC整型 - public int emType; // 刷卡类型, 参考 EM_PASSENGER_CARD_CHECK_TYPE - public byte[] szMac = new byte[NET_MAX_POS_MAC_NUM]; // 刷卡机Mac码 (默认"0000",兼容老设备) - public byte[] reserved = new byte[1012]; // 预留 - } - - public static class EM_PASSENGER_CARD_CHECK_TYPE extends Structure - { - public static final int EM_PASSENGER_CARD_CHECK_TYPE_UNKOWN = 0; // 未知 - public static final int EM_PASSENGER_CARD_CHECK_TYPE_SIGNIN = 1; // 签到/上车 - public static final int EM_PASSENGER_CARD_CHECK_TYPE_SIGNOUT = 2; // 签出/下车 - public static final int EM_PASSENGER_CARD_CHECK_TYPE_NORMAL = 3; // 正常刷卡,不区分上下车 - } - - // CLIENT_AttachEventRestore 接口输入参数 - public static class NET_IN_ATTACH_EVENT_RESTORE extends Structure - { - public int dwSize; //结构体大小 - public byte[] szUuid = new byte[MAX_EVENT_RESTORE_UUID]; //客户端惟一标识 - - public NET_IN_ATTACH_EVENT_RESTORE() { - this.dwSize = this.size(); - } - } - - public static class GPS_TEMP_HUMIDITY_INFO extends Structure - { - public double dTemperature; // 温度值(摄氏度),实际值的1000倍,如30.0摄氏度表示为30000 - public double dHumidity; // 湿度值(%),实际值的1000倍,如30.0%表示为30000 - public byte[] bReserved = new byte[128]; // 保留字节 - - public static class ByValue extends GPS_Info implements Structure.ByValue { } - } - - - // 事件类型 NET_ALARM_FACEINFO_COLLECT (人脸信息录入事件)对应的数据块描述信息 - public static class ALARM_FACEINFO_COLLECT_INFO extends Structure - { - - public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束; - public NET_TIME_EX stuTime; // 事件发生的时间 - public double dbPTS; // 时间戳(单位是毫秒) - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // 人脸信息记录操作类型, 接口 CLIENT_FaceInfoOpreate - public static class EM_FACEINFO_OPREATE_TYPE extends Structure - { - public static final int EM_FACEINFO_OPREATE_ADD = 0; // 添加, pInbuf = NET_IN_ADD_FACE_INFO , pOutBuf = NET_OUT_ADD_FACE_INFO - public static final int EM_FACEINFO_OPREATE_GET = 1; // 获取, pInBuf = NET_IN_GET_FACE_INFO , pOutBuf = NET_OUT_GET_FACE_INFO - public static final int EM_FACEINFO_OPREATE_UPDATE = 2; // 更新, pInbuf = NET_IN_UPDATE_FACE_INFO , pOutBuf = NET_OUT_UPDATE_FACE_INFO - public static final int EM_FACEINFO_OPREATE_REMOVE = 3; // 删除, pInbuf = NET_IN_REMOVE_FACE_INFO , pOutBuf = NET_OUT_REMOVE_FACE_INFO - public static final int EM_FACEINFO_OPREATE_CLEAR = 4; // 清除, pInbuf = NET_IN_CLEAR_FACE_INFO, pOutBuf = NET_OUT_CLEAR_FACE_INFO - } - - // 添加人脸记录信息输入参数 - public static class NET_IN_ADD_FACE_INFO extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - public NET_FACE_RECORD_INFO stuFaceInfo; // 人脸数据 - - public NET_IN_ADD_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 人脸信息 - public static class NET_FACE_RECORD_INFO extends Structure - { - public byte[] szUserName = new byte[MAX_USER_NAME_LEN]; // 用户名 - public int nRoom; // 房间个数 - public NET_FACE_ROOMNO[] szRoomNoArr = (NET_FACE_ROOMNO[])new NET_FACE_ROOMNO().toArray(MAX_ROOMNUM_COUNT); // 房间号列表 - public int nFaceData; // 人脸模板数据个数 - public NET_FACE_FACEDATA[] szFaceDataArr = (NET_FACE_FACEDATA[])new NET_FACE_FACEDATA().toArray(MAX_FACE_COUTN);// 人脸模板数据 - public int[] nFaceDataLen = new int[MAX_FACE_COUTN]; // 人脸模版数据大小 - public int nFacePhoto; // 人脸照片个数 - public int[] nFacePhotoLen = new int[MAX_PHOTO_COUNT]; // 每张图片的大小 - public FACE_PHOTO[] pszFacePhotoArr = (FACE_PHOTO[])new FACE_PHOTO().toArray(MAX_PHOTO_COUNT); // 人脸照片数据,大小不超过120K - public byte[] byReserved = new byte[384]; // 保留字节 - } - - public static class NET_FACE_ROOMNO extends Structure { - public byte[] szRoomNo = new byte[NET_COMMON_STRING_16]; // 房间号 - } - - public static class NET_FACE_FACEDATA extends Structure { - public byte[] szFaceData = new byte[MAX_FACE_DATA_LEN]; // 人脸数据 - } - - public static class FACE_PHOTO extends Structure { - public Pointer pszFacePhoto; - } - - - // 添加人脸记录信息输出参数 - public static class NET_OUT_ADD_FACE_INFO extends Structure - { - public int dwSize; - - public NET_OUT_ADD_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 获取人脸记录信息输入参数 - public static class NET_IN_GET_FACE_INFO extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - - public NET_IN_GET_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 获取人脸记录信息输出参数 - public static class NET_OUT_GET_FACE_INFO extends Structure - { - public int dwSize; - public int nFaceData; // 人脸模板数据个数 - public NET_FACE_FACEDATA[] szFaceDataArr = (NET_FACE_FACEDATA[])new NET_FACE_FACEDATA().toArray(MAX_FACE_COUTN); // 人脸模板数据 - - public NET_OUT_GET_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 更新人脸记录信息输入参数 - public static class NET_IN_UPDATE_FACE_INFO extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - public NET_FACE_RECORD_INFO stuFaceInfo; // 人脸数据 - - public NET_IN_UPDATE_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 更新人脸记录信息输出参数 - public static class NET_OUT_UPDATE_FACE_INFO extends Structure - { - public int dwSize; - - public NET_OUT_UPDATE_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 删除人脸记录信息输入参数 - public static class NET_IN_REMOVE_FACE_INFO extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - - public NET_IN_REMOVE_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 删除人脸记录信息输出参数 - public static class NET_OUT_REMOVE_FACE_INFO extends Structure - { - public int dwSize; - - public NET_OUT_REMOVE_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 清除人脸记录信息输入参数 - public static class NET_IN_CLEAR_FACE_INFO extends Structure - { - public int dwSize; - - public NET_IN_CLEAR_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 清除人脸记录信息输出参数 - public static class NET_OUT_CLEAR_FACE_INFO extends Structure - { - public int dwSize; - - public NET_OUT_CLEAR_FACE_INFO() { - this.dwSize = this.size(); - } - } - - // 添加节目信息接口输入参数 - public static class NET_IN_ADD_ONE_PROGRAMME extends Structure - { - public int dwSize; - public NET_PROGRAMME_INFO stuProgrammeInfo; // 节目信息 - - public NET_IN_ADD_ONE_PROGRAMME() { - this.dwSize = this.size(); - } - } - - // 添加节目信息接口输出参数 - public static class NET_OUT_ADD_ONE_PROGRAMME extends Structure - { - public int dwSize; - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID - - public NET_OUT_ADD_ONE_PROGRAMME() { - this.dwSize = this.size(); - } - } - - // 诱导屏节目配置信息 - public static class NET_PROGRAMME_INFO extends Structure - { - public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 节目名称 - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID,添加时无效,用于修改、删除 - public int bEnable; // 节目是否启用,BOOL类型 - public NET_ORDINARY_INFO stuOrdinaryInfo = new NET_ORDINARY_INFO(); // 普通节目信息,此参数需要在库里new对象 - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // 诱导屏普通节目信息 - public static class NET_ORDINARY_INFO extends Structure - { - public int bTempletState; // 节目是否保存为模板, BOOL类型 - public byte[] szDescription = new byte[MAX_COMMON_STRING_128]; // 节目描述信息 - public int nWhnCount; // 诱导屏窗口个数 - public NET_GUIDESCREEN_WINDOW_INFO[] stuWindowsInfo = (NET_GUIDESCREEN_WINDOW_INFO[])new NET_GUIDESCREEN_WINDOW_INFO().toArray(MAX_WINDOWS_COUNT); // 诱导屏窗口信息 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 诱导屏窗口信息 - public static class NET_GUIDESCREEN_WINDOW_INFO extends Structure - { - public byte[] szWindowID = new byte[MAX_COMMON_STRING_64]; // 窗口ID - public int nVolume; // 窗口音量,相对整屏音量的百分比 - public NET_COLOR_RGBA stuColor; // 窗口背景颜色 - public int nDiaphaneity; // 窗口背景透明度0-100 - public int emTourPeriodType; // 窗口轮训类型, 对应 EM_TOURPERIOD_TYPE - public int nTourPeriodTime; // 自定义轮训时间,单位秒, 轮训类型为自定义轮训时有效 - public int bAutoPlay; // 预览自动播放,Video元素有效, BOOL类型 - public int bLoopPlay; // 预览循环播放,Video元素有效, BOOL类型 - public int nElementsCount; // 诱导屏窗口元素个数 - public Pointer pstElementsBuf; // 诱导屏窗口元素信息缓存区, 根据类型对应不同的结构体 - // 填充多个元素信息, 每个元素信息内容为 NET_ELEMENT_COMMON_INFO + 元素类型对应的结构体 - public int nBufLen; // 诱导屏窗口元素信息缓存区大小 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 窗口元素通有信息 - public static class NET_ELEMENT_COMMON_INFO extends Structure - { - public int emElementsType; // 窗口元素类型,对应枚举 EM_ELEMENTS_TYPE - public byte[] byReserved = new byte[128]; // 保留字节 - } - - //窗口轮训周期类型 - public static class EM_TOURPERIOD_TYPE extends Structure - { - public static final int EM_TOURPERIOD_UNKNOWN = 0; // 未知 - public static final int EM_TOURPERIOD_PROGRAMME = 1; // 节目周期 - public static final int EM_TOURPERIOD_PLAN = 2; // 计划周期 - public static final int EM_TOURPERIOD_CUSTOM = 3; // 自定义周期 - } - - // 诱导屏窗口元素类型 - public static class EM_ELEMENTS_TYPE extends Structure - { - public static final int EM_ELEMENTS_UNKNOWN = 0; // 未知 - public static final int EM_ELEMENTS_VIDEO = 1; // 视频元素, 对应 NET_VIDEO_ELEMENT_INFO - public static final int EM_ELEMENTS_PICTURE = 2; // 图片元素, 对应 NET_PICTURE_ELEMENT_INFO - public static final int EM_ELEMENTS_TEXT = 3; // 文本元素, 对应 NET_TEXT_ELEMENT_INFO - public static final int EM_ELEMENTS_PLACEHOLDER = 4; // 占位符元素, 对应 NET_PLACEHOLDER_ELEMENT_INFO - public static final int EM_ELEMENTS_CAPTURE = 5; // 抓拍元素, 对应 NET_CAPTURE_ELEMENT_INFO - } - - // 视频元素信息 - public static class NET_VIDEO_ELEMENT_INFO extends Structure - { - public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 - public int bFillerState; // 是否垫片, BOOL类型 - public byte[] szPath = new byte[MAX_COMMON_STRING_128]; // 文件地址 - public int nPlayCount; // 播放次数 - public int nNote; // 注释信息个数 - public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[])new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 诱导屏窗口元素注释信息 - public static class NET_GUIDESCREEN_NOTE_INFO extends Structure - { - public int bEnable; // 是否有效, BOOL类型 - public NET_GUIDESCREEN_TEXT_INFO stuTextInfo; // 文字注释信息 - public NET_RECT stuRect; // 文字注释的坐标 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 文本信息 - public static class NET_GUIDESCREEN_TEXT_INFO extends Structure - { - public byte[] szContent = new byte[MAX_ELEMENTTEXT_LENGTH]; // 文本内容 - public int nFontSize; // 字体大小 - public NET_COLOR_RGBA stuFontColor; // 字体颜色 - public byte[] szFontStyle = new byte[MAX_COMMON_STRING_32]; // 字体类型 - public double dbLineHeight; // 行高 - public int emHoriAlign; // 水平对齐方向, 对应 EM_HORI_ALIGN_TYPE - public int emVertAlign; // 垂直对齐方向, 对应 EM_VERT_ALIGN_TYPE - public int nPlayTime; // 播放时间, 单位秒 - public int nPlayCount; // 播放次数 - public int nStayTime; // 停留间隔(切入切出的间隔时间)单位:s - public int emEnterStyle; // 切入风格, 对应 EM_PIC_STYLE_TYPE - public int emExitStyle; // 切出风格, 对应 EM_PIC_STYLE_TYPE - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 水平对齐类型 - public static class EM_HORI_ALIGN_TYPE extends Structure - { - public static final int EM_HORI_ALIGN_UNKNOWN = 0; // 未知 - public static final int EM_HORI_ALIGN_LEFT = 1; // 左对齐 - public static final int EM_HORI_ALIGN_CENTER = 2; // 居中 - public static final int EM_HORI_ALIGN_RIGHT = 3; // 右对齐 - } - - // 垂直对齐类型 - public static class EM_VERT_ALIGN_TYPE extends Structure - { - public static final int EM_VERT_ALIGN_UNKNOWN = 0; // 未知 - public static final int EM_VERT_ALIGN_UP = 1; // 上对齐 - public static final int EM_VERT_ALIGN_CENTER = 2; // 居中 - public static final int EM_VERT_ALIGN_DOWN = 3; // 下对齐 - } - - // 切入(切出) 风格 - public static class EM_PIC_STYLE_TYPE extends Structure - { - public static final int EM_PIC_STYLE_UNKNOWN = 0; // 未知 - public static final int EM_PIC_STYLE_DEFAULT = 1; // 默认 - public static final int EM_PIC_STYLE_UP = 2; // 上移 - public static final int EM_PIC_STYLE_DOWN = 3; // 下移 - public static final int EM_PIC_STYLE_LEFT = 4; // 左移 - public static final int EM_PIC_STYLE_RIGHT = 5; // 右移 - } - - // 图片元素信息 - public static class NET_PICTURE_ELEMENT_INFO extends Structure - { - public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 - public int bFillerState; // 是否垫片, BOOL类型 - public byte[] szPath = new byte[MAX_COMMON_STRING_128]; // 图片文件地址 - public int nPlayTime; // 播放时间, 单位秒 - public int nPlayCount; // 播放次数 - public int nDiaphaneity; // 透明度, 0-100 - public int nStayTime; // 停留时间, 单位秒 - public int emEnterStyle; // 切入风格, 对应 EM_PIC_STYLE_TYPE - public int emExitStyle; // 切出风格, 对应 EM_PIC_STYLE_TYPE - public int nNote; // 注释信息个数 - public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[])new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 诱导屏窗口文本元素信息 - public static class NET_TEXT_ELEMENT_INFO extends Structure - { - public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 - public int bFillerState; // 是否垫片, 对应 BOOL类型 - public NET_GUIDESCREEN_TEXT_INFO stuElementsText; // 文本元素信息 - public int nNote; // 注释信息个数 - public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[])new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 诱导屏窗口占位符元素信息 - public static class NET_PLACEHOLDER_ELEMENT_INFO extends Structure - { - public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 - public int bFillerState; // 是否垫片, BOOL类型 - public int nNote; // 注释信息个数 - public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[])new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 抓拍元素信息 - public static class NET_CAPTURE_ELEMENT_INFO extends Structure - { - - public byte[] szName = new byte[MAX_COMMON_STRING_64]; // 素材自定义名称 - public int bFillerState; // 是否垫片, BOOL类型 - public byte[] szUserName = new byte[NET_USER_NAME_LEN_EX]; // 用户名 - public byte[] szPassWord = new byte[NET_USER_PSW_LEN_EX]; // 密码 - public byte[] szIP = new byte[NET_MAX_IPADDR_LEN_EX]; // IP地址 - public int nPort; // 端口号 - public int nChannel; // 通道号 - public int emCaptureType; // 抓拍类型, 对应 EM_CAPTURE_TYPE - public int nPlayTime; // 播放时间, 单位秒 - public int nNote; // 注释信息个数 - public NET_GUIDESCREEN_NOTE_INFO[] stuNoteInfo = (NET_GUIDESCREEN_NOTE_INFO[])new NET_GUIDESCREEN_NOTE_INFO().toArray(MAX_NOTE_COUNT); // 注释信息 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 抓拍类型 - public static class EM_CAPTURE_TYPE extends Structure - { - public static final int EM_CAPTURE_UNKNOWN = 0; // 未知 - public static final int EM_CAPTURE_VIDEO = 1; // 视频 - public static final int EM_CAPTURE_PICTURE = 2; // 图片 - } - - // 设置诱导屏屏幕配置信息输入参数 - public static class NET_IN_SET_GUIDESCREEN_CFG extends Structure - { - public int dwSize; - public int nScreenCount; // 诱导屏属性配置信息个数, 值由用户指定 - - // 诱导屏属性配置信息, 内存由用户维护, NET_GUIDESCREEN_ATTRIBUTE_INFO - // 大小为nScreenCount 个 NET_GUIDESCREEN_ATTRIBUTE_INFO - public Pointer pstGuideScreenCfg; - - public NET_IN_SET_GUIDESCREEN_CFG() { - this.dwSize = this.size(); - } - } - - // 设置诱导屏屏幕配置信息输出参数 - public static class NET_OUT_SET_GUIDESCREEN_CFG extends Structure - { - public int dwSize; - - public NET_OUT_SET_GUIDESCREEN_CFG() { - this.dwSize = this.size(); - } - } - - // 诱导屏属性配置信息 - public static class NET_GUIDESCREEN_ATTRIBUTE_INFO extends Structure - { - public int dwSize; - public byte[] szScreenID = new byte[MAX_COMMON_STRING_64]; // 屏幕ID - public int emStatus; // 显示屏开关状态 对应 EM_SCREEN_STATUS_TYPE - public int bIsForeverOpen; // 是否永久开屏, 0:开屏 1:关屏 - public int nScreenTime; // 开关屏时间个数 - public NET_SCREEN_TIME_INFO[] stuScreenTime = (NET_SCREEN_TIME_INFO[])new NET_SCREEN_TIME_INFO().toArray(MAX_SCREENTIME_COUNT); // 开关屏时间数组 - public int nBright; // 显示屏亮度, 1-100 - public int nContrast; // 显示屏对比度, 1-100 - public int nSaturation; // 显示屏饱和度, 1-100 - public int nVolume; // 屏幕整体音量 - public int nWidth; // 宽度 - public int nHeight; // 高度 - public int nWindowsCount; // 窗口个数 - public NET_GUIDESCREEN_WINDOW_RECT_INFO[] stuWindows = (NET_GUIDESCREEN_WINDOW_RECT_INFO[])new NET_GUIDESCREEN_WINDOW_RECT_INFO().toArray(MAX_WINDOWS_COUNT); // 窗口信息 - public NET_GUIDESCREEN_AUTO_BRIGHT stuAutoBright; // 诱导屏自动调节屏幕亮度信息 - public byte[] byReserved = new byte[512]; // 保留字节 - - public NET_GUIDESCREEN_ATTRIBUTE_INFO() { - this.dwSize = this.size(); - } - } - - // 诱导屏自动调节屏幕亮度信息 - public static class NET_GUIDESCREEN_AUTO_BRIGHT extends Structure - { - public int bEnable; // 是否使能自动亮度配置 - public int nLightBright; // 白天的亮度 - public int nDarkBright; // 夜间的亮度 - public NET_SUN_RISE_SET_TIME[] stuSunTime = (NET_SUN_RISE_SET_TIME[])new NET_SUN_RISE_SET_TIME().toArray(MAX_SUNTIME_COUNT); // 日出日落时间 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 诱导屏配置日出日落时间 - public static class NET_SUN_RISE_SET_TIME extends Structure - { - public int nSunrise; // 日出时间, 默认上午6 时 - public int nSunset; // 日落时间, 默认下午18 时 - public byte[] byReserved = new byte[32]; // 保留字节 - } - - //开关屏时间信息 - public static class NET_SCREEN_TIME_INFO extends Structure - { - public int bEnable; // 是否启用, BOOL类型 - public int emDateType; // 开关屏日期类型 对应 EM_SCREEN_DATE_TYPE - public int nDateCount; // 开关屏日期个数' - public int[] nPlayDates = new int[MAX_PLAYDATES_COUNT]; // 开关屏日期 - public NET_PROGRAMME_TIME_INFO stuOpenTime; // 开屏时间 - public NET_PROGRAMME_TIME_INFO stuCloseTime; // 关屏时间 - public byte[] byReserved = new byte[128]; // 保留 - } - - // 诱导屏窗口坐标信息 - public static class NET_GUIDESCREEN_WINDOW_RECT_INFO extends Structure - { - public byte[] szWindowID = new byte[MAX_COMMON_STRING_64]; // 窗口ID - public NET_RECT stuRect; // 窗口坐标 - public int nWindowBright; // 诱导屏窗口亮度,单独配置某个子屏的亮度,填0时以整屏亮度为准 - public byte[] byReserved = new byte[132]; // 保留 - } - - // 节目时间信息 - public static class NET_PROGRAMME_TIME_INFO extends Structure - { - public int dwHour; // 时 - public int dwMinute; // 分 - public int dwSecond; // 秒 - - public String toString() { - return dwHour + ":" + dwMinute + ":" + dwSecond; - } - } - - // 显示屏开关状态(枚举转结构体) - public static class EM_SCREEN_STATUS_TYPE extends Structure - { - public static int EM_SCREEN_STATUS_UNKNOWN = 0; // 未知 - public static int EM_SCREEN_STATUS_ON = 1; // 开 - public static int EM_SCREEN_STATUS_OFF = 2; // 关 - } - - // 日期类型枚(枚举转结构体) - public static class EM_SCREEN_DATE_TYPE extends Structure - { - public static int EM_SCREEN_DATE_UNKNOWN = 0; // 未知 - public static int EM_SCREEN_DATE_MONTH = 1; // 每月 - public static int EM_SCREEN_DATE_WEEK = 2; // 每周 - public static int EM_SCREEN_DATE_DAY = 3; // 每日 - } - - // 增加即时节目计划输入参数 - public static class NET_IN_ADD_IMME_PROGRAMMEPLAN extends Structure - { - public int dwSize; - public NET_IMMEDIATELY_PLAN_INFO stuImmePlan; // 即时节目计划信息 - - public NET_IN_ADD_IMME_PROGRAMMEPLAN() { - this.dwSize = this.size(); - } - } - - // 增加节目计划输出参数 - public static class NET_OUT_ADD_PROGRAMMEPLAN extends Structure - { - public int dwSize; - public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID char[] - - public NET_OUT_ADD_PROGRAMMEPLAN() { - this.dwSize = this.size(); - } - } - - // 即时节目计划配置信息 - public static class NET_IMMEDIATELY_PLAN_INFO extends Structure - { - public byte[] szPlanName = new byte[MAX_COMMON_STRING_64]; // 节目计划名称 - public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID ,添加时无效,用于修改、删除 - public byte[] szSplitScreenID = new byte[MAX_COMMON_STRING_64]; // 分屏ID - public int bEnable; // 计划是否启用 , BOOL类型 - public int nPlayTime; // 播放时长, 单位 : 分钟 - public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 即时发布的节目名称 - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 即时发布的节目ID - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // 修改节目信息接口输入参数 - public static class NET_IN_MODIFY_ONE_PROGRAMME extends Structure - { - public int dwSize; - public NET_PROGRAMME_INFO stuProgrammeInfo; // 节目信息 - - public NET_IN_MODIFY_ONE_PROGRAMME() { - this.dwSize = this.size(); - } - } - - - // 修改节目信息接口输出参数 - public static class NET_OUT_MODIFY_ONE_PROGRAMME extends Structure - { - public int dwSize; - - public NET_OUT_MODIFY_ONE_PROGRAMME() { - this.dwSize = this.size(); - } - } - - // 批量删除节目信息接口输入参数 - public static class NET_IN_DEL_PROGRAMMES extends Structure - { - public int dwSize; - public int nProgrammeID; // 节目ID个数 - public PRO_GRAMME_ID[] szProGrammeIdListArr = (PRO_GRAMME_ID[])new PRO_GRAMME_ID().toArray(MAX_PROGRAMMES_COUNT); // 需要删除的节目ID列表 - - public NET_IN_DEL_PROGRAMMES() { - this.dwSize = this.size(); - } - } - - // 需要删除的节目ID - public static class PRO_GRAMME_ID extends Structure - { - public byte[] szProGrammeIdList = new byte[MAX_COMMON_STRING_64]; // 需要删除的节目ID - } - - // 批量删除节目信息接口输出参数 - public static class NET_OUT_DEL_PROGRAMMES extends Structure - { - public int dwSize; - - public NET_OUT_DEL_PROGRAMMES() { - this.dwSize = this.size(); - } - } - - // 修改即时节目计划输入参数 - public static class NET_IN_MODIFY_IMME_PROGRAMMEPLAN extends Structure - { - public int dwSize; - public NET_IMMEDIATELY_PLAN_INFO stuImmePlan; // 即时节目计划信息 - - public NET_IN_MODIFY_IMME_PROGRAMMEPLAN() { - this.dwSize = this.size(); - } - } - - // 修改即时节目计划输出参数 - public static class NET_OUT_MODIFY_IMME_PROGRAMMEPLAN extends Structure - { - public int dwSize; - - public NET_OUT_MODIFY_IMME_PROGRAMMEPLAN() { - this.dwSize = this.size(); - } - } - - // 增加定时节目计划输入参数 - public static class NET_IN_ADD_TIMER_PROGRAMMEPLAN extends Structure - { - public int dwSize; - public NET_TIMER_PLAN_INFO stuTimerPlan; // 定时节目计划信息 - - public NET_IN_ADD_TIMER_PROGRAMMEPLAN() { - this.dwSize = this.size(); - } - } - - // 定时节目计划配置信息 - public static class NET_TIMER_PLAN_INFO extends Structure - { - public byte[] szPlanName = new byte[MAX_COMMON_STRING_64]; // 节目计划名称 - public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID,添加时无效,用于修改、删除 - public byte[] szSplitScreenID = new byte[MAX_COMMON_STRING_64]; // 分屏ID - public int emDataType; // 节目计划日期类型, 对应 EM_TIMERPLAN_DATE_TYPE - public int nDataCount; // 节目计划日期个数 - public int[] nPlayDates = new int[MAX_PLAYDATES_COUNT]; // 节目播放日期列表 - public NET_PROGRAMME_DATA stuSatrtDate = new NET_PROGRAMME_DATA(); // 节目开始日期 - public NET_PROGRAMME_DATA stuEndDate = new NET_PROGRAMME_DATA(); // 节目结束日期 - public int emReviewState; // 审核状态, 对应 EM_REVIES_STATE - public byte[] szReviewOpinion = new byte[MAX_COMMON_STRING_64]; // 审核意见 - public int bOverdue; // 计划是否过期, BOOL类型 - public int nProgrammes; // 节目个数 - public NET_PROGRAMME_OF_PLAN[] stuProgrammes = (NET_PROGRAMME_OF_PLAN[])new NET_PROGRAMME_OF_PLAN().toArray(MAX_PROGRAMMES_COUNT); // 节目组信息 - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // 定时计划日期类型 - public static class EM_TIMERPLAN_DATE_TYPE extends Structure - { - public static final int EM_TIMERPLAN_DATE_UNKNOWN = 0; // 未知 - public static final int EM_TIMERPLAN_DATE_MONTH = 1; // 每月 - public static final int EM_TIMERPLAN_DATE_WEEK = 2; // 每周 - public static final int EM_TIMERPLAN_DATE_DAY = 3; // 每日 - public static final int EM_TIMERPLAN_DATE_CUSTOM = 4; // 自定义 - } - - // 节目日期格式 - public static class NET_PROGRAMME_DATA extends Structure - { - public int dwYear; // 年 - public int dwMonth; // 月 - public int dwDay; // 日 - - public String toString() { - return dwYear + "-" + dwMonth + "-" + dwDay; - } - } - - // 节目计划中的节目信息 - public static class NET_PROGRAMME_OF_PLAN extends Structure - { - public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 节目名称 - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID - public int bIsBgProgramme; // 是否背景节目, BOOL类型 - public NET_PROGRAMME_TIME_INFO stuSatrtTime; // 节目开始时间 - public NET_PROGRAMME_TIME_INFO stuEndTime; // 节目结束时间 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 审核状态 - public static class EM_REVIES_STATE extends Structure - { - public static final int EM_REVIES_UNKNOWN = 0; // 未知 - public static final int EM_REVIES_PASS = 1; // 通过 - public static final int EM_REVIES_NOTPASS = 2; // 不通过 - } - - // 修改定时节目计划输入参数 - public static class NET_IN_MODIFY_TIMER_PROGRAMMEPLAN extends Structure - { - public int dwSize; - public NET_TIMER_PLAN_INFO stuTimerPlan; // 定时节目计划信息 - - public NET_IN_MODIFY_TIMER_PROGRAMMEPLAN() { - this.dwSize = this.size(); - } - } - - // 修改定时节目计划输出参数 - public static class NET_OUT_MODIFY_TIMER_PROGRAMMEPLAN extends Structure - { - public int dwSize; - - public NET_OUT_MODIFY_TIMER_PROGRAMMEPLAN() { - this.dwSize = this.size(); - } - } - - // 删除多个节目计划输入参数 - public static class NET_IN_DEL_PROGRAMMEPLANS extends Structure - { - public int dwSize; - public int nPlanID; // 节目计划ID个数 - public PLAN_ID[] szPlanIDArr = (PLAN_ID[])new PLAN_ID().toArray(MAX_PROGRAMMES_COUNT); // 节目计划ID - - public NET_IN_DEL_PROGRAMMEPLANS() { - this.dwSize = this.size(); - } - } - - // 节目计划ID - public static class PLAN_ID extends Structure - { - public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID - } - - // 删除多个节目计划输出参数 - public static class NET_OUT_DEL_PROGRAMMEPLANS extends Structure - { - public int dwSize; - - public NET_OUT_DEL_PROGRAMMEPLANS() { - this.dwSize = this.size(); - } - } - - // 通过诱导屏ID 获取诱导屏配置信息输入参数 - public static class NET_IN_GET_GUIDESCREEN_CFG_BYID extends Structure - { - public int dwSize; - public byte[] szScreenID = new byte[MAX_COMMON_STRING_64]; // 屏ID - - public NET_IN_GET_GUIDESCREEN_CFG_BYID() { - this.dwSize = this.size(); - } - } - - // 通过诱导屏ID 获取诱导屏配置信息输出参数 - public static class NET_OUT_GET_GUIDESCREEN_CFG_BYID extends Structure - { - public int dwSize; - public NET_GUIDESCREEN_ATTRIBUTE_INFO stuGuideScreenCfg; // 诱导屏属性信息 - - public NET_OUT_GET_GUIDESCREEN_CFG_BYID() { - this.dwSize = this.size(); - } - } - - // 获取所有诱导屏配置信息输入参数 - public static class NET_IN_GET_ALL_GUIDESCREEN_CFG extends Structure - { - public int dwSize; - - public NET_IN_GET_ALL_GUIDESCREEN_CFG() { - this.dwSize = this.size(); - } - } - - // 获取所有诱导屏配置信息输出参数 - public static class NET_OUT_GET_ALL_GUIDESCREEN_CFG extends Structure - { - public int dwSize; - public int nMaxScreen; // 最大诱导屏个数, 值由用户指定 - public int nRetScreen; // 实际返回的诱导屏个数 - public Pointer pstGuideScreenCfg; // 用于存放获取到的诱导屏属性信息, 内存由用户维护 - // 大小为nMaxScreen 个 NET_GUIDESCREEN_ATTRIBUTE_INFO - // 对应 NET_GUIDESCREEN_ATTRIBUTE_INFO[] - public NET_OUT_GET_ALL_GUIDESCREEN_CFG() { - this.dwSize = this.size(); - } - } - - // 通过节目ID 获取节目信息输入参数 - public static class NET_IN_GET_PROGRAMME_BYID extends Structure - { - public int dwSize; - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID - - public NET_IN_GET_PROGRAMME_BYID() { - this.dwSize = this.size(); - } - } - - // 通过节目ID 获取节目信息输出参数 - public static class NET_OUT_GET_PROGRAMME_BYID extends Structure - { - public int dwSize; - public NET_PROGRAMME_INFO stuProgrammeInfo; // 节目配置信息 - - public NET_OUT_GET_PROGRAMME_BYID() { - this.dwSize = this.size(); - } - } - - // 获取所有节目信息输入参数 - public static class NET_IN_GET_ALL_PROGRAMMES extends Structure - { - public int dwSize; - - public NET_IN_GET_ALL_PROGRAMMES() { - this.dwSize = this.size(); - } - } - - // 获取所有节目信息输出参数 - public static class NET_OUT_GET_ALL_PROGRAMMES extends Structure - { - public int dwSize; - public int nMaxCnt; // pstProgrammeInfo最大NET_PROGRAMME_INFO 个数 - public int nRetCnt; // pstProgrammeInfo实际返回的 NET_PROGRAMME_INFO 个数 - public Pointer pstProgrammeInfo; // 节目配置信息, 内存由用户维护,对应 NET_PROGRAMME_INFO[] - // 大小为 nMaxCnt 个 NET_PROGRAMME_INFO - - public NET_OUT_GET_ALL_PROGRAMMES() { - this.dwSize = this.size(); - } - } - - // 获取所有节目的简要信息输入参数 - public static class NET_IN_GET_ALL_BRIEFLYPROGRAMMES extends Structure - { - public int dwSize; - - public NET_IN_GET_ALL_BRIEFLYPROGRAMMES() { - this.dwSize = this.size(); - } - } - - // 获取所有节目的简要信息输出参数 - public static class NET_OUT_GET_ALL_BRIEFLYPROGRAMMES extends Structure - { - public int dwSize; - public int nRetCnt; // 实际返回的个数 - public NET_BRIEFLY_PROGRAMME_INFO[] stuBriProgrammes = (NET_BRIEFLY_PROGRAMME_INFO[])new NET_BRIEFLY_PROGRAMME_INFO().toArray(MAX_PROGRAMMES_COUNT); // 节目简要信息 - - public NET_OUT_GET_ALL_BRIEFLYPROGRAMMES() { - this.dwSize = this.size(); - } - } - - // 节目简要信息 - public static class NET_BRIEFLY_PROGRAMME_INFO extends Structure - { - public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 节目名称 - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID - public int emProgrammeType; // 简要节目信息类型,对应枚举 EM_BRIEFLYPROGRAM_TYPE - public int bEnable; // 节目是否启用, BOOL类型 - public int bTempletState; // 节目是否保存为模板, BOOL类型 - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // 简要节目信息类型 - public static class EM_BRIEFLYPROGRAM_TYPE extends Structure - { - public static final int EM_BRIEFLYPROGRAM_UNKNOWN = 0; // 未知 - public static final int EM_BRIEFLYPROGRAM_BAR = 1; // 广告节目 - public static final int EM_BRIEFLYPROGRAM_ORDINARY = 2; // 普通节目 - } - - // 获取所有节目计划输入参数 - public static class NET_IN_GET_ALL_PROGRAMMEPLANS extends Structure - { - public int dwSize; - - public NET_IN_GET_ALL_PROGRAMMEPLANS() { - this.dwSize = this.size(); - } - } - - // 获取所有节目计划输出参数 - public static class NET_OUT_GET_ALL_PROGRAMMEPLANS extends Structure - { - public int dwSize; - public int nMaxPlanCnt; // 即时节目和定时节目计划最大个数, 由用户指定 - public int nRetImmCnt; // 实际返回的即时节目计划个数 - public Pointer pstImmePlan; // 即时节目计划信息, 对应 NET_IMMEDIATELY_PLAN_INFO[], - // 大小 nMaxPlanCnt 个 NET_IMMEDIATELY_PLAN_INFO - public int nRetTimerCnt; // 实际返回的定时节目计划个数 - public Pointer pstTimerPlan; // 定时节目计划信息,对应 NET_TIMER_PLAN_INFO[], - // 大小 nMaxPlanCnt 个 NET_TIMER_PLAN_INFO - - public NET_OUT_GET_ALL_PROGRAMMEPLANS() { - this.dwSize = this.size(); - } - } - - // 即时计划与定时计划信息数组 - public static class NET_PROGRAMME_PLANS_INFO extends Structure { - public NET_IMMEDIATELY_PLAN_INFO[] szImmePlan; // 即时节目计划信息数组 - public NET_TIMER_PLAN_INFO[] szTimerPlan; // 定时节目计划信息数组 - - public NET_PROGRAMME_PLANS_INFO() {} - - public NET_PROGRAMME_PLANS_INFO(int maxPlanCount) { - szImmePlan = new NET_IMMEDIATELY_PLAN_INFO[maxPlanCount]; - szTimerPlan = new NET_TIMER_PLAN_INFO[maxPlanCount]; - for(int i = 0; i < maxPlanCount; i++) { - szImmePlan[i] = new NET_IMMEDIATELY_PLAN_INFO(); - szTimerPlan[i] = new NET_TIMER_PLAN_INFO(); - } - } - } - - // 通过节目计划ID 获取节目计划输入参数 - public static class NET_IN_GET_PROGRAMMEPLAN_BYID extends Structure - { - public int dwSize; - public byte[] szPlanID = new byte[MAX_COMMON_STRING_64]; // 节目计划ID - - public NET_IN_GET_PROGRAMMEPLAN_BYID() { - this.dwSize = this.size(); - } - } - - // 通过节目计划ID 获取节目计划输出参数 - public static class NET_OUT_GET_PROGRAMMEPLAN_BYID extends Structure - { - public int dwSize; - public int emPlanType; // 节目计划类型, 对应 EM_PROGRAMMEPLAN_TYPE - public NET_IMMEDIATELY_PLAN_INFO stuImmePlan; // 即时节目计划信息, emPlanType 为 EM_PROGRAMMEPLAN_IMME 时有效 - public NET_TIMER_PLAN_INFO stuTimerPlan; // 定时节目计划信息, emPlanType 为 EM_PROGRAMMEPLAN_TIMER 时有效 - - public NET_OUT_GET_PROGRAMMEPLAN_BYID() { - this.dwSize = this.size(); - } - } - - // 节目计划类型 - public static class EM_PROGRAMMEPLAN_TYPE extends Structure - { - public static final int EM_PROGRAMMEPLAN_UNKNOWN = 0; // 未知 - public static final int EM_PROGRAMMEPLAN_IMME = 1; // 即时计划 - public static final int EM_PROGRAMMEPLAN_TIMER = 2; // 定时计划 - } - - //设置光带状态信息输入参数 - public static class NET_IN_SET_GD_STATUS extends Structure - { - public int dwSize; - public byte[] szScreenID = new byte[MAX_COMMON_STRING_64]; // 分屏ID, 即窗口ID - public int nGDNum; // 光带总数 - public int[] emStatus = new int[MAX_GD_COUNT]; // 光带信息, 对应 EM_GD_COLOR_TYPE - - public NET_IN_SET_GD_STATUS() { - this.dwSize = this.size(); - } - } - - //设置光带状态信息输出参数 - public static class NET_OUT_SET_GD_STATUS extends Structure - { - public int dwSize; - - public NET_OUT_SET_GD_STATUS() { - this.dwSize = this.size(); - } - } - - // 光带颜色类型 - public static class EM_GD_COLOR_TYPE extends Structure - { - public static final int EM_GD_COLOR_RED = 0; // 红色 - public static final int EM_GD_COLOR_GREEN = 1; // 绿色 - public static final int EM_GD_COLOR_YELLOW = 2; // 黄色 - } - - - // 用户信息表 - public static class USER_MANAGE_INFO_EX extends Structure - { - public int dwRightNum; // 权限信息 - public OPR_RIGHT_EX[] rightList = (OPR_RIGHT_EX[])new OPR_RIGHT_EX().toArray(NET_MAX_RIGHT_NUM); - public int dwGroupNum; // 用户组信息 - public USER_GROUP_INFO_EX[] groupList = (USER_GROUP_INFO_EX[])new USER_GROUP_INFO_EX().toArray(NET_MAX_GROUP_NUM); - public int dwUserNum; // 用户信息 - public USER_INFO_EX[] userList = (USER_INFO_EX[])new USER_INFO_EX().toArray(NET_MAX_USER_NUM); - public int dwFouctionMask; // 掩码;0x00000001 - 支持用户复用,0x00000002 - 密码修改需要校验 - public byte byNameMaxLength; // 支持的用户名最大长度 - public byte byPSWMaxLength; // 支持的密码最大长度 - public byte[] byReserve = new byte[254]; - } - - // 权限信息 - public static class OPR_RIGHT_EX extends Structure - { - public int dwID; - public byte[] name = new byte[NET_RIGHT_NAME_LENGTH]; - public byte[] memo = new byte[NET_MEMO_LENGTH]; - } - - // 用户组信息 - public static class USER_GROUP_INFO_EX extends Structure - { - public int dwID; - public byte[] name = new byte[NET_USER_NAME_LENGTH_EX]; - public int dwRightNum; - public int[] rights = new int[NET_MAX_RIGHT_NUM]; - public byte[] memo = new byte[NET_MEMO_LENGTH]; - } - - // 用户信息 - public static class USER_INFO_EX extends Structure - { - public int dwID; - public int dwGroupID; - public byte[] name = new byte[NET_USER_NAME_LENGTH_EX]; - public byte[] passWord = new byte[NET_USER_PSW_LENGTH_EX]; - public int dwRightNum; - public int[] rights = new int[NET_MAX_RIGHT_NUM]; - public byte[] memo = new byte[NET_MEMO_LENGTH]; - public int dwFouctionMask; // 掩码,0x00000001 - 支持用户复用 - public byte[] byReserve = new byte[32]; - } - - // CLIENT_DownloadRemoteFile 接口输入参数(文件下载) - public static class NET_IN_DOWNLOAD_REMOTE_FILE extends Structure - { - public int dwSize; - public Pointer pszFileName; // 需要下载的文件名 - public Pointer pszFileDst; // 存放文件路径 - - public NET_IN_DOWNLOAD_REMOTE_FILE() { - this.dwSize = this.size(); - } - } - - // CLIENT_DownloadRemoteFile 接口输出参数(文件下载) - public static class NET_OUT_DOWNLOAD_REMOTE_FILE extends Structure - { - public int dwSize; - - public NET_OUT_DOWNLOAD_REMOTE_FILE() { - this.dwSize = this.size(); - } - } - - // 车牌对比, 对应事件 EVENT_IVS_VEHICLE_RECOGNITION - public static class DEV_EVENT_VEHICLE_RECOGNITION_INFO extends Structure - { - public byte[] szName = new byte[128]; // 事件名称 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public int nVehicleAction; // 车辆动作 0-未知,1-在检测区域内,2-离开检测区域 - - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_MSG_OBJECT stuVehicle; // 车身信息 - - public NET_SEAT_INFO stuMainSeatInfo; // 主驾驶位信息 - public NET_SEAT_INFO stuSlaveSeatInfo; // 副驾驶位信息 - public int nVehicleAttachNum; // 车上附件数量 - public NET_VEHICLE_ATTACH[] stuVehicleAttach = (NET_VEHICLE_ATTACH[])new NET_VEHICLE_ATTACH().toArray(8); // 车上附件数据 - public byte[] szCountry = new byte[32]; // 国家,2字节,符合ISO3166规范 - - public int nCarCandidateNum; // 候选车辆数量 - public NET_CAR_CANDIDATE_INFO[] stuCarCandidate = (NET_CAR_CANDIDATE_INFO[])new NET_CAR_CANDIDATE_INFO().toArray(MAX_CAR_CANDIDATE_NUM); // 候选车辆数据 - - public EVENT_COMM_INFO stCommInfo; // 公共信息 - public int nChannel; // 通道号 - public byte[] bReserved = new byte[1024]; - } - - public static class NET_CAR_CANDIDATE_INFO extends Structure - { - public NET_VEHICLE_INFO stuVehicleInfo; // 车辆信息 - public int nDifferentAttributresNum; // 和数据库不相符的属性数目 - public int[] nDifferentAttributres = new int[16]; // 和数据库不相符的属性集合,元素值取值意义:0-未知 1-车牌属地 2-车标 3-车型 4-车色 5-车牌颜色 - - public byte[] bReserved = new byte[512]; - } - - public static class NET_VEHICLE_INFO extends Structure - { - public int nUID; // 车辆唯一标识符,由服务端生成用于程序中表示惟一 - public byte[] szGroupID = new byte[64]; // 车辆所属组ID - public byte[] szGroupName = new byte[128]; // 车辆所属组名 - public byte[] szPlateNumber = new byte[64]; // 车牌号码 - public byte[] szPlateCountry = new byte[4]; // 车辆所在国家,2字节,符合ISO3166规范 - - public int nPlateType; // 车牌类型 - // 01 大型汽车号牌 黄底黑字 - // 02 小型汽车号牌 蓝底白字 - // 03 使馆汽车号牌 黑底白字、红“使”字 - // 04 领馆汽车号牌 黑底白字、红“领”字 - // 05 境外汽车号牌 黑底白、红字 - // 06 外籍汽车号牌 黑底白字 - // 13 农用运输车号牌 黄底黑字黑框线 - // 15 挂车号牌 黄底黑字黑框线 - // 16 教练汽车号牌 黄底黑字黑框线 - // 18 试验汽车号牌 - // 20 临时入境汽车号牌 白底红字黑“临时入境” - // 22 临时行驶车号牌 白底黑字黑线框 - // 23 公安警用汽车号牌 - - public int nVehicleType; // 车型(轿车、卡车等) - // 001 巡逻车 - // 002 交警车辆 - // 003 消防车 - // 004 单兵 - // 005 其他警车 - // 006 其他设备 - // 020 政府车辆 - // 031 校车 - // 032 运钞车 - // 033 客运车辆 - // 034 公交车 - // 035 出租车 - // 036 危险品车辆 - - public int nBrand; // 车辆车标,需要通过映射表得到真正的车标.同卡口事件的CarLogoIndex - public int nCarSeries; // 车辆子品牌,需要通过映射表得到真正的子品牌,同卡口事件的SubBrand - public int nCarSeriesModelYearIndex; // 车辆品牌年款,需要通过映射表得到真正的年款,同卡口事件的BrandYear 车头年款序号范围1~999;车尾年款序号范围1001~1999;0表示未知;1000预留。 - public NET_COLOR_RGBA stuVehicleColor; // 车色 第一个元素表示红色分量值; 第二个元素表示绿色分量值; 第三个元素表示蓝色分量值; 第四个元素表示透明度分量(无意义) - public NET_COLOR_RGBA stuPlateColor; // 车牌颜色,规则同车色 - public byte[] szOwnerName = new byte[64]; // 车主名称 - public int nSex; // 车主性别 - public int nCertificateType; // 车主证件类型 0-未知 1-身份证 2-护照 3-军官证 - public byte[] szPersonID = new byte[32]; // 人员身份证号码,工号,或其他编号 - public byte[] szOwnerCountry = new byte[4]; // 车主国籍,2字节,符合ISO3166规范 - public byte[] szProvince = new byte[64]; // 省份 - public byte[] szCity = new byte[64]; // 城市 - public byte[] szHomeAddress = new byte[128]; // 注册人员家庭地址(IVSS需求) - public byte[] szEmail = new byte[32]; // 车主电子邮箱 - public byte[] szPhoneNo = new byte[128]; // 注册车主电话号码 - public byte[] bReserved = new byte[512]; - } - - //获取播放盒上全部节目信息接口输入参数 - public static class NET_IN_GET_ALL_PLAYBOX_PROGRAM extends Structure - { - public int dwSize; - - public NET_IN_GET_ALL_PLAYBOX_PROGRAM() { - this.dwSize = this.size(); - } - } - - //获取播放盒上全部节目信息接口输出参数 - public static class NET_OUT_GET_ALL_PLAYBOX_PROGRAM extends Structure - { - public int dwSize; - public int nMaxProgramCount; // 节目信息最大个数,由用户指定 - public int nRetProgramCount; // 实际返回的节目信息个数 - public Pointer pstProgramInfo; // 播放盒上的节目信息, 内存资源由用户维护,对应 NET_PROGRAM_ON_PLAYBOX[] - - public NET_OUT_GET_ALL_PLAYBOX_PROGRAM() { - this.dwSize = this.size(); - } - } - - // 播放盒节目信息 - public static class NET_PROGRAM_ON_PLAYBOX extends Structure - { - public byte[] szProgrammeName = new byte[MAX_COMMON_STRING_64]; // 节目名称 - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID, 添加节目时不需要指定 - public int bEnable; // 节目是否启用 - public int emProgramType; // 节目类型, 参考 EM_PLAYBOXPROGRAM_TYPE - public NET_PROGRAM_LOGO_INFO stuLogoInfo; // LOGO节目信息, emProgramType为EM_PROGRAM_ON_PLAYBOX_LOGO时有效 - public NET_PROGRAM_BAR_INFO stuBarInfo; // 广告条节目信息, emProgramType为EM_PROGRAM_ON_PLAYBOX_BAR时有效 - public NET_PROGRAM_ORDINARY_INFO stuOrdinaryInfo = new NET_PROGRAM_ORDINARY_INFO(); // 普通节目信息, emProgramType为EM_PROGRAM_ON_PLAYBOX_ORDINARY时有效, 此参数需要在库里new对象 - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // 播放盒节目类型 - public static class EM_PLAYBOXPROGRAM_TYPE extends Structure - { - public static final int EM_PROGRAM_ON_PLAYBOX_LOGO = 0; // LOGO, 对应结构体 NET_PROGRAM_LOGO_INFO - public static final int EM_PROGRAM_ON_PLAYBOX_BAR = 1; // 广告条, 对应结构体 NET_PROGRAM_BAR_INFO - public static final int EM_PROGRAM_ON_PLAYBOX_ORDINARY = 2; // 普通节目, 对应结构体 NET_PROGRAM_ORDINARY_INFO - } - - // LOGO节目信息 - public static class NET_PROGRAM_LOGO_INFO extends Structure - { - public byte[] szLogoPath = new byte[MAX_COMMON_STRING_128]; // Logo路径 - public NET_RECT stuBackgroundRect; // Logo位置 - public int nDiaphaneity; // 透明度, 0-100 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 广告条节目信息 - public static class NET_PROGRAM_BAR_INFO extends Structure - { - public byte[] szContent = new byte[MAX_COMMON_STRING_512]; // 广告内容 - public NET_COLOR_RGBA stuFontColor; // 字体颜色 - public int nFontSize; // 字体大小 - public byte[] szFontStyle = new byte[MAX_COMMON_STRING_32]; // 字体类型 - public int nPlaySpeed; // 播放速度 - public NET_RECT stuBackgroundRect; // 广告条位置 - public NET_COLOR_RGBA stuBackColor; // 广告条背景颜色 - public int nDiaphaneity; // 透明度, 0-100 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 普通广告节目信息 - public static class NET_PROGRAM_ORDINARY_INFO extends Structure - { - public int bTempletState; // 节目是否保存为模板 - public byte[] szDescription = new byte[MAX_COMMON_STRING_128]; // 节目描述信息 - public int nWidth; // 画布宽度 - public int nHeight; // 画布高度 - public int nWinCount; // 窗口数量 - public NET_PLAYBOX_WINDOWS_INFO[] stuWindowsInfo = (NET_PLAYBOX_WINDOWS_INFO[])new NET_PLAYBOX_WINDOWS_INFO().toArray(MAX_WINDOWS_COUNT); // 窗口信息 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 播放盒上窗口信息 - public static class NET_PLAYBOX_WINDOWS_INFO extends Structure - { - public NET_RECT stuRect; // 窗口位置 - public int nZorder; // 窗口Z轴序 - public int nVolume; // 窗口音量,相对整屏音量的百分比 - public NET_COLOR_RGBA stuBackColor; // 窗口背景颜色 - public int nDiaphaneity; // 窗口背景透明度0-100 - public int emTourPeriodType; // 窗口轮训类型 EM_TOURPERIOD_TYPE - public int nTourPeriodTime; // 自定义轮训时间,单位秒, 轮训类型为自定义轮训时有效 - public int bAutoPlay; // 预览自动播放,Video元素有效 - public int bLoopPlay; // 预览循环播放,Video元素有效 - public int nElementsCount; // 诱导屏窗口元素个数 - public Pointer pstElementsBuf; // 播放盒窗口元素信息缓存区, 根据类型对应不同的结构体 - // 填充多个元素信息, 每个元素信息内容为 NET_ELEMENT_COMMON_INFO + 元素类型对应的结构体 - public int nBufLen; // 诱导屏窗口元素信息缓存区大小 - public byte[] byReserved = new byte[128]; // 保留字节 - } - - // 通过programme ID 获取播放盒上对应的节目信息输入参数 - public static class NET_IN_GET_PLAYBOX_PROGRAM_BYID extends Structure - { - public int dwSize; - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID - - public NET_IN_GET_PLAYBOX_PROGRAM_BYID() { - this.dwSize = this.size(); - } - } - - // 通过programme ID 获取播放盒上对应的节目信息输出参数 - public static class NET_OUT_GET_PLAYBOX_PROGRAM_BYID extends Structure - { - public int dwSize; - public NET_PROGRAM_ON_PLAYBOX stuPlayBoxProgram; // 播放盒节目信息 - - public NET_OUT_GET_PLAYBOX_PROGRAM_BYID() { - this.dwSize = this.size(); - } - } - - // 在播放盒上添加一个节目信息输入参数 - public static class NET_IN_ADD_ONE_PLAYBOX_PRAGROM extends Structure - { - public int dwSize; - public NET_PROGRAM_ON_PLAYBOX stuPlayBoxProgram; // 播放盒节目信息 - - public NET_IN_ADD_ONE_PLAYBOX_PRAGROM() { - this.dwSize = this.size(); - } - } - - // 在播放盒上添加一个节目信息输出参数 - public static class NET_OUT_ADD_ONE_PLAYBOX_PRAGROM extends Structure - { - public int dwSize; - public byte[] szProgrammeID = new byte[MAX_COMMON_STRING_64]; // 节目ID - - public NET_OUT_ADD_ONE_PLAYBOX_PRAGROM() { - this.dwSize = this.size(); - } - } - - // 在播放盒上修改指定ID的节目信息输入参数 - public static class NET_IN_MODIFY_PLAYBOX_PROGRAM_BYID extends Structure - { - public int dwSize; - public NET_PROGRAM_ON_PLAYBOX stuPlayBoxProgram; // 播放盒节目信息 - - public NET_IN_MODIFY_PLAYBOX_PROGRAM_BYID() { - this.dwSize = this.size(); - } - } - - // 在播放盒上修改指定ID的节目信息输出参数 - public static class NET_OUT_MODIFY_PLAYBOX_PROGRAM_BYID extends Structure - { - public int dwSize; - - public NET_OUT_MODIFY_PLAYBOX_PROGRAM_BYID() { - this.dwSize = this.size(); - } - } - - //云台定位信息报警 - public static class NET_PTZ_LOCATION_INFO extends Structure - { - public int nChannelID; // 通道号 - public int nPTZPan; // 云台水平运动位置,有效范围:[0,3600] - public int nPTZTilt; // 云台垂直运动位置,有效范围:[-1800,1800] - public int nPTZZoom; // 云台光圈变动位置,有效范围:[0,128] - public byte bState; // 云台运动状态, 0-未知 1-运动 2-空闲 - public byte bAction; // 云台动作,255-未知,0-预置点,1-线扫,2-巡航,3-巡迹,4-水平旋转,5-普通移动,6-巡迹录制,7-全景云台扫描,8-热度图 - // 9-精确定位,10-设备校正,11-智能配置,12-云台重启 - public byte bFocusState; // 云台聚焦状态, 0-未知, 1-运动状态, 2-空闲 - public byte bEffectiveInTimeSection; // 在时间段内预置点状态是否有效 - // 如果当前上报的预置点是时间段内的预置点,则为1,其他情况为0 - public int nPtzActionID; // 巡航ID号 - public int dwPresetID; // 云台所在预置点编号 - public float fFocusPosition; // 聚焦位置 - public byte bZoomState; // 云台ZOOM状态,0-未知,1-ZOOM,2-空闲 - public byte[] bReserved = new byte[3]; // 对齐 - public int dwSequence; // 包序号,用于校验是否丢包 - public int dwUTC; // 对应的UTC(1970-1-1 00:00:00)秒数。 - public int emPresetStatus; // 预置点位置,参考 EM_DH_PTZ_PRESET_STATUS - public int nZoomValue; // 真实变倍值 当前倍率(扩大100倍表示) - public int[] reserved = new int[244]; // 保留字段 - } - - // 预置点状态枚举 - public static class EM_DH_PTZ_PRESET_STATUS extends Structure - { - public static final int EM_DH_PTZ_PRESET_STATUS_UNKNOWN = 0; // 未知 - public static final int EM_DH_PTZ_PRESET_STATUS_REACH = 1; // 预置点到达 - public static final int EM_DH_PTZ_PRESET_STATUS_UNREACH = 2; // 预置点未到达 - } - - public static class NET_EM_CFG_OPERATE_TYPE extends Structure - { - public static final int NET_EM_CFG_SNAP_MODE = 0; // 抓图模式配置,对应结构体 NET_SNAP_MODE - public static final int NET_EM_CFG_DEV_CAR_COACH = 1; // 铁路记录配置, 对应结构体 NET_DEV_CAR_COACH_INFO - public static final int NET_EM_CFG_YUEQING_SUPPLYLIGHTING = 2; // 乐清外接灯光配置, 对应结构体 NET_YUEQING_SUPPLYLIGHTING_INFO - public static final int NET_EM_CFG_MEDIA_GLOBAL = 3; // 媒体组件全局配置, 对应结构体 NET_MEDIA_GLOBAL_INFO - - /*********OSD叠加相关配置*************************************************************************************************/ - public static final int NET_EM_CFG_CHANNELTITLE = 1000; // 叠加通道标题属性配置,对应结构体 NET_OSD_CHANNEL_TITLE,其中结构体中的emOsdBlendType为必填参数 - public static final int NET_EM_CFG_TIMETITLE = 1001; // 叠加时间标题属性配置,对应结构体 NET_OSD_TIME_TITLE,其中结构体中的emOsdBlendType为必填参数 - public static final int NET_EM_CFG_CUSTOMTITLE = 1002; // 叠加自定义标题属性配置,对应结构体 NET_OSD_CUSTOM_TITLE,其中结构体中的stuCustomTitle.emOsdBlendType为必填参数 - public static final int NET_EM_CFG_CUSTOMTITLETEXTALIGN = 1003; // 叠加自定义标题对齐方式属性配置,对应结构体 NET_OSD_CUSTOM_TITLE_TEXT_ALIGN - public static final int NET_EM_CFG_OSDCOMMINFO = 1004; // 叠加公共属性配置,对应结构体 NET_OSD_COMM_INFO - public static final int NET_EM_CFG_OSD_PTZZOOM = 1005; // 变倍叠加配置,对应结构体 NET_OSD_PTZZOOM_INFO - public static final int NET_EM_CFG_GPSTITLE= 1006; // 叠加GPS标题显示配置,对应结构体 NET_OSD_GPS_TITLE - public static final int NET_EM_CFG_OSD_NUMBERSTATPLAN = 1007; // 人数统计计划叠加OSD配置, 支持NumberStatPlan算法大类时(球机)使用,对应结构体NET_OSD_NUMBER_STATPLAN - public static final int NET_EM_CFG_GPSSTARNUM_OSD = 1008; // GPS搜星数OSD配置, 车载定制需求, 对应结构体 NET_CFG_GPSSTARNUM_OSD_INFO - - /*********encode 相关配置*************************************************************************************************/ - public static final int NET_EM_CFG_ENCODE_VIDEO = 1100; // 编码视频格式属性配置,对应结构体 NET_ENCODE_VIDEO_INFO - public static final int NET_EM_CFG_ENCODE_VIDEO_PACK = 1101; // 编码视频格式打包模式配置,对应结构体 NET_ENCODE_VIDEO_PACK_INFO - public static final int NET_EM_CFG_ENCODE_VIDEO_SVC = 1102; // 编码视频格式SVC配置,对应结构体 NET_ENCODE_VIDEO_SVC_INFO - public static final int NET_EM_CFG_ENCODE_VIDEO_PROFILE = 1103; // 编码视频格式profile配置,对应结构体 NET_ENCODE_VIDEO_PROFILE_INFO - public static final int NET_EM_CFG_ENCODE_AUDIO_COMPRESSION = 1104; // 编码音频压缩格式配置,对应结构体 NET_ENCODE_AUDIO_COMPRESSION_INFO - public static final int NET_EM_CFG_ENCODE_AUDIO_INFO = 1105; // 编码音频格式配置,对应结构体 NET_ENCODE_AUDIO_INFO - public static final int NET_EM_CFG_ENCODE_SNAP_INFO = 1106; // 编码抓图配置,对应结构体 NET_ENCODE_SNAP_INFO - public static final int NET_EM_CFG_ENCODE_SNAPTIME = 1107; // 编码抓图时间相关配置,对应结构体 NET_ENCODE_SNAP_TIME_INFO - public static final int NET_EM_CFG_ENCODE_CHANNELTITLE = 1108; // 通道名称配置,对应结构体 NET_ENCODE_CHANNELTITLE_INFO - - /**********音频相关配置***************************************************************************************************/ - public static final int NET_EM_CFG_AUDIOIN_SOURCE = 1200; // 音频输入类型配置,对应结构体 NET_ENCODE_AUDIO_SOURCE_INFO - public static final int NET_EM_CFG_AUDIOIN_DENOISE = 1201; // 音频降噪配置,对应结构体 NET_AUDIOIN_DENOISE_INFO - public static final int NET_EM_CFG_AUDIOIN_VOLUME = 1202; // 音频输入音量配置,对应结构体 NET_AUDIOIN_VOLUME_INFO - public static final int NET_EM_CFG_AUDIOOUT_VOLUME = 1203; // 音频输出音量配置,对应结构体 NET_AUDIOOUT_VOLUME_INFO - - /**********videoin 相关配置***********************************************************************************************/ - public static final int NET_EM_CFG_VIDEOIN_SWITCHMODE = 1300; // 切换模式配置,对应结构体 NET_VIDEOIN_SWITCH_MODE_INFO - public static final int NET_EM_CFG_VIDEOIN_COLOR = 1301; // 视频输入颜色配置,对应结构体 NET_VIDEOIN_COLOR_INFO - public static final int NET_EM_CFG_VIDEOIN_IMAGE_OPT = 1302; // 图像属性配置,对应结构体 NET_VIDEOIN_IMAGE_INFO - public static final int NET_EM_CFG_VIDEOIN_STABLE = 1303; // 图像防抖配置,对应结构体 NET_VIDEOIN_STABLE_INFO - public static final int NET_EM_CFG_VIDEOIN_IRISAUTO = 1304; // 自动光圈配置,对应结构体 NET_VIDEOIN_IRISAUTO_INFO - public static final int NET_EM_CFG_VIDEOIN_IMAGEENHANCEMENT = 1305; // 图像增强配置,对应结构体 NET_VIDEOIN_IMAGEENHANCEMENT_INFO - public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_NORMAL = 1306; // 曝光通用属性配置,对应结构体 NET_VIDEOIN_EXPOSURE_NORMAL_INFO - public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_OTHER = 1307; // 其他曝光属性配置,对应结构体 NET_VIDEOIN_EXPOSURE_OTHER_INFO - public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_SHUTTER = 1308; // 曝光快门配置,对应结构体 NET_VIDEOIN_EXPOSURE_SHUTTER_INFO - public static final int NET_EM_CFG_VIDEOIN_BACKLIGHT = 1309; // 背光配置,对应结构体 NET_VIDEOIN_BACKLIGHT_INFO - public static final int NET_EM_CFG_VIDEOIN_INTENSITY = 1310; // 场景自适应对比度强度配置,对应结构体 NET_VIDEOIN_INTENSITY_INFO - public static final int NET_EM_CFG_VIDEOIN_LIGHTING = 1311; // 补光灯配置,对应结构体 NET_VIDEOIN_LIGHTING_INFO - public static final int NET_EM_CFG_VIDEOIN_DEFOG = 1312; // 透雾配置,对应结构体 NET_VIDEOIN_DEFOG_INFO - public static final int NET_EM_CFG_VIDEOIN_FOCUSMODE = 1313; // 聚焦模式配置,对应结构体 NET_VIDEOIN_FOCUSMODE_INFO - public static final int NET_EM_CFG_VIDEOIN_FOCUSVALUE = 1314; // 聚焦信息配置,对应结构体 NET_VIDEOIN_FOCUSVALUE_INFO - public static final int NET_EM_CFG_VIDEOIN_WHITEBALANCE = 1315; // 白平衡配置,对应结构体 NET_VIDEOIN_WHITEBALANCE_INFO - public static final int NET_EM_CFG_VIDEOIN_DAYNIGHT = 1316; // 日夜模式配置,对应结构体 NET_VIDEOIN_DAYNIGHT_INFO - public static final int NET_EM_CFG_VIDEOIN_DAYNIGHT_ICR = 1317; // 日夜模式ICR切换类型配置,对应结构体 NET_VIDEOIN_DAYNIGHT_ICR_INFO - public static final int NET_EM_CFG_VIDEOIN_SHARPNESS = 1318; // 锐度配置,对应结构体 NET_VIDEOIN_SHARPNESS_INFO - public static final int NET_EM_CFG_VIDEOIN_COMM_DENOISE = 1319; // 通用降噪配置,对应结构体 NET_VIDEOIN_DENOISE_INFO - public static final int NET_EM_CFG_VIDEOIN_3D_DENOISE = 1320; // 3D 降噪配置,对应结构体 NET_VIDEOIN_3D_DENOISE_INFO - - /***********庭审相关配置*****************************************************************************************/ - public static final int NET_EM_CFG_ENCODE_PLAN = 1400; // 刻录光盘编码计划, 对应结构体 NET_ENCODE_PLAN_INFO - public static final int NET_EM_CFG_COMPOSE_CHANNEL = 1401; // 合成通道配置, 对应结构体NET_COMPOSE_CHANNEL_INFO - - /**********报警网关相关配置**************************************************************************************/ - public static final int NET_EM_CFG_ALARM_SOUND = 1500; // 报警网关语音配置, 对应结构体 NET_ALARM_SOUND_INFO - - /**********网络应用相关配置**************************************************************************************/ - public static final int NET_EM_CFG_ACCESS_POINT = 1600; // 用于WiFi服务端配置(热点功能), 对应结构体 NET_NETAPP_ACCESSPOINT - - /**************安全基线需求**************************************************************************************/ - public static final int NET_EM_CFG_NAS = 1700; // NAS 配置, 对应结构体 NET_NAS_INFO - public static final int NET_EM_CFG_PPPOE = 1701; // PPPOE 配置,对应结构体 NET_PPPOE_INFO - public static final int NET_EM_CFG_EMAIL = 1702; // Email 配置,对应结构体 NET_EAMIL_INFO - public static final int NET_EM_CFG_DDNS = 1703; // DDNS 配置,对应结构体 NET_DDNS_INFO - - /**************SCADA配置需求**************************************************************************************/ - public static final int NET_EM_CFG_SCADA_PROTOCOLS_MANAGER = 1800; // 协议管理配置,对应结构体 NET_SCADA_PROTOCOLS_MANAGER - public static final int NET_EM_CFG_SCADA_DEVICEINFO_CFG = 1801; // 设备信息配置,对应结构体 NET_SCADA_DEVICEINFO_CFG - - /**************NetApp配置需求*************************************************************************************/ - public static final int NET_EM_CFG_NETAPP_LINK_LAYER_VPN = 1900; // 链路层VPN设置,对应结构体 NET_NETAPP_LINK_LAYER_VPN_CFG - - /**************中国铁塔平台接入***********************************************************************************/ - public static final int NET_EM_CFG_VSP_CHINA_TOWER = 2000; // 安徽治超平台接入配置,对应结构体 NET_VSP_CHINA_TOWER - - /**********智能相关配置*******************************************************************************************/ - public static final int NET_EM_CFG_STEREO_CALIBRATE = 2100; // 双目标定结果, 对应结构体NET_STEREO_CALIBRATE_INFO - public static final int NET_EM_CFG_STEREO_CALIBRATEMATRIX_MULTISENSOR = 2101; // 多目相机标定配置CalibrateMatrix(MultiSensor), 对应的结构体 NET_MULTI_SENSOR_INFO - - /**********雷达配置***********************************************************************************************/ - public static final int NET_EM_CFG_RADAR = 2200; // 雷达配置,对应结构体 DEV_RADAR_CONFIG - - /**********视频对讲电话通用配置***********************************************************************************/ - public static final int NET_EM_CFG_VTH_PASSWORD = 2300; // 视频对讲电话通用配置,对应结构体 NET_CFG_VTH_PASSWORD_INFO - public static final int NET_EM_CFG_REGISTAR = 2301; // 注册服务器配置,对应结构体 NET_CFG_REGISTAR_INFO - public static final int NET_EM_CFG_SIP = 2302; // sip配置, 对应结构体 NET_CFG_SIPSERVER_INFO - - /**********镜头前遮挡盖配置***************************************************************************************/ - public static final int NET_EM_CFG_AELENSMASK = 2400; //镜头前遮挡盖配置,对应结构体NET_CFG_AELENSMASK_INFO - - public static final int NET_EM_CFG_ULTRASONIC = 2500; //超声波配置,对应结构体NET_CFG_ULTRASONIC_INFO - - /**********报警主机相关配置***************************************************************************************/ - public static final int NET_EM_CFG_ARMSCHEDULE = 2600; // 报警计划配置,对应结构体 NET_CFG_ARMSCHEDULE_INFO - - /**********录像抓图功能相关配置***********************************************************************************/ - public static final int NET_EM_CFG_RECORDEXTRA = 3610; // 录像辅码流录像配置, 对应结构体 NET_CFG_RECORDEXTRA_INFO - - /**********视频诊断相关配置***************************************************************************************/ - public static final int NET_EM_VIDEODIAGNOSIS_PROJECT = 3700; // 视频诊断计划配置, 对应结构体NET_CFG_VIDEODIAGNOSIS_PROJECT_INFO - - /***********车载相关配置******************************************************************************************/ - public static final int NET_EM_CFG_POSITIONREPORTPOLICY = 3800; // 车载GPS位置信息上报策略配置, 对应结构体 NET_CFG_POSITIONREPORTPOLICY_INFO - public static final int NET_EM_CFG_VEHICLE_WORKTIMESCHEDULE = 3801; // 车载工作计划配置,对应结构体 NET_CFG_VEHICLE_WORKTIMESCHEDULE_INFO - public static final int NET_EM_CFG_VEHICLE_LOAD = 3802; // 荷载人数配置, 对应结构体 NET_CFG_VEHICLE_LOAD_INFO - - /***********门禁相关配置******************************************************************************************/ - public static final int NET_EM_CFG_ACCESSCTL_BLACKLIST = 3900; // 门禁黑名单报警配置,对应结构体 NET_CFG_ACCESSCTL_BLACKLIST - public static final int NET_EM_CFG_ACCESSCTL_BLACKLIST_LINK = 3901; // 门禁黑名单报警联动配置,对应结构体 NET_CFG_ALARM_MSG_HANDLE - public static final int NET_EM_CFG_ACCESSCTL_SPECIALDAY_GROUP = 3902; // 门禁节假日组配置, 对应结构体 NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO - public static final int NET_EM_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE = 3903; // 门禁节假日计划配置, 对应结构体 NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO - - /***********定制配置************************************************************************************************/ - public static final int NET_EM_CFG_SERIALNOWHITETABLE = 4000; // 前端序列号白名单下发至NVR 配置, 对应结构体 NET_CFG_SERIALNOWHITETABLE_INFO - - /***********道闸配置************************************************************************************************/ - public static final int NET_EM_CFG_TRAFFICSTROBE = 9100; // 道闸配置, 对应结构体 NET_CFG_TRAFFICSTROBE_INFO - } - - //通用曝光属性配置 - public static class NET_VIDEOIN_EXPOSURE_NORMAL_INFO extends Structure - { - public int dwSize; - public int emCfgType; // 配置类型,获取和设置时都要指定,对应枚举 NET_EM_CONFIG_TYPE - public int emExposureMode; // 曝光模式, 对应枚举 NET_EM_EXPOSURE_MODE - public int nAntiFlicker; // 防闪烁0-Outdoor 1-50Hz防闪烁 2-60Hz防闪烁 - public int nCompensation; // 曝光补偿0-100 - public int nGain; // 增益值 - public int nGainMin; // 增益下限0-100 - public int nGainMax; // 增益上限0-100 - public int nExposureIris; // 光圈值,模式为光圈优先时有效,0-100 - public double dbExposureValue1; // 自动曝光时间下限或者手动曝光自定义时间,毫秒为单位,取值0.1ms~80ms - public double dbExposureValue2; // 自动曝光时间上限,毫秒为单位,取值0.1ms~80ms,且必须不小于"ExposureValue1"取值 - - public NET_VIDEOIN_EXPOSURE_NORMAL_INFO() { - this.dwSize = this.size(); - } - } - - // 每个通道对应的配置类型 - public static class NET_EM_CONFIG_TYPE extends Structure - { - public static final int NET_EM_CONFIG_DAYTIME = 0; // 白天 - public static final int NET_EM_CONFIG_NIGHT = 1; // 夜晚 - public static final int NET_EM_CONFIG_NORMAL = 2; // 普通 - } - - // 曝光模式 - public static class NET_EM_EXPOSURE_MODE extends Structure - { - public static final int NET_EM_EXPOSURE_AUTO = 0; // 默认自动 - public static final int NET_EM_EXPOSURE_LOWNICE = 1; // 低噪声 - public static final int NET_EM_EXPOSURE_ANTISHADOW = 2; // 防拖影 - public static final int NET_EM_EXPOSURE_MANUALRANGE = 4; // 手动区间 - public static final int NET_EM_EXPOSURE_APERTUREFIRST = 5; // 光圈优先 - public static final int NET_EM_EXPOSURE_MANUALFIXATION = 6; // 手动固定 - public static final int NET_EM_EXPOSURE_GIANFIRST = 7; // 增益优先 - public static final int NET_EM_EXPOSURE_SHUTTERFIRST = 8; // 快门优先 - public static final int NET_EM_EXPOSURE_FLASHMATCH = 9; // 闪光灯匹配模式 - } - - // 背光模式 - public static class NET_EM_BACK_MODE extends Structure - { - public static final int NET_EM_BACKLIGHT_MODE_UNKNOW = 0; // 未知模式 - public static final int NET_EM_BACKLIGHT_MODE_OFF = 1; // 关闭 - public static final int NET_EM_BACKLIGHT_MODE_BACKLIGHT = 2; // 背光补偿 - public static final int NET_EM_BACKLIGHT_MODE_WIDEDYNAMIC = 3; // 宽动态 - public static final int NET_EM_BACKLIGHT_MODE_GLAREINHIBITION = 4; // 强光抑制 - public static final int NET_EM_BACKLIGHT_MODE_SSA = 5; // 场景自适应 - } - - // 背光补偿模式 - public static class NET_EM_BLACKLIGHT_MODE extends Structure - { - public static final int NET_EM_BLACKLIGHT_UNKNOW = 0; // 未知模式 - public static final int NET_EM_BLACKLIGHT_DEFAULT = 1; // 默认模式 - public static final int NET_EM_BLACKLIGHT_REGION = 2; // 自定义区域模式 - } - - // 背光配置 - public static class NET_VIDEOIN_BACKLIGHT_INFO extends Structure - { - public int dwSize; - public int emCfgType; // 配置类型,获取和设置时都要指定, 对应枚举 NET_EM_CONFIG_TYPE - public int emBlackMode; // 背光模式, 对应枚举 NET_EM_BACK_MODE - public int emBlackLightMode; // 背光补偿模式, 对应枚举 NET_EM_BLACKLIGHT_MODE - public NET_RECT stuBacklightRegion; // 背光补偿区域 - public int nWideDynamicRange; // 宽动态值,emBlackMode为NET_EM_BACKLIGHT_MODE_WIDEDYNAMIC时生效 - public int nGlareInhibition; // 强光抑制0-100,emBlackMode为NET_EM_BACKLIGHT_MODE_GLAREINHIBITION时生效 - - public NET_VIDEOIN_BACKLIGHT_INFO() { - this.dwSize = this.size(); - } - } - - // 聚焦模式配置 - public static class NET_VIDEOIN_FOCUSMODE_INFO extends Structure - { - public int dwSize; - public int emCfgType; // 配置类型,获取和设置时都要指定,对应枚举 NET_EM_CONFIG_TYPE - public int emFocusMode; // 聚焦模式, 对应枚举 NET_EM_FOCUS_MODE - - public NET_VIDEOIN_FOCUSMODE_INFO() { - this.dwSize = this.size(); - } - } - - // 聚焦模式 - public static class NET_EM_FOCUS_MODE extends Structure - { - public static final int NET_EM_FOCUS_OFF = 0; // 关闭 - public static final int NET_EM_FOCUS_ASSIST = 1; // 辅助聚焦 - public static final int NET_EM_FOCUS_AUTO = 2; // 自动聚焦 - public static final int NET_EM_FOCUS_SEMI_AUTO = 3; // 半自动聚焦 - public static final int NET_EM_FOCUS_MANUAL = 4; // 手动聚焦 - } - - // 图像属性配置 - public static class NET_VIDEOIN_IMAGE_INFO extends Structure - { - public int dwSize; - public int emCfgType; // 配置类型,获取和设置时都要制定,对应枚举 NET_EM_CONFIG_TYPE - public int bMirror; // 是否开启画面镜像功能 - public int bFlip; // 是否开启画面翻转功能 - public int nRotate90; // 0-不旋转,1-顺时针90°,2-逆时针90° - - public NET_VIDEOIN_IMAGE_INFO() { - this.dwSize = this.size(); - } - } - - // 网络协议配置 - public static class CFG_DVRIP_INFO extends Structure - { - public int nTcpPort; // TCP服务端口,1025~65535 - public int nSSLPort; // SSL服务端口,1025~65535 - public int nUDPPort; // UDP服务端口,1025~65535 - public int nMaxConnections; // 最大连接数 - public int bMCASTEnable; // 组播使能 - public int nMCASTPort; // 组播端口号 - public byte[] szMCASTAddress = new byte[MAX_ADDRESS_LEN]; // 组播地址 - public int nRegistersNum; // 主动注册配置个数 - public CFG_REGISTER_SERVER_INFO[] stuRegisters = (CFG_REGISTER_SERVER_INFO[])new CFG_REGISTER_SERVER_INFO().toArray(MAX_REGISTER_NUM);// 主动注册配置 - public int emStreamPolicy; // 带宽不足时码流策略,对应枚举 EM_STREAM_POLICY - public CFG_REGISTERSERVER_VEHICLE stuRegisterServerVehicle; // 车载专用主动注册配置 - } - - // 带宽不足时码流策略 - public static class EM_STREAM_POLICY extends Structure - { - public static final int STREAM_POLICY_UNKNOWN = 0; - public static final int STREAM_POLICY_NONE = 1; // 无策略,不开启使能"None" - public static final int STREAM_POLICY_QUALITY = 2; // 画质优先"Quality" - public static final int STREAM_POLICY_FLUENCY = 3; // 流畅度优先"Fluency" - public static final int STREAM_POLICY_AUTOADAPT = 4; // 自动"AutoAdapt" - } - - // 主动注册配置 - public static class CFG_REGISTER_SERVER_INFO extends Structure - { - public int bEnable; // 主动注册使能 - public byte[] szDeviceID = new byte[MAX_ADDRESS_LEN]; // 设备ID - public int nServersNum; // 服务器个数 - public CFG_SERVER_INFO[] stuServers = (CFG_SERVER_INFO[])new CFG_SERVER_INFO().toArray(MAX_SERVER_NUM); // 服务器数组 - } - - // 服务器 - public static class CFG_SERVER_INFO extends Structure - { - public int nPort; // 服务器端口号 - public byte[] szAddress = new byte[MAX_ADDRESS_LEN]; // IP地址或网络名 - } - - // 车载专用主动注册配置 - public static class CFG_REGISTERSERVER_VEHICLE extends Structure - { - public int bEnable; // 主动注册使能 - public int bRepeatEnable; // 是否发送相同坐标数据 - public byte[] szDeviceID = new byte[MAX_ADDRESS_LEN]; // 子设备ID - public int nSendInterval; // 发送间隔, 单位:秒 - public byte[] szAddress = new byte[MAX_ADDRESS_LEN]; // IP地址或网络名 - public int nPort; // 端口号 - public int emSendPolicy; // 上传策略,对应枚举 EM_CFG_SENDPOLICY - public byte[] szTestAddress = new byte[MAX_ADDRESS_LEN]; // 测试IP地址或网络名 - public int nTestPort; // 测试端口号 - public byte[] byReserved = new byte[1024]; // 保留字节 - } - - // 上传策略 - public static class EM_CFG_SENDPOLICY extends Structure - { - public static final int EM_SNEDPOLICY_UNKNOWN = -1; - public static final int EM_SENDPOLICY_TIMING = 0; // 定时上报 - public static final int EM_SENDPOLICY_EVENT = 1; // 事件触发上报 - } - - // 网络接口配置 - public static class CFG_NETWORK_INFO extends Structure - { - public byte[] szHostName = new byte[MAX_NAME_LEN]; // 主机名称 - public byte[] szDomain = new byte[MAX_NAME_LEN]; // 所属域 - public byte[] szDefInterface = new byte[MAX_NAME_LEN]; // 默认使用的网卡 - public int nInterfaceNum; // 网卡数量 - public CFG_NETWORK_INTERFACE[] stuInterfaces = (CFG_NETWORK_INTERFACE[])new CFG_NETWORK_INTERFACE().toArray(MAX_NETWORK_INTERFACE_NUM); // 网卡列表 - } - - // 网络接口 - public static class CFG_NETWORK_INTERFACE extends Structure - { - public byte[] szName = new byte[MAX_NAME_LEN]; // 网络接口名称 - public byte[] szIP = new byte[MAX_ADDRESS_LEN]; // ip地址 - public byte[] szSubnetMask = new byte[MAX_ADDRESS_LEN]; // 子网掩码 - public byte[] szDefGateway = new byte[MAX_ADDRESS_LEN]; // 默认网关 - public int bDhcpEnable; // 是否开启DHCP - public int bDnsAutoGet; // DNS获取方式,dhcp使能时可以设置为true,支持通过dhcp获取 - public DNS_SERVERS[] szDnsServersArr = (DNS_SERVERS[])new DNS_SERVERS().toArray(MAX_DNS_SERVER_NUM); // DNS服务器地址 - public int nMTU; // 网络最大传输单元 - public byte[] szMacAddress = new byte[MAX_ADDRESS_LEN]; // mac地址 - public int bInterfaceEnable; // 网络接口使能开关,表示该网口配置是否生效。不生效时,IP地址不设置到网卡上。 - public int bReservedIPEnable; // DHCP失败时是否使用保留IP,使用保留IP时还继续发DHCP请求 - public int emNetTranmissionMode; // 网络传输模式,默认adapt自适应模式, 对应枚举 CFG_ENUM_NET_TRANSMISSION_MODE - public int emInterfaceType; // 网口类型, 对应枚举 CFG_ENUM_NET_INTERFACE_TYPE - public int bBond; // 是否绑定虚拟网口,对应枚举 CFG_THREE_STATUS_BOOL - } - - public static class DNS_SERVERS extends Structure - { - public byte[] szDnsServers = new byte[MAX_ADDRESS_LEN]; // DNS服务器地址 - } - - // 网络传输模式 - public static class CFG_ENUM_NET_TRANSMISSION_MODE extends Structure - { - public static final int CFG_ENUM_NET_MODE_ADAPT = 0; // 自适应 - public static final int CFG_ENUM_NET_MODE_HALF10M = 1; // 10M半双工 - public static final int CFG_ENUM_NET_MODE_FULL10M = 2; // 10M全双工 - public static final int CFG_ENUM_NET_MODE_HALF100M = 3; // 100M半双工 - public static final int CFG_ENUM_NET_MODE_FULL100M = 4; // 100M全双工 - } - - // 网口类型 - public static class CFG_ENUM_NET_INTERFACE_TYPE extends Structure - { - public static final int CFG_ENUM_NET_INTERFACE_TYPE_UNKNOWN = 0; // 未知 - public static final int CFG_ENUM_NET_INTERFACE_TYPE_STANDARD = 1; // 标准网口 - public static final int CFG_ENUM_NET_INTERFACE_TYPE_MANAGER = 2; // 管理网口 - public static final int CFG_ENUM_NET_INTERFACE_TYPE_EXTEND = 3; // 扩展网口 - } - - //三态布尔类型 - public static class CFG_THREE_STATUS_BOOL extends Structure - { - public static final int CFG_BOOL_STATUS_UNKNOWN = -1; //未知 - public static final int CFG_BOOL_STATUS_FALSE = 0; - public static final int CFG_BOOL_STATUS_TRUE = 1; - } - - - // RTMP配置 - public static class CFG_RTMP_INFO extends Structure - { - public int bEnable; // RTMP配置是否开启 - public byte[] szAddr = new byte[MAX_ADDRESS_LEN]; // RTMP服务器地址 - public int nPort; // RTMP服务器端口 - public int nMainChnNum; // 主码流通道个数 - public int[] szMainChannel = new int[AV_CFG_Max_Channel_Num]; // 启用主码流通道号列表:每个成员表示对应的通道需要上传到RTMP服务器,通道号从0开始 - public int nExtraChnNum; // 辅码流通道个数 - public int[] szExtraChannel = new int[AV_CFG_Max_Channel_Num]; // 启用辅码流通道号列表:每个成员表示对应的通道需要上传到RTMP服务器,通道号从0开始 - public byte[] szCustomPath = new byte[MAX_ADDRESS_LEN]; // 定制路径名 - public byte[] szStreamPath = new byte[MAX_ADDRESS_LEN]; // 码流路径前缀:不同通道以后缀数字区分 - } - - // 下载远程文件事件,对应 NET_ALARM_DOWNLOAD_REMOTE_FILE - public static class ALARM_DOWNLOAD_REMOTE_FILE_INFO extends Structure - { - public double dbPTS; // 时间戳(单位是毫秒) - public NET_TIME_EX stuTime; // 事件发生的时间 - public int nEventID; // 事件ID - public byte[] szURL = new byte[NET_COMMON_STRING_256]; // 下载文件对应的URL地址 - public int nProgress; // 下载进度[0,100] - public byte[] byReserved = new byte[1020]; // 保留字节 - } - - // CLIENT_GetSplitWindowsInfo接口输入参数 - public static class NET_IN_SPLIT_GET_WINDOWS extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - - public NET_IN_SPLIT_GET_WINDOWS() { - this.dwSize = this.size(); - } - } - - // CLIENT_GetSplitWindowsInfo接口输出参数 - public static class NET_OUT_SPLIT_GET_WINDOWS extends Structure - { - public int dwSize; - public NET_BLOCK_COLLECTION stuWindows; // 窗口信息 - - public NET_OUT_SPLIT_GET_WINDOWS() { - this.dwSize = this.size(); - } - } - - // 融合屏通道信息 - public static class NET_COMPOSITE_CHANNEL extends Structure - { - public int dwSize; - public byte[] szMonitorWallName = new byte[NET_DEVICE_NAME_LEN]; // 电视墙名称 - public byte[] szCompositeID = new byte[NET_DEV_ID_LEN_EX]; // 融合屏ID - public int nVirtualChannel; // 虚拟通道号 - - public NET_COMPOSITE_CHANNEL() { - this.dwSize = this.size(); - } - } - - // 电视墙 - public static class AV_CFG_MonitorWall extends Structure - { - public int nStructSize; - public byte[] szName = new byte[AV_CFG_Monitor_Name_Len]; // 名称 - public int nLine; // 网络行数 - public int nColumn; // 网格列数 - public int nBlockCount; // 区块数量 - public AV_CFG_MonitorWallBlock[] stuBlocks = (AV_CFG_MonitorWallBlock[])new AV_CFG_MonitorWallBlock().toArray(AV_CFG_Max_Block_In_Wall);// 区块数组 - public int bDisable; // 是否禁用, 0-该电视墙有效, 1-该电视墙无效 - public byte[] szDesc = new byte[CFG_COMMON_STRING_256]; // 电视墙描述信息 - - public AV_CFG_MonitorWall() { - this.nStructSize = this.size(); - } - } - - // 电视墙区块 - public static class AV_CFG_MonitorWallBlock extends Structure - { - public int nStructSize; - public int nLine; // 单个TV占的网格行数 - public int nColumn; // 单个TV占的网格列数 - public AV_CFG_Rect stuRect; // 区块的区域坐标 - public int nTVCount; // TV数量 - public AV_CFG_MonitorWallTVOut[] stuTVs = (AV_CFG_MonitorWallTVOut[])new AV_CFG_MonitorWallTVOut().toArray(AV_CFG_Max_TV_In_Block); // TV数组 - public TIME_SECTION_WEEK_DAY_6[] stuTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_6[])new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM); // 开关机时间 - public byte[] szName = new byte[AV_CFG_Channel_Name_Len]; // 区块名称 - public byte[] szCompositeID = new byte[AV_CFG_Device_ID_Len]; // 融合屏ID - public byte[] szBlockType = new byte[NET_COMMON_STRING_32]; // 显示单元组类型,为支持由接收卡组成单元的小间距LED区块而增加该字段,其他类型的区块填写为"LCD",如不存在该字段,默认采用LCD - - public AV_CFG_MonitorWallBlock() { - this.nStructSize = this.size(); - } - } - - // 区域 - public static class AV_CFG_Rect extends Structure - { - public int nStructSize; - public int nLeft; - public int nTop; - public int nRight; - public int nBottom; - - public AV_CFG_Rect() { - this.nStructSize = this.size(); - } - }; - - // 电视墙输出通道信息 - public static class AV_CFG_MonitorWallTVOut extends Structure - { - public int nStructSize; - public byte[] szDeviceID = new byte[AV_CFG_Device_ID_Len]; // 设备ID, 为空或"Local"表示本地设备 - public int nChannelID; // 通道ID - public byte[] szName = new byte[AV_CFG_Channel_Name_Len]; // 屏幕名称 - - public AV_CFG_MonitorWallTVOut() { - this.nStructSize = this.size(); - } - } - - // CLIENT_OpenSplitWindow接口输入参数(开窗) - public static class NET_IN_SPLIT_OPEN_WINDOW extends Structure - { - public int dwSize; - public int nChannel; // 通道号(屏号) - public DH_RECT stuRect; // 窗口位置, 0~8192 - public int bDirectable; // 坐标是否满足直通条件, 直通是指拼接屏方式下,此窗口区域正好为物理屏区域 - - public NET_IN_SPLIT_OPEN_WINDOW() { - this.dwSize = this.size(); - } - } - - // CLIENT_OpenSplitWindow接口输出参数(开窗) - public static class NET_OUT_SPLIT_OPEN_WINDOW extends Structure - { - public int dwSize; - public int nWindowID; // 窗口序号 - public int nZOrder; // 窗口次序 - - public NET_OUT_SPLIT_OPEN_WINDOW() { - this.dwSize = this.size(); - } - } - - // CLIENT_CloseSplitWindow接口输入参数(关窗) - public static class NET_IN_SPLIT_CLOSE_WINDOW extends Structure - { - public int dwSize; - public int nChannel; // 输出通道号或融合屏虚拟通道号, pszCompositeID为NULL时有效 - public int nWindowID; // 窗口序号 - public String pszCompositeID; // 融合屏ID - - public NET_IN_SPLIT_CLOSE_WINDOW() { - this.dwSize = this.size(); - } - } - - // CLIENT_CloseSplitWindow接口输出参数(关窗) - public static class NET_OUT_SPLIT_CLOSE_WINDOW extends Structure - { - public int dwSize; - - public NET_OUT_SPLIT_CLOSE_WINDOW() { - this.dwSize = this.size(); - } - } - - // CLIENT_GetGroupInfoForChannel接口输入参数 - public static class NET_IN_GET_GROUPINFO_FOR_CHANNEL extends Structure - { - public int dwSize; - public int nChannelID; // 通道号 - - public NET_IN_GET_GROUPINFO_FOR_CHANNEL() { - this.dwSize = this.size(); - } - } - - // CLIENT_GetGroupInfoForChannel接口输出参数 - public static class NET_OUT_GET_GROUPINFO_FOR_CHANNEL extends Structure - { - public int dwSize; - public int nGroupIdNum; // 人员组数 - public GROUP_ID[] szGroupIdArr = (GROUP_ID[])new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID - public int nSimilaryNum; // 相似度阈值个数, 与人员组数相同 - public int[] nSimilary = new int[MAX_GOURP_NUM]; // 每个人脸组的相似度阈值, 0-100 - - public NET_OUT_GET_GROUPINFO_FOR_CHANNEL() { - this.dwSize = this.size(); - } - } - - // CLIENT_FaceRecognitionPutDisposition 接口输入参数 - public static class NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO extends Structure - { - public int dwSize; - public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID - public int nDispositionChnNum; // 布控视频通道个数 - public NET_DISPOSITION_CHANNEL_INFO[] stuDispositionChnInfo = (NET_DISPOSITION_CHANNEL_INFO[])new NET_DISPOSITION_CHANNEL_INFO().toArray(NET_MAX_CAMERA_CHANNEL_NUM); // 布控视频通道信息 - - public NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO() { - this.dwSize = this.size(); - } - } - - // 布控的视频通道信息 - public static class NET_DISPOSITION_CHANNEL_INFO extends Structure - { - public int nChannelID; // 视频通道号 - public int nSimilary; // 相似度阈值, 0-100 - public byte[] bReserved = new byte[256]; // 保留 - } - - // CLIENT_FaceRecognitionPutDisposition 接口输出参数 - public static class NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO extends Structure - { - public int dwSize; - public int nReportCnt; // 通道布控结果个数 - public int[] bReport = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 通道布控结果, TRUE追加成功, FALSE追加失败 - - public NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_FaceRecognitionDelDisposition 接口输入参数 - public static class NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO extends Structure - { - public int dwSize; - public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID - public int nDispositionChnNum; // 撤控视频通道个数 - public int[] nDispositionChn = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 撤控视频通道列表 - - public NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_FaceRecognitionDelDisposition 接口输出参数 - public static class NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO extends Structure - { - public int dwSize; - public int nReportCnt; // 通道布控结果个数 - public int[] bReport = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 通道布控结果, TRUE删除成功, FALSE删除失败 - - public NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO() { - this.dwSize = this.size(); - } - } - - // 人证比对事件,用实时拍摄的人脸照片,和该人持有的身份证照片进行比对,并上报检测结果 - // 对应事件类型为 EVENT_IVS_CITIZEN_PICTURE_COMPARE - public static class DEV_EVENT_CITIZEN_PICTURE_COMPARE_INFO extends Structure - { - //公共字段 - public int nChannelID; // 通道号,从0开始 - public int nEventAction; // 事件动作, 0表示脉冲, -1表示未知 - public double dbPTS; // 时间戳(单位是毫秒) - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public NET_TIME_EX stuUTC; // 事件发生的时间 - public int nEventID; // 事件ID - - //事件对应字段 - public byte bCompareResult; // 人证比对结果,相似度大于等于阈值认为比对成功,true表示成功,false表示失败 - public byte nSimilarity; // 两张图片的相似度,单位百分比,范围[1,100] - public byte nThreshold; // 检测阈值,范围[1,100] - public int emSex; // 性别, 参考 EM_CITIZENIDCARD_SEX_TYPE - public int nEthnicity; // 民族(参照 DEV_EVENT_ALARM_CITIZENIDCARD_INFO 的 nEthnicity 定义) - public byte[] szCitizen = new byte[NET_COMMON_STRING_64]; // 居民姓名 - public byte[] szAddress = new byte[NET_COMMON_STRING_256]; // 住址 - public byte[] szNumber = new byte[NET_COMMON_STRING_64]; // 身份证号 - public byte[] szAuthority = new byte[NET_COMMON_STRING_256]; // 签发机关 - public NET_TIME stuBirth; // 出生日期(年月日) - public NET_TIME stuValidityStart; // 有效期限起始日期(年月日) - public int bLongTimeValidFlag; // 该值为 TRUE, 截止日期 表示长期有效,此时 stuValidityEnd 值无意义 - // 该值为 FALSE, 此时 截止日期 查看 stuValidityEnd 值 - public NET_TIME stuValidityEnd; // 有效期限结束日期(年月日) - public CITIZEN_PICTURE_COMPARE_IMAGE_INFO[] stuImageInfo - = (CITIZEN_PICTURE_COMPARE_IMAGE_INFO[])new CITIZEN_PICTURE_COMPARE_IMAGE_INFO().toArray(2); // 图片信息,第一张为拍摄照片,第二张为身份证照片 - - public byte[] byReserved = new byte[1024]; // 保留字节 - } - - // 人证对比图片信息 - public static class CITIZEN_PICTURE_COMPARE_IMAGE_INFO extends Structure - { - public int dwOffSet; // 文件在二进制数据块中的偏移位置, 单位:字节 - public int dwFileLenth; // 文件大小, 单位:字节 - public short wWidth; // 图片宽度, 单位:像素 - public short wHeight; // 图片高度, 单位:像素 - public byte[] byReserved = new byte[256]; // 保留字节 - } - - // 事件类型 EVENT_IVS_HUMANTRAIT(人体特征事件)对应的数据块描述信息 - public static class DEV_EVENT_HUMANTRAIT_INFO extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public int nEventID; // 事件ID - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nAction; // 1:开始 2:停止 - public int emClassType; // 智能事件所属大类, 详见 EM_CLASS_TYPE - public int nGroupID; // 事件组ID,一次检测的多个人体特征nGroupID相同 - public int nCountInGroup; // 一个事件组内的抓拍张数(人体个数),一次检测的多个人体特征nCountInGroup相同 - public int nIndexInGroup; // 一个事件组内的抓拍序号,从1开始 - public HUMAN_IMAGE_INFO stuHumanImage; // 人体图片信息 - public FACE_IMAGE_INFO stuFaceImage; // 人脸图片信息 - public int emDetectObject; // 检测到的人的信息, 详见 EM_DETECT_OBJECT - public HUMAN_ATTRIBUTES_INFO stuHumanAttributes; // 人体属性 - public SCENE_IMAGE_INFO stuSceneImage; // 全景大图信息 - public NET_FACE_ATTRIBUTE stuFaceAttributes; // 人脸属性 - public FACE_SCENE_IMAGE stuFaceSceneImage; // 人脸全景图 - public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息 - public NET_HUMANTRAIT_EXTENSION_INFO stuHumanTrait; // 补充事件,表示当前人体特征是由该事件产生的 - public byte[] byReserved = new byte[88]; // 保留字节,留待扩展. - } - - // 人体图片信息 - public static class HUMAN_IMAGE_INFO extends Structure - { - public int nOffSet; // 偏移 - public int nLength; // 图片大小,单位字节 - public int nWidth; // 图片宽度 - public int nHeight; // 图片高度 - public byte[] byReserved = new byte[56]; // 预留字节 - } - - // 人脸图片信息 - public static class FACE_IMAGE_INFO extends Structure - { - public int nOffSet; // 偏移 - public int nLength; // 图片大小,单位字节 - public int nWidth; // 图片宽度 - public int nHeight; // 图片高度 - public byte[] byReserved = new byte[56]; // 预留字节 - } - - // 检测到的人的信息 - public static class EM_DETECT_OBJECT extends Structure - { - public static final int EM_DETECT_OBJECT_UNKNOWN = 0; // 未知信息 - public static final int EM_DETECT_OBJECT_HUMAN_BODY_AND_FACE = 1; // 人体和人脸都有 - public static final int EM_DETECT_OBJECT_HUMAN_BODY = 2; // 仅有人体 - public static final int EM_DETECT_OBJECT_HUMAN_FACE = 3; // 仅有人脸 - } - - // 人体属性信息 - public static class HUMAN_ATTRIBUTES_INFO extends Structure - { - public int emCoatColor; // 上衣颜色, 详见 EM_CLOTHES_COLOR - public int emCoatType; // 上衣类型, 详见 EM_COAT_TYPE - public int emTrousersColor; // 裤子颜色, 详见 EM_CLOTHES_COLOR - public int emTrousersType; // 裤子类型, 详见 EM_TROUSERS_TYPE - public int emHasHat; // 是否戴帽子, 详见 EM_HAS_HAT - public int emHasBag; // 是否带包, 详见 EM_HAS_BAG - public NET_RECT stuBoundingBox; // 包围盒(8192坐标系) - public byte[] byReserved = new byte[112]; // 预留字节 - } - - // 衣服颜色 - public static class EM_CLOTHES_COLOR extends Structure - { - public static final int EM_CLOTHES_COLOR_UNKNOWN = 0; // 未知 - public static final int EM_CLOTHES_COLOR_WHITE = 1; // 白色 - public static final int EM_CLOTHES_COLOR_ORANGE = 2; // 橙色 - public static final int EM_CLOTHES_COLOR_PINK = 3; // 粉色 - public static final int EM_CLOTHES_COLOR_BLACK = 4; // 黑色 - public static final int EM_CLOTHES_COLOR_RED = 5; // 红色 - public static final int EM_CLOTHES_COLOR_YELLOW = 6; // 黄色 - public static final int EM_CLOTHES_COLOR_GRAY = 7; // 灰色 - public static final int EM_CLOTHES_COLOR_BLUE = 8; // 蓝色 - public static final int EM_CLOTHES_COLOR_GREEN = 9; // 绿色 - public static final int EM_CLOTHES_COLOR_PURPLE = 10; // 紫色 - public static final int EM_CLOTHES_COLOR_BROWN = 11; // 棕色 - public static final int EM_CLOTHES_COLOR_OTHER = 12; // 棕色 - } - - //上衣类型 - public static class EM_COAT_TYPE extends Structure - { - public static final int EM_COAT_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_COAT_TYPE_LONG_SLEEVE = 1; // 长袖 - public static final int EM_COAT_TYPE_COTTA = 2; // 短袖 - } - - // 裤子类型 - public static class EM_TROUSERS_TYPE extends Structure - { - public static final int EM_TROUSERS_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_TROUSERS_TYPE_TROUSERS = 1; // 长裤 - public static final int EM_TROUSERS_TYPE_SHORTS = 2; // 短裤 - public static final int EM_TROUSERS_TYPE_SKIRT = 3; // 裙子 - } - - // 是否戴帽子 - public static class EM_HAS_HAT extends Structure - { - public static final int EM_HAS_HAT_UNKNOWN = 0; // 未知 - public static final int EM_HAS_HAT_NO = 1; // 不戴帽子 - public static final int EM_HAS_HAT_YES = 2; // 戴帽子 - } - - // 是否戴包(包括背包或拎包) - public static class EM_HAS_BAG extends Structure - { - public static final int EM_HAS_BAG_UNKNOWN = 0; // 未知 - public static final int EM_HAS_BAG_NO = 1; // 不带包 - public static final int EM_HAS_BAG_YES = 2; // 带包 - } - - // 全景广角图 - public static class SCENE_IMAGE_INFO extends Structure - { - public int nOffSet; // 在二进制数据块中的偏移 - public int nLength; // 图片大小,单位字节 - public int nWidth; // 图片宽度(像素) - public int nHeight; // 图片高度(像素) - public byte[] byReserved = new byte[56]; // 预留字节 - } - - // 人脸属性 - public static class NET_FACE_ATTRIBUTE extends Structure - { - public int emSex; // 性别, 详见 EM_DEV_EVENT_FACEDETECT_SEX_TYPE - public int nAge; // 年龄,-1表示该字段数据无效 - public int nFeatureValidNum; // 人脸特征数组有效个数,与 emFeature 结合使用 - public int[] emFeatures = new int[NET_MAX_FACEDETECT_FEATURE_NUM]; // 人脸特征数组,与 nFeatureValidNum 结合使用 , 详见 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE - public int emComplexion; // 肤色, 详见 EM_COMPLEXION_TYPE - public int emEye; // 眼睛状态, 详见 EM_EYE_STATE_TYPE - public int emMouth; // 嘴巴状态, 详见 EM_MOUTH_STATE_TYPE - public int emMask; // 口罩状态, 详见 EM_MASK_STATE_TYPE - public int emBeard; // 胡子状态, 详见 EM_BEARD_STATE_TYPE - public int nAttractive; // 魅力值, 0未识别,识别时范围1-100,得分高魅力高 - public NET_RECT stuBoundingBox; // 包围盒(8192坐标系) - public byte[] bReserved = new byte[112]; // 保留字节,留待扩展. - } - - // 肤色 - public static class EM_COMPLEXION_TYPE extends Structure - { - public static final int EM_COMPLEXION_NODISTI = 0; // 未识别 - public static final int EM_COMPLEXION_YELLOW = 1; // 黄 - public static final int EM_COMPLEXION_BLACK = 2; // 黑 - public static final int EM_COMPLEXION_WHITE = 3; // 白 - } - - // 人脸全景图 - public static class FACE_SCENE_IMAGE extends Structure - { - public int nOffSet; // 在二进制数据块中的偏移 - public int nLength; // 图片大小,单位字节 - public int nWidth; // 图片宽度(像素) - public int nHeight; // 图片高度(像素) - public byte[] byReserved = new byte[56]; // 预留字节 - } - - // 事件扩展信息 - public static class NET_EXTENSION_INFO extends Structure - { - public byte[] szEventID = new byte[MAX_EVENT_ID_LEN]; // 国标事件ID - public byte[] byReserved = new byte[80]; // 保留字节 - } - - // 当前人体特征是由什么事件产生的 - public static class NET_HUMANTRAIT_EXTENSION_INFO extends Structure - { - public byte[] szAdditionalCode = new byte[MAX_HUMANTRAIT_EVENT_LEN]; // 当前人体特征是由什么事件产生的,设备刚好返回32个字节数据,多加4个字节用于字节对齐和添加字符结束符 - public byte[] byReserved = new byte[32]; // 保留字节 - } - - // 事件类型 NET_ALARM_WIFI_SEARCH (搜索WIFI设备)对应的数据描述信息 - public static class ALARM_WIFI_SEARCH_INFO extends Structure - { - public int nWifiNum; // WIFI设备数量, 指示stuWifi的有效数量 - public NET_WIFI_DEV_INFO[] stuWifi = (NET_WIFI_DEV_INFO[])new NET_WIFI_DEV_INFO().toArray(1024); // 周围Wifi设备的信息 - public int nChannel; // 通道号 - public NET_WIFI_BASIC_INFO stuWifiBasiInfo; // Wifi事件上报基础信息 - public int bGPSinfo; // 是否包含GPS信息 - public NET_WIFI_GPS_INFO stuWifiGPSInfo; // GPS信息 - public byte[] reserved = new byte[376]; // 预留 - } - - // 搜索到的WIFI设备信息 - public static class NET_WIFI_DEV_INFO extends Structure - { - public byte[] szMac = new byte[NET_MACADDR_LEN]; // Wifi设备的Mac地址 - public int nLinkQuality; // 链接质量百分比, 0~100 - public NET_TIME_EX stuEnterTime; // 第一被搜索到的时间 - public NET_TIME_EX stuLeaveTime; // 消失的时间 - public int nSearchedCount; // 被搜索到的次数 - public byte[] szSSID = new byte[24]; // 网络名称 - public NET_TIME_EX UTC; // 事件发生时间 - public int emDevType; // WIFI设备类型, 参考 EM_WIRELESS_DEV_TYPE - public int nChannel; // Wifi设备当前所在的信道 - public int emAuth; // 认证方式, 参考 EM_WIRELESS_AUTHENTICATION - public int emEncrypt; // 数据加密方式, 参考 EM_WIRELESS_DATA_ENCRYPT - public byte[] szAPMac = new byte[NET_MACADDR_LEN]; // 接入热点Mac - public int nAPChannel; // 接入热点频道 - public byte[] szAPSSID = new byte[24]; // 接入热点SSID - public int emAPEncrypt; // 接入热点加密类型, 参考 EM_WIRELESS_DATA_ENCRYPT - public int nRssiQuality; // 信号强度 - public byte[] szManufacturer = new byte[MAX_MANUFACTURER_LEN];// Mac地址所属制造商 - public MACHISTORY_SSID[] szMacHistorySSIDList = (MACHISTORY_SSID[])new MACHISTORY_SSID().toArray(MAX_MACHISTORY_SSID_NUM); // 此设备曾经连接过的历史SSID列表 - public int nRetMacHistorySSIDNum; // 此设备实际连接过的SSID个数 - public byte[] reserved = new byte[264]; // 预留 - } - - // 历史SSID - public static class MACHISTORY_SSID extends Structure - { - public byte[] szMacHistorySSID = new byte[MAX_MACHISTORY_SSID_LEN]; // 历史SSID - } - - // 搜索到的WIFI基本信息 - public static class NET_WIFI_BASIC_INFO extends Structure - { - public int nPeriodUTC; // 本周期上报的起始时间,为同一上报周期的标识;当同一上报周期内设备总数超过单次上报数量上限时需要多次上报事件,该值作为同一上报周期内多次上报事件的标识码; - public int nDeviceSum; // 本周期上报的wifi总数,同一上报周期内的事件中的该值均应为本周期上报的wifi总数 - public int nCurDeviceCount; // 本次事件上报的Wifi设备数量,应与ALARM_WIFI_SEARCH_INFO结构体中的nWifiNum值一致;同一上报周期内该值的累积总数与nDeviceSum一致。 - public byte[] reserved = new byte[500]; // 预留字节 - } - - // 事件类型 NET_ALARM_WIFI_VIRTUALINFO_SEARCH (获取周围wifi设备虚拟信息事件)对应的数据描述信息 - public static class ALARM_WIFI_VIRTUALINFO_SEARCH_INFO extends Structure - { - public int nVirtualInfoNum; // WIFI设备虚拟身份数量, 指示stuVirtualInfo的有效数量 - public NET_WIFI_VIRTUALINFO[] stuVirtualInfo = (NET_WIFI_VIRTUALINFO[])new NET_WIFI_VIRTUALINFO().toArray(MAX_VIRTUALINFO_NUM); // 周围Wifi虚拟身份信息 - public int nChannel; // 通道号 - public byte[] reserved = new byte[512]; // 预留 - } - - // 搜索到的WIFI设备虚拟身份信息 - public static class NET_WIFI_VIRTUALINFO extends Structure - { - public NET_TIME_EX stuAccessTime; // 访问时间,时间不精确仅供参考 - public byte[] szSrcMac = new byte[NET_MACADDR_LEN]; // 虚拟信息的来源MAC,字母大写,用"-"分隔 - public byte[] szDstMac = new byte[NET_MACADDR_LEN]; // 虚拟信息的目标MAC,字母大写,用"-"分隔 - public int nProtocal; // 协议代号,上网应用对应的标识码 - public byte[] szUrl = new byte[NET_MAX_URL_LEN]; // 上网url - public byte[] szDomain = new byte[MAX_VIRTUALINFO_DOMAIN_LEN]; // 上网域 - public byte[] szTitle = new byte[MAX_VIRTUALINFO_TITLE_LEN]; // 上网标题 - public byte[] szUsrName = new byte[MAX_VIRTUALINFO_USERNAME_LEN]; // 用户名 - public byte[] szPassWord = new byte[MAX_VIRTUALINFO_PASSWORD_LEN]; // 密码 - public byte[] szPhoneNum = new byte[MAX_VIRTUALINFO_PHONENUM_LEN]; // 手机号 - public byte[] szImei = new byte[MAX_VIRTUALINFO_IMEI_LEN]; // 国际移动设备标识 - public byte[] szImsi = new byte[MAX_VIRTUALINFO_IMSI_LEN]; // 国际移动用户识别码 - public byte[] szLatitude = new byte[MAX_VIRTUALINFO_LATITUDE_LEN]; // 经度 - public byte[] szLongitude = new byte[MAX_VIRTUALINFO_LONGITUDE_LEN]; // 纬度 - public byte[] szSrcIP = new byte[NET_MAX_IPADDR_LEN_EX]; // 源IP - public byte[] szDstIP = new byte[NET_MAX_IPADDR_LEN_EX]; // 目的IP - public int nSrcPort; // 源端口 - public int nDstPort; // 目的端口 - public byte[] szSiteNum = new byte[MAX_COMMON_STRING_16]; // 场所编号 - public byte[] szDevNum = new byte[MAX_COMMON_STRING_32]; // 采集设备编号 - public byte[] szUserID = new byte[MAX_COMMON_STRING_32]; // 虚拟用户ID - public byte[] szIDFA = new byte[MAX_COMMON_STRING_64]; // 苹果手机的IDFA - public byte[] reserved = new byte[368]; // 预留 - } - - // 事件类型 EVENT_IVS_ACCESS_CTL (门禁事件)对应数据块描述信息 - public static class DEV_EVENT_ACCESS_CTL_INFO extends Structure - { - public int nChannelID; // 门通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - public NET_MSG_OBJECT stuObject; // 检测到的物体 - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public int emEventType; // 门禁事件类型, 参考 NET_ACCESS_CTL_EVENT_TYPE - public int bStatus; // 刷卡结果, 1表示成功, 0表示失败 - public int emCardType; // 卡类型, 参考 NET_ACCESSCTLCARD_TYPE - public int emOpenMethod; // 开门方式, 参考 NET_ACCESS_DOOROPEN_METHOD - public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号 - public byte[] szPwd = new byte[NET_MAX_CARDPWD_LEN]; // 密码 - public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 门读卡器ID - public byte[] szUserID = new byte[NET_COMMON_STRING_64]; // 开门用户 - public byte[] szSnapURL = new byte[NET_COMMON_STRING_128]; // 抓拍照片存储地址 - - public int nErrorCode; // 开门失败的原因,仅在bStatus为FALSE时有效 - // 0x00 没有错误 - // 0x10 未授权 - // 0x11 卡挂失或注销 - // 0x12 没有该门权限 - // 0x13 开门模式错误 - // 0x14 有效期错误 - // 0x15 防反潜模式 - // 0x16 胁迫报警未打开 - // 0x17 门常闭状态 - // 0x18 AB互锁状态 - // 0x19 巡逻卡 - // 0x1A 设备处于闯入报警状态 - // 0x20 时间段错误 - // 0x21 假期内开门时间段错误 - // 0x30 需要先验证有首卡权限的卡片 - // 0x40 卡片正确,输入密码错误 - // 0x41 卡片正确,输入密码超时 - // 0x42 卡片正确,输入指纹错误 - // 0x43 卡片正确,输入指纹超时 - // 0x44 指纹正确,输入密码错误 - // 0x45 指纹正确,输入密码超时 - // 0x50 组合开门顺序错误 - // 0x51 组合开门需要继续验证 - // 0x60 验证通过,控制台未授权 - - public int nPunchingRecNo; // 刷卡记录集中的记录编号 - public int nNumbers; // 抓图张数 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public byte[] byReserved = new byte[3]; // 字节对齐 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON - public int emAttendanceState; // 考勤状态, 参考 NET_ATTENDANCESTATE - public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN]; // 班级(考勤肯尼亚定制) - public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN]; // 电话(考勤肯尼亚定制) - public byte[] szCardName = new byte[NET_MAX_CARDNAME_LEN]; // 卡命名 - public byte[] bReserved = new byte[908]; // 保留字节,留待扩展. - } - - // 门禁事件类型 - public static class NET_ACCESS_CTL_EVENT_TYPE extends Structure - { - public static final int NET_ACCESS_CTL_EVENT_UNKNOWN = 0; - public static final int NET_ACCESS_CTL_EVENT_ENTRY = 1; // 进门 - public static final int NET_ACCESS_CTL_EVENT_EXIT = 2; // 出门 - } - - // 获取热度统计信息, 对应命令 NET_DEVSTATE_GET_HEAT_MAP - public static class NET_QUERY_HEAT_MAP extends Structure - { - public int dwSize; // 该结构体大小 - public NET_IN_QUERY_HEAT_MAP stuIn; // 热度统计信息查询条件 - public NET_OUT_QUERY_HEAT_MAP stuOut; // 热度统计信息查询结果 - - public NET_QUERY_HEAT_MAP() { - this.dwSize = this.size(); - } - } - - // 获取热度统计信息入参 - public static class NET_IN_QUERY_HEAT_MAP extends Structure - { - public int nChannel; // 通道号 - public NET_TIME_EX stuBegin; // 开始时间 - public NET_TIME_EX stuEnd; // 结束时间 - public int nPlanID; // 计划ID,仅球机有效,从1开始 - public int emDataType; // 希望获取的数据类型, 参考 EM_HEAT_PIC_DATA_TYPE - public byte[] reserved = new byte[1016]; // 预留 - } - - // 获取热度统计信息出参 - public static class NET_OUT_QUERY_HEAT_MAP extends Structure - { - public int nWidth; // 图片宽度 - public int nHeight; // 图片高度 - public Pointer pBufData; // 热度数据灰阶位图, 用户申请内存,大小为nBufLen - // 若emDataType为EM_HEAT_PIC_DATA_TYPE_GRAYDATA,则一个字节表示一个点 - // 若emDataType为EM_HEAT_PIC_DATA_TYPE_SOURCEDATA,则四个字节表示一个点 - public int nBufLen; // pBufData最大长度 - public int nBufRet; // 实际返回的长度 - public int nAverage; // 均值信息 - public int nPlanID; // 计划ID,与请求NET_IN_QUERY_HEAT_MAP的nPlanID对应 - public int emDataType; // 获取到的数据类型, 参考 EM_HEAT_PIC_DATA_TYPE - public int nPixelMax; // 实际像素点的最大值 - public int nPixelMin; // 实际像素点的最小值 - public byte[] reserved = new byte[1004]; // 预留 - } - - // 热度图数据类型 - public static class EM_HEAT_PIC_DATA_TYPE extends Structure - { - public static final int EM_HEAT_PIC_DATA_TYPE_UNKNOWN = 0; // 未知类型 - public static final int EM_HEAT_PIC_DATA_TYPE_GRAYDATA = 1; // 灰度数据 - public static final int EM_HEAT_PIC_DATA_TYPE_SOURCEDATA = 2; // 原始数据 - } - - - // 通道名称配置 - public static class NET_ENCODE_CHANNELTITLE_INFO extends Structure - { - public int dwSize; - public byte[] szChannelName = new byte[MAX_CHANNEL_NAME_LEN]; // 通道名称 - - public NET_ENCODE_CHANNELTITLE_INFO() { - this.dwSize = this.size(); - } - } - - // 视频分析全局配置 - public static class CFG_ANALYSEGLOBAL_INFO extends Structure - { - // 信息 - public byte[] szSceneType = new byte[MAX_NAME_LEN]; // 应用场景,详见"支持的场景列表", 参考 EM_SCENE_TYPE 里的场景 - - //交通场景信息 - public double CameraHeight; // 摄像头离地高度 单位:米 - public double CameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 - public CFG_POLYGON stuNearDetectPoint; // 近景检测点 - public CFG_POLYGON stuFarDectectPoint; // 远景检测点 - public int nNearDistance; // NearDetectPoint,转换到实际场景中时,离摄像头垂直线的水平距离 - public int nFarDistance; // FarDectectPoint,转换到实际场景中时,离摄像头垂直线的水平距离 - public byte[] szSubType = new byte[MAX_NAME_LEN]; // 交通场景的子类型,"Gate",卡口类型,"Junction" 路口类型,"ParkingSpace" 车位检测类型 - public int nLaneNum; // 车道数 - public CFG_LANE[] stuLanes = (CFG_LANE[])new CFG_LANE().toArray(MAX_LANE_NUM); // 车道信息 - public int nPlateHintNum; // 车牌字符暗示个数 - public PLATE_HINT[] szPlateHintsArr = (PLATE_HINT[])new PLATE_HINT().toArray(MAX_PLATEHINT_NUM); // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 - public int nLightGroupNum; // 灯组数 - public CFG_LIGHTGROUPS[] stLightGroups = (CFG_LIGHTGROUPS[])new CFG_LIGHTGROUPS().toArray(MAX_LIGHTGROUP_NUM); // 灯组配置信息 - public int bHangingWordPlate; // 是否识别挂字车牌 - public int bNonStdPolicePlate; // 是否识别非标准警牌 - public int bYellowPlateLetter; // 是否识别黄牌字母 - public int nReportMode; // 上报模式,0:未定义,1:上报所有违章车辆,2:上报车牌识别成功的违章车辆 - public int nPlateMatch; // 车牌匹配率,0~100,多次识别车牌使用,表示重复识别车牌和前一次识别车牌的一致性要求 - public int nJudgment; // 违章判定依据,0:未定义,1:按车道,2:按行驶方向,3:按车道和行驶方向 - public int nLeftDivisionPtCount; // 左转弯分界线点数 - public CFG_POLYLINE[] stLeftDivisionLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 左转弯分界线 - public int nRightDivisionPtCount; // 右转弯分界线点数 - public CFG_POLYLINE[] stRightDivisionLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 右转弯分界线 - public CFG_ADJUST_LIGHT_COLOR stAdjustLightColor; // 交通灯颜色校正配置 - public int nParkingSpaceNum; // 车位数 - public CFG_PARKING_SPACE[] stParkingSpaces = (CFG_PARKING_SPACE[])new CFG_PARKING_SPACE().toArray(MAX_PARKING_SPACE_NUM); // 车位配置信息,每个元素代表一个车位 - - - // 一般场景信息 - public int nStaffNum; // 标尺数 - public CFG_STAFF[] stuStaffs = (CFG_STAFF[])new CFG_STAFF().toArray(MAX_STAFF_NUM); // 标尺 - - public int nCalibrateAreaNum; // 标定区域数 - public CFG_CALIBRATEAREA_INFO[] stuCalibrateArea = (CFG_CALIBRATEAREA_INFO[])new CFG_CALIBRATEAREA_INFO().toArray(MAX_CALIBRATEBOX_NUM); // 标定区域(若该字段不存在,则以整幅场景为标定区域) - - public int bFaceRecognition; // 人脸识别场景是否有效 - public CFG_FACERECOGNITION_SCENCE_INFO stuFaceRecognitionScene; // 人脸识别场景 - - public byte abJitter; - public byte abDejitter; - public byte[] bReserved = new byte[2]; // 保留字段 - - public int nJitter; // 摄像机抖动率 : 摄像机抖动率,取值0-100,反应静止摄像机抖动程度,抖动越厉害,值越大。 - public int bDejitter; // 是否开启去抖动模块 目前不实现 - - public int abCompatibleMode; - public int nCompatibleMode; // 0:"OldTrafficRule" : 交通老规则兼容模式;1:"NewTrafficRule" : 交通新规则兼容模式;-1:字符串错误 - - public int nCustomDataLen; // 实际数据长度,不能大于1024 - public byte[] byCustomData = new byte[1024]; // 第三方自定义配置数据 - public double CameraAngle; // 摄像头与垂方向的夹角 - public CFG_POLYGON stuLandLineStart; // 地平线线段起始点(点的坐标坐标归一化到[0,8192)区间。) - public CFG_POLYGON stuLandLineEnd; // 地平线线段终止点(点的坐标坐标归一化到[0,8192)区间。) - - public int bFaceDetection; // 人脸检测场景是否有效 - public CFG_FACEDETECTION_SCENCE_INFO stuFaceDetectionScene; // 人脸检测场景 - public CFG_TIME_PERIOD stuDayTimePeriod; // 标定白天的时间段.(8,20),表示从8点到晚上20点为白天 - public CFG_TIME_PERIOD stuNightTimePeriod; // 标定黑夜的时间段.(20,7),表示从晚8点到凌晨7点为黑夜 - public CFG_TIME_PERIOD_SCENE_INFO stuTimePeriodSceneInfo; // 多场景标定白天和黑夜时间段 - public CFG_CALIBRATEAREA_SCENE_INFO stuCalibrateAreaSceneInfo; // 多场景标定区域配置信息 - public int emSwitchMode; // 昼夜算法切换模式,详见 CFG_TIMEPERIOD_SWITCH_MODE - - public int nSceneNum; // 场景数, >0时表示支持多场景, stuMultiScene有效 - public CFG_ANALYSEGLOBAL_SCENE[] stuMultiScene = (CFG_ANALYSEGLOBAL_SCENE[])new CFG_ANALYSEGLOBAL_SCENE().toArray(MAX_ANALYSE_SCENE_NUM); // 多场景配置 - - public int nSceneCount; // 实际场景个数 - public SCENE_TYPE_LIST[] szSceneTypeListArr = (SCENE_TYPE_LIST[])new SCENE_TYPE_LIST().toArray(MAX_SCENE_TYPE_LIST_SIZE);// 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案(可选) - public int emDepthType; // 画面景深, 参考 EM_DEPTH_TYPE - public int nPtzPresetId; // 云台预置点编号,0~255 - public int unLongitude; // 经度 单位百万分之一度 - public int unLatitude; // 纬度 单位百万分之一度 - } - - public static class PLATE_HINT extends Structure - { - public byte[] szPlateHints = new byte[MAX_NAME_LEN]; // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 - } - - public static class SCENE_TYPE_LIST extends Structure - { - public byte[] szSceneTypeList = new byte[CFG_COMMON_STRING_16]; // 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案(可选) - } - - // 车道信息 - public static class CFG_LANE extends Structure - { - public int nLaneId; // 车道编号 - public int nDirection; // 车道方向(车开往的方向),0-北 1-东北 2-东 3-东南 4-南 5-西南 6-西 7-西北 - public CFG_POLYLINE[] stuLeftLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 左车道线,车道线的方向表示车道方向,沿车道方向左边的称为左车道线 - public int nLeftLineNum; // 左车道线顶点数 - public CFG_POLYLINE[] stuRightLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 右车道线,车道线的方向表示车道方向,沿车道方向右边的称为右车道线 - public int nRightLineNum; // 右车道线顶点数 - public int nLeftLineType; // 左车道线属性,1-表示白实线,2- 白虚线,3- 黄线 - public int nRightLineType; // 右车道线属性,1-表示白实线,2- 白虚线,3- 黄线 - public int bDriveDirectionEnable; // 车道行驶方向使能, 1-true 0-false - public int nDriveDirectionNum; // 车道行驶方向数 - public DRIVE_DIRECTION[] szDriveDirectionArr = (DRIVE_DIRECTION[])new DRIVE_DIRECTION().toArray(MAX_LIGHT_DIRECTION); // 车道行驶方向,"Straight" 直行,"TurnLeft" 左转,"TurnRight" 右转,"U-Turn":掉头 - public int nStopLineNum; // 车道对应停止线顶点数 - public CFG_POLYLINE[] stuStopLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应停止线 - public int nTrafficLightNumber; // 车道对应的红绿灯组编号 - - public byte abDetectLine; // 对应能力集 - public byte abPreLine; - public byte abPostLine; - public byte[] byReserved = new byte[1]; - - public int nDetectLine; - public CFG_POLYLINE[] stuDetectLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的检测线 - public int nPreLine; - public CFG_POLYLINE[] stuPreLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的前置线 - public int nPostLine; - public CFG_POLYLINE[] stuPostLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的后置线 - public CFG_TRAFFIC_FLOWSTAT_DIR_INFO stuTrafficFlowDir; // 车道流量信息 - public int emRankType; // 道路等级,用于车流量统计上报交通状态, 参考 EM_LANE_RANK_TYPE - } - - public static class DRIVE_DIRECTION extends Structure - { - public byte[] szDriveDirection = new byte[MAX_NAME_LEN]; // 车道行驶方向,"Straight" 直行,"TurnLeft" 左转,"TurnRight" 右转,"U-Turn":掉头 - } - - // 折线的端点信息 - public static class CFG_POLYLINE extends Structure - { - public int nX; //0~8191 - public int nY; - } - - // 车辆流量统计车道方向信息 - public static class CFG_TRAFFIC_FLOWSTAT_DIR_INFO extends Structure - { - public int emDrivingDir; //行驶方向, 参考 CFG_FLOWSTAT_DIRECTION - public byte[] szUpGoing = new byte[CFG_FLOWSTAT_ADDR_NAME]; //上行地点 - public byte[] szDownGoing = new byte[CFG_FLOWSTAT_ADDR_NAME]; //下行地点 - } - - // 交通灯组配置信息 - public static class CFG_LIGHTGROUPS extends Structure - { - public int nLightGroupId; // 灯组编号 - public CFG_RECT stuLightLocation; // 灯组坐标 - public int nDirection; // 灯组的方向,1- 灯组水平向,2- 灯组垂直向 - public int bExternalDetection; // 是否为外接红绿灯信号,当外接红绿灯时,以外界信号为判断依据。外界信号每次跳变时通知 - public int bSwingDetection; // 是否支持自适应灯组摇摆检测,在风吹或者容易震动的场景下,位置会进行一定的浮动偏差。如果由算法自行检测,会增加检测时间 - public int nLightNum; // 灯组中交通灯的数量 - public CFG_LIGHTATTRIBUTE[] stuLightAtrributes = (CFG_LIGHTATTRIBUTE[])new CFG_LIGHTATTRIBUTE().toArray(MAX_LIGHT_NUM); // 灯组中各交通灯的属性 - - } - - // 交通灯属性 - public static class CFG_LIGHTATTRIBUTE extends Structure - { - public int bEnable; // 当前交通灯是否有效,与车辆通行无关的交通需要设置无效 - public int nTypeNum; - public LIGHT_TYPE[] szLightTypeArr = (LIGHT_TYPE[])new LIGHT_TYPE().toArray(MAX_LIGHT_TYPE); // 当前交通灯显现内容(包括:红-Red,黄-Yellow,绿-Green,倒计时-Countdown),如某交通灯可以显示红黄绿三种颜色,某交通灯只显示倒计时 - public int nDirectionNum; - public DIRECTION[] szDirectionArr = (DIRECTION[])new DIRECTION().toArray(MAX_LIGHT_DIRECTION); // 交通灯指示的行车方向,"Straight": 直行,"TurnLeft":左转,"TurnRight":右转,"U-Turn": 掉头 - public int nYellowTime; // 黄灯亮时间 - } - - public static class LIGHT_TYPE extends Structure - { - public byte[] szLightType = new byte[MAX_NAME_LEN]; // 当前交通灯显现内容(包括:红-Red,黄-Yellow,绿-Green,倒计时-Countdown),如某交通灯可以显示红黄绿三种颜色,某交通灯只显示倒计时 - } - - public static class DIRECTION extends Structure - { - public byte[] szDirection = new byte[MAX_NAME_LEN]; // 交通灯指示的行车方向,"Straight": 直行,"TurnLeft":左转,"TurnRight":右转,"U-Turn": 掉头 - } - - // 交通灯颜色校正配置 - public static class CFG_ADJUST_LIGHT_COLOR extends Structure - { - public int nMode; // 红灯颜色校正模式 0:未定义 1:红绿灯才校正 2:一直校正 - public int bEnable; // 是否允许图片红绿灯颜色校正 - public int nLevel; // 校正等级 范围0~100,数值越大矫正越明显 - public int bVideoEnable; // 是否启用视频涂红功能,存在此项时,Level值使用LevelSeparate下的Level值 - public ADJUST_LEVEL_SEP[] stLevelSep = (ADJUST_LEVEL_SEP[])new ADJUST_LEVEL_SEP().toArray(4); // 分立等级,目前为4个 - } - - // 交通灯颜色校正配置,分立项 - public static class ADJUST_LEVEL_SEP extends Structure - { - public int nType; // 0:未定义,1:视频,2:图片 - public int nTime; // 0:未定义,1:白天,2:夜晚 - public int nLevel; // 范围0~100,数值越大矫正越明显 - } - - public static class CFG_PARKING_SPACE extends Structure - { - public int nNumber; //车位编号 - public CFG_REGION stArea; //检测区域 - public int nShieldAreaNum; //有效屏蔽区个数 - public CFG_REGION[] stShieldArea = - (CFG_REGION[])new CFG_REGION().toArray(MAX_SHIELD_AREA_NUM); //屏蔽区域 - } - - public static class CFG_STAFF extends Structure - { - public CFG_POLYLINE stuStartLocation; // 起始坐标点 - public CFG_POLYLINE stuEndLocation; // 终止坐标点 - public float nLenth; // 实际长度,单位米 - public int emType; // 标尺类型, 参考 EM_STAFF_TYPE - } - - // 标定区域,普通场景使用 - public static class CFG_CALIBRATEAREA_INFO extends Structure - { - public int nLinePoint; // 水平方向标尺线顶点数 - public CFG_POLYGON[] stuLine = - (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYLINE_NUM);// 水平方向标尺线 - public float fLenth; // 实际长度 - public CFG_REGION stuArea; // 区域 - public int nStaffNum; // 垂直标尺数 - public CFG_STAFF[] stuStaffs = - (CFG_STAFF[])new CFG_STAFF().toArray(MAX_STAFF_NUM); // 垂直标尺 - public int emType; // 区域类型, 参考 EM_CALIBRATEAREA_TYPE - public int emMethodType; // 标定方式, 参考 EM_METHOD_TYPE - } - - // 人脸识别场景 - public static class CFG_FACERECOGNITION_SCENCE_INFO extends Structure - { - public double dbCameraHeight; // 摄像头离地高度 单位:米 - public double dbCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 - public int nMainDirection; // 人流主要方向顶点数 - public CFG_POLYGON[] stuMainDirection = - (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYLINE_NUM); // 人流主要方向,第一个点是起始点,第二个点是终止点 - public byte byFaceAngleDown; // 需要检测的人脸向下最大偏角, 单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。 - public byte byFaceAngleUp; // 需要检测的人脸向上最大偏角,单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。 - public byte byFaceAngleLeft; // 需要检测的人脸向左最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头 - public byte byFaceAngleRight; // 需要检测的人脸向右最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头 - public int emDetectType; // 人脸检测类型, 参考 EM_FACEDETECTION_TYPE - } - - // 人脸检测场景 - public static class CFG_FACEDETECTION_SCENCE_INFO extends Structure - { - public double dbCameraHeight; // 摄像头离地高度 单位:米 - public double dbCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 - public int nMainDirection; // 人流主要方向顶点数 - public CFG_POLYGON[] stuMainDirection = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYLINE_NUM); // 人流主要方向,第一个点是起始点,第二个点是终止点 - public byte byFaceAngleDown; // 需要检测的人脸向下最大偏角, 单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。 - public byte byFaceAngleUp; // 需要检测的人脸向上最大偏角,单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。 - public byte byFaceAngleLeft; // 需要检测的人脸向左最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头 - public byte byFaceAngleRight; // 需要检测的人脸向右最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头 - public int emDetectType; // 人脸检测类型, 参考 EM_FACEDETECTION_TYPE - } - - public static class CFG_TIME_PERIOD extends Structure - { - public CFG_TIME stuStartTime; - public CFG_TIME stuEndTime; - } - - public static class CFG_TIME extends Structure - { - public int dwHour; // 时 - public int dwMinute; // 分 - public int dwSecond; // 秒 - } - - // 多场景标定白天和黑夜配置 - public static class CFG_TIME_PERIOD_SCENE_INFO extends Structure - { - public int dwMaxTimePeriodSceneNum; // 多场景标定白天和黑夜配置最大个数(需要申请此大小内存) - public int dwRetTimePeriodSceneNum; // 实际包含多场景标定白天和黑夜配置个数 - public Pointer pstuTimePeriodScene; // 多场景标白天和黑夜配置域单元,由用户申请内存,大小为sizeof(CFG_TIME_PERIOD_SCENE_UNIT)*dwMaxTimePeriodSceneNum - // 指向 CFG_TIME_PERIOD_SCENE_UNIT[] - } - - // 多场景标定区域配置 - public static class CFG_CALIBRATEAREA_SCENE_INFO extends Structure - { - public int dwMaxSceneCalibrateAreaNum; // 多场景标定区域最大个数(需要申请此大小内存) - public int dwRetSceneCalibrateAreaNum; // 实际包含多场景标定区域个数 - public Pointer pstuCalibrateArea; // 多场景标定区域单元, 由用户申请内存, 指向 CFG_CALIBRATEAREA_SCENE_UNIT[]。 - // 大小为 sizeof(CFG_CALIBRATEAREA_SCENE_UNIT)*dwMaxSceneCalibrateAreaNum - } - - // 昼夜算法切换模式 - public static class CFG_TIMEPERIOD_SWITCH_MODE extends Structure - { - public static final int CFG_TIMEPERIOD_SWITCH_MODE_UNKNOWN = 0; // 未知 - public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYCOLOR = 1; // 通过色彩切换 - public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYBRIGHTNESS = 2; // 通过亮度切换 - public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYPOS = 3; // 通过经纬度计算日出日落时间切换 - } - - // 视频分析全局配置场景 - public static class CFG_ANALYSEGLOBAL_SCENE extends Structure - { - public byte[] szSceneType = new byte[MAX_NAME_LEN]; // 应用场景,详见"支持的场景列表" - - public union union = new union(); - // 以下为场景具体信息, 根据szSceneType决定哪个场景有效 - public static class union extends Union { - public CFG_FACEDETECTION_SCENCE_INFO stuFaceDetectionScene; // 人脸检测场景/人脸识别检查 - public CFG_TRAFFIC_SCENE_INFO stuTrafficScene; // 交通场景 - public CFG_NORMAL_SCENE_INFO stuNormalScene; // 普通场景/远景场景/中景场景/近景场景/室内场景/人数统计场景 - public CFG_TRAFFIC_TOUR_SCENE_INFO stuTrafficTourScene; // 交通巡视场景 - } - - public int emDepthType; // 画面景深, 参考 EM_DEPTH_TYPE - public int nPtzPresetId; // 云台预置点编号,0~255 - // 以下是有多个大类业务的情况 - public int nSceneListCount; // 实际场景个数 - public SCENE_TYPE_LIST[] szSceneTypeListArr = (SCENE_TYPE_LIST[])new SCENE_TYPE_LIST().toArray(MAX_SCENE_TYPE_LIST_SIZE);// 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案 - // 多个大类业务时有效 - public CFG_INTELLI_UNIFORM_SCENE stuUniformScene; // 统一场景配置 - } - - // 交通场景 - public static class CFG_TRAFFIC_SCENE_INFO extends Structure - { - public int abCompatibleMode; - public int nCompatibleMode; // 0:"OldTrafficRule" : 交通老规则兼容模式;1:"NewTrafficRule" : 交通新规则兼容模式;-1:字符串错误 - public float fCameraHeight; // 摄像头离地高度 单位:米 - public float fCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 - public byte[] szSubType = new byte[MAX_NAME_LEN]; // 交通场景的子类型,"Gate" 卡口类型,"Junction" 路口类型 - // "Tunnel"隧道类型 , "ParkingSpace"车位检测类型 - // "Bridge"桥梁类型 - // "Freeway"高速公路类型 - public CFG_POLYGON stuNearDetectPoint; // 近景检测点 - public CFG_POLYGON stuFarDectectPoint; // 远景检测点 - public int nNearDistance; // NearDetectPoint,转换到实际场景中时,离摄像头垂直线的水平距离 - public int nFarDistance; // FarDectectPoint,转换到实际场景中时,离摄像头垂直线的水平距离 - public int nPlateHintNum; // 车牌字符暗示个数 - public PLATE_HINT[] szPlateHintsArr = (PLATE_HINT[])new PLATE_HINT().toArray(MAX_PLATEHINT_NUM); // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 - public int nLaneNum; // 车道数 - public CFG_LANE[] stuLanes = (CFG_LANE[])new CFG_LANE().toArray(MAX_LANE_NUM); // 车道信息 - public int nLightGroupNum; // 灯组数 - public CFG_LIGHTGROUPS[] stLightGroups = (CFG_LIGHTGROUPS[])new CFG_LIGHTGROUPS().toArray(MAX_LIGHTGROUP_NUM); // 灯组配置信息 - public int bHangingWordPlate; // 是否识别挂字车牌 - public int bNonStdPolicePlate; // 是否识别非标准警牌 - public int bYellowPlateLetter; // 是否识别黄牌字母 - public int nReportMode; // 上报模式,0:未定义,1:上报所有违章车辆,2:上报车牌识别成功的违章车辆 - public int nPlateMatch; // 车牌匹配率,0~100,多次识别车牌使用,表示重复识别车牌和前一次识别车牌的一致性要求 - public int nJudgment; // 违章判定依据,0:未定义,1:按车道,2:按行驶方向,3:按车道和行驶方向 - public int nLeftDivisionPtCount; // 左转弯分界线点数 - public CFG_POLYLINE[] stLeftDivisionLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 左转弯分界线 - public int nRightDivisionPtCount; // 右转弯分界线点数 - public CFG_POLYLINE[] stRightDivisionLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 右转弯分界线 - public CFG_ADJUST_LIGHT_COLOR stAdjustLightColor; // 交通灯颜色校正配置 - public int nParkingSpaceNum; // 车位数 - public CFG_PARKING_SPACE[] stParkingSpaces = (CFG_PARKING_SPACE[])new CFG_PARKING_SPACE().toArray(MAX_PARKING_SPACE_NUM);// 车位配置信息,每个元素代表一个车位 - - } - - // 普遍场景 - public static class CFG_NORMAL_SCENE_INFO extends Structure - { - public float fCameraHeight; // 摄像头离地高度 单位:米 - public float fCameraAngle; // 摄像头与垂方向的夹角 单位度,0~90, - public float fCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米 - public CFG_POLYGON stuLandLineStart; // 地平线线段起始点(点的坐标坐标归一化到[0,8192)区间。) - public CFG_POLYGON stuLandLineEnd; // 地平线线段终止点(点的坐标坐标归一化到[0,8192)区间。) - } - - // 交通巡视场景 - public static class CFG_TRAFFIC_TOUR_SCENE_INFO extends Structure - { - public int nPlateHintNum; // 车牌字符暗示个数 - public PLATE_HINT[] szPlateHintsArr = (PLATE_HINT[])new PLATE_HINT().toArray(MAX_PLATEHINT_NUM); // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 - } - - // 统一场景配置,TypeList存在时配置此场景 - public static class CFG_INTELLI_UNIFORM_SCENE extends Structure - { - public byte[] szSubType = new byte[MAX_NAME_LEN]; // 交通场景的子类型,"Gate" 卡口类型,"Junction" 路口类型 - // "Tunnel"隧道类型 , "ParkingSpace"车位检测类型 - // "Bridge"桥梁类型 - // "Freeway"高速公路类型 - public int nPlateHintNum; // 车牌字符暗示个数 - public PLATE_HINT[] szPlateHints = (PLATE_HINT[])new PLATE_HINT[MAX_PLATEHINT_NUM]; // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高 - public int nLaneNum; // 车道数 - public CFG_LANE[] stuLanes = (CFG_LANE[])new CFG_LANE().toArray(MAX_LANE_NUM); // 车道信息 - } - - // CLIENT_MatrixAddCamerasByDevice 接口输入参数 - public static class NET_IN_ADD_LOGIC_BYDEVICE_CAMERA extends Structure - { - public int dwSize; - public byte[] pszDeviceID = new byte[NET_DEV_ID_LEN]; // 设备ID - public NET_REMOTE_DEVICE stuRemoteDevice; // 远程设备信息 - public int nCameraCount; // 视频源信息数量 - public Pointer pCameras; // 视频源信息数组,用户分配内存,大小为sizeof(NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM)*nCameraCount - // 对应 NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM[] - - public NET_IN_ADD_LOGIC_BYDEVICE_CAMERA() { - this.dwSize = this.size(); - } - } - - // CLIENT_MatrixAddCamerasByDevice 接口输出参数 - public static class NET_OUT_ADD_LOGIC_BYDEVICE_CAMERA extends Structure - { - public int dwSize; - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN]; // 设备ID - public int nMaxResultCount; // 结果数组大小, 用户填写 - public int nRetResultCount; // 实际结果数量 - public Pointer pResults; // 添加视频源结果数组,用户分配内存,大小为sizeof(NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT)*nMaxResultCount - // 对应 NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT[] - - public NET_OUT_ADD_LOGIC_BYDEVICE_CAMERA() { - this.dwSize = this.size(); - } - } - - // 视频源信息 - public static class NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM extends Structure - { - public int dwSize; - public int nUniqueChannel; // 统一编号 - public int nChannel; // 通道号 - - public NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM() { - this.dwSize = this.size(); - } - } - - // 添加视频源结果信息 - public static class NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT extends Structure - { - public int dwSize; - public int nUniqueChannel; // 统一编号 - public int nFailedCode; // 失败码, 0-成功,1-通道不支持设置 - - public NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT() { - this.dwSize = this.size(); - } - } - - // 事件类型 EVENT_IVS_FACEDETECT (人脸检测事件)对应的规则配置 - public static class CFG_FACEDETECT_INFO extends Structure - { - public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名 - public byte bRuleEnable; // 规则使能, 1-true 0-false - public byte[] bReserved = new byte[3]; // 保留字段 - public int nObjectTypeNum; // 相应物体类型个数 - public MAX_OBJECT_LIST[] szObjectTypesArr = (MAX_OBJECT_LIST[])new MAX_OBJECT_LIST().toArray(MAX_OBJECT_LIST_SIZE); // 相应物体类型列表 - public int nDetectRegionPoint; // 检测区顶点数 - public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区 - public int nHumanFaceTypeCount; // 触发事件的人脸类型个数 - public MAX_HUMANFACE_LIST[] szHumanFaceTypeArr = (MAX_HUMANFACE_LIST[])new MAX_HUMANFACE_LIST().toArray(MAX_HUMANFACE_LIST_SIZE); // 触发事件的人脸类型 - public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动 - public TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_10[])new TIME_SECTION_WEEK_DAY_10().toArray(WEEK_DAY_NUM); // 事件响应时间段 - public int nPtzPresetId; // 云台预置点编号 0~65535 - public int nMinDuration; // 最短触发时间,单位:秒 - public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测 - public int nReportInterval; // 重复报警间隔,单位:秒,[0,600](等于0表示不重复报警) - public int bSizeFileter; // 规则特定的尺寸过滤器是否有效 - public CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器, 1-true 0-false - public int bFeatureEnable; // 是否开启人脸属性识别, IPC增加, 1-true 0-false - // (通过FaceDetection能力中的FeatureSupport来确定该配置是否可以设置) - public int nFaceFeatureNum; // 需要检测的人脸属性个数 - public int[] emFaceFeatureType = new int[MAX_FEATURE_LIST_SIZE]; // 需检测的人脸属性, 通过FaceDetection能力来获取支持哪些人脸属性, 参考 EM_FACEFEATURE_TYPE - } - - public static class MAX_OBJECT_LIST extends Structure - { - public byte[] szObjectTypes = new byte[MAX_NAME_LEN]; // 相应物体类型列表 - } - - public static class MAX_HUMANFACE_LIST extends Structure - { - public byte[] szHumanFaceType = new byte[MAX_NAME_LEN]; // 触发事件的人脸类型 - } - - public static class TIME_SECTION_WEEK_DAY_10 extends Structure - { - public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(MAX_REC_TSECT_EX); // 事件响应时间段 - } - - public static class TIME_SECTION_WEEK_DAY_6 extends Structure - { - public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(MAX_REC_TSECT); // 事件响应时间段, 每天最多6个时间段 - } - - public static class TIME_SECTION_WEEK_DAY_4 extends Structure - { - public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(MAX_DOOR_TIME_SECTION); // 事件响应时间段, 每天最多4个时间段 - } - - public static class TIME_SECTION_WEEK_DAY_2 extends Structure - { - public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(MAX_NAS_TIME_SECTION); // 事件响应时间段, 每天最多4个时间段 - } - - // 设备ID - public static class DEVICE_ID extends Structure - { - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID - } - - // 设备通知类型 - public static class EM_DEVICE_NOTIFY_TYPE extends Structure - { - public static final int EM_DEVICE_NOTIFY_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_DEVICE_NOTIFY_TYPE_NEW = 1; // 新设备添加 - public static final int EM_DEVICE_NOTIFY_TYPE_UPDATE = 2; // 设备信息更新 - public static final int EM_DEVICE_NOTIFY_TYPE_REMOVE = 3; // 设备删除 - public static final int EM_DEVICE_NOTIFY_TYPE_CONNECT = 4; // 设备有通道上下线 - } - - // 向设备注册的回调返回信息 - public static class NET_CB_ATTACH_DEVICE_STATE extends Structure - { - public int emNotifyType; // 通知类型, 详见 EM_DEVICE_NOTIFY_TYPE - public int nRetCount; // 设备个数 - public DEVICE_ID[] szDeviceIDsArr = (DEVICE_ID[])new DEVICE_ID().toArray(MAX_LINK_DEVICE_NUM); // 设备列表 - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // CLIENT_AttachDeviceState 注册设备状态回调入参结构 - public static class NET_IN_ATTACH_DEVICE_STATE extends Structure - { - public int dwSize; - public StdCallCallback cbDeviceState; //回调函数 - public Pointer dwUser; //用户数据 - - public NET_IN_ATTACH_DEVICE_STATE() { - this.dwSize = this.size(); - } - } - - // CLIENT_AttachDeviceState 注册设备状态回调出参结构 - public static class NET_OUT_ATTACH_DEVICE_STATE extends Structure - { - public int dwSize; - - public NET_OUT_ATTACH_DEVICE_STATE() { - this.dwSize = this.size(); - } - } - - // CLIENT_AsyncAddDevice 添加设备入参结构 - public static class NET_IN_ASYNC_ADD_DEVICE extends Structure - { - public int dwSize; - public int nCount; // URL个数 - public DEVICE_URL[] szUrlsArr = (DEVICE_URL[])new DEVICE_URL().toArray(MAX_ADD_DEVICE_NUM); // URL组 - - public NET_IN_ASYNC_ADD_DEVICE() { - this.dwSize = this.size(); - } - } - - // 设备URL - public static class DEVICE_URL extends Structure { - public byte[] szUrl = new byte[MAX_COMMON_STRING_512]; // URL - } - - // CLIENT_AsyncAddDevice 添加设备出参结构 - public static class NET_OUT_ASYNC_ADD_DEVICE extends Structure - { - public int dwSize; - public int nTaskID; //任务ID - - public NET_OUT_ASYNC_ADD_DEVICE() { - this.dwSize = this.size(); - } - } - - // 设备的添加状态 - public static class EM_DEVICE_ADD_STATE extends Structure - { - public static final int EM_DEVICE_ADD_STATE_UNKNOWN = 0; // 未知 - public static final int EM_DEVICE_ADD_STATE_WAIT = 1; // 等待添加 - public static final int EM_DEVICE_ADD_STATE_CONNECT = 2; // 连接中 - public static final int EM_DEVICE_ADD_STATE_FAILURE = 3; // 添加失败 - public static final int EM_DEVICE_ADD_STATE_SUCCESS = 4; // 添加成功 - public static final int EM_DEVICE_ADD_STATE_STOP = 5; // 停止添加 - } - - // 注册添加设备的回调返回信息 - public static class NET_CB_ATTACH_ADD_DEVICE extends Structure - { - public int nTaskID; // 任务ID - public int emAddState; // 添加设备结果 - public int nIndex; // 任务中设备序号 - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // CLIENT_AttachAddDevice 注册添加设备回调入参结构 - public static class NET_IN_ATTACH_ADD_DEVICE extends Structure - { - public int dwSize; - public StdCallCallback cbAddDevice; //回调函数 - public Pointer dwUser; //用户数据 - - public NET_IN_ATTACH_ADD_DEVICE() { - this.dwSize = this.size(); - } - } - - // CLIENT_AttachAddDevice 注册添加设备回调出参结构 - public static class NET_OUT_ATTACH_ADD_DEVICE extends Structure - { - public int dwSize; - - public NET_OUT_ATTACH_ADD_DEVICE() { - this.dwSize = this.size(); - } - } - - // CLIENT_GetAddDeviceInfo 获取添加中的设备状态入参结构 - public static class NET_IN_GET_ADD_DEVICE_LIST_INFO extends Structure - { - public int dwSize; - public int nTaskID; // 任务ID - public int nCount; // 设备个数 - public int[] nIndex = new int[MAX_ADD_DEVICE_NUM]; // 设备序号列表(NET_IN_ADD_DEVICE中szUrls的序号,从0开始) - - public NET_IN_GET_ADD_DEVICE_LIST_INFO() { - this.dwSize = this.size(); - } - } - - // 添加中设备的结果信息 - public static class NET_GET_ADD_DEVICE_INFO extends Structure - { - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID - public byte[] szUrl = new byte[NET_COMMON_STRING_512]; // url - public int emAddState; // 当前添加状态,详见 EM_DEVICE_ADD_STATE - public int nErrorCode; // 错误码 - public byte[] byReserved = new byte[512]; // 保留字节 - } - - // CLIENT_GetAddDeviceInfo 获取添加中的设备状态出参结构 - public static class NET_OUT_GET_ADD_DEVICE_LIST_INFO extends Structure - { - public int dwSize; - public int nRetCount; // 设备个数 - public NET_GET_ADD_DEVICE_INFO[] stuDeviceInfo = - (NET_GET_ADD_DEVICE_INFO[])new NET_GET_ADD_DEVICE_INFO().toArray(MAX_ADD_DEVICE_NUM); // 设备信息列表 - - public NET_OUT_GET_ADD_DEVICE_LIST_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_GetDeviceInfo 获取已添加的设备状态入参结构 - public static class NET_IN_GET_DEVICE_LIST_INFO extends Structure - { - public int dwSize; - public int nCount; // 设备个数 - public DEVICE_ID[] szDeviceIDsArr = (DEVICE_ID[])new DEVICE_ID().toArray(MAX_LINK_DEVICE_NUM); // 设备列表 - - public NET_IN_GET_DEVICE_LIST_INFO() { - this.dwSize = this.size(); - } - } - - // 已添加设备的结果信息 - public static class NET_GET_DEVICE_INFO extends Structure - { - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID - public byte[] szUrl = new byte[NET_COMMON_STRING_512]; // url - public byte[] szSerialNo = new byte[NET_COMMON_STRING_32]; // 设备序列号 - public byte[] szDeviceType = new byte[NET_COMMON_STRING_64]; // 设备类型 - public byte[] szDeviceClass = new byte[NET_DEV_CLASS_LEN]; // 设备大类 - public int nMacCount; // 设备mac个数 - public DEVICE_MAC[] szMacsArr = (DEVICE_MAC[])new DEVICE_MAC().toArray(MAX_MACADDR_NUM); // 设备mac地址组 - public byte[] szDevSoftVersion = new byte[NET_COMMON_STRING_128]; // 设备软件版本号 - public byte[] szDeviceName = new byte[NET_DEV_NAME_LEN]; // 设备名称 - public byte[] szDetail = new byte[NET_COMMON_STRING_512]; // 设备详细信息 - public int nVideoInputCh; // 视频输入通道数 - public int nVideoOutputCh; // 视频输出通道数 - public int nAudioInputCh; // 音频输入通道数 - public int nAudioOutputCh; // 音频输出通道数 - public int nAlarmInputCh; // 报警输入通道数 - public int nAlarmOutputCh; // 报警输出通道数 - public int nErrorCode; // 设备离线错误码 - public int nVtoDoors; // 门禁设备可控制的门的总数 - public byte byOnline; // 设备是否在线 0:离线 1:在线 - public byte[] byReserved = new byte[511]; // 保留字节 - } - - // 设备mac地址 - public static class DEVICE_MAC extends Structure { - public byte[] szMac = new byte[NET_MACADDR_LEN]; // 设备mac地址 - } - - // CLIENT_GetDeviceInfo 获取已添加的设备状态出参结构 - public static class NET_OUT_GET_DEVICE_LIST_INFO extends Structure - { - public int dwSize; - public int nMaxCount; // 用户申请的设备个数 - public int nRetCount; // 实际返回的设备个数 - public Pointer pstuDeviceInfo; // 设备信息列表 用户分配内存,大小为sizeof(NET_GET_DEVICE_INFO)*nMaxCount, 对应 NET_GET_DEVICE_INFO[] - - public NET_OUT_GET_DEVICE_LIST_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_SetConnectChannel 设置连接通道入参结构 - public static class NET_IN_SET_CONNECT_CHANNEL extends Structure - { - public int dwSize; - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID - public int nCount; // 通道个数 - public int[] nChannels = new int[MAX_DEVICE_CHANNEL_NUM]; // 通道列表 - - public NET_IN_SET_CONNECT_CHANNEL() { - this.dwSize = this.size(); - } - } - - // CLIENT_SetConnectChannel 设置连接通道出参结构 - public static class NET_OUT_SET_CONNECT_CHANNEL extends Structure - { - public int dwSize; - - public NET_OUT_SET_CONNECT_CHANNEL() { - this.dwSize = this.size(); - } - } - - // CLIENT_GetChannelInfo 获取设备通道信息入参结构 - public static class NET_IN_GET_CHANNEL_INFO extends Structure - { - public int dwSize; - public byte[] szDeviceID = new byte[NET_DEV_ID_LEN_EX]; // 设备ID - - public NET_IN_GET_CHANNEL_INFO() { - this.dwSize = this.size(); - } - } - - // 获取设备通道信息结果信息 - public static class NET_GET_CHANNEL_INFO extends Structure - { - public int nRemoteChannel; // 远程通道号 - public int nLogicChannel; // 分配的逻辑通道 - public byte[] szName = new byte[NET_DEV_NAME_LEN]; // 通道名称 - public byte[] szDetail = new byte[NET_COMMON_STRING_512]; // 设备详细信息 - public byte[] szDeviceType = new byte[NET_COMMON_STRING_64]; // 设备类型 - public byte[] szDeviceClass = new byte[NET_DEV_CLASS_LEN]; // 设备大类 - public byte[] szIP = new byte[NET_MAX_IPADDR_LEN]; // ip地址 - public byte[] szMac = new byte[NET_MACADDR_LEN]; // 设备mac地址 - public byte[] szSerialNo = new byte[NET_DEV_SERIALNO_LEN]; // 设备序列号 - public byte[] szDevSoftVersion = new byte[NET_COMMON_STRING_128]; // 设备软件版本号 - public int nVideoInputCh; // 视频输入通道数 - public int nVideoOutputCh; // 视频输出通道数 - public int nAudioInputCh; // 音频输入通道数 - public int nAudioOutputCh; // 音频输出通道数 - public int nAlarmInputCh; // 报警输入通道数 - public int nAlarmOutputCh; // 报警输出通道数 - public byte byOnline; // 通道是否在线0:离线 1:在线 - public byte byUsed; // 该通道是否被本地设备使用 0:未使用 1:使用 - public byte[] byReserved = new byte[510]; // 保留字节 - } - - // CLIENT_GetChannelInfo 获取设备通道信息出参结构 - public static class NET_OUT_GET_CHANNEL_INFO extends Structure - { - public int dwSize; - public int nMaxCount; // 用户申请的通道个数 - public int nRetCount; // 实际返回的通道个数 - public Pointer pstuChannelInfo; // 通道信息列表 用户分配内存,大小为sizeof(NET_GET_CHANNEL_INFO)*nMaxCount, 对应 NET_GET_CHANNEL_INFO[] - - public NET_OUT_GET_CHANNEL_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_RemoveDevice 删除设备入参结构 - public static class NET_IN_REMOVE_DEVICE extends Structure - { - public int dwSize; - public int nCount; // 设备个数 - public DEVICE_ID[] szDeviceIDsArr = (DEVICE_ID[])new DEVICE_ID().toArray(MAX_LINK_DEVICE_NUM); // 设备列表 - - public NET_IN_REMOVE_DEVICE() { - this.dwSize = this.size(); - } - } - // CLIENT_RemoveDevice 删除设备出参结构 - public static class NET_OUT_REMOVE_DEVICE extends Structure - { - public int dwSize; - - public NET_OUT_REMOVE_DEVICE() { - this.dwSize = this.size(); - } - } - - // CLIENT_CancelAddDeviceTask 接口输入参数 - public static class NET_IN_CANCEL_ADD_TASK extends Structure - { - public int dwSize; - public int nTaskID; // 任务ID - - public NET_IN_CANCEL_ADD_TASK() { - this.dwSize = this.size(); - } - } - - // CLIENT_CancelAddDeviceTask 接口输出参数 - public static class NET_OUT_CANCEL_ADD_TASK extends Structure - { - public int dwSize; - - public NET_OUT_CANCEL_ADD_TASK() { - this.dwSize = this.size(); - } - } - - // CLIENT_ConfirmAddDeviceTask 接口输入参数 - public static class NET_IN_CONFIRM_ADD_TASK extends Structure - { - public int dwSize; - public int nTaskID; // 任务ID - - public NET_IN_CONFIRM_ADD_TASK() { - this.dwSize = this.size(); - } - } - - // CLIENT_ConfirmAddDeviceTask 接口输出参数 - public static class NET_OUT_CONFIRM_ADD_TASK extends Structure - { - public int dwSize; - - public NET_OUT_CONFIRM_ADD_TASK() { - this.dwSize = this.size(); - } - } - - // CLIENT_SCADAAlarmAttachInfo()接口输入参数 - public static class NET_IN_SCADA_ALARM_ATTACH_INFO extends Structure - { - public int dwSize; - public StdCallCallback cbCallBack; // 数据回调函数,对应回调 fSCADAAlarmAttachInfoCallBack - public Pointer dwUser; // 用户定义参数 - - public NET_IN_SCADA_ALARM_ATTACH_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_SCADAAlarmAttachInfo()接口输出参数 - public static class NET_OUT_SCADA_ALARM_ATTACH_INFO extends Structure - { - public int dwSize; - - public NET_OUT_SCADA_ALARM_ATTACH_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_SyncParkingInfo 接口输入参数 - public static class NET_IN_SYNC_PARKING_INFO extends Structure - { - public int dwSize; - public int nChannel; // 通道号 - public byte[] szParkingNum = new byte[32]; // 车位编号 - public int dwPresetNum; // 预置点编号 - public int bHaveCar; // 车位是否有车 - public int bParkingFault; // 车位是否有故障 - - public NET_IN_SYNC_PARKING_INFO() { - this.dwSize = this.size(); - } - } - - // CLIENT_SyncParkingInfo 接口输出参数 - public static class NET_OUT_SYNC_PARKING_INFO extends Structure - { - public int dwSize; - - public NET_OUT_SYNC_PARKING_INFO() { - this.dwSize = this.size(); - } - } - - // 监测点位报警信息列表 - public static class NET_SCADA_NOTIFY_POINT_ALARM_INFO_LIST extends Structure - { - public int dwSize; - public int nList; // 监测点位报警信息个数 - public NET_SCADA_NOTIFY_POINT_ALARM_INFO[] stuList = (NET_SCADA_NOTIFY_POINT_ALARM_INFO[])new NET_SCADA_NOTIFY_POINT_ALARM_INFO().toArray(MAX_SCADA_POINT_LIST_ALARM_INFO_NUM); // 监测点位报警信息 - - public NET_SCADA_NOTIFY_POINT_ALARM_INFO_LIST() { - this.dwSize = this.size(); - } - } - - // 监测点位报警信息 - public static class NET_SCADA_NOTIFY_POINT_ALARM_INFO extends Structure - { - public int dwSize; - public byte[] szDevID = new byte[NET_COMMON_STRING_16]; // 设备ID - public byte[] szPointID = new byte[NET_COMMON_STRING_128]; // 点位ID - public int bAlarmFlag; // 报警标志, 1-true 0-false - public NET_TIME stuAlarmTime; // 报警时间 - public int nAlarmLevel; // 报警级别(0~6) - public int nSerialNo; // 报警编号,同一个告警的开始和结束的编号是相同的。 - public byte[] szAlarmDesc = new byte[NET_COMMON_STRING_128]; // 报警描述 - - public NET_SCADA_NOTIFY_POINT_ALARM_INFO() { - this.dwSize = this.size(); - } - } - - // 获取指纹事件(对应 NET_ALARM_FINGER_PRINT类型) - public static class ALARM_CAPTURE_FINGER_PRINT_INFO extends Structure - { - public int dwSize; - public int nChannelID; // 门通道号(从0开始) - public NET_TIME stuTime; // 事件时间 - public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 门读卡器ID - public int nPacketLen; // 单个指纹数据包长度 - public int nPacketNum; // 指纹数据包个数 - public Pointer szFingerPrintInfo; // 指纹数据(数据总长度即 nPacketLen * nPacketNum) - - public ALARM_CAPTURE_FINGER_PRINT_INFO() { - this.dwSize = this.size(); - } - } - - // 指纹采集(对应 CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT 命令) - public static class NET_CTRL_CAPTURE_FINGER_PRINT extends Structure - { - public int dwSize; - public int nChannelID; // 门禁序号(从开始) - public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 读卡器ID - - public NET_CTRL_CAPTURE_FINGER_PRINT() { - this.dwSize = this.size(); - } - } - - // 门禁状态事件 - public static class ALARM_ACCESS_CTL_STATUS_INFO extends Structure - { - public int dwSize; - public int nDoor; // 门通道号 - public NET_TIME stuTime; // 事件发生的时间 - public int emStatus; // 门禁状态, 对应 NET_ACCESS_CTL_STATUS_TYPE - public byte[] szSerialNumber = new byte[256]; //无线设备序列号(智能锁) - - public ALARM_ACCESS_CTL_STATUS_INFO() { - this.dwSize = this.size(); - } - } - - // 门禁状态类型 - public static class NET_ACCESS_CTL_STATUS_TYPE extends Structure - { - public static final int NET_ACCESS_CTL_STATUS_TYPE_UNKNOWN = 0; - public static final int NET_ACCESS_CTL_STATUS_TYPE_OPEN = 1; // 开门 - public static final int NET_ACCESS_CTL_STATUS_TYPE_CLOSE = 2; // 关门 - public static final int NET_ACCESS_CTL_STATUS_TYPE_ABNORMAL = 3; // 异常 - } - - - //事件类型 EVENT_IVS_SNAPMANUAL(SnapManual事件)对应数据块描述信息 - public static class DEV_EVENT_SNAPMANUAL extends Structure - { - public int nChannelID; // 通道号 - public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称 - public byte[] bReserved1 = new byte[4]; // 字节对齐 - public double PTS; // 时间戳(单位是毫秒) - public NET_TIME_EX UTC; // 事件发生的时间 - public int nEventID; // 事件ID - - public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息 - public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始 - public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON - public byte[] bReserved = new byte[1024]; // 保留字节,留待扩展. - } - - // 即时抓图(又名手动抓图)入参, 对应命令 CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT - public static class NET_IN_SNAP_MNG_SHOT extends Structure - { - public int dwSize; // 该结构体大小 - public int nChannel; // 通道号 - public int nTime; // 连拍次数, 0表示停止抓拍,正数表示连续抓拍的张数 - - public NET_IN_SNAP_MNG_SHOT() { - this.dwSize = this.size(); - } - } - - // 即时抓图(又名手动抓图)出参, 对应命令 CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT - public static class NET_OUT_SNAP_MNG_SHOT extends Structure - { - public int dwSize; // 该结构体大小 - - public NET_OUT_SNAP_MNG_SHOT() { - this.dwSize = this.size(); - } - } - - // 获取摄像机状态, CLIENT_QueryDevInfo 接口 NET_QUERY_GET_CAMERA_STATE 命令入参 - public static class NET_IN_GET_CAMERA_STATEINFO extends Structure - { - public int dwSize; - public int bGetAllFlag; // 是否查询所有摄像机状态,若该成员为 TRUE,则 nChannels 成员无需设置, 1-true; 0-false - public int nValidNum; // 该成员,bGetAllFlag 为 FALSE时有效,表示 nChannels 成员有效个数 - public int[] nChannels = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 该成员,bGetAllFlag 为 FALSE时有效,将需要查询的通道号依次填入 - - public NET_IN_GET_CAMERA_STATEINFO() { - this.dwSize = this.size(); - } - } - - // 获取摄像机状态, CLIENT_QueryDevInfo 接口 NET_QUERY_GET_CAMERA_STATE 命令出参 - public static class NET_OUT_GET_CAMERA_STATEINFO extends Structure - { - public int dwSize; - public int nValidNum; // 查询到的摄像机通道状态有效个数,由sdk返回 - public int nMaxNum; // pCameraStateInfo 数组最大个数,由用户填写 - public Pointer pCameraStateInfo; // 摄像机通道信息数组,由用户分配, 对应 NET_CAMERA_STATE_INFO[] - - public NET_OUT_GET_CAMERA_STATEINFO() { - this.dwSize = this.size(); - } - } - - public static class NET_CAMERA_STATE_INFO extends Structure - { - public int nChannel; // 摄像机通道号, -1表示通道号无效 - public int emConnectionState; // 连接状态, 参考 EM_CAMERA_STATE_TYPE - public byte[] szReserved = new byte[1024]; // 保留字节 - } - - public static class EM_CAMERA_STATE_TYPE extends Structure - { - public static final int EM_CAMERA_STATE_TYPE_UNKNOWN = 0; // 未知 - public static final int EM_CAMERA_STATE_TYPE_CONNECTING = 1; // 正在连接 - public static final int EM_CAMERA_STATE_TYPE_CONNECTED = 2; // 已连接 - public static final int EM_CAMERA_STATE_TYPE_UNCONNECT = 3; // 未连接 - public static final int EM_CAMERA_STATE_TYPE_EMPTY = 4; // 通道未配置,无信息 - public static final int EM_CAMERA_STATE_TYPE_DISABLE = 5; // 通道有配置,但被禁用 - } - - // CLIENT_StartFindFaceInfo 输入参数 - public static class NET_IN_FACEINFO_START_FIND extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - - public NET_IN_FACEINFO_START_FIND() { - this.dwSize = this.size(); - } - } - - // CLIENT_StartFindFaceInfo 输出参数 - public static class NET_OUT_FACEINFO_START_FIND extends Structure - { - public int dwSize; - public int nTotalCount; // 符合查询条件的总数 - - public NET_OUT_FACEINFO_START_FIND() { - this.dwSize = this.size(); - } - } - - // CLIENT_DoFindFaceInfo 输入参数 - public static class NET_IN_FACEINFO_DO_FIND extends Structure - { - public int dwSize; - public int nStartNo; // 起始序号 - public int nCount; // 本次查询的条数 - - public NET_IN_FACEINFO_DO_FIND() { - this.dwSize = this.size(); - } - } - - // CLIENT_DoFindFaceInfo 输出参数 - public static class NET_OUT_FACEINFO_DO_FIND extends Structure - { - public int dwSize; - public int nRetNum; // 本次查询到的个数 - public Pointer pstuInfo; // 查询结果, 用户分配内存,大小为sizeof(NET_FACEINFO)*nMaxNum, 对应 NET_FACEINFO[] - public int nMaxNum; // 用户分配内存的个数 - public byte[] byReserved = new byte[4]; - - public NET_OUT_FACEINFO_DO_FIND() { - this.dwSize = this.size(); - } - } - - // 人脸信息 - public static class NET_FACEINFO extends Structure - { - public byte[] szUserID = new byte[NET_MAX_USERID_LEN]; // 用户ID - public int nMD5; // 有效的MD5编码数量 - public MD5[] szMD5Arr = (MD5[])new MD5().toArray(5); // 图片对应的32字节MD5编码加密 - public byte[] byReserved = new byte[512]; - } - - // 图片对应的32字节MD5编码加密 - public static class MD5 extends Structure - { - public byte[] szMD5 = new byte[NET_COMMON_STRING_64]; - } - - // 初始化设备账户输入结构体 - public static class NET_IN_INIT_DEVICE_ACCOUNT extends Structure - { - public int dwSize; // 结构体大小:初始化结构体时赋值 - public byte[] szMac = new byte[NET_MACADDR_LEN]; // 设备mac地址 - public byte[] szUserName = new byte[MAX_USER_NAME_LEN]; // 用户名 - public byte[] szPwd = new byte[MAX_PWD_LEN]; // 设备密码 - public byte[] szCellPhone = new byte[MAX_CELL_PHONE_NUMBER_LEN]; // 预留手机号 - public byte[] szMail = new byte[MAX_MAIL_LEN]; // 预留邮箱 - public byte byInitStatus; // 此字段已经废弃 - public byte byPwdResetWay; // 设备支持的密码重置方式:搜索设备接口(CLIENT_SearchDevices、CLIENT_StartSearchDevices的回调函数、CLIENT_SearchDevicesByIPs)返回字段byPwdResetWay的值 - // 该值的具体含义见 DEVICE_NET_INFO_EX 结构体,需要与设备搜索接口返回的 byPwdResetWay 值保持一致 - // bit0 : 1-支持预留手机号,此时需要在szCellPhone数组中填入预留手机号(如果需要设置预留手机) ; - // bit1 : 1-支持预留邮箱,此时需要在szMail数组中填入预留邮箱(如果需要设置预留邮箱) - public byte[] byReserved = new byte[2]; // 保留字段 - - public NET_IN_INIT_DEVICE_ACCOUNT() { - this.dwSize = this.size(); - } - } - - // 初始化设备账户输出结构体 - public static class NET_OUT_INIT_DEVICE_ACCOUNT extends Structure - { - public int dwSize; // 结构体大小:初始化结构体时赋值 - - public NET_OUT_INIT_DEVICE_ACCOUNT() { - this.dwSize = this.size(); - } - } - - //用户权限 - public static class NET_ATTENDANCE_AUTHORITY extends Structure - { - public int NET_ATTENDANCE_AUTHORITY_UNKNOWN = -1; - public int NET_ATTENDANCE_AUTHORITY_CUSTOMER = 0; //普通用户 - public int NET_ATTENDANCE_AUTHORITY_ADMINISTRATORS = 1; //管理员 - } - - //考勤用户信息 - public static class NET_ATTENDANCE_USERINFO extends Structure - { - public byte[] szUserID = new byte[MAX_COMMON_STRING_32]; //用户编号ID - public byte[] szUserName = new byte[MAX_ATTENDANCE_USERNAME_LEN]; //人员姓名 - public byte[] szCardNo = new byte[MAX_COMMON_STRING_32]; // 卡号 - public int emAuthority; // 用户权限 - public byte[] szPassword = new byte[MAX_COMMON_STRING_32]; // 密码 - public int nPhotoLength; // 照片数据长度 - public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN]; // 班级(肯尼亚定制) - public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN]; // 电话(肯尼亚定制) - public byte[] byReserved = new byte[208]; // 保留字节 - } - - // CLIENT_Attendance_AddUser 入参 - public static class NET_IN_ATTENDANCE_ADDUSER extends Structure - { - public int dwSize; - public NET_ATTENDANCE_USERINFO stuUserInfo = new NET_ATTENDANCE_USERINFO(); // 用户信息 - public Pointer pbyPhotoData; // 照片数据 - - public NET_IN_ATTENDANCE_ADDUSER() { - this.dwSize = this.size(); - } - } - - // CLIENT_Attendance_AddUser 出参 - public static class NET_OUT_ATTENDANCE_ADDUSER extends Structure - { - public int dwSize; - - public NET_OUT_ATTENDANCE_ADDUSER() { - this.dwSize = this.size(); - } - } - - // CLIENT_Attendance_DelUser 入参 - public static class NET_IN_ATTENDANCE_DELUSER extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[MAX_COMMON_STRING_32]; // 用户ID - - public NET_IN_ATTENDANCE_DELUSER() { - this.dwSize = this.size(); - } - } - - // CLIENT_Attendance_DelUser 出参 - public static class NET_OUT_ATTENDANCE_DELUSER extends Structure - { - public int dwSize; - - public NET_OUT_ATTENDANCE_DELUSER() { - this.dwSize = this.size(); - } - } - - // CLIENT_Attendance_ModifyUser 入参 - public static class NET_IN_ATTENDANCE_ModifyUSER extends Structure - { - public int dwSize; - public NET_ATTENDANCE_USERINFO stuUserInfo = new NET_ATTENDANCE_USERINFO(); // 用户信息 - public Pointer pbyPhotoData; // 照片数据 - - public NET_IN_ATTENDANCE_ModifyUSER() { - this.dwSize = this.size(); - } - } - - // CLIENT_Attendance_ModifyUser 出参 - public static class NET_OUT_ATTENDANCE_ModifyUSER extends Structure - { - public int dwSize; - - public NET_OUT_ATTENDANCE_ModifyUSER() { - this.dwSize = this.size(); - } - } - - - // CLIENT_Attendance_GetUser 入参 - public static class NET_IN_ATTENDANCE_GetUSER extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[MAX_COMMON_STRING_32]; // 用户ID - - public NET_IN_ATTENDANCE_GetUSER() { - this.dwSize = this.size(); - } - } - - // CLIENT_Attendance_GetUser 出参 - public static class NET_OUT_ATTENDANCE_GetUSER extends Structure - { - public int dwSize; - public NET_ATTENDANCE_USERINFO stuUserInfo = new NET_ATTENDANCE_USERINFO(); // 用户信息 - public int nMaxLength; // 最大存放照片数据的长度 - public Pointer pbyPhotoData; // 照片数据 - - public NET_OUT_ATTENDANCE_GetUSER() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_InsertFingerByUserID 入参 - public static class NET_IN_FINGERPRINT_INSERT_BY_USERID extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_COMMON_STRING_32]; // 用户ID - public int nSinglePacketLen; // 单个指纹数据包长度 - public int nPacketCount; // 指纹数据包的个数 - public Pointer szFingerPrintInfo; // 指纹数据(数据总长度即nSinglePacketLen*nPacketCount) - - public NET_IN_FINGERPRINT_INSERT_BY_USERID() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_InsertFingerByUserID 出参 - public static class NET_OUT_FINGERPRINT_INSERT_BY_USERID extends Structure - { - public int dwSize; - public int[] nFingerPrintID = new int[NET_MAX_FINGER_PRINT]; //指纹ID数组 - public int nReturnedCount; //数组中实际返回的个数 - public int nFailedCode; //错误码 0:成功; 1:其他错误; 2:超过本用户下指纹能力的限制. - - public NET_OUT_FINGERPRINT_INSERT_BY_USERID() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_RemoveFingerByUserID 入参(removeByUserID) - public static class NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_COMMON_STRING_32]; // 用户ID - - public NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_RemoveFingerByUserID 出参 - public static class NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID extends Structure - { - public int dwSize; - - public NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_RemoveFingerRecord 入参(remove) - public static class NET_CTRL_IN_FINGERPRINT_REMOVE extends Structure - { - public int dwSize; - public int nFingerPrintID; // 指纹编号 - - public NET_CTRL_IN_FINGERPRINT_REMOVE() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_RemoveFingerRecord 出参 - public static class NET_CTRL_OUT_FINGERPRINT_REMOVE extends Structure - { - public int dwSize; - - public NET_CTRL_OUT_FINGERPRINT_REMOVE() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_GetFingerRecord 入参 - public static class NET_CTRL_IN_FINGERPRINT_GET extends Structure - { - public int dwSize; - public int nFingerPrintID; // 指纹编号 - - public NET_CTRL_IN_FINGERPRINT_GET() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_GetFingerRecord 出参 - public static class NET_CTRL_OUT_FINGERPRINT_GET extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_COMMON_STRING_32]; // 所属用户的用户ID - public byte[] szFingerPrintName = new byte[NET_COMMON_STRING_32]; // 指纹名称 - public int nFingerPrintID; // 指纹ID - public int nRetLength; // 实际返回的二进制指纹数据长度 - public int nMaxFingerDataLength; // 二进制指纹数据的最大长度 - public Pointer szFingerPrintInfo; // 指纹数据 - - public NET_CTRL_OUT_FINGERPRINT_GET() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_FindUser 入参 - public static class NET_IN_ATTENDANCE_FINDUSER extends Structure - { - public int dwSize; - public int nOffset; // 查询偏移 - public int nPagedQueryCount; // 查询个数,分页查询,最多不超过100 - - public NET_IN_ATTENDANCE_FINDUSER() { - this.dwSize = this.size(); - } - }; - - //CLIENT_Attendance_FindUser 出参 - public static class NET_OUT_ATTENDANCE_FINDUSER extends Structure - { - public int dwSize; - public int nTotalUser; // 总的用户数 - public int nMaxUserCount; // 用户信息最大缓存数 - public Pointer stuUserInfo; // 用户信息,内存由用户申请,大小为(sizeof(NET_ATTENDANCE_USERINFO)*nMaxUserCount) - public int nRetUserCount; // 实际返回的用户个数 - public int nMaxPhotoDataLength; // 照片数据最大长度 - public int nRetPhoteLength; // 实际返回的照片数据长度 - public Pointer pbyPhotoData; // 照片数据 - - public NET_OUT_ATTENDANCE_FINDUSER() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_GetFingerByUserID 入参 - public static class NET_IN_FINGERPRINT_GETBYUSER extends Structure - { - public int dwSize; - public byte[] szUserID = new byte[NET_COMMON_STRING_32]; // 用户ID - - public NET_IN_FINGERPRINT_GETBYUSER() { - this.dwSize = this.size(); - } - } - - //CLIENT_Attendance_GetFingerByUserID 出参 - public static class NET_OUT_FINGERPRINT_GETBYUSER extends Structure - { - public int dwSize; - public int[] nFingerPrintIDs = new int[NET_MAX_FINGER_PRINT];// 指纹ID数组 - public int nRetFingerPrintCount; // 实际返回的指纹ID个数,即nFingerPrintIDs数组中实际有效个数 - public int nSinglePacketLength; // 单个指纹数据包长度 - public int nMaxFingerDataLength; // 接受指纹数据的缓存的最大长度 - public int nRetFingerDataLength; // 实际返回的总的指纹数据包的长度 - public Pointer pbyFingerData; // 指纹数据 - - public NET_OUT_FINGERPRINT_GETBYUSER() { - this.dwSize = this.size(); - } - } - - // 获取考勤机在线状态入参 - public static class NET_IN_ATTENDANCE_GETDEVSTATE extends Structure - { - public int dwSize; - - public NET_IN_ATTENDANCE_GETDEVSTATE() { - this.dwSize = this.size(); - } - } - - // 获取考勤机在线状态出参 - public static class NET_OUT_ATTENDANCE_GETDEVSTATE extends Structure - { - public int dwSize; - public int nState; // 0:离线;1:在线;其他:未知;考勤机状态 - - public NET_OUT_ATTENDANCE_GETDEVSTATE() { - this.dwSize = this.size(); - } - } - - // 门禁事件配置 - public static class CFG_ACCESS_EVENT_INFO extends Structure - { - public byte[] szChannelName = new byte[MAX_NAME_LEN]; // 门禁通道名称 - public int emState; // 门禁状态, 参考 CFG_ACCESS_STATE - public int emMode; // 门禁模式, 参考 CFG_ACCESS_MODE - public int nEnableMode; // 门禁使能电平值, 0:低电平有效(断电启动); 1:高电平有效(通电启动); - public int bSnapshotEnable; // 事件联动抓图使能, 1-true, 0-false - - // 能力 - public byte abDoorOpenMethod; - public byte abUnlockHoldInterval; - public byte abCloseTimeout; - public byte abOpenAlwaysTimeIndex; - public byte abCloseAlwaysTimeIndex; - public byte abHolidayTimeIndex; - public byte abBreakInAlarmEnable; - public byte abRepeatEnterAlarmEnable; - public byte abDoorNotClosedAlarmEnable; - public byte abDuressAlarmEnable; - public byte abDoorTimeSection; - public byte abSensorEnable; - public byte abFirstEnterEnable; - public byte abRemoteCheck; - public byte abRemoteDetail; - public byte abHandicapTimeOut; - public byte abCheckCloseSensor; - public byte abAutoRemoteCheck; - public byte[] reverse = new byte[2]; - - public int emDoorOpenMethod; // 开门方式, 参考 CFG_DOOR_OPEN_METHOD - public int nUnlockHoldInterval; // 门锁保持时间(自动关门时间),单位毫秒,[250, 20000] - public int nCloseTimeout; // 关门超时时间, 超过阈值未关会触发报警,单位秒,[0,9999];0表示不检测超时 - public int nOpenAlwaysTimeIndex; // 常开时间段, 值为CFG_ACCESS_TIMESCHEDULE_INFO配置的数组下标 - public int nCloseAlwaysTimeIndex; // 常关时间段, 值为CFG_ACCESS_TIMESCHEDULE_INFO配置的数组下标 - public int nHolidayTimeRecoNo; // 假期内时间段, 值为假日记录集的记录编号,对应NET_RECORDSET_HOLIDAY的nRecNo - public int bBreakInAlarmEnable; // 闯入报警使能, 1-true, 0-false - public int bRepeatEnterAlarm; // 反潜报警使能, 1-true, 0-false - public int bDoorNotClosedAlarmEnable; // 门未关报警使能, 1-true, 0-false - public int bDuressAlarmEnable; // 胁迫报警使能, 1-true, 0-false - public CFG_DOOROPEN_TIMESECTION_WEEK_DAY[] stuDoorTimeSectionArr = - (CFG_DOOROPEN_TIMESECTION_WEEK_DAY[])new CFG_DOOROPEN_TIMESECTION_WEEK_DAY().toArray(WEEK_DAY_NUM);// 分时段开门信息 - public int bSensorEnable; // 门磁使能, 1-true, 0-false - public CFG_ACCESS_FIRSTENTER_INFO stuFirstEnterInfo; // 首卡开门信息 - public int bRemoteCheck; // 1-true, 0-false, 是否需要平台验证, TRUE表示权限通过后必须要平台验证后才能开门, FALSE表示权限验证通过后可立即开门 - public CFG_REMOTE_DETAIL_INFO stuRemoteDetail; // 与bRemoteCheck配合使用, 如果远端验证未应答, 设定的设备超时时间到后, 是正常开门还是不开门 - public CFG_HANDICAP_TIMEOUT_INFO stuHandicapTimeOut; // 针对残疾人的开门参数 - public int bCloseCheckSensor; // 闭锁前是否检测门磁, 1-true, 0-false - // true:则当开锁保持时间计时结束后,只有监测到有效门磁信号时,才可以恢复关闭锁的动作。 - // 反之,如果开锁保持时间已到,但未检测到有效门磁信号,则一直保持开锁状态; - // false(默认):则直接按照设定的开锁保持时间进行开锁保持和恢复关闭的动作。 - public CFG_AUTO_REMOTE_CHECK_INFO stuAutoRemoteCheck; // 开门远程验证, 如果开启, 在该时间段内, 设备通过多人组合开门事件通知到平台确认是否可以开门 - public int bLocalControlEnable; // 本地控制启用, 1-TRUE 启用, 0-false 停用 - public int bRemoteControlEnable; // 远程控制启用, 1-true 启用, 0-false 停用 - public int nSensorDelay; // 传感器输出延时,超过此时间判断有人, 单位:秒。 0~10 - public int nHumanStatusSensitivity; // 人状态变化检测灵敏度,在此时间内,判断有人 单位: 秒。 0~300 - public int nDetectSensitivity; // 传感器本身的检测灵敏度 单位:%, 0~100 - public int bLockTongueEnable; // 锁舌使能, 1-true, 0-false - public int nABLockRoute; // AB互锁路线与AB互锁的index对应;-1代表无效 - public int nDoorNotClosedReaderAlarmTime; // 门未关超时读卡器报警, 单位:秒 - public int bEnable; // 使能项,此通道配置是否启用, 1-true为使能, 0-false为关闭 - public byte[] szSN = new byte[CFG_MAX_SN_LEN]; // 无线设备序列号,只获取,不能设置 - public int nCloseDuration; // 门闭合时间,单位:秒 - public int nUnlockReloadInterval; // 开锁命令响应间隔时间,单位:毫秒 - public int emAccessProtocol; // 门禁协议, 参考 CFG_EM_ACCESS_PROTOCOL - public int emProtocolType; // 参考 CFG_EM_SERIAL_PROTOCOL_TYPE, 串口协议下的具体协议功能,当emAccessProtocol为CFG_EM_ACCESS_PROTOCOL_SERIAL时有效 - public CFG_ACCESS_CONTROL_UDP_INFO stuAccessControlUdpInfo; // 门禁udp开锁信息,当emAccessProtocol为CFG_EM_ACCESS_PROTOCOL_REMOTE时有效 - public int nEntranceLockChannel; // 门禁控制器下的子通道,当emAccessProtocol为CFG_EM_ACCESS_PROTOCOL_REMOTE时有效 - public int bSnapshotUpload; // 使能项,抓图是否上传, 1-true为抓图上传, 0-false为抓图不上传 - public int nSnapUploadPos; // 抓图上传地址,对应的是NAS配置项的下标,NAS配置为CFG_CMD_NASEX - public int bCustomPasswordEnable; // 是否启用个性化密码, 1-true, 0-false - public int nRepeatEnterTime; // 重复进入时间,0~180秒,0表示不启用 - public int nCardNoConvert; // 卡号转换,0:不需要转换,1:字节取反,2:按HIDpro转换 - public int bUnAuthorizedMaliciousSwipEnable; // 未授权恶意刷卡事件使能, 1-true, 0-false - public int bFakeLockedAlarmEnable; // 假锁报警使能, 1-true, 0-false - } - - // 分时段开门信息 - public static class CFG_DOOROPEN_TIMESECTION_WEEK_DAY extends Structure - { - - public CFG_DOOROPEN_TIMESECTION_INFO[] stuDoorTimeSection = - (CFG_DOOROPEN_TIMESECTION_INFO[])new CFG_DOOROPEN_TIMESECTION_INFO().toArray(MAX_DOOR_TIME_SECTION); - } - - // 分时段开门 - public static class CFG_DOOROPEN_TIMESECTION_INFO extends Structure - { - public CFG_TIME_PERIOD stuTime; // 时间段 - public int emDoorOpenMethod; // 开门模式, 参考 CFG_DOOR_OPEN_METHOD - } - - // 首卡开门信息 - public static class CFG_ACCESS_FIRSTENTER_INFO extends Structure - { - public int bEnable; // 在指定的时间,只有拥有首卡权限的用户验证通过后,其他的用户才能刷卡(指纹等)进入,1-true 使能, 0-false 关闭 - public int emStatus; // 首卡权限验证通过后的门禁状态, 参考 CFG_ACCESS_FIRSTENTER_STATUS - public int nTimeIndex; // 需要首卡验证的时间段, 值为 配置 "AccessTimeSchedule"的门禁刷卡时间段的下标 - } - - // 远程开门验证 - public static class CFG_REMOTE_DETAIL_INFO extends Structure - { - public int nTimeOut; // 超时时间, 0表示永久等待, 其他值表示超时时间(单位为秒) - public int bTimeOutDoorStatus; // 超时后的门状态, 1-true:打开, 0-false:关闭 - } - - // 针对残疾人的开门信息 - public static class CFG_HANDICAP_TIMEOUT_INFO extends Structure - { - public int nUnlockHoldInterval; // 门锁保持时间(自动关门时间),单位毫秒,[250, 60000] - public int nCloseTimeout; // 关门超时时间, 超过阈值未关会触发报警,单位秒,[0,9999];0表示不检测超时 - } - - // 开门远程验证 - public static class CFG_AUTO_REMOTE_CHECK_INFO extends Structure - { - public int bEnable; // 使能项, 1-true: 开启, 0-false: 关闭 - public int nTimeSechdule; // 对应CFG_CMD_ACCESSTIMESCHEDULE配置的索引 - } - - // 大华门禁udp开锁信息 - public static class CFG_ACCESS_CONTROL_UDP_INFO extends Structure - { - public byte[] szAddress = new byte[CFG_MAX_ACCESS_CONTROL_ADDRESS_LEN];// 地址 - public int nPort; // 端口 - } - - // 门禁状态 - public static class CFG_ACCESS_STATE extends Structure - { - public static final int ACCESS_STATE_NORMAL = 0; // 普通 - public static final int ACCESS_STATE_CLOSEALWAYS = 1; // 常关 - public static final int ACCESS_STATE_OPENALWAYS = 2; // 常开 - // 常开常闭状态下,Opendoor开门无效. - public static final int ACCESS_STATE_NOPERSONNC = 3; // 无人状态常闭 - public static final int ACCESS_STATE_NOPERSONNO = 4; // 无人状态常开 - } - - // 门禁模式 - public static class CFG_ACCESS_MODE extends Structure - { - public static final int ACCESS_MODE_HANDPROTECTED = 0; // 防夹模式 - public static final int ACCESS_MODE_SAFEROOM = 1; // 防护房间模式 - public static final int ACCESS_MODE_OTHER = 2; // 其它 - } - - // 自定义开门方式 - public static class CFG_DOOR_OPEN_METHOD extends Structure - { - public static final int CFG_DOOR_OPEN_METHOD_UNKNOWN = 0; - public static final int CFG_DOOR_OPEN_METHOD_PWD_ONLY = 1; // 只允许密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD = 2; // 只允许刷卡开锁 - public static final int CFG_DOOR_OPEN_METHOD_PWD_OR_CARD = 3; // 密码或刷卡开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_FIRST = 4; // 先刷卡后密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_PWD_FIRST = 5; // 先密码后刷卡开锁 - public static final int CFG_DOOR_OPEN_METHOD_SECTION = 6; // 分时段开门 - public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINTONLY = 7; // 仅指纹开锁 - public static final int CFG_DOOR_OPEN_METHOD_PWD_OR_CARD_OR_FINGERPRINT = 8; // 密码或刷卡或指纹开锁 - public static final int CFG_DOOR_OPEN_METHOD_PWD_AND_CARD_AND_FINGERPINT = 9; // 密码+刷卡+指纹组合开锁 - public static final int CFG_DOOR_OPEN_METHOD_PWD_AND_FINGERPRINT = 10; // 密码+指纹组合开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FINGERPRINT = 11; // 刷卡+指纹开锁 - public static final int CFG_DOOR_OPEN_METHOD_MULTI_PERSON = 12; // 多人开锁 - public static final int CFG_DOOR_OPEN_METHOD_FACEIDCARD = 13; // 人证对比 - public static final int CFG_DOOR_OPEN_METHOD_FACEIDCARD_AND_IDCARD = 14; // 身份证+ 人证比对 - public static final int CFG_DOOR_OPEN_METHOD_FACEIDCARD_OR_CARD_OR_FINGER = 15; // 人证比对或刷卡或指纹 - public static final int CFG_DOOR_OPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FINGER = 16;// (身份证+认证比对)或刷卡或指纹 - public static final int CFG_DOOR_OPEN_METHOD_USERID_AND_PWD = 17; // UserID+密码 - public static final int CFG_DOOR_OPEN_METHOD_FACE_ONLY = 18; // 只允许人脸开锁 - public static final int CFG_DOOR_OPEN_METHOD_FACE_AND_PWD = 19; // 人脸+密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_AND_PWD = 20; // 指纹+密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_AND_FACE = 21; // 指纹+人脸开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FACE = 22; // 刷卡+人脸开锁 - public static final int CFG_DOOR_OPEN_METHOD_FACE_OR_PWD = 23; // 人脸或密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_OR_PWD = 24; // 指纹或密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_OR_FACE = 25; // 指纹或人脸开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FACE = 26; // 刷卡或人脸开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FINGERPRINT = 27; // 刷卡或指纹开锁 - public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD = 28; // 指纹+人脸+密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FACE_AND_PWD = 29; // 刷卡+人脸+密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD = 30; // 刷卡+指纹+密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_PWD_AND_FACE = 31; // 卡+指纹+人脸组合开锁 - public static final int CFG_DOOR_OPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD = 32; // 指纹或人脸或密码 - public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FACE_OR_PWD = 33; // 卡或人脸或密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE = 34; // 卡或指纹或人脸开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD = 35;// 卡+指纹+人脸+密码组合开锁 - public static final int CFG_DOOR_OPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD = 36;// 卡或指纹或人脸或密码开锁 - public static final int CFG_DOOR_OPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE = 37;//(身份证+人证比对)或 刷卡 或 人脸 - public static final int CFG_DOOR_OPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE = 38; // 人证比对 或 刷卡(二维码) 或 人脸 - } - - // 首卡权限验证通过后的门禁状态 - public static class CFG_ACCESS_FIRSTENTER_STATUS extends Structure - { - public static final int ACCESS_FIRSTENTER_STATUS_UNKNOWN = 0; // 未知状态 - public static final int ACCESS_FIRSTENTER_STATUS_KEEPOPEN = 1; // KeepOpen-首卡权限验证通过后,门保持常开 - public static final int ACCESS_FIRSTENTER_STATUS_NORMAL = 2; // Normal-首卡权限验证通过后,其他用户才能刷卡(指纹等)验证通过 - } - - // 门禁协议 - public static class CFG_EM_ACCESS_PROTOCOL extends Structure - { - public static final int CFG_EM_ACCESS_PROTOCOL_UNKNOWN = 0; // 未知 - public static final int CFG_EM_ACCESS_PROTOCOL_LOCAL = 1; // 本机开关量控制 - public static final int CFG_EM_ACCESS_PROTOCOL_SERIAL = 2; // 串口协议 - public static final int CFG_EM_ACCESS_PROTOCOL_REMOTE = 3; // 门禁udp开锁 - } - - // 串口协议下的具体协议功能 - public static class CFG_EM_SERIAL_PROTOCOL_TYPE extends Structure - { - public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_UNKNOWN = -1; // 未知 - public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_UNUSED = 0; // 未使用 - public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_DAHUA_ACCESS_485 = 1; // 门禁485 - public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_LADDER_CONTROL = 2; // 梯控 - public static final int CFG_EM_SERIAL_PROTOCOL_TYPE_REMOTE_READ_HEAD = 3; // 远距离读头 - } - - // CLIENT_MatrixSetCameras接口的输入参数 - public static class NET_IN_MATRIX_SET_CAMERAS extends Structure - { - public int dwSize; - public Pointer pstuCameras; // 显示源信息 NET_MATRIX_CAMERA_INFO 数组, 用户分配内存,大小为sizeof(NET_MATRIX_CAMERA_INFO)*nCameraCount - public int nCameraCount; // 显示源数组大小 - - public NET_IN_MATRIX_SET_CAMERAS() { - this.dwSize = this.size(); - } - } - - // CLIENT_MatrixSetCameras接口的输出参数 - public static class NET_OUT_MATRIX_SET_CAMERAS extends Structure - { - public int dwSize; - - public NET_OUT_MATRIX_SET_CAMERAS() { - this.dwSize = this.size(); - } - } - - // 各种违章事件联动报警输出事件 (NET_ALARM_TRAFFIC_LINKAGEALARM) - public static class ALARM_TRAFFIC_LINKAGEALARM_INFO extends Structure - { - public NET_TIME_EX stuTime; // 事件发生的时间 - public byte[] szCode = new byte[NET_COMMON_STRING_32]; // 违章联动报警事件 - public byte[] byReserved = new byte[1024]; // 保留字节 - } - - // 门禁控制器操作类型 - public static class NET_EM_ACCESS_CTL_MANAGER extends Structure - { - public static final int NET_EM_ACCESS_CTL_MANAGER_ADDDEVICE = 0; // 添加单个分控器, 对应结构体 pstInParam = NET_IN_ACCESS_CTL_MANAGER_ADDDEVICE, pstOutParam = NET_OUT_ACCESS_CTL_MANAGER_ADDDEVICE - public static final int NET_EM_ACCESS_CTL_MANAGER_MODIFYDEVICE = 1; // 修改分控器名称, 对应结构体 pstInParam = NET_IN_ACCESS_CTL_MANAGER_MODIFYDEVICE, pstOutParam = NET_OUT_ACCESS_CTL_MANAGER_MODIFYDEVICE - public static final int NET_EM_ACCESS_CTL_MANAGER_REMOVEDEVICE = 2; // 删除分控器, 对应结构体 pstInParam = NET_IN_ACCESS_CTL_MANAGER_REMOVEDEVICE, pstOutParam = NET_OUT_ACCESS_CTL_MANAGER_REMOVEDEVICE - public static final int NET_EM_ACCESS_CTL_GETSUBCONTROLLER_INFO = 3; // 获取分控器信息, 对应结构体 pstInParam = NET_IN_GET_SUB_CONTROLLER_INFO, pstOutParam = NET_OUT_GET_SUB_CONTROLLER_INFO - public static final int NET_EM_ACCESS_CTL_GETSUBCONTROLLER_STATE = 4; // 获取分控器状态, 对应结构体 pstInParam = NET_IN_GET_SUB_CONTROLLER_STATE, pstOutParam = NET_OUT_GET_SUB_CONTROLLER_STATE - public static final int NET_EM_ACCESS_CTL_SET_REPEAT_ENTERROUTE = 5; // 设置反潜路径信息, 对应结构体 pstInparam = NET_IN_SET_REPEAT_ENTERROUTE, pstOutParam = NET_OUT_SET_REPEAT_ENTERROUTE - public static final int NET_EM_ACCESS_CTL_GET_REPEAT_ENTERROUTE = 6; // 获取反潜路径信息, 对应结构体 pstInparam = NET_IN_GET_REPEAT_ENTERROUTE, pstOutParam = NET_OUT_GET_REPEAT_ENTERROUTE - public static final int NET_EM_ACCESS_CTL_SET_ABLOCK_ROUTE = 7; // 设置AB互锁路径信息, 对应结构体 pstInparam = NET_IN_SET_ABLOCK_ROUTE, pstOutParam = NET_OUT_SET_ABLOCK_ROUTE - public static final int NET_EM_ACCESS_CTL_GET_ABLOCK_ROUTE = 8; // 获取AB互锁路径信息, 对应结构体 pstInparam = NET_IN_GET_ABLOCK_ROUTE, pstOutParam = NET_OUT_GET_ABLOCK_ROUTE - public static final int NET_EM_ACCESS_CTL_GET_LOGSTATUS = 9; // 获取日志同步状态,对应结构体 pstInparam = NET_IN_GET_LOGSTATUS, pstOutParam = NET_OUT_GET_LOGSTATUS - public static final int NET_EM_ACCESS_CTL_SYNCHRO_OFFLINE_LOG = 10; // 同步离线日志, 对应结构体 pstInparam = NET_IN_SYNCHRO_OFFLINE_LOG, pstOutParam = NET_OUT_SYNCHRO_OFFLINE_LOG - public static final int NET_EM_ACCESS_CTL_SYNCHRO_TIME = 11; // 同步分控器时间,对应结构体 pstInparam = NET_IN_SYNCHRO_CONTROLLER_TIME, pstOutParam = NET_OUT_SYNCHRO_CONTROLLER_TIME - public static final int NET_EM_ACCESS_CTL_SET_QRCODEDECODE_INFO = 12; // 设置二维码的解码信息, 对应结构体 pstInparam = NET_IN_SET_QRCODE_DECODE_INFO, pstOutParam = NET_OUT_SET_QRCODE_DECODE_INFO - } - - // 获取分控器信息入参 - public static class NET_IN_GET_SUB_CONTROLLER_INFO extends Structure - { - public int dwSize; - public int[] nSubControllerID = new int[MAX_ACCESSSUBCONTROLLER_NUM]; // 分控器ID, 取值范围 -1~255, -1:获取所有,0:获取本地,1~255:外置分控 - public int nSubControllerNum; // 需要查询的分控器数量 - - public NET_IN_GET_SUB_CONTROLLER_INFO() { - this.dwSize = this.size(); - } - } - - // 获取分控器信息出参 - public static class NET_OUT_GET_SUB_CONTROLLER_INFO extends Structure - { - public int dwSize; - public NET_SUB_CONTROLLER_INFO[] stuSubControllerInfo = - (NET_SUB_CONTROLLER_INFO[])new NET_SUB_CONTROLLER_INFO().toArray(MAX_ACCESSSUBCONTROLLER_NUM); // 分控器信息 - public int nRetNum; // 查询到的分控器数量 - - public NET_OUT_GET_SUB_CONTROLLER_INFO() { - this.dwSize = this.size(); - } - } - - // 分控器信息 - public static class NET_SUB_CONTROLLER_INFO extends Structure - { - public int nSubControllerID; // 分控器ID,取值范围 0~255,0为本地 - public byte[] szSubControllerName = new byte[MAX_COMMON_STRING_128]; // 分控器名称 - public int emProperty; // 门禁单双向, 对应枚举 NET_ACCESS_PROPERTY - public byte[] szDeviceType = new byte[MAX_COMMON_STRING_128]; // 分控器型号 - public byte[] szVesion = new byte[MAX_COMMON_STRING_128]; // 分控器版本号 - public int nDoorNum; // 门数量 - public NET_CARDREAD_INFO[] stuReaderInfo = - (NET_CARDREAD_INFO[])new NET_CARDREAD_INFO().toArray(MAX_ACCESSDOOR_NUM); // 门对应的读卡器号 - public byte[] byReserved = new byte[128]; - } - - // 读卡器信息 - public static class NET_CARDREAD_INFO extends Structure - { - public int nDoor; // 门序号 - public int nReadNum; // 读卡器数量 - public READ_ID[] szReadIDArr = - (READ_ID[])new READ_ID().toArray(MAX_ACCESS_READER_NUM);// 读卡器ID - public byte[] byReserved = new byte[64]; - } - - // 读卡器ID - public static class READ_ID extends Structure - { - public byte[] szReadID = new byte[NET_COMMON_STRING_32]; // 读卡器ID - } - - // 单双向 - public static class NET_ACCESS_PROPERTY extends Structure - { - public static final int NET_EM_ACCESS_PROPERTY_UNKNOWN = 0; // 未知 - public static final int NET_EM_ACCESS_PROPERTY_BIDIRECT = 1; // 双向门禁 - public static final int NET_EM_ACCESS_PROPERTY_UNIDIRECT = 2; // 单向门径 - } - - - // 门禁刷卡时间段,对此配置,通道号实际表示配置索引, 对应命令 CFG_CMD_ACCESSTIMESCHEDULE - public static class CFG_ACCESS_TIMESCHEDULE_INFO extends Structure - { - public TIME_SECTION_WEEK_DAY_4[] stuTimeWeekDay = - (TIME_SECTION_WEEK_DAY_4[])new TIME_SECTION_WEEK_DAY_4().toArray(WEEK_DAY_NUM); // 刷卡时间段 - public int bEnable; // 时间段使能开关, 1-true; 0-false - public byte[] szName = new byte[CFG_COMMON_STRING_128]; // 自定义名称 - } - - // 普通配置 (CFG_CMD_DEV_GENERRAL) General - public static class CFG_DEV_DISPOSITION_INFO extends Structure - { - public int nLocalNo; // 本机编号,主要用于遥控器区分不同设备 0~998 - public byte[] szMachineName = new byte[256]; // 机器名称或编号 - public byte[] szMachineAddress = new byte[256]; // 机器部署地点即道路编码 - public byte[] szMachineGroup = new byte[256]; // 机器分组或叫设备所属单位 默认为空,用户可以将不同的设备编为一组,便于管理,可重复。 - public byte[] szMachineID = new byte[64]; // 机器编号, 联网平台内唯一 - public int nLockLoginTimes; // 登陆失败可尝试次数 - public int nLoginFailLockTime; // 登陆失败锁定时间 - public int bLockLoginEnable; // 登陆失败可尝试次数使能, 1-true; 0-false - public byte[] bReserved = new byte[948]; // 保留字节 - } - - // 接口 CLIENT_StartVideoDiagnosis 的输入参数 - public static class NET_IN_VIDEODIAGNOSIS extends Structure - { - public int dwSize; // 此结构体大小 - public int nDiagnosisID; // 视频诊断ID,从0开始 - public int dwWaitTime; // 接口超时等待时间 - public StdCallCallback cbVideoDiagnosis; // 视频诊断结果回调函数, 对应回调函数 fRealVideoDiagnosis - public Pointer dwUser; // 用户自定义参数 - - public NET_IN_VIDEODIAGNOSIS() { - this.dwSize = this.size(); - } - } - - // 接口 CLIENT_StartVideoDiagnosis 的输出参数 - public static class NET_OUT_VIDEODIAGNOSIS extends Structure - { - public int dwSize; // 此结构体大小 - public LLong lDiagnosisHandle; // 订阅句柄 - - public NET_OUT_VIDEODIAGNOSIS() { - this.dwSize = this.size(); - } - } - - // cbVideoDiagnosis 回调参数类型 - public static class NET_REAL_DIAGNOSIS_RESULT extends Structure - { - public int dwSize; // 此结构体大小 - public Pointer pstDiagnosisCommonInfo; // 视频诊断通用信息, 对应 NET_VIDEODIAGNOSIS_COMMON_INFO - public int nTypeCount; // 诊断结果数据诊断类型个数 - public Pointer pDiagnosisResult; // 一次诊断结果数据, 大小为 dwBufSize, 格式如 NET_DIAGNOSIS_RESULT_HEADER+诊断类型1+NET_DIAGNOSIS_RESULT_HEADER+诊断类型2+... - public int dwBufSize; // 缓冲长度 - - public NET_REAL_DIAGNOSIS_RESULT() { - this.dwSize = this.size(); - } - } - - public static class NET_DIAGNOSIS_RESULT_HEADER extends Structure - { - public int dwSize; // 此结构体大小 - public byte[] szDiagnosisType = new byte[MAX_PATH]; // 诊断类型,详见"视频诊断上报结果检测类型定义" 如 NET_DIAGNOSIS_DITHER - public int nDiagnosisTypeLen; // 该诊断类型结构体大小 - - public NET_DIAGNOSIS_RESULT_HEADER() { - this.dwSize = this.size(); - } - } - - // 视频诊断结果上报通用数据 - public static class NET_VIDEODIAGNOSIS_COMMON_INFO extends Structure - { - public int dwSize; // 此结构体大小 - public int nDiagnosisID; // 检测通道 - public NET_ARRAY stProject; // 计划名称 - public NET_ARRAY stTask; // 任务名称 - public NET_ARRAY stProfile; // 参数表名称 - public NET_ARRAY stDeviceID; // 设备唯一标志 - public NET_TIME stStartTime; // 开始时间 - public NET_TIME stEndTime; // 结束时间 - public int nVideoChannelID; // 视频通道号 前端设备比如DVR,IPC的通道 - public int emVideoStream; // 视频码流, 参考 NET_STREAM_TYPE - public int emResultType; // 诊断结果类型, 参考 NET_VIDEODIAGNOSIS_RESULT_TYPE - public int bCollectivityState; // 诊断结果, 1-true, 0-false - public int emFailedCause; // 失败原因, 参考 NET_VIDEODIAGNOSIS_FAIL_TYPE - public byte[] szFailedCode = new byte[NET_COMMON_STRING_64]; // 失败原因描述 - public byte[] szResultAddress = new byte[NET_COMMON_STRING_128]; // 诊断结果存放地址 - public int nFrameRate; // 码率 单位 kb/s, 每天上报一次 - public int nFrameWidth; // 宽 每天上报一次 - public int nFrameHeight; // 高 每天上报一次 - public int nBackPic; // 背景图片个数 - public BACK_PICTURE_ADDRESS[] szBackPicAddressArr = (BACK_PICTURE_ADDRESS[])new BACK_PICTURE_ADDRESS().toArray(MAX_BACKPIC_COUNT); // 背景图片路径列表 - - public NET_VIDEODIAGNOSIS_COMMON_INFO() { - this.dwSize = this.size(); - } - } - - // 背景图片路径 - public static class BACK_PICTURE_ADDRESS extends Structure - { - public byte[] szBackPicAddress = new byte[NET_COMMON_STRING_128]; // 背景图片路径 - } - - // 通用变长字符串以‘\0’结束 - public static class NET_ARRAY extends Structure - { - public int dwSize; // 此结构体大小 - public Pointer pArray; // 缓冲区 目前最小260字节,调用者申请内存 填充数据保证是'\0'结束 - public int dwArrayLen; // 缓冲空间长度 - - public NET_ARRAY() { - this.dwSize = this.size(); - } - } - - // 视频码流类型 - public static class NET_STREAM_TYPE extends Structure - { - public static final int NET_EM_STREAM_ERR = 0; // 其它 - public static final int NET_EM_STREAM_MAIN = 1; // "Main"-主码流 - public static final int NET_EM_STREAM_EXTRA_1 = 2; // "Extra1"-辅码流1 - public static final int NET_EM_STREAM_EXTRA_2 = 3; // "Extra2"-辅码流2 - public static final int NET_EM_STREAM_EXTRA_3 = 4; // "Extra3"-辅码流3 - public static final int NET_EM_STREAM_SNAPSHOT = 5; // "Snapshot"-抓图码流 - public static final int NET_EM_STREAM_OBJECT = 6; // "Object"-物体流 - public static final int NET_EM_STREAM_AUTO = 7; // "Auto"-自动选择合适码流 - public static final int NET_EM_STREAM_PREVIEW = 8; // "Preview"-预览裸数据码流 - public static final int NET_EM_STREAM_NONE = 9; // 无视频码流(纯音频) - } - - // 视频诊断结果类型 - public static class NET_VIDEODIAGNOSIS_RESULT_TYPE extends Structure - { - public static final int NET_EM_ROTATION = 0; // "Rotation" -视频轮巡分析结果 - public static final int NET_EM_REAL = 1; // "Real" -实时视频分析结果 - public static final int NET_EM_NR_UNKNOW = 2; // 未定义 - } - - //视频诊断错误原因 - public static class NET_VIDEODIAGNOSIS_FAIL_TYPE extends Structure - { - public static final int NET_EM_NO_ERROR = 0; // 诊断成功 - public static final int NET_EM_DISCONNECT = 1; // "Disconnect" - 末能连接设备 - public static final int NET_EM_CH_NOT_EXIST = 2; // "ChannelNotExist" - 通道不存在 - public static final int NET_EM_LOGIN_OVER_TIME = 3; // "LoginOverTime" - 登录超时 - public static final int NET_EM_NO_VIDEO = 4; // "NoVideo" - 登录成功无视频 - public static final int NET_EM_NO_RIGHT = 5; // "NoRight" - 无操作权限 - public static final int NET_EM_PLATFROM_LOGIN_FAILED = 6; // "PlatformLoginFailed" - 平台登入失败 - public static final int NET_EM_PLATFROM_DISCONNECT = 7; // "PlatformDisconnect" - 平台断开连接 - public static final int NET_EM_GET_STREAM_OVER_TIME = 8; // "GetStreamOverTime" - 获取码流超时 - public static final int NET_EM_GET_NO_ENOUGH_STREAM = 9; // "NoEnoughStream" - 码流不足 - public static final int NET_EM_DECODE_STREAM_FAILED = 10; // "DecodeStreamFailed" - 解码失败 - public static final int NET_EM_GET_OFF_LINE = 11; // "OffLine" - 前端设备离线 - public static final int NET_EM_NF_UNKNOW = 12; // 其他原因,详见结构体里的失败原因描述 - public static final int NET_EM_NOT_SD = 13; // "NotSD" - 设备非球机,云台类检测无效 - } - - // 接口 CLIENT_StartFindDiagnosisResult 的输入参数 - public static class NET_IN_FIND_DIAGNOSIS extends Structure - { - public int dwSize; // 此结构体大小 - public int nDiagnosisID; // 视频诊断ID,从0开始 - public int dwWaitTime; // 接口超时等待时间 - public NET_ARRAY stuDeviceID; // 设备唯一标志,pArray : null表示不使用设备ID查询 - public NET_TIME stuStartTime; // 开始时间 - public NET_TIME stuEndTime; // 结束时间 - public int nVideoChannel; // 视频通道号,-1:所有通道号 - public int nTypeCount; // 诊断类型个数,0:不使用诊断类型查询 - public Pointer pstDiagnosisTypes; // 诊断类型数组,表示需要查询的诊断类型, 对应 NET_ARRAY[] - // 由用户申请内存,大小为sizeof(NET_ARRAY)*nTypeCount - public byte[] szProjectName = new byte[MAX_PATH]; // 计划名称 - - public NET_IN_FIND_DIAGNOSIS() { - this.dwSize = this.size(); - } - } - - // 接口 CLIENT_StartFindDiagnosisResult 的输出参数 - public static class NET_OUT_FIND_DIAGNOSIS extends Structure - { - public int dwSize; // 此结构体大小 - public LLong lFindHandle; // 查询句柄 - public int dwTotalCount; // 符合条件的总个数 - - public NET_OUT_FIND_DIAGNOSIS() { - this.dwSize = this.size(); - } - } - - // 接口 CLIENT_DoFindDiagnosisResult 的输入参数 - public static class NET_IN_DIAGNOSIS_INFO extends Structure - { - public int dwSize; // 此结构体大小 - public int nDiagnosisID; // 视频诊断ID,从0开始 - public int dwWaitTime; // 接口超时等待时间 - public int nFindCount; // 每次查询的视频诊断结果条数 - public int nBeginNumber; // 查询起始序号 0<=beginNumber<= totalCount-1 - - public NET_IN_DIAGNOSIS_INFO() { - this.dwSize = this.size(); - } - } - - // 接口 CLIENT_DoFindDiagnosisResult 的输出参数 - public static class NET_OUT_DIAGNOSIS_INFO extends Structure - { - public int dwSize; // 此结构体大小 - public int nInputNum; // 用户分配的 NET_VIDEODIAGNOSIS_RESULT_INFO 个数 - public int nReturnNum; // 返回结果个数 - public Pointer pstDiagnosisResult; // 结果数据 结构体指针需要调用者分配, 对应 NET_VIDEODIAGNOSIS_RESULT_INFO[] - // 申请内存大小为sizeof(NET_VIDEODIAGNOSIS_RESULT_INFO)*nInputNum - - public NET_OUT_DIAGNOSIS_INFO() { - this.dwSize = this.size(); - } - } - - public static class NET_VIDEODIAGNOSIS_RESULT_INFO extends Structure - { - public int dwSize; // 此结构体大小 - - public Pointer pstDiagnosisCommonInfo; // 视频诊断通用信息 以下结构体指针需要调用者分配, 对应 NET_VIDEODIAGNOSIS_COMMON_INFO - - public int abDither; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstDither; // 视频抖动检测, 对应 NET_VIDEO_DITHER_DETECTIONRESULT - - public int abStration; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstStration; // 视频条纹检测, 对应 NET_VIDEO_STRIATION_DETECTIONRESULT - - public int abLoss; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstLoss; // 视频丢失检测, 对应 NET_VIDEO_LOSS_DETECTIONRESULT - - public int abCover; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstCover; // 视频遮挡检测, 对应 NET_VIDEO_COVER_DETECTIONRESULT - - public int abFrozen; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstFrozen; // 视频冻结检测, 对应 NET_VIDEO_FROZEN_DETECTIONRESULT - - public int abBrightness; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstBrightness; // 视频亮度异常检测, 对应 NET_VIDEO_BRIGHTNESS_DETECTIONRESULT - - public int abContrast; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstContrast; // 视频对比度异常检测, 对应 NET_VIDEO_CONTRAST_DETECTIONRESULT - - public int abUnbalance; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstUnbalance; // 视频偏色检测, 对应 NET_VIDEO_UNBALANCE_DETECTIONRESULT - - public int abNoise; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstNoise; // 视频噪声检测, 对应 NET_VIDEO_NOISE_DETECTIONRESULT - - public int abBlur; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstBlur; // 视频模糊检测, 对应 NET_VIDEO_BLUR_DETECTIONRESULT - - public int abSceneChange; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstSceneChange; // 视频场景变化检测, 对应 NET_VIDEO_SCENECHANGE_DETECTIONRESULT - - public int abVideoDelay; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstVideoDelay; // 视频延迟检测, 对应 NET_VIDEO_DELAY_DETECTIONRESUL - - public int abPTZMoving; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstPTZMoving; // 云台操作检测, 对应 NET_PTZ_MOVING_DETECTIONRESULT - - public int abBlackAndWhite; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstBlackAndWhite; // 黑白图像检测, 对应 NET_BLACK_WHITE_DETECTIONRESULT - - public int abDramaticChange; // 用于表示此次结果中这个诊断项是否有效, 1-true, 0-false - public Pointer pstDramaticChange; // 场景剧变检测, 对应 NET_DIAGNOSIS_DRAMATIC_DETECTIONRESULT - - public NET_VIDEODIAGNOSIS_RESULT_INFO() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_DITHER) 视频抖动检测结果 -- 画面变化 风吹,晃动,转动包括云台转动 - public static class NET_VIDEO_DITHER_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态 一般小于是正常,大于是异常,中间是警告, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 检测项持续检测时间 暂时无用 - - public NET_VIDEO_DITHER_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - public static class NET_STATE_TYPE extends Structure - { - public static final int NET_EM_STATE_ERR = 0; // 其它 - public static final int NET_EM_STATE_NORMAL = 1; // "Normal" 正常 - public static final int NET_EM_STATE_WARNING = 2; // "Warning" 警告 - public static final int NET_EM_STATE_ABNORMAL = 3; // "Abnormal" 异常 - } - - // 对应检测类型(NET_DIAGNOSIS_STRIATION)视频条纹检测结果 -- 相机受到干扰出现异常条纹 - public static class NET_VIDEO_STRIATION_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_STRIATION_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_LOSS)视频丢失检测结果 -- 断电 断线等造成的 - public static class NET_VIDEO_LOSS_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_LOSS_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_COVER)视频遮挡检测结果 -- 相机被遮挡了 - public static class NET_VIDEO_COVER_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_COVER_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_FROZEN)视频冻结检测结果 -- 画面不动多久为冻结 - public static class NET_VIDEO_FROZEN_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_FROZEN_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_BRIGHTNESS)视频亮度异常检测结果 --以下是相机配置不正确的一些现象检测 - public static class NET_VIDEO_BRIGHTNESS_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_BRIGHTNESS_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_CONTRAST)视频对比度异常检测结果 - public static class NET_VIDEO_CONTRAST_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_CONTRAST_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_UNBALANCE)视频偏色异常检测结果 - public static class NET_VIDEO_UNBALANCE_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_UNBALANCE_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_NOISE)视频噪声异常检测结果 - public static class NET_VIDEO_NOISE_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_NOISE_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_BLUR)视频模糊异常检测结果 - public static class NET_VIDEO_BLUR_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_BLUR_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // 对应检测类型(NET_DIAGNOSIS_SCENECHANGE)视频场景变化检测结果 - public static class NET_VIDEO_SCENECHANGE_DETECTIONRESULT extends Structure - { - public int dwSize; // 此结构体大小 - public int nValue; // 检测结果量化值 - public int emState; // 检测结果状态, 参考 NET_STATE_TYPE - public int nDuration; // 状态持续时间 - - public NET_VIDEO_SCENECHANGE_DETECTIONRESULT() { - this.dwSize = this.size(); - } - } - - // CLIENT_DeleteDevConfig 输入参数 - public static class NET_IN_DELETECFG extends Structure - { - public int dwSize; // 结构体大小 - public String szCommand; // 配置命令 - - public NET_IN_DELETECFG() { - this.dwSize = this.size(); - } - } - - // CLIENT_DeleteDevConfig 输出参数 - public static class NET_OUT_DELETECFG extends Structure - { - public int dwSize; // 结构体大小 - public int nError; // 设备返回的错误码 - public int nRestart; // 设备是否重启 - public int dwOptionMask; // 选项 具体见枚举 NET_EM_CONFIGOPTION - - public NET_OUT_DELETECFG() { - this.dwSize = this.size(); - } - } - - public static class NET_EM_CONFIGOPTION extends Structure - { - public static final int NET_EM_CONFIGOPTION_OK = 0; - public static final int NET_EM_CONFIGOPTION_NEEDRESTART = 1; // 需要重启应用程序 - public static final int NET_EM_CONFIGOPTION_NEEDREBOOT = 2; // 需要重启系统 - public static final int NET_EM_CONFIGOPTION_WRITEFILEERROR = 4; // 写文件出错 - public static final int NET_EM_CONFIGOPTION_CAPSNOTSUPPORT = 8; // 设备特性不支持 - public static final int NET_EM_CONFIGOPTION_VALIDATEFAILED = 16; // 配置校验失败 - } - - // CLIENT_GetMemberNames 输入参数 - public static class NET_IN_MEMBERNAME extends Structure - { - public int dwSize; // 结构体大小 - public String szCommand; // 配置命令 - - public NET_IN_MEMBERNAME() { - this.dwSize = this.size(); - } - } - - // CLIENT_GetMemberNames 输出参数 - public static class NET_OUT_MEMBERNAME extends Structure - { - public int dwSize; // 结构体大小 - public int nError; // 设备返回的错误码 - public int nRestart; // 设备是否重启 - public int nTotalNameCount; // 名称个数 通过能力集得到,调用者填写 - public int nRetNameCount; // 返回的实际名称个数 - public Pointer pstNames; // 名称数组 调用者申请内存,个数是 nTotalNameCount 个 NET_ARRAY - // 由用户申请内存,大小为sizeof(NET_ARRAY)*nTotalNameCount - - public NET_OUT_MEMBERNAME() { - this.dwSize = this.size(); - } - } - - // 视频诊断参数表(CFG_CMD_VIDEODIAGNOSIS_PROFILE),支持多种参数表,用表名称来索引 调用者申请内存并初始化 - public static class CFG_VIDEODIAGNOSIS_PROFILE extends Structure - { - public int nTotalProfileNum; // 调用者分配参数表数 根据能力集获取 - public int nReturnProfileNum; // 返回的实际参数表数 - public Pointer pstProfiles; // 调用者分配 nTotalProfileNum 个 CFG_VIDEO_DIAGNOSIS_PROFILE - } - - public static class CFG_VIDEO_DIAGNOSIS_PROFILE extends Structure - { - public byte[] szName = new byte[MAX_PATH]; // 名称Ansi编码 - - public Pointer pstDither; // 视频抖动检测, 对应 CFG_VIDEO_DITHER_DETECTION - public Pointer pstStriation; // 视频条纹检测, 对应 CFG_VIDEO_STRIATION_DETECTION - public Pointer pstLoss; // 视频丢失检测, 对应 CFG_VIDEO_LOSS_DETECTION - public Pointer pstCover; // 视频遮挡检测, 对应 CFG_VIDEO_COVER_DETECTION - public Pointer pstFrozen; // 视频冻结检测, 对应 CFG_VIDEO_FROZEN_DETECTION - public Pointer pstBrightness; // 视频亮度异常检测, 对应 CFG_VIDEO_BRIGHTNESS_DETECTION - public Pointer pstContrast; // 对比度异常检测, 对应 CFG_VIDEO_CONTRAST_DETECTION - public Pointer pstUnbalance; // 偏色异常检测, 对应 CFG_VIDEO_UNBALANCE_DETECTION - public Pointer pstNoise; // 噪声检测, 对应 CFG_VIDEO_NOISE_DETECTION - public Pointer pstBlur; // 模糊检测, 对应 CFG_VIDEO_BLUR_DETECTION - public Pointer pstSceneChange; // 场景变化检测, 对应 CFG_VIDEO_SCENECHANGE_DETECTION - public Pointer pstVideoDelay; // 视频延时检测, 对应 CFG_VIDEO_DELAY_DETECTION - public Pointer pstPTZMoving; // 云台移动检测, 对应 CFG_PTZ_MOVING_DETECTION - public Pointer pstBlackAndWhite; // 黑白图像检测, 对应 CFG_VIDEO_BLACKWHITE_DETECTION - public Pointer pstDramaticChange; // 场景剧变检测, 对应 CFG_VIDEO_DRAMATICCHANGE_DETECTION - } - - ///////////////////////////////////视频诊断参数配置/////////////////////////////////////// - // 视频抖动检测 - public static class CFG_VIDEO_DITHER_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte byThrehold1; // 预警阀值 取值1-100 - public byte byThrehold2; // 报警阀值 取值1-100 - } - - // 条纹检测 - public static class CFG_VIDEO_STRIATION_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte byThrehold1; // 预警阀值 取值1-100 - public byte byThrehold2; // 报警阀值 取值1-100 - public byte[] byReserved1 = new byte[2]; // 字节对齐 - public int bUVDetection; // UV分量是否检测, 1-true, 0-false - } - - // 视频丢失检测 - public static class CFG_VIDEO_LOSS_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - } - - // 视频遮挡检测 - public static class CFG_VIDEO_COVER_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte byThrehold1; // 预警阀值 取值1-100 - public byte byThrehold2; // 报警阀值 取值1-100 - } - - // 画面冻结检测 - public static class CFG_VIDEO_FROZEN_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - } - - // 亮度异常检测 - public static class CFG_VIDEO_BRIGHTNESS_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte bylowerThrehold1; // 预警阀值 取值1-100 - public byte bylowerThrehold2; // 报警阀值 取值1-100 - public byte byUpperThrehold1; // 预警阀值 取值1-100 - public byte byUpperThrehold2; // 报警阀值 取值1-100 - } - - // 对比度异常检测 - public static class CFG_VIDEO_CONTRAST_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte bylowerThrehold1; // 预警阀值 取值1-100 - public byte bylowerThrehold2; // 报警阀值 取值1-100 - public byte byUpperThrehold1; // 预警阀值 取值1-100 - public byte byUpperThrehold2; // 报警阀值 取值1-100 - } - - // 偏色检测 - public static class CFG_VIDEO_UNBALANCE_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte byThrehold1; // 预警阀值 取值1-100 - public byte byThrehold2; // 报警阀值 取值1-100 - } - - // 噪声检测 - public static class CFG_VIDEO_NOISE_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte byThrehold1; // 预警阀值 取值1-100 - public byte byThrehold2; // 报警阀值 取值1-100 - } - - // 模糊检测 - public static class CFG_VIDEO_BLUR_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte byThrehold1; // 预警阀值 取值1-100 - public byte byThrehold2; // 报警阀值 取值1-100 - } - - // 场景变化检测 - public static class CFG_VIDEO_SCENECHANGE_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nMinDuration; // 最短持续时间 单位:秒 0~65535 - public byte byThrehold1; // 预警阀值 取值1-100 - public byte byThrehold2; // 报警阀值 取值1-100 - } - - // 视频延时检测 - public static class CFG_VIDEO_DELAY_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - } - - // 云台移动检测 - public static class CFG_PTZ_MOVING_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - } - - // 黑白图像检测 - public static class CFG_VIDEO_BLACKWHITE_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nEarlyWarning; // 预警阈值 - public int nAlarm; // 报警阈值 - public int nMinDuration; // 最短持续时间 - } - - // 场景剧变检测 - public static class CFG_VIDEO_DRAMATICCHANGE_DETECTION extends Structure - { - public int bEnable; // 使能配置, 1-true, 0-false - public int nEarlyWarning; // 预警阈值 - public int nAlarm; // 报警阈值 - public int nMinDuration; // 最短持续时间 - } - - // 视频诊断任务表(CFG_CMD_VIDEODIAGNOSIS_TASK),不同的任务通过名子索引 调用者申请内存并初始化 - public static class CFG_VIDEODIAGNOSIS_TASK extends Structure - { - public int nTotalTaskNum; // 调用者分配任务个数 根据能力集获取 - public int nReturnTaskNum; // 返回实际任务个数 - public Pointer pstTasks; // 任务配置 调用者分配内存 nTotalTaskNum 个 CFG_DIAGNOSIS_TASK - } - - public static class CFG_DIAGNOSIS_TASK extends Structure - { - public byte[] szTaskName = new byte[MAX_PATH]; // 任务名称Ansi编码 - public byte[] szProfileName = new byte[MAX_PATH]; // 本任务使用的诊断参数表名Ansi编码 - public int nTotalSourceNum; // 调用者分配任务数据源的个数 根据能力集获取 - public int nReturnSourceNum; // 返回实际任务数据源的个数 - public Pointer pstSources; // 任务数据源 调用者分配内存 nTotalSourceNum 个 CFG_TAST_SOURCES - } - - public static class CFG_TAST_SOURCES extends Structure - { - // 能力 - public byte abDeviceID; // abDeviceID(使用szDeviceID) 和 abRemoteDevice(使用stRemoteDevice) 必须有一个为true,否则Sources是null - public byte abRemoteDevice; - - public byte[] szDeviceID = new byte[MAX_PATH]; // 设备ID - public CFG_TASK_REMOTEDEVICE stRemoteDevice = new CFG_TASK_REMOTEDEVICE(); // 设备详细信息 - public int nVideoChannel; // 视频通道号 - public int emVideoStream; // 视频码流类型, 参考 CFG_EM_STREAM_TYPE - public int nDuration; // 持续诊断时间 - public int abStartTime; // 0 表示源为实时码流, stuStartTime字段无效; 1表示源为录像文件, stuStartTime字段有效 - public CFG_NET_TIME stuStartTime; // 当abStartTime为TRUE时有效,表示源不是实时监视码流, 而是录像文件,该时间表示要分析的录像的开始时间 - } - - // 设备详细信息 - public static class CFG_TASK_REMOTEDEVICE extends Structure - { - public byte[] szAddress = new byte[MAX_PATH]; // 设备地址或域名 - public int dwPort; // 端口号 - public byte[] szUserName = new byte[MAX_PATH]; // 用户名 - public byte[] szPassword = new byte[MAX_PATH]; // 密码明文 - public byte[] szProtocolType = new byte[MAX_PATH];// 连接设备的协议类型 - public Pointer pVideoInput; // 视频输入通道,用户申请nMaxVideoInputs 个 CFG_RemoteDeviceVideoInput - public int nMaxVideoInputs; // 视频输入通道最大数 - public int nRetVideoInputs; // 返回的视频输入通道数 - } - - public static class CFG_EM_STREAM_TYPE extends Structure - { - public static final int CFG_EM_STREAM_ERR = 0; // 其它 - public static final int CFG_EM_STREAM_MAIN = 1; // "Main"-主码流 - public static final int CFG_EM_STREAM_EXTRA_1 = 2; // "Extra1"-辅码流1 - public static final int CFG_EM_STREAM_EXTRA_2 = 3; // "Extra2"-辅码流2 - public static final int CFG_EM_STREAM_EXTRA_3 = 4; // "Extra3"-辅码流3 - public static final int CFG_EM_STREAM_SNAPSHOT = 5; // "Snapshot"-抓图码流 - public static final int CFG_EM_STREAM_OBJECT = 6; // "Object"-物体流 - } - - // 频诊断计划表(CFG_CMD_VIDEODIAGNOSIS_PROJECT),不同的计划通过名字索引 调用者申请内存并初始化 - public static class CFG_VIDEODIAGNOSIS_PROJECT extends Structure - { - public int nTotalProjectNum; // 调用者分配计划个数 根据能力集获取 - public int nReturnProjectNum; // 返回实际计划个数 - public Pointer pstProjects; // 计划配置 调用者分配内存 nTotalProjectNum 个 CFG_DIAGNOSIS_PROJECT - } - - public static class CFG_DIAGNOSIS_PROJECT extends Structure - { - public byte[] szProjectName = new byte[MAX_PATH]; // 计划名称Ansi编码 - public int nTotalTaskNum; // 调用者分配任务列表个数 根据能力集获取 - public int nReturnTaskNum; // 返回实际任务列表个数 - public Pointer pstProjectTasks; // 任务列表 调用者分配内存 nTotalTaskNum 个 CFG_PROJECT_TASK - } - - // 视频诊断计划 - public static class CFG_PROJECT_TASK extends Structure - { - public int bEnable; // 任务是否使能, 1-true, 0-false - public byte[] szTaskName = new byte[MAX_PATH]; // 任务名称Ansi编码 - public TIME_SECTION_WEEK_DAY_6[] stTimeSectionWeekDay = - (TIME_SECTION_WEEK_DAY_6[])new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM); // 任务时间段 - public int bIsCycle; // 任务是否循环, 1表示循环, 0表示不循环 - } - - // 获取视频诊断进行状态( CFG_CMD_VIDEODIAGNOSIS_GETSTATE )对应结构体 - public static class CFG_VIDEODIAGNOSIS_STATE_INFO extends Structure - { - public int bEnable; // 是否使能, 1-true, 0-false - public int bRunning; // 是否正在运行, 1-true, 0-false, 使能开启,并且当前有工作任务正在进行,没有错误发生。 - public byte[] szCurrentProject = new byte[MAX_PATH]; // 当前计划名称 - public byte[] szCurrentTask = new byte[MAX_PATH]; // 当前任务名称 - public byte[] szCurrentProfile = new byte[MAX_PATH]; // 当前任务配置参数表名称 - public int nCurrentSourceCount; // 当前任务轮训视频源个数 - public int nCurrentSourceIndex; // 当前任务当前视频源序号 从0开始 - public CFG_TIME_SECTION stCurrentTimeSection; // 当前计划时间段 - public int nTaskCountOfProject; // 当前计划总任务数 - public int nIndexOfCurrentTask; // 当前任务序号 从0开始 - } - - // CLIENT_GetVideoDiagnosisState 入参 - public static class NET_IN_GET_VIDEODIAGNOSIS_STATE extends Structure - { - public int dwSize; // 结构体大小 - public byte[] szProject = new byte[128]; // 计划名,为空表示所有执行的计划 - - public NET_IN_GET_VIDEODIAGNOSIS_STATE() { - this.dwSize = this.size(); - } - } - - // 诊断状态 - public static class VIDEODIAGNOSIS_STATE extends Structure - { - public int bEnable; // 是否使能 - public int bRunning; // 是否正在运行 使能开启,并且当前有工作任务正在进行,没有错误发生。 - public byte[] szCurrentProject = new byte[MAX_PATH]; // 当前计划名称 - public byte[] szCurrentTask = new byte[MAX_PATH]; // 当前任务名称 - public byte[] szCurrentProfile = new byte[MAX_PATH]; // 当前任务配置参数表名称 - public int nCurrentSourceCount; // 当前任务轮训视频源个数 - public int nCurrentSourceIndex; // 当前任务当前视频源序号 从0开始 - public NET_TSECT stCurrentTimeSection; // 当前计划时间段 - public int nTaskCountOfProject; // 当前计划总任务数 - public int nIndexOfCurrentTask; // 当前任务序号 从0开始 - public byte[] byReserved = new byte[512]; // 保留字节 - } - // CLIENT_GetVideoDiagnosisState 出参 - public static class NET_OUT_GET_VIDEODIAGNOSIS_STATE extends Structure - { - public int dwSize; // 结构体大小 - public VIDEODIAGNOSIS_STATE[] stuState = (VIDEODIAGNOSIS_STATE[])new VIDEODIAGNOSIS_STATE().toArray(2);// 工作状态,数组下标0:Tour,1:RealTime - - public NET_OUT_GET_VIDEODIAGNOSIS_STATE() { - this.dwSize = this.size(); - } - } - - // CLIENT_RadiometryAttach 入参 - public static class NET_IN_RADIOMETRY_ATTACH extends Structure - { - public int dwSize; - public int nChannel; // 视频通道号 -1 表示全部 - public StdCallCallback cbNotify; // 状态回调函数指针, 对应回调函数 fRadiometryAttachCB - public Pointer dwUser; // 用户数据 - - public NET_IN_RADIOMETRY_ATTACH() { - this.dwSize = this.size(); - } - } - - // CLIENT_RadiometryAttach 出参 - public static class NET_OUT_RADIOMETRY_ATTACH extends Structure - { - public int dwSize; - - public NET_OUT_RADIOMETRY_ATTACH() { - this.dwSize = this.size(); - } - } - - // 热图数据 - public static class NET_RADIOMETRY_DATA extends Structure - { - public NET_RADIOMETRY_METADATA stMetaData; // 元数据 - public Pointer pbDataBuf; // 热图数据缓冲区(压缩过的数据,里面是每个像素点的温度数据,可以使用元数据信息解压) - public int dwBufSize; // 热图数据缓冲区大小 - public byte[] reserved = new byte[512]; - } - - // 热图元数据信息 - public static class NET_RADIOMETRY_METADATA extends Structure - { - public int nHeight; // 高 - public int nWidth; // 宽 - public int nChannel; // 通道 - public NET_TIME stTime; // 获取数据时间 - public int nLength; // 数据大小 - public byte[] szSensorType = new byte[64]; // 机芯类型 - public int nUnzipParamR; // 解压缩参数R - public int nUnzipParamB; // 解压缩参数B - public int nUnzipParamF; // 解压缩参数F - public int nUnzipParamO; // 解压缩参数O - public byte[] Reserved = new byte[256]; - } - - // CLIENT_RadiometryFetch 入参 - public static class NET_IN_RADIOMETRY_FETCH extends Structure - { - public int dwSize; - public int nChannel; // 通道号, 通道号要与订阅时一致, -1除外 - - public NET_IN_RADIOMETRY_FETCH() { - this.dwSize = this.size(); - } - } - - // CLIENT_RadiometryFetch 出参 - public static class NET_OUT_RADIOMETRY_FETCH extends Structure - { - public int dwSize; - public int nStatus; // 0: 未知, 1: 空闲, 2: 获取热图中 - - public NET_OUT_RADIOMETRY_FETCH() { - this.dwSize = this.size(); - } - } - - // 设备信息类型,对应 CLIENT_StartFind CLIENT_DoFind CLIENT_StopFind 接口 - public static class NET_FIND extends Structure - { - public static int NET_FIND_RADIOMETRY = 0; // 热成像温度查询, pInBuf= NET_IN_RADIOMETRY_*FIND*, pOutBuf= NET_OUT_RADIOMETRY_*FIND* - public static int NET_FIND_POS_EXCHANGE = 1; // POS交易信息查询,pInBuf = NET_IN_POSEXCHANGE_*FIND*,pOutBuf= NET_OUT_POSEXCHANGE_*FIND* - } - - //热成像查询保存周期 - public static class EM_RADIOMETRY_PERIOD extends Structure - { - public static int EM_RADIOMETRY_PERIOD_UNKNOWN = 0; // 未知 - public static int EM_RADIOMETRY_PERIOD_5 = 5; // 5分钟记录表,默认 - public static int EM_RADIOMETRY_PERIOD_10 = 10; // 10分钟记录表 - public static int EM_RADIOMETRY_PERIOD_15 = 15; // 15分钟记录表 - public static int EM_RADIOMETRY_PERIOD_30 = 30; // 30分钟记录表 - } - - // CLIENT_StartFind 接口 NET_FIND_RADIOMETRY 命令入参 - public static class NET_IN_RADIOMETRY_STARTFIND extends Structure - { - public int dwSize; - public NET_TIME stStartTime; // 查询开始时间 - public NET_TIME stEndTime; // 查询结束时间 - public int nMeterType; // 查询类别,见NET_RADIOMETRY_METERTYPE - public int nChannel; // 通道号 - public int emPeriod; // 所查询表的保存周期,详见EM_RADIOMETRY_PERIOD - - public NET_IN_RADIOMETRY_STARTFIND() { - this.dwSize = this.size(); - } - } - - // CLIENT_StartFind 接口 NET_FIND_RADIOMETRY 命令出参 - public static class NET_OUT_RADIOMETRY_STARTFIND extends Structure - { - public int dwSize; - public int nFinderHanle; // 取到的查询句柄 - public int nTotalCount; // 符合此次查询条件的结果总条数 - - public NET_OUT_RADIOMETRY_STARTFIND() { - this.dwSize = this.size(); - } - } - - - // CLIENT_DoFind 接口 NET_FIND_RADIOMETRY 命令入参 - public static class NET_IN_RADIOMETRY_DOFIND extends Structure - { - public int dwSize; - public int nFinderHanle; // 查询句柄 - public int nBeginNumber; // 本次查询开始的索引号 - public int nCount; // 本次查询条数,最大为NET_IN_RADIOMETRY_DOFIND_MAX - - public NET_IN_RADIOMETRY_DOFIND() { - this.dwSize = this.size(); - } - } - - // 热成像查询返回的查询结果 - public static class NET_RADIOMETRY_QUERY extends Structure - { - public NET_TIME stTime; // 记录时间 - public int nPresetId; // 预置点编号 - public int nRuleId; // 规则编号 - public byte[] szName = new byte[64]; // 查询项名称 - public NET_POINT stCoordinate; // 查询测温点坐标 - public int nChannel; // 通道号 - public NET_RADIOMETRYINFO stTemperInfo; // 测温信息,目前nTemperMid, nTemperStd 成员无效 - public byte[] reserved = new byte[256]; - } - - // CLIENT_DoFind 接口 NET_FIND_RADIOMETRY 命令出参 - public static class NET_OUT_RADIOMETRY_DOFIND extends Structure - { - public int dwSize; - public int nFound; // 实际查询到的点数 - public NET_RADIOMETRY_QUERY[] stInfo = (NET_RADIOMETRY_QUERY[])new NET_RADIOMETRY_QUERY().toArray(NET_RADIOMETRY_DOFIND_MAX); // 温度统计信息 - - public NET_OUT_RADIOMETRY_DOFIND() { - this.dwSize = this.size(); - } - } - - // CLIENT_StopFind 接口 NET_FIND_RADIOMETRY 命令入参 - public static class NET_IN_RADIOMETRY_STOPFIND extends Structure - { - public int dwSize; - public int nFinderHanle; // 查询句柄 - - public NET_IN_RADIOMETRY_STOPFIND() { - this.dwSize = this.size(); - } - } - - // CLIENT_StopFind 接口 NET_FIND_RADIOMETRY 命令出参 - public static class NET_OUT_RADIOMETRY_STOPFIND extends Structure - { - public int dwSize; - - public NET_OUT_RADIOMETRY_STOPFIND() { - this.dwSize = this.size(); - } - } - - // IPC报警,IPC通过DVR或NVR上报的本地报警(对应事件 NET_ALARM_IPC) - public static class ALARM_IPC_INFO extends Structure - { - public int dwSize; - public int nChannelID; // 通道号 - public int nEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; - public NET_TIME_EX UTC; // 事件发生的时间 - public byte[] szName = new byte[MAX_ALARM_CHANNEL_NAME_LEN]; // 报警通道名称 - - public ALARM_IPC_INFO() { - this.dwSize = this.size(); - } - } - - // 蓝牙开门记录集信息查询条件 - public static class FIND_RECORD_ACCESS_BLUETOOTH_INFO_CONDITION extends Structure - { - public int dwSize; - public byte[] szUserName = new byte[NET_COMMON_STRING_128]; // 用户名 - - public FIND_RECORD_ACCESS_BLUETOOTH_INFO_CONDITION() { - this.dwSize = this.size(); - } - } - - // 蓝牙开门记录集信息 - public static class NET_RECORD_ACCESS_BLUETOOTH_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int nRecNo; // 记录集编号,只读 - public byte[] szUserName = new byte[NET_COMMON_STRING_128]; // 用户名 - public byte[] szPassword = new byte[NET_COMMON_STRING_128]; // 密码 - public byte[] szMac = new byte[NET_COMMON_STRING_32]; // mac地址 - public byte[] szNote = new byte[NET_COMMON_STRING_128]; // 用户备注信息 - - public NET_RECORD_ACCESS_BLUETOOTH_INFO() { - this.dwSize = this.size(); - } - } - - // 智能锁添加更新用户信息接口 CLIENT_UpdateSmartLockUser 入参 - public static class NET_IN_SMARTLOCK_UPDATE_USER_INFO extends Structure - { - public int dwSize; // 结构体大小 - public byte[] szSerialNumber = new byte[32]; // 设备序列号 - public byte[] szCredentialHolder = new byte[16]; // 身份拥有者(与AccessControlCard记录集中的UserID概念一致) - public byte[] szUserName = new byte[32]; // 用户名称 - public NET_TIME stuStartTime; // 起始时间 - public NET_TIME stuEndTime; // 结束时间 - public byte[] szReserve = new byte[512]; // 保留字段 - public int nCardInfoNum; // 卡信息数量 - public NET_SMARTLOCK_CARDINFO[] stuCardInfo = - (NET_SMARTLOCK_CARDINFO[])new NET_SMARTLOCK_CARDINFO().toArray(4); // 卡的信息 - public int nPwdInfoNum; // 密码信息数量 - public NET_SMARTLOCK_PWDINFO[] stuPwdInfo = - (NET_SMARTLOCK_PWDINFO[])new NET_SMARTLOCK_PWDINFO().toArray(4); // 密码信息 - public int nFingerPrintInfoNum; // 密码信息数量 - public NET_SMARTLOCK_FPINFO[] stuFingerPrintInfo = - (NET_SMARTLOCK_FPINFO[])new NET_SMARTLOCK_FPINFO().toArray(4); // 指纹信息 - public int nTaskID; // 任务ID - - public NET_IN_SMARTLOCK_UPDATE_USER_INFO() { - this.dwSize = this.size(); - } - } - - // 智能锁添加更新用户信息接口 CLIENT_UpdateSmartLockUser 出参 - public static class NET_OUT_SMARTLOCK_UPDATE_USER_INFO extends Structure - { - public int dwSize; // 结构体大小 - - public NET_OUT_SMARTLOCK_UPDATE_USER_INFO() { - this.dwSize = this.size(); - } - } - - // 卡片信息 - public static class NET_SMARTLOCK_CARDINFO extends Structure - { - public int emType; // 开门类型, 参考 NET_ACCESS_METHOD - public int nIndex; // 用户信息序号 - public byte[] szCardNo = new byte[32]; // 卡号 - public int emCardType; // 卡类型, 参考 NET_ACCESSCTLCARD_TYPE - public byte[] szReserve = new byte[512]; // 保留字段 - } - - // 密码信息 - public static class NET_SMARTLOCK_PWDINFO extends Structure - { - public int emType; // 开门类型, 参考 NET_ACCESS_METHOD - public int nIndex; // 用户信息序号 - public byte[] szPassword = new byte[32]; // 密码 - public int dwUseTime; // 使用次数 - public byte[] szReserve = new byte[512]; // 保留字段 - } - - // 指纹信息 - public static class NET_SMARTLOCK_FPINFO extends Structure - { - public int emType; // 开门类型, 参考 NET_ACCESS_METHOD - public int nIndex; // 用户信息序号 - public int nFingerprintLen; // 指纹数据长度,不超过1.5K - public Pointer pFingerprintData; // 指纹数据 - public byte[] szReserve = new byte[512]; // 保留字段 - } - - // 控制方式 - public static class NET_ACCESS_METHOD extends Structure - { - public static final int NET_ACCESS_METHOD_UNKNOWN = 0; // 未知 - public static final int NET_ACCESS_METHOD_CARD = 1; // 卡 - public static final int NET_ACCESS_METHOD_PASSWORD = 2; // 密码 - public static final int NET_ACCESS_METHOD_FINGERPRINT = 3; // 指纹 - } - - // 获取当前智能锁的注册用户信息 CLIENT_GetSmartLockRegisterInfo 入参 (每次获取最多获取32条信息) - public static class NET_IN_GET_SMART_LOCK_REGISTER_INFO extends Structure - { - public int dwSize; // 结构体大小 - public byte[] szSerialNumber = new byte[MAX_COMMON_STRING_32]; // 设备序列号 - public int nOffset; // 用户列表的偏移量 - - public NET_IN_GET_SMART_LOCK_REGISTER_INFO() { - this.dwSize = this.size(); - } - } - - // 注册用户的信息 - public static class NET_SMART_LOCK_REGISTER_INFO extends Structure - { - public int emType; // 开锁方式类型, 参考 NET_ACCESS_METHOD - public byte[] szUserID = new byte[MAX_COMMON_STRING_16]; // 用户ID(非AccessControlCard记录集中的UserID概念) - public byte[] szName = new byte[MAX_COMMON_STRING_32]; // 用户名称 - public byte[] byReserved = new byte[512]; // 保留字段 - } - - // 获取当前智能锁的注册用户信息 CLIENT_GetSmartLockRegisterInfo 出参 - public static class NET_OUT_GET_SMART_LOCK_REGISTER_INFO extends Structure - { - public int dwSize; // 结构体大小 - public int nTotalCount; // 总的用户数量 - public int nReturnCount; // 实际返回的用户数量 - public NET_SMART_LOCK_REGISTER_INFO[] stuRegisterInfo = - (NET_SMART_LOCK_REGISTER_INFO[])new NET_SMART_LOCK_REGISTER_INFO().toArray(MAX_NUMBER_REGISTER_INFO); // 注册用户的信息 - - public NET_OUT_GET_SMART_LOCK_REGISTER_INFO() { - this.dwSize = this.size(); - } - } - - // 智能锁修改用户信息 CLIENT_SetSmartLockUserName 入参 - public static class NET_IN_SET_SMART_LOCK_USERNAME extends Structure - { - public int dwSize; // 结构体大小 - public int emType; // 开锁方式类型, 参考 NET_ACCESS_METHOD - public byte[] szSerialNumber = new byte[MAX_COMMON_STRING_32]; // 智能锁序列号 - public byte[] szUserID = new byte[MAX_COMMON_STRING_16]; // 用户ID(非AccessControlCard记录集中的UserID概念) - public byte[] szName = new byte[MAX_COMMON_STRING_32]; // 需要修改成的名称 - - public NET_IN_SET_SMART_LOCK_USERNAME() { - this.dwSize = this.size(); - } - } - - // 智能锁修改用户信息 CLIENT_SetSmartLockUserName 出参 - public static class NET_OUT_SET_SMART_LOCK_USERNAME extends Structure - { - public int dwSize; // 结构体大小 - - public NET_OUT_SET_SMART_LOCK_USERNAME() { - this.dwSize = this.size(); - } - } - - // 智能锁删除用户接口 CLIENT_RemoveSmartLockUser 入参 - public static class NET_IN_SMARTLOCK_REMOVE_USER_INFO extends Structure - { - public int dwSize; // 结构体大小 - public byte[] szSerialNumber = new byte[32]; // 设备序列号 - public byte[] szCredentialHolder = new byte[16]; // 身份拥有者(与AccessControlCard记录集中的UserID概念一致) - public int emType; // 开门类型,unknown 表示全部, 参考 NET_ACCESS_METHOD - public int nIndex; // 某种开门方式的索引号,-1表示全部 - public int nTaskID; // 任务ID - - public NET_IN_SMARTLOCK_REMOVE_USER_INFO() { - this.dwSize = this.size(); - } - } - - // 智能锁删除用户接口 CLIENT_RemoveSmartLockUser 出参 - public static class NET_OUT_SMARTLOCK_REMOVE_USER_INFO extends Structure - { - public int dwSize; // 结构体大小 - - public NET_OUT_SMARTLOCK_REMOVE_USER_INFO() { - this.dwSize = this.size(); - } - } - - // 获取对码信息, 对应命令 NET_DEVSTATE_GET_CODEID_LIST - public static class NET_GET_CODEID_LIST extends Structure - { - public int dwSize; - public int nStartIndex; // 开始的索引号,开始第一次查询可设为0 - public int nQueryNum; // 本次获取的对码条数,此值小于等于能力集中nMaxPageSize字段的值 - public int nRetCodeIDNum; // 实际返回的对码条数 - public Pointer pstuCodeIDInfo; // 获取对码的内容, 对应 NET_CODEID_INFO[],内存由用户分配,不能小于nQueryNum*sizeof(NET_CODEID_INFO) - - public NET_GET_CODEID_LIST() { - this.dwSize = this.size(); - } - } - - // 对码信息 - public static class NET_CODEID_INFO extends Structure - { - public int dwSize; - public long nWirelessId; // 无线ID号 - public int emType; // 无线设备类型, 对应枚举 NET_WIRELESS_DEVICE_TYPE - public byte[] szName = new byte[NET_USER_NAME_LENGTH]; // 用户名 - public int bEnable; // 是否启用了此设备, 1-true; 0-false - public byte[] szCustomName = new byte[NET_COMMON_STRING_64]; // 自定义名称 - public int nChannel; // 无线防区的alarm通道号,Alarm配置的下标,只有Type为Defence时此字段才有效。 - public int emMode; // 无线设备工作模式, 对应枚举 EM_WIRELESS_DEVICE_MODE - public int emSenseMethod; // 传感器方式, 对应枚举 EM_CODEID_SENSE_METHOD_TYPE - public byte[] szSerialNumber = new byte[NET_WIRELESS_DEVICE_SERIAL_NUMBER_MAX_LEN]; // 无线设备序列号 - - public NET_CODEID_INFO() { - this.dwSize = this.size(); - } - } - - // 无线设备类型 - public static class NET_WIRELESS_DEVICE_TYPE extends Structure - { - public static final int NET_WIRELESS_DEVICE_TYPE_UNKNOWN = 0; - public static final int NET_WIRELESS_DEVICE_TYPE_KEYBOARD = 1; // 无线键盘 - public static final int NET_WIRELESS_DEVICE_TYPE_DEFENCE = 2; // 无线防区 - public static final int NET_WIRELESS_DEVICE_TYPE_REMOTECONTROL = 3; // 无线遥控 - public static final int NET_WIRELESS_DEVICE_TYPE_MAGNETOMER = 4; // 无线门磁 - public static final int NET_WIRELESS_DEVICE_TYPE_ALARMBELL = 5; // 无线警号 - public static final int NET_WIRELESS_DEVICE_TYPE_SWITCHER = 6; // 无线插座 - public static final int NET_WIRELESS_DEVICE_TYPE_SMARTLOCK = 7; // 无线智能锁 - public static final int NET_WIRELESS_DEVICE_TYPE_REPEATER = 8; // 无线中继器 - } - - // 无线设备工作模式 - public static class EM_WIRELESS_DEVICE_MODE extends Structure - { - public static final int EM_WIRELESS_DEVICE_MODE_UNKNOWN = 0; // 模式未识别 - public static final int EM_WIRELESS_DEVICE_MODE_NORMAL = 1; // Normal 普通模式 - public static final int EM_WIRELESS_DEVICE_MODE_POLLING = 2; // Polling 巡检模式 只有Type为RemoteControl时才能处于巡检模式 - } - - // 传感器方式 - public static class EM_CODEID_SENSE_METHOD_TYPE extends Structure - { - public static final int EM_CODEID_SENSE_METHOD_TYPE_UNKOWN = 0; // 未知的 - public static final int EM_CODEID_SENSE_METHOD_TYPE_DOOR_MAGNETISM = 1; // 门磁 - public static final int EM_CODEID_SENSE_METHOD_TYPE_GAS_SENSOR = 2; // 燃气传感 - public static final int EM_CODEID_SENSE_METHOD_TYPE_CURTAIN_SENSOR = 3; // 幕帘传感器 - public static final int EM_CODEID_SENSE_METHOD_TYPE_MOBILE_SENSOR = 4; // 移动传感器 - public static final int EM_CODEID_SENSE_METHOD_TYPE_PASSIVEINFRA = 5; // 被动红外传感器 - public static final int EM_CODEID_SENSE_METHOD_TYPE_URGENCY_BUTTON = 6; // 紧急按钮 - public static final int EM_CODEID_SENSE_METHOD_TYPE_SMOKING_SENSOR = 7; // 烟雾传感器 - public static final int EM_CODEID_SENSE_METHOD_TYPE_DOUBLEMETHOD = 8; // 双鉴传感器(红外+微波) - public static final int EM_CODEID_SENSE_METHOD_TYPE_WATER_SENSOR = 9; // 水浸传感器 - public static final int EM_CODEID_SENSE_METHOD_TYPE_THREEMETHOD = 10; // 三技术 - } - - // CLIENT_EncryptString 接口入参 - public static class NET_IN_ENCRYPT_STRING extends Structure - { - public int dwSize; // 结构体大小 - public byte[] szCard = new byte[33]; // 需要加密的字符串 - public byte[] byReserved1 = new byte[3]; // 字节对齐 - public byte[] szKey = new byte[33]; // 秘钥 - public byte[] byReserved2 = new byte[3]; // 字节对齐 - - public NET_IN_ENCRYPT_STRING() { - this.dwSize = this.size(); - } - } - - // CLIENT_EncryptString 接口出参 - public static class NET_OUT_ENCRYPT_STRING extends Structure - { - public int dwSize; // 结构体大小 - public byte[] szEncryptString = new byte[1024]; // 加密后字符串 - - public NET_OUT_ENCRYPT_STRING() { - this.dwSize = this.size(); - } - } - - // 设置二维码的解码信息入参 - public static class NET_IN_SET_QRCODE_DECODE_INFO extends Structure - { - public int dwSize; - public int emCipher; // 加密方式, 参考枚举 NET_ENUM_QRCODE_CIPHER - public byte[] szKey = new byte[33]; // 秘钥 - public byte[] byReserved = new byte[3]; // 字节对齐 - - public NET_IN_SET_QRCODE_DECODE_INFO() { - this.dwSize = this.size(); - } - } - - // 设置二维码的解码信息出参 - public static class NET_OUT_SET_QRCODE_DECODE_INFO extends Structure - { - public int dwSize; - - public NET_OUT_SET_QRCODE_DECODE_INFO() { - this.dwSize = this.size(); - } - } - - // 使用的加密算法 - public static class NET_ENUM_QRCODE_CIPHER extends Structure - { - public static final int NET_ENUM_QRCODE_CIPHER_UNKNOWN = 0; - public static final int NET_ENUM_QRCODE_CIPHER_AES256 = 1; // AES-256 - } - - //门禁卡数据操作事件 - public static class ALARM_ACCESS_CARD_OPERATE_INFO extends Structure - { - public int dwSize; - public int emActionType; // 门禁卡数据操作类型, 参考 NET_ACCESS_ACTION_TYPE - public byte[] szCardNo = new byte[NET_MAX_CARDINFO_LEN]; // 门禁卡卡号 - public int emResult; // 操作结果,-1为未知,0为失败,1为成功,参考 NET_THREE_STATUS_BOOL - public int nChannelID; // 门通道号(或者门锁,门和门锁一一对应), 从0开始 - public byte[] szCredentialHolder = new byte[16]; // 身份拥有者 - public int emType; // 用户类型, 参考 NET_ACCESS_METHOD - public byte[] szSerialNum = new byte[32]; // 序列号 - public int nIndex; // 某开门方式下的索引号 - public int nTaskID; // 任务ID - - public ALARM_ACCESS_CARD_OPERATE_INFO() { - this.dwSize = this.size(); - } - } - - - //门禁卡数据操作类型 - public static class NET_ACCESS_ACTION_TYPE extends Structure - { - public static final int NET_ACCESS_ACTION_TYPE_UNKNOWN = 0; // 未知 - public static final int NET_ACCESS_ACTION_TYPE_INSERT = 1; // 插入 - public static final int NET_ACCESS_ACTION_TYPE_UPDATE = 2; // 更新 - public static final int NET_ACCESS_ACTION_TYPE_REMOVE = 3; // 删除 - } - - // 门禁未关事件详细信息 - public static class ALARM_ACCESS_CTL_NOT_CLOSE_INFO extends Structure - { - public int dwSize; - public int nDoor; // 门通道号 - public byte[] szDoorName = new byte[NET_MAX_DOORNAME_LEN]; // 门禁名称 - public NET_TIME stuTime; // 报警事件发生的时间 - public int nAction; // 0:开始 1:停止 - public int nEventID; // 事件ID - - public ALARM_ACCESS_CTL_NOT_CLOSE_INFO() { - this.dwSize = this.size(); - } - } - - // 闯入事件详细信息 - public static class ALARM_ACCESS_CTL_BREAK_IN_INFO extends Structure - { - public int dwSize; - public int nDoor; // 门通道号 - public byte[] szDoorName = new byte[NET_MAX_DOORNAME_LEN]; // 门禁名称 - public NET_TIME stuTime; // 报警事件发生的时间 - public int nEventID; //事件ID - - public ALARM_ACCESS_CTL_BREAK_IN_INFO() { - this.dwSize = this.size(); - } - } - - - // CLIENT_ListenServer 接口回调fServiceCallBack函数支持的命令类型 - public static class EM_LISTEN_TYPE extends Structure - { - public static final int NET_DVR_DISCONNECT = -1; // 验证期间设备断线回调 - public static final int NET_DVR_SERIAL_RETURN = 1; // 设备注册携带序列号 对应 char* szDevSerial - public static final int NET_DEV_AUTOREGISTER_RETURN = 2; // 设备注册携带序列号和令牌 对应NET_CB_AUTOREGISTER - public static final int NET_DEV_NOTIFY_IP_RETURN = 3; // 设备仅上报IP, 不作为主动注册用, 用户获取ip后只能按照约定的端口按照非主动注册的类型登录 - } - /*********************************************************************** ** 回调 ***********************************************************************/ @@ -18468,185 +17457,185 @@ public interface NetSDKLib extends Library { public interface fHaveReConnect extends StdCallCallback { public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser); } - + // 消息回调函数原形(pBuf内存由SDK内部申请释放) - public interface fMessCallBack extends StdCallCallback{ + public interface fMessCallBack extends StdCallCallback { public boolean invoke(int lCommand, LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, Pointer dwUser); } - + // 订阅人脸回调函数 public interface fFaceFindState extends StdCallCallback { // pstStates 指向NET_CB_FACE_FIND_STATE的指针 public void invoke(LLong lLoginID, LLong lAttachHandle, Pointer pstStates, int nStateNum, Pointer dwUser); } - + // 智能分析数据回调;nSequence表示上传的相同图片情况,为0时表示是第一次出现,为2表示最后一次出现或仅出现一次,为1表示此次之后还有 // int nState = *(int*) reserved 表示当前回调数据的状态, 为0表示当前数据为实时数据,为1表示当前回调数据是离线数据,为2时表示离线数据传送结束 // pAlarmInfo 对应智能事件信息, pBuffer 对应智能图片信息, dwBufSize 智能图片信息大小 public interface fAnalyzerDataCallBack extends StdCallCallback { public int invoke(LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved); } - + // 抓图回调函数原形(pBuf内存由SDK内部申请释放) // EncodeType 编码类型,10:表示jpeg图片 0:mpeg4 CmdSerial : 操作流水号,同步抓图的情况下用不上 - public interface fSnapRev extends StdCallCallback{ + public interface fSnapRev extends StdCallCallback { public void invoke(LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser); } - + // 异步搜索设备回调(pDevNetInfo内存由SDK内部申请释放) - public interface fSearchDevicesCB extends StdCallCallback{ + public interface fSearchDevicesCB extends StdCallCallback { public void invoke(Pointer pDevNetInfo, Pointer pUserData); } - + // 按时间回放进度回调函数原形 - public interface fTimeDownLoadPosCallBack extends StdCallCallback { + public interface fTimeDownLoadPosCallBack extends StdCallCallback { public void invoke(LLong lPlayHandle, int dwTotalSize, int dwDownLoadSize, int index, NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser); - } - + } + // 回放数据回调函数原形 public interface fDataCallBack extends StdCallCallback { public int invoke(LLong lRealHandle, int dwDataType, Pointer pBuffer, int dwBufSize, Pointer dwUser); } - + // 回放进度回调函数原形 public interface fDownLoadPosCallBack extends StdCallCallback { - public void invoke(LLong lPlayHandle, int dwTotalSize, int dwDownLoadSize, Pointer dwUser); + public void invoke(LLong lPlayHandle, int dwTotalSize, int dwDownLoadSize, Pointer dwUser); } - + // 视频统计摘要信息回调函数原形,lAttachHandle 是 CLIENT_AttachVideoStatSummary 返回值 public interface fVideoStatSumCallBack extends StdCallCallback { - public void invoke(LLong lAttachHandle, NET_VIDEOSTAT_SUMMARY pBuf, int dwBufLen, Pointer dwUser); + public void invoke(LLong lAttachHandle, NET_VIDEOSTAT_SUMMARY pBuf, int dwBufLen, Pointer dwUser); } - + // 用户自定义的数据回调 lTalkHandle是CLIENT_StartTalkEx的返回值 // byAudioFlag: 0表示是本地录音库采集的音频数据 , 1表示收到的设备发过来的音频数据 public interface pfAudioDataCallBack extends StdCallCallback { - public void invoke(LLong lTalkHandle, Pointer pDataBuf, int dwBufSize, byte byAudioFlag, Pointer dwUser); + public void invoke(LLong lTalkHandle, Pointer pDataBuf, int dwBufSize, byte byAudioFlag, Pointer dwUser); } // lHandle是文件传输句柄 ,nTransType是文件传输类型,nState是文件传输状态, public interface fTransFileCallBack extends StdCallCallback { - public void invoke(LLong lHandle, int nTransType, int nState, int nSendSize, int nTotalSize, Pointer dwUser); - } - + public void invoke(LLong lHandle, int nTransType, int nState, int nSendSize, int nTotalSize, Pointer dwUser); + } + // GPS信息订阅回调--扩展 - public interface fGPSRevEx extends StdCallCallback { - public void invoke(LLong lLoginID, GPS_Info.ByValue GpsInfo, ALARM_STATE_INFO.ByValue stAlarmInfo, Pointer dwUserData, Pointer reserved); + public interface fGPSRevEx extends StdCallCallback { + public void invoke(LLong lLoginID, GPS_Info.ByValue GpsInfo, ALARM_STATE_INFO.ByValue stAlarmInfo, Pointer dwUserData, Pointer reserved); } - + // GPS信息订阅回调--扩展2 - public interface fGPSRevEx2 extends StdCallCallback { - public void invoke(LLong lLoginID, NET_GPS_LOCATION_INFO lpData, Pointer dwUserData, Pointer reserved); + public interface fGPSRevEx2 extends StdCallCallback { + public void invoke(LLong lLoginID, NET_GPS_LOCATION_INFO lpData, Pointer dwUserData, Pointer reserved); } - + // 实时监视数据回调函数--扩展(pBuffer内存由SDK内部申请释放) // lRealHandle实时监视 dwDataType: 0-原始数据 1-帧数据 2-yuv数据 3-pcm音频数据 // pBuffer对应BYTE* // param:当类型为0(原始数据)和2(YUV数据) 时为0。当回调的数据类型为1时param为一个tagVideoFrameParam结构体指针。 // param:当数据类型是3时,param也是一个tagCBPCMDataParam结构体指针 public interface fRealDataCallBackEx extends StdCallCallback { - public void invoke(LLong lRealHandle, int dwDataType, Pointer pBuffer, int dwBufSize, int param, Pointer dwUser); + public void invoke(LLong lRealHandle, int dwDataType, Pointer pBuffer, int dwBufSize, int param, Pointer dwUser); } // 视频监视断开回调函数, (param内存由SDK内部申请释放 ) // lOperateHandle监控句柄 dwEventType对应EM_REALPLAY_DISCONNECT_EVENT_TYPE param对应void*,事件参数 public interface fRealPlayDisConnect extends StdCallCallback { - public void invoke(LLong lOperateHandle, int dwEventType, Pointer param, Pointer dwUser); + public void invoke(LLong lOperateHandle, int dwEventType, Pointer param, Pointer dwUser); } - + // 订阅过车记录数据回调函数原型 lAttachHandle为CLIENT_ParkingControlAttachRecord返回值 public interface fParkingControlRecordCallBack extends StdCallCallback { - public void invoke(LLong lLoginID, LLong lAttachHandle, NET_CAR_PASS_ITEM pInfo, int nBufLen, Pointer dwUser); + public void invoke(LLong lLoginID, LLong lAttachHandle, NET_CAR_PASS_ITEM pInfo, int nBufLen, Pointer dwUser); } - + // 订阅车位信息回调函数原型 public interface fParkInfoCallBack extends StdCallCallback { - public void invoke(LLong lLoginID, LLong lAttachHandle, NET_PARK_INFO_ITEM pInfo, int nBufLen, Pointer dwUser); + public void invoke(LLong lLoginID, LLong lAttachHandle, NET_PARK_INFO_ITEM pInfo, int nBufLen, Pointer dwUser); } - + // 订阅监测点位信息回调函数原型 public interface fSCADAAttachInfoCallBack extends StdCallCallback { - public void invoke(LLong lLoginID, LLong lAttachHandle, NET_SCADA_NOTIFY_POINT_INFO_LIST pInfo, int nBufLen, Pointer dwUser); + public void invoke(LLong lLoginID, LLong lAttachHandle, NET_SCADA_NOTIFY_POINT_INFO_LIST pInfo, int nBufLen, Pointer dwUser); } - + // 透明串口回调函数原形(pBuffer内存由SDK内部申请释放)) public interface fTransComCallBack extends StdCallCallback { - public void invoke(LLong lLoginID, LLong lTransComChannel, Pointer pBuffer, int dwBufSize, Pointer dwUser); + public void invoke(LLong lLoginID, LLong lTransComChannel, Pointer pBuffer, int dwBufSize, Pointer dwUser); } - + //视频分析进度状态实时回调函数 public interface fVideoAnalyseState extends StdCallCallback { - public int invoke(LLong lAttachHandle, NET_VIDEOANALYSE_STATE pAnalyseStateInfos, Pointer dwUser, Pointer pReserved); + public int invoke(LLong lAttachHandle, NET_VIDEOANALYSE_STATE pAnalyseStateInfos, Pointer dwUser, Pointer pReserved); } - + // 侦听服务器回调函数原形 public interface fServiceCallBack extends StdCallCallback { - public int invoke(LLong lHandle, String pIp, int wPort, int lCommand, Pointer pParam, int dwParamLen, Pointer dwUserData); + public int invoke(LLong lHandle, String pIp, int wPort, int lCommand, Pointer pParam, int dwParamLen, Pointer dwUserData); } - + //订阅Bus状态回调函数原型 public interface fBusStateCallBack extends StdCallCallback { - public void invoke(LLong lAttachHandle, int lCommand, Pointer pBuf, int dwBufLen, Pointer dwUser); + public void invoke(LLong lAttachHandle, int lCommand, Pointer pBuf, int dwBufLen, Pointer dwUser); } // GPS温湿度信息订阅回调 public interface fGPSTempHumidityRev extends StdCallCallback { - public void invoke(LLong lLoginID, GPS_TEMP_HUMIDITY_INFO.ByValue GpsTHInfo, Pointer dwUserData); + public void invoke(LLong lLoginID, GPS_TEMP_HUMIDITY_INFO.ByValue GpsTHInfo, Pointer dwUserData); } // 向设备注册的回调函数原型 public interface fDeviceStateCallBack extends StdCallCallback { - public void invoke(LLong lAttachHandle, NET_CB_ATTACH_DEVICE_STATE pstDeviceState, Pointer dwUser); + public void invoke(LLong lAttachHandle, NET_CB_ATTACH_DEVICE_STATE pstDeviceState, Pointer dwUser); } // 注册添加设备的回调函数原型 public interface fAddDeviceCallBack extends StdCallCallback { - public void invoke(LLong lAttachHandle, NET_CB_ATTACH_ADD_DEVICE pstAddDevice, Pointer dwUser); - } + public void invoke(LLong lAttachHandle, NET_CB_ATTACH_ADD_DEVICE pstAddDevice, Pointer dwUser); + } // 定义监测点报警信息回调函数原型 public interface fSCADAAlarmAttachInfoCallBack extends StdCallCallback { - public void invoke(LLong lAttachHandle, NET_SCADA_NOTIFY_POINT_ALARM_INFO_LIST pInfo, int nBufLen, Pointer dwUser); + public void invoke(LLong lAttachHandle, NET_SCADA_NOTIFY_POINT_ALARM_INFO_LIST pInfo, int nBufLen, Pointer dwUser); } - + //视频诊断结果上报回调函数 public interface fRealVideoDiagnosis extends StdCallCallback { - public int invoke(LLong lDiagnosisHandle, NET_REAL_DIAGNOSIS_RESULT pDiagnosisInfo, Pointer pBuf, int nBufLen, Pointer dwUser); + public int invoke(LLong lDiagnosisHandle, NET_REAL_DIAGNOSIS_RESULT pDiagnosisInfo, Pointer pBuf, int nBufLen, Pointer dwUser); } - /// \fn 温度分布数据状态回调函数 - /// \brief - /// \param LLONG lAttachHandle [OUT] 订阅句柄, CLIENT_RadiometryAttach 的返回值 - /// \param NET_RADIOMETRY_DATA pBuf [OUT] 热图数据信息 - /// \param int nBufLen [OUT] 状态信息长度 - /// \param LDWORD dwUser 用户数据 - /// \return 无 + /// \fn 温度分布数据状态回调函数 + /// \brief + /// \param LLONG lAttachHandle [OUT] 订阅句柄, CLIENT_RadiometryAttach 的返回值 + /// \param NET_RADIOMETRY_DATA pBuf [OUT] 热图数据信息 + /// \param int nBufLen [OUT] 状态信息长度 + /// \param LDWORD dwUser 用户数据 + /// \return 无 public interface fRadiometryAttachCB extends StdCallCallback { - public void invoke(LLong lAttachHandle, NET_RADIOMETRY_DATA pBuf, int nBufLen, Pointer dwUser); + public void invoke(LLong lAttachHandle, NET_RADIOMETRY_DATA pBuf, int nBufLen, Pointer dwUser); } - + // 刻录设备回调函数原形,lAttachHandle是CLIENT_AttachBurnState返回值, 每次1条,pBuf->dwSize == nBufLen public interface fAttachBurnStateCB extends StdCallCallback { - public void invoke(LLong lLoginID, LLong lAttachHandle, NET_CB_BURNSTATE pBuf, int nBufLen, Pointer dwUser); + public void invoke(LLong lLoginID, LLong lAttachHandle, NET_CB_BURNSTATE pBuf, int nBufLen, Pointer dwUser); } - + // 刻录设备回调扩展函数原形 public interface fAttachBurnStateCBEx extends StdCallCallback { - public void invoke(LLong lLoginID, LLong lAttachHandle, NET_OUT_BURN_GET_STATE pBuf, int nBufLen, Pointer dwUser); + public void invoke(LLong lLoginID, LLong lAttachHandle, NET_OUT_BURN_GET_STATE pBuf, int nBufLen, Pointer dwUser); } - + /************************************************************************ ** 接口 ***********************************************************************/ // JNA直接调用方法定义,cbDisConnect 实际情况并不回调Java代码,仅为定义可以使用如下方式进行定义。 fDisConnect 回调 public boolean CLIENT_Init(StdCallCallback cbDisConnect, Pointer dwUser); - + // JNA直接调用方法定义,SDK退出清理 public void CLIENT_Cleanup(); - + // JNA直接调用方法定义,设置断线重连成功回调函数,设置后SDK内部断线自动重连, fHaveReConnect 回调 public void CLIENT_SetAutoReconnect(StdCallCallback cbAutoConnect, Pointer dwUser); - + // 返回函数执行失败代码 public int CLIENT_GetLastError(); @@ -18658,29 +17647,29 @@ public interface NetSDKLib extends Library { // 获取SDK的版本信息 public int CLIENT_GetSDKVersion(); - + // JNA直接调用方法定义,登陆接口 public LLong CLIENT_LoginEx(String pchDVRIP, int wDVRPort, String pchUserName, String pchPassword, int nSpecCap, Pointer pCapParam, NET_DEVICEINFO lpDeviceInfo, IntByReference error/*= 0*/); - + // JNA直接调用方法定义,登陆扩展接口/////////////////////////////////////////////////// // nSpecCap 对应 EM_LOGIN_SPAC_CAP_TYPE 登陆类型 public LLong CLIENT_LoginEx2(String pchDVRIP, int wDVRPort, String pchUserName, String pchPassword, int nSpecCap, Pointer pCapParam, NET_DEVICEINFO_Ex lpDeviceInfo, IntByReference error/*= 0*/); - + // JNA直接调用方法定义,向设备注销 public boolean CLIENT_Logout(LLong lLoginID); - + // 获取配置 // error 为设备返回的错误码: 0-成功 1-失败 2-数据不合法 3-暂时无法设置 4-没有权限 public boolean CLIENT_GetNewDevConfig(LLong lLoginID, String szCommand, int nChannelID, byte[] szOutBuffer, int dwOutBufferSize, IntByReference error, int waiitime); - + // 设置配置 public boolean CLIENT_SetNewDevConfig(LLong lLoginID, String szCommand, int nChannelID, byte[] szInBuffer, int dwInBufferSize, IntByReference error, IntByReference restart, int waittime); - + // 删除配置接口(Json格式) public boolean CLIENT_DeleteDevConfig(LLong lLoginID, NET_IN_DELETECFG pInParam, NET_OUT_DELETECFG pOutParam, int waittime); - // 获取配置成员名称接口(Json格式)(pInParam, pOutParam内存由用户申请释放) - public boolean CLIENT_GetMemberNames(LLong lLoginID, NET_IN_MEMBERNAME pInParam, NET_OUT_MEMBERNAME pOutParam, int waittime); + // 获取配置成员名称接口(Json格式)(pInParam, pOutParam内存由用户申请释放) + public boolean CLIENT_GetMemberNames(LLong lLoginID, NET_IN_MEMBERNAME pInParam, NET_OUT_MEMBERNAME pOutParam, int waittime); // 解析查询到的配置信息 public boolean CLIENT_ParseData(String szCommand, byte[] szInBuffer, Pointer lpOutBuffer, int dwOutBufferSize, Pointer pReserved); @@ -18689,11 +17678,11 @@ public interface NetSDKLib extends Library { public boolean CLIENT_PacketData(String szCommand, Pointer lpInBuffer, int dwInBufferSize, byte[] szOutBuffer, int dwOutBufferSize); // 设置报警回调函数, fMessCallBack 回调 - public void CLIENT_SetDVRMessCallBack(StdCallCallback cbMessage, Pointer dwUser); - + public void CLIENT_SetDVRMessCallBack(StdCallCallback cbMessage, Pointer dwUser); + // 向设备订阅报警--扩展 - public boolean CLIENT_StartListenEx(LLong lLoginID); - + public boolean CLIENT_StartListenEx(LLong lLoginID); + // 停止订阅报警 public boolean CLIENT_StopListen(LLong lLoginID); @@ -18701,36 +17690,36 @@ public interface NetSDKLib extends Library { //人脸识别数据库信息操作(包括添加,修改和删除) // pstInParam指向NET_IN_OPERATE_FACERECONGNITIONDB类型的指针 // pstOutParam指向NET_OUT_OPERATE_FACERECONGNITIONDB类型的指针 - public boolean CLIENT_OperateFaceRecognitionDB(LLong lLoginID, NET_IN_OPERATE_FACERECONGNITIONDB pstInParam, NET_OUT_OPERATE_FACERECONGNITIONDB pstOutParam, int nWaitTime); - + public boolean CLIENT_OperateFaceRecognitionDB(LLong lLoginID, NET_IN_OPERATE_FACERECONGNITIONDB pstInParam, NET_OUT_OPERATE_FACERECONGNITIONDB pstOutParam, int nWaitTime); + // 按条件查询人脸识别结果 // pstInParam指向NET_IN_STARTFIND_FACERECONGNITION类型的指针 // pstOutParam指向NET_OUT_STARTFIND_FACERECONGNITION类型的指针 - public boolean CLIENT_StartFindFaceRecognition(LLong lLoginID, NET_IN_STARTFIND_FACERECONGNITION pstInParam, NET_OUT_STARTFIND_FACERECONGNITION pstOutParam, int nWaitTime); - + public boolean CLIENT_StartFindFaceRecognition(LLong lLoginID, NET_IN_STARTFIND_FACERECONGNITION pstInParam, NET_OUT_STARTFIND_FACERECONGNITION pstOutParam, int nWaitTime); + // 查找人脸识别结果:nFilecount:需要查询的条数, 返回值为媒体文件条数 返回值 0) { - byte[] buffer = new byte[length]; - pointer.read(0, buffer, 0, length); - try { - str = new String(buffer, "GBK").trim(); - } catch (UnsupportedEncodingException e) { - return str; - } - } - - return str; - } - - // 获取当前时间 - public static String getDate() { - SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String date = simpleDate.format(new java.util.Date()).replace(" ", "_").replace(":", "-"); - - return date; - } - - // 获取当前时间 - public static String getDay() { - SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd"); - String date = simpleDate.format(new java.util.Date()); - return date; - } - - - // 限制JTextField 长度,以及内容 - public static void limitTextFieldLength(final JTextField jTextField, final int size) { - jTextField.addKeyListener(new KeyListener() { - - @Override - public void keyTyped(KeyEvent e) { - String number = "0123456789" + (char)8; - if(number.indexOf(e.getKeyChar()) < 0 || jTextField.getText().trim().length() >= size) { - e.consume(); - return; - } - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void keyPressed(KeyEvent e) { - } - }); - } - + } + + public static void savePicture(Pointer pBuf, int dwBufSize, String sDstFile) { + try { + FileOutputStream fos = new FileOutputStream(sDstFile); + fos.write(pBuf.getByteArray(0, dwBufSize), 0, dwBufSize); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void savePicture(Pointer pBuf, int dwBufOffset, int dwBufSize, String sDstFile) { + try { + FileOutputStream fos = new FileOutputStream(sDstFile); + fos.write(pBuf.getByteArray(dwBufOffset, dwBufSize), 0, dwBufSize); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // 将Pointer值转为byte[] + public static String GetPointerDataToByteArr(Pointer pointer) { + String str = ""; + if (pointer == null) { + return str; + } + + int length = 0; + byte[] bufferPlace = new byte[1]; + + for (int i = 0; i < 2048; i++) { + pointer.read(i, bufferPlace, 0, 1); + if (bufferPlace[0] == '\0') { + length = i; + break; + } + } + + if (length > 0) { + byte[] buffer = new byte[length]; + pointer.read(0, buffer, 0, length); + try { + str = new String(buffer, "GBK").trim(); + } catch (UnsupportedEncodingException e) { + return str; + } + } + + return str; + } + + // 获取当前时间 + public static String getDate() { + SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String date = simpleDate.format(new java.util.Date()).replace(" ", "_").replace(":", "-"); + + return date; + } + + // 获取当前时间 + public static String getDay() { + SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd"); + String date = simpleDate.format(new java.util.Date()); + return date; + } + + + // 限制JTextField 长度,以及内容 + public static void limitTextFieldLength(final JTextField jTextField, final int size) { + jTextField.addKeyListener(new KeyListener() { + + @Override + public void keyTyped(KeyEvent e) { + String number = "0123456789" + (char) 8; + if (number.indexOf(e.getKeyChar()) < 0 || jTextField.getText().trim().length() >= size) { + e.consume(); + return; + } + } + + @Override + public void keyReleased(KeyEvent e) { + } + + @Override + public void keyPressed(KeyEvent e) { + } + }); + } + // 获取当前窗口 - public static JFrame getFrame(ActionEvent e) { - JButton btn = (JButton)e.getSource(); - JFrame frame = (JFrame)btn.getRootPane().getParent(); - - return frame; - } - - // 获取操作平台信息 - public static String getLoadLibrary(String library) { - String path = ""; - String os = System.getProperty("os.name"); - if(os.toLowerCase().startsWith("win")) { - path = "./libs/"; - } else if(os.toLowerCase().startsWith("linux")) { - path = ""; - } - - return (path + library); - } - - public static String getOsName() { - String osName = ""; - String os = System.getProperty("os.name"); - if(os.toLowerCase().startsWith("win")) { - osName = "win"; - } else if(os.toLowerCase().startsWith("linux")) { - osName = "linux"; - } - - return osName; - } - - /** - * 读取图片大小 - * @param filePath 图片路径 - * @return - */ - public static long GetFileSize(String filePath) { - File f = new File(filePath); - if (f.exists() && f.isFile()) { - return f.length(); - } - else - { - return 0; - } - } - - /** - * 读取图片数据 - * @param file 图片路径 - * @param memory 图片数据缓存 - * @return - */ - public static boolean ReadAllFileToMemory(String file, Memory memory) { - if (memory != Memory.NULL) - { - long fileLen = GetFileSize(file); - if (fileLen <= 0) - { - return false; - } - - try { - File infile = new File(file); - if (infile.canRead()) - { - FileInputStream in = new FileInputStream(infile); - int buffLen = 1024; - byte[] buffer = new byte[buffLen]; - long currFileLen = 0; - int readLen = 0; - while (currFileLen < fileLen) - { - readLen = in.read(buffer); - memory.write(currFileLen, buffer, 0, readLen); - currFileLen += readLen; - } - - in.close(); - return true; - } - else - { - System.err.println("Failed to open file %s for read!!!\n"); - return false; - } - }catch (Exception e) - { - System.err.println("Failed to open file %s for read!!!\n"); - e.printStackTrace(); - } - } - - return false; - } - - static class JPGFilter extends FileFilter { - public boolean accept(File f) { - if(f.getName().toLowerCase().endsWith(".JPG") - || f.getName().toLowerCase().endsWith(".jpg") - || f.isDirectory()) { - return true; - } - return false; - } - - @Override - public String getDescription() { - return "*.jpg; *.JPG"; - } - } - - /* - * 用选择器选择图片, 获取图片路径,并在界面显示 - */ - public static String openPictureFile(PaintPanel paintPanel) { - try { + public static JFrame getFrame(ActionEvent e) { + JButton btn = (JButton) e.getSource(); + JFrame frame = (JFrame) btn.getRootPane().getParent(); + + return frame; + } + + // 获取操作平台信息 + public static String getLoadLibrary(String library) { + String path = ""; + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { + path = "./libs/"; + } else if (os.toLowerCase().startsWith("linux")) { + path = ""; + } + + return (path + library); + } + + public static String getOsName() { + String osName = ""; + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { + osName = "win"; + } else if (os.toLowerCase().startsWith("linux")) { + osName = "linux"; + } + + return osName; + } + + /** + * 读取图片大小 + * + * @param filePath 图片路径 + * @return + */ + public static long GetFileSize(String filePath) { + File f = new File(filePath); + if (f.exists() && f.isFile()) { + return f.length(); + } else { + return 0; + } + } + + /** + * 读取图片数据 + * + * @param file 图片路径 + * @param memory 图片数据缓存 + * @return + */ + public static boolean ReadAllFileToMemory(String file, Memory memory) { + if (memory != Memory.NULL) { + long fileLen = GetFileSize(file); + if (fileLen <= 0) { + return false; + } + + try { + File infile = new File(file); + if (infile.canRead()) { + FileInputStream in = new FileInputStream(infile); + int buffLen = 1024; + byte[] buffer = new byte[buffLen]; + long currFileLen = 0; + int readLen = 0; + while (currFileLen < fileLen) { + readLen = in.read(buffer); + memory.write(currFileLen, buffer, 0, readLen); + currFileLen += readLen; + } + + in.close(); + return true; + } else { + System.err.println("Failed to open file %s for read!!!\n"); + return false; + } + } catch (Exception e) { + System.err.println("Failed to open file %s for read!!!\n"); + e.printStackTrace(); + } + } + + return false; + } + + static class JPGFilter extends FileFilter { + public boolean accept(File f) { + if (f.getName().toLowerCase().endsWith(".JPG") + || f.getName().toLowerCase().endsWith(".jpg") + || f.isDirectory()) { + return true; + } + return false; + } + + @Override + public String getDescription() { + return "*.jpg; *.JPG"; + } + } + + /* + * 用选择器选择图片, 获取图片路径,并在界面显示 + */ + public static String openPictureFile(PaintPanel paintPanel) { + try { UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); } catch (Exception e) { - e.printStackTrace(); - } - - String picPath = ""; - - // 读取图片 - JFileChooser jfc = new JFileChooser("d:/"); - jfc.setMultiSelectionEnabled(false); // 不可以拖选多个文件 - jfc.setAcceptAllFileFilterUsed(false); // 关闭显示所有 - - //添加过滤器 - JPGFilter filter = new JPGFilter(); - jfc.addChoosableFileFilter(filter); - jfc.setFileFilter(filter); - - if( jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { - picPath = jfc.getSelectedFile().getAbsolutePath(); - - /* - * 读取本地图片, 并在面板上显示 - */ - BufferedImage bufferedImage = null; - if(picPath == null || picPath.equals("")) { - return ""; - } - - File file = new File(picPath); - if(!file.exists()) { - return ""; - } - - try { - bufferedImage = ImageIO.read(file); - } catch (IOException e) { - e.printStackTrace(); - } - - if(bufferedImage == null) { - paintPanel.setOpaque(true); - paintPanel.repaint(); - - System.err.println("打开图片失败,请重新选择!"); - return ""; - } else { - paintPanel.setOpaque(false); - paintPanel.setImage(bufferedImage); - paintPanel.repaint(); - } - } - - try { + e.printStackTrace(); + } + + String picPath = ""; + + // 读取图片 + JFileChooser jfc = new JFileChooser("d:/"); + jfc.setMultiSelectionEnabled(false); // 不可以拖选多个文件 + jfc.setAcceptAllFileFilterUsed(false); // 关闭显示所有 + + //添加过滤器 + JPGFilter filter = new JPGFilter(); + jfc.addChoosableFileFilter(filter); + jfc.setFileFilter(filter); + + if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { + picPath = jfc.getSelectedFile().getAbsolutePath(); + + /* + * 读取本地图片, 并在面板上显示 + */ + BufferedImage bufferedImage = null; + if (picPath == null || picPath.equals("")) { + return ""; + } + + File file = new File(picPath); + if (!file.exists()) { + return ""; + } + + try { + bufferedImage = ImageIO.read(file); + } catch (IOException e) { + e.printStackTrace(); + } + + if (bufferedImage == null) { + paintPanel.setOpaque(true); + paintPanel.repaint(); + + System.err.println("打开图片失败,请重新选择!"); + return ""; + } else { + paintPanel.setOpaque(false); + paintPanel.setImage(bufferedImage); + paintPanel.repaint(); + } + } + + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { - e.printStackTrace(); - } + e.printStackTrace(); + } return picPath; - } - - /* - * 传入图片路径, 打开图片, 并在面板显示 - */ - public static File openPictureFile(String picPath, PaintPanel paintPanel) { - /* - * 读取本地图片, 并在面板上显示 - */ - BufferedImage bufferedImage = null; - if(picPath == null || picPath.equals("")) { - return null; - } - - File file = new File(picPath); - if(!file.exists()) { - return null; - } - - try { - bufferedImage = ImageIO.read(file); - } catch (IOException e) { - e.printStackTrace(); - } - - if(bufferedImage == null) { - paintPanel.setOpaque(true); - paintPanel.repaint(); - - System.err.println("打开图片失败,请重新选择!"); - return null; - } else { - paintPanel.setOpaque(false); - paintPanel.setImage(bufferedImage); - paintPanel.repaint(); - } - + } + + /* + * 传入图片路径, 打开图片, 并在面板显示 + */ + public static File openPictureFile(String picPath, PaintPanel paintPanel) { + /* + * 读取本地图片, 并在面板上显示 + */ + BufferedImage bufferedImage = null; + if (picPath == null || picPath.equals("")) { + return null; + } + + File file = new File(picPath); + if (!file.exists()) { + return null; + } + + try { + bufferedImage = ImageIO.read(file); + } catch (IOException e) { + e.printStackTrace(); + } + + if (bufferedImage == null) { + paintPanel.setOpaque(true); + paintPanel.repaint(); + + System.err.println("打开图片失败,请重新选择!"); + return null; + } else { + paintPanel.setOpaque(false); + paintPanel.setImage(bufferedImage); + paintPanel.repaint(); + } + return file; - } - - /** - * 读取图片 - * @return 图片缓存 - */ - public static Memory readPictureFile(String picPath) { - int nPicBufLen = 0; - Memory memory = null; - - /* - * 读取本地图片大小 - */ - nPicBufLen = (int)ToolKits.GetFileSize(picPath); - - // 读取文件大小失败 - if (nPicBufLen <= 0) { - System.err.println("读取图片大小失败,请重新选择!"); + } + + /** + * 读取图片 + * + * @return 图片缓存 + */ + public static Memory readPictureFile(String picPath) { + int nPicBufLen = 0; + Memory memory = null; + + /* + * 读取本地图片大小 + */ + nPicBufLen = (int) ToolKits.GetFileSize(picPath); + + // 读取文件大小失败 + if (nPicBufLen <= 0) { + System.err.println("读取图片大小失败,请重新选择!"); return null; - } - - /* - * 读取图片缓存 - */ - memory = new Memory(nPicBufLen); // 申请缓存 - memory.clear(); - - if (!ToolKits.ReadAllFileToMemory(picPath, memory)) { - System.err.println("读取图片数据,请重新选择!"); + } + + /* + * 读取图片缓存 + */ + memory = new Memory(nPicBufLen); // 申请缓存 + memory.clear(); + + if (!ToolKits.ReadAllFileToMemory(picPath, memory)) { + System.err.println("读取图片数据,请重新选择!"); return null; - } - + } + return memory; - } - - /** - * 登录设备设备错误状态, 用于界面显示 - */ - public static String getErrorCodeShow() { - return ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()); - } - - /** - * 获取接口错误码和错误信息,用于打印 - * @return - */ - public static String getErrorCodePrint() { - return "\n{error code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) +").参考 NetSDKLib.java }" - + " - {error info:" + ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()) + "}\n"; - } - - /** - * 获取单个配置 - * @param hLoginHandle 登陆句柄 - * @param nChn 通道号,-1 表示全通道 - * @param strCmd 配置名称 - * @param cmdObject 配置对应的结构体对象 - * @return 成功返回 true - */ - public static boolean GetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) { - boolean result = false; - IntByReference error = new IntByReference(0); - int nBufferLen = 2*1024*1024; - byte[] strBuffer = new byte[nBufferLen]; - - if(netsdkapi.CLIENT_GetNewDevConfig( hLoginHandle, strCmd , nChn, strBuffer, nBufferLen,error,3000)) { - cmdObject.write(); - if (configapi.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(), - cmdObject.size(), null)) { - cmdObject.read(); - result = true; - } else { - System.err.println("Parse " + strCmd + " Config Failed!" + ToolKits.getErrorCodePrint()); - result = false; - } - } else { - System.err.printf("Get %s Config Failed!Last Error = %s\n" , strCmd , getErrorCodePrint()); - result = false; - } - - return result; - } - - /** - * 设置单个配置 - * @param hLoginHandle 登陆句柄 - * @param nChn 通道号,-1 表示全通道 - * @param strCmd 配置名称 - * @param cmdObject 配置对应的结构体对象 - * @return 成功返回 true - */ - public static boolean SetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) { + } + + /** + * 登录设备设备错误状态, 用于界面显示 + */ + public static String getErrorCodeShow() { + return ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()); + } + + /** + * 获取接口错误码和错误信息,用于打印 + * + * @return + */ + public static String getErrorCodePrint() { + return "\n{error code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) + ").参考 NetSDKLib.java }" + + " - {error info:" + ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()) + "}\n"; + } + + /** + * 获取单个配置 + * + * @param hLoginHandle 登陆句柄 + * @param nChn 通道号,-1 表示全通道 + * @param strCmd 配置名称 + * @param cmdObject 配置对应的结构体对象 + * @return 成功返回 true + */ + public static boolean GetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) { boolean result = false; - int nBufferLen = 2*1024*1024; + IntByReference error = new IntByReference(0); + int nBufferLen = 2 * 1024 * 1024; + byte[] strBuffer = new byte[nBufferLen]; + + if (netsdkapi.CLIENT_GetNewDevConfig(hLoginHandle, strCmd, nChn, strBuffer, nBufferLen, error, 3000)) { + cmdObject.write(); + if (configapi.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(), + cmdObject.size(), null)) { + cmdObject.read(); + result = true; + } else { + System.err.println("Parse " + strCmd + " Config Failed!" + ToolKits.getErrorCodePrint()); + result = false; + } + } else { + System.err.printf("Get %s Config Failed!Last Error = %s\n", strCmd, getErrorCodePrint()); + result = false; + } + + return result; + } + + /** + * 设置单个配置 + * + * @param hLoginHandle 登陆句柄 + * @param nChn 通道号,-1 表示全通道 + * @param strCmd 配置名称 + * @param cmdObject 配置对应的结构体对象 + * @return 成功返回 true + */ + public static boolean SetDevConfig(NetSDKLib.LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) { + boolean result = false; + int nBufferLen = 2 * 1024 * 1024; byte szBuffer[] = new byte[nBufferLen]; - for(int i=0; i= dst.length ? dst.length-1:szSrc.length; - System.arraycopy(szSrc, 0, dst, 0, len); - } - } - - /** + return userData; + } + + /** + * 考勤机 通过用户ID插入指纹数据 + * + * @param userId 用户ID + * @param szFingerPrintInfo 指纹信息 + */ + public static boolean insertFingerByUserId(String userId, byte[] szFingerPrintInfo) { + + /* + * 入参 + */ + NET_IN_FINGERPRINT_INSERT_BY_USERID stuIn = new NET_IN_FINGERPRINT_INSERT_BY_USERID(); + stringToByteArray(userId, stuIn.szUserID); + stuIn.nPacketCount = 1; + stuIn.nSinglePacketLen = szFingerPrintInfo.length; + stuIn.szFingerPrintInfo = new Memory(stuIn.nPacketCount * stuIn.nSinglePacketLen); // 申请内存 + stuIn.szFingerPrintInfo.clear(stuIn.nPacketCount * stuIn.nSinglePacketLen); + stuIn.szFingerPrintInfo.write(0, szFingerPrintInfo, 0, szFingerPrintInfo.length); + + /* + * 出参 + */ + NET_OUT_FINGERPRINT_INSERT_BY_USERID stuOut = new NET_OUT_FINGERPRINT_INSERT_BY_USERID(); + + boolean bRet = LoginModule.netsdk.CLIENT_Attendance_InsertFingerByUserID(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT); + if (!bRet) { + System.err.printf("CLIENT_Attendance_InsertFingerByUserID Failed!" + ToolKits.getErrorCodePrint()); + } + + return bRet; + } + + /** + * 考勤机 删除单个用户下所有指纹数据 + * + * @param userId 用户ID + */ + public static boolean removeFingerByUserId(String userId) { + + /* + * 入参 + */ + NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID stuIn = new NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID(); + stringToByteArray(userId, stuIn.szUserID); + + /* + * 出参 + */ + NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID stuOut = new NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID(); + + boolean bRet = LoginModule.netsdk.CLIENT_Attendance_RemoveFingerByUserID(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT); + if (!bRet) { + System.err.printf("CLIENT_Attendance_RemoveFingerByUserID Failed!" + ToolKits.getErrorCodePrint()); + } + + return bRet; + } + + /** + * 考勤机 通过指纹ID删除指纹数据 + * + * @param nFingerPrintID 指纹ID + */ + public static boolean removeFingerRecord(int nFingerPrintID) { + + /* + * 入参 + */ + NET_CTRL_IN_FINGERPRINT_REMOVE stuIn = new NET_CTRL_IN_FINGERPRINT_REMOVE(); + stuIn.nFingerPrintID = nFingerPrintID; + + /* + * 出参 + */ + NET_CTRL_OUT_FINGERPRINT_REMOVE stuOut = new NET_CTRL_OUT_FINGERPRINT_REMOVE(); + + boolean bRet = LoginModule.netsdk.CLIENT_Attendance_RemoveFingerRecord(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT); + if (!bRet) { + System.err.printf("CLIENT_Attendance_RemoveFingerRecord Failed!" + ToolKits.getErrorCodePrint()); + } + + return bRet; + } + + /** + * 考勤机 通过指纹ID获取指纹数据 + * + * @param nFingerPrintID 指纹ID + * @return userData 用户数据 + */ + public static UserData getFingerRecord(int nFingerPrintID) { + + /* + * 入参 + */ + NET_CTRL_IN_FINGERPRINT_GET stuIn = new NET_CTRL_IN_FINGERPRINT_GET(); + stuIn.nFingerPrintID = nFingerPrintID; + + /* + * 出参 + */ + NET_CTRL_OUT_FINGERPRINT_GET stuOut = new NET_CTRL_OUT_FINGERPRINT_GET(); + stuOut.nMaxFingerDataLength = nMaxFingerPrintSize; + stuOut.szFingerPrintInfo = new Memory(stuOut.nMaxFingerDataLength); // 申请内存 + stuOut.szFingerPrintInfo.clear(stuOut.nMaxFingerDataLength); + + boolean bRet = LoginModule.netsdk.CLIENT_Attendance_GetFingerRecord(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT); + if (!bRet) { + System.err.printf("CLIENT_Attendance_GetFingerRecord Failed!" + ToolKits.getErrorCodePrint()); + return null; + } + + if (stuOut.nRetLength == 0) { + System.err.println("GetFingerRecord Failed nRetLength == 0!"); + } + + UserData userData = new UserData(); + userData.userId = new String(stuOut.szUserID).trim(); + userData.nFingerPrintIDs = new int[1]; + userData.nFingerPrintIDs[0] = nFingerPrintID; + userData.szFingerPrintInfo = new byte[1][stuOut.nRetLength]; + stuOut.szFingerPrintInfo.read(0, userData.szFingerPrintInfo[0], 0, stuOut.nRetLength); + + return userData; + } + + /** + * 考勤机 通过用户ID查找该用户下的所有指纹数据 + * + * @param userId 用户ID + * @param userData 用户数据 + */ + public static boolean getFingerByUserId(String userId, UserData userData) { + + /* + * 入参 + */ + NET_IN_FINGERPRINT_GETBYUSER stuIn = new NET_IN_FINGERPRINT_GETBYUSER(); + stringToByteArray(userId, stuIn.szUserID); + + /* + * 出参 + */ + NET_OUT_FINGERPRINT_GETBYUSER stuOut = new NET_OUT_FINGERPRINT_GETBYUSER(); + stuOut.nMaxFingerDataLength = NetSDKLib.NET_MAX_FINGER_PRINT * nMaxFingerPrintSize; + stuOut.pbyFingerData = new Memory(stuOut.nMaxFingerDataLength); // 申请内存 + stuOut.pbyFingerData.clear(stuOut.nMaxFingerDataLength); + + boolean bRet = LoginModule.netsdk.CLIENT_Attendance_GetFingerByUserID(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT); + if (!bRet) { + System.err.printf("CLIENT_Attendance_GetFingerByUserID Failed!" + ToolKits.getErrorCodePrint()); + } else { + userData.nFingerPrintIDs = new int[stuOut.nRetFingerPrintCount]; + userData.szFingerPrintInfo = new byte[stuOut.nRetFingerPrintCount][stuOut.nSinglePacketLength]; + int offset = 0; + for (int i = 0; i < stuOut.nRetFingerPrintCount; ++i) { + userData.nFingerPrintIDs[i] = stuOut.nFingerPrintIDs[i]; + stuOut.pbyFingerData.read(offset, userData.szFingerPrintInfo[i], 0, stuOut.nSinglePacketLength); + offset += stuOut.nSinglePacketLength; + } + } + + return bRet; + } + + /** + * 指纹采集 + * + * @param nChannelID 门禁序号 + * @param szReaderID 读卡器ID + */ + public static boolean collectionFinger(int nChannelID, String szReaderID) { + /* + * 入参 + */ + NET_CTRL_CAPTURE_FINGER_PRINT stuCollection = new NET_CTRL_CAPTURE_FINGER_PRINT(); + stuCollection.nChannelID = nChannelID; + stringToByteArray(szReaderID, stuCollection.szReaderID); + + stuCollection.write(); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT, stuCollection.getPointer(), null, 5000); + if (!bRet) { + System.err.printf("CLIENT_ControlDeviceEx CAPTURE_FINGER_PRINT Failed!" + ToolKits.getErrorCodePrint()); + } + return bRet; + } + + /** + * 字符串转字符数组 + * + * @param src 源字符串 + * @param dst 目标字符数组 + */ + public static void stringToByteArray(String src, byte[] dst) { + + if (src == null || src.isEmpty()) { + return; + } + + for (int i = 0; i < dst.length; i++) { + dst[i] = 0; + } + + byte[] szSrc; + + try { + szSrc = src.getBytes("GBK"); + } catch (UnsupportedEncodingException e) { + szSrc = src.getBytes(); + } + + if (szSrc != null) { + int len = szSrc.length >= dst.length ? dst.length - 1 : szSrc.length; + System.arraycopy(szSrc, 0, dst, 0, len); + } + } + + /** * 用户信息 - * */ - public static class UserData { - public static int nTotalUser; // 用户总数 - - public String userId; // 用户ID - public String userName; // 用户名 - public String cardNo; // 卡号 - public int[] nFingerPrintIDs; // 指纹ID数组 - public byte[][] szFingerPrintInfo; // 指纹数据数组 - } - - /** + */ + public static class UserData { + public static int nTotalUser; // 用户总数 + + public String userId; // 用户ID + public String userName; // 用户名 + public String cardNo; // 卡号 + public int[] nFingerPrintIDs; // 指纹ID数组 + public byte[][] szFingerPrintInfo; // 指纹数据数组 + } + + /** * 门禁事件信息 - * */ - public static class AccessEventInfo { - public String userId; // 用户ID - public String cardNo; // 卡号 - public String eventTime; // 事件发生时间 - public int openDoorMethod; // 开门方式 + */ + public static class AccessEventInfo { + public String userId; // 用户ID + public String cardNo; // 卡号 + public String eventTime; // 事件发生时间 + public int openDoorMethod; // 开门方式 } - /** + /** * 操作类型 - * */ - public enum OPERATE_TYPE { - UNKNOWN, // 未知 - SEARCH_USER, // 搜索用户(第一页) - PRE_SEARCH_USER, // 搜索用户(上一页) - NEXT_SEARCH_USER, // 搜索用户(下一页) - SEARCH_USER_BY_USERID, // 通过用户ID搜索用户 - ADD_USER, // 添加用户 - DELETE_USER, // 删除用户 - MODIFIY_USER, // 修改用户 - FINGERPRINT_OPEARTE_BY_USERID, // 通过用户ID操作指纹 - FINGERPRINT_OPEARTE_BY_ID, // 通过指纹ID操作指纹 - SEARCH_FINGERPRINT_BY_USERID, // 通过用户ID搜索指纹 - SEARCH_FINGERPRINT_BY_ID, // 通过指纹ID搜索指纹 - ADD_FINGERPRINT, // 添加指纹 - DELETE_FINGERPRINT_BY_USERID, // 通过用户ID删除指纹 - DELETE_FINGERPRINT_BY_ID // 通过指纹ID删除指纹 - }; + */ + public enum OPERATE_TYPE { + UNKNOWN, // 未知 + SEARCH_USER, // 搜索用户(第一页) + PRE_SEARCH_USER, // 搜索用户(上一页) + NEXT_SEARCH_USER, // 搜索用户(下一页) + SEARCH_USER_BY_USERID, // 通过用户ID搜索用户 + ADD_USER, // 添加用户 + DELETE_USER, // 删除用户 + MODIFIY_USER, // 修改用户 + FINGERPRINT_OPEARTE_BY_USERID, // 通过用户ID操作指纹 + FINGERPRINT_OPEARTE_BY_ID, // 通过指纹ID操作指纹 + SEARCH_FINGERPRINT_BY_USERID, // 通过用户ID搜索指纹 + SEARCH_FINGERPRINT_BY_ID, // 通过指纹ID搜索指纹 + ADD_FINGERPRINT, // 添加指纹 + DELETE_FINGERPRINT_BY_USERID, // 通过用户ID删除指纹 + DELETE_FINGERPRINT_BY_ID // 通过指纹ID删除指纹 + } + + ; } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/AutoRegisterModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/AutoRegisterModule.java index 38c4453..f498262 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/AutoRegisterModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/AutoRegisterModule.java @@ -11,323 +11,334 @@ import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; public class AutoRegisterModule { - // 监听服务句柄 - public static LLong mServerHandler = new NetSDKLib.LLong(0); - - // 设备信息 - public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); - - // 语音对讲句柄 - public static LLong m_hTalkHandle = new LLong(0); - private static boolean m_bRecordStatus = false; - - /** - * 开启服务 - * @param address 本地IP地址 - * @param port 本地端口, 可以任意 - * @param callback 回调函数 - */ - public static boolean startServer(String address, int port, fServiceCallBack callback) { - - mServerHandler = LoginModule.netsdk.CLIENT_ListenServer(address, port, 1000, callback, null); - if (0 == mServerHandler.longValue()) { - System.err.println("Failed to start server." + ToolKits.getErrorCodePrint()); - } else { - System.out.printf("Start server, [Server address %s][Server port %d]\n", address, port); - } - return mServerHandler.longValue() != 0; - } - - /** - * 结束服务 - */ - public static boolean stopServer() { - boolean bRet = false; - - if(mServerHandler.longValue() != 0) { - bRet = LoginModule.netsdk.CLIENT_StopListenServer(mServerHandler); - mServerHandler.setValue(0); - System.out.println("Stop server!"); - } - - return bRet; - } - - /** - * 登录设备(主动注册登陆接口) - * @param m_strIp 设备IP - * @param m_nPort 设备端口号 - * @param m_strUser 设备用户名 - * @param m_strPassword 设备密码 - * @return - */ - public static LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword, String deviceIds) { - Pointer deviceId = ToolKits.GetGBKStringToPointer(deviceIds); - - IntByReference nError = new IntByReference(0); - int tcpSpecCap = 2;// 主动注册方式 - - LLong m_hLoginHandle = LoginModule.netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, - tcpSpecCap, deviceId, m_stDeviceInfo, nError); - - return m_hLoginHandle; - } - - /** - * 登出设备 - * @param m_hLoginHandle 登陆句柄 - * @return - */ - public static boolean logout(LLong m_hLoginHandle) { - boolean bRet = false; - if(m_hLoginHandle.longValue() != 0) { - bRet = LoginModule.netsdk.CLIENT_Logout(m_hLoginHandle); - m_hLoginHandle.setValue(0); - } - - return bRet; - } - - /** - * 开始预览 - * @param m_hLoginHandle 登陆句柄 - * @param channel 通道号 - * @param stream 码流类型 - * @param realPlayWindow 拉流窗口 - * @return - */ - public static LLong startRealPlay(LLong m_hLoginHandle, int channel, int stream, Panel realPlayWindow) { - LLong m_hPlayHandle = LoginModule.netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, Native.getComponentPointer(realPlayWindow), stream); - - if(m_hPlayHandle.longValue() == 0) { - System.err.println("Failed to start realplay." + ToolKits.getErrorCodePrint()); - } else { - System.out.println("Success to start realplay"); - } - - return m_hPlayHandle; - } - - /** - * 停止预览 - * @param m_hPlayHandle 实时预览句柄 - * @return - */ - public static boolean stopRealPlay(LLong m_hPlayHandle) { - boolean bRet = false; - if(m_hPlayHandle.longValue() != 0) { - bRet = LoginModule.netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle); - m_hPlayHandle.setValue(0); - } - - return bRet; - } - - /** - * 远程抓图 - * @param m_hLoginHandle 登陆句柄 - * @param chn 通道号 - * @return - */ - public static boolean snapPicture(LLong m_hLoginHandle, int chn) { - // 发送抓图命令给前端设备,抓图的信息 - NetSDKLib.SNAP_PARAMS msg = new NetSDKLib.SNAP_PARAMS(); - msg.Channel = chn; // 抓图通道 - msg.mode = 0; // 抓图模式 - msg.Quality = 3; // 画质 - msg.InterSnap = 0; // 定时抓图时间间隔 - msg.CmdSerial = 0; // 请求序列号,有效值范围 0~65535,超过范围会被截断为 - - IntByReference reserved = new IntByReference(0); - - if (!LoginModule.netsdk.CLIENT_SnapPictureEx(m_hLoginHandle, msg, reserved)) { - System.err.printf("SnapPictureEx Failed!" + ToolKits.getErrorCodePrint()); - return false; - } else { - System.out.println("SnapPictureEx success"); - } - return true; - } - - /** - *设置抓图回调函数, 图片主要在m_SnapReceiveCB中返回 - * @param m_SnapReceiveCB - */ - public static void setSnapRevCallBack(NetSDKLib.fSnapRev m_SnapReceiveCB){ - LoginModule.netsdk.CLIENT_SetSnapRevCallBack(m_SnapReceiveCB, null); - } - - /** - * 获取网络协议 - * @param m_hLoginHandle 登录句柄 - * @return - */ - public static CFG_DVRIP_INFO getDVRIPConfig(LLong m_hLoginHandle) { - CFG_DVRIP_INFO msg = new CFG_DVRIP_INFO(); - - if(!ToolKits.GetDevConfig(m_hLoginHandle, -1, NetSDKLib.CFG_CMD_DVRIP, msg)) { - return null; - } - - return msg; - } - - /** - * 网络协议配置 - * @param m_hLoginHandle 登陆句柄 - * @param enable 使能 - * @param address 服务器地址 - * @param nPort 服务器端口号 - * @param deviceId 设备ID - * @param info 获取到的网络协议配置 - * @return - */ - public static boolean setDVRIPConfig(LLong m_hLoginHandle, boolean enable, String address, int nPort, byte[] deviceId, CFG_DVRIP_INFO info) { - CFG_DVRIP_INFO msg = info; - // 主动注册配置个数 - msg.nRegistersNum = 1; - - // 主动注册使能 - msg.stuRegisters[0].bEnable = enable? 1:0; - - // 服务器个数 - msg.stuRegisters[0].nServersNum = 1; - - // 服务器地址 - ToolKits.StringToByteArray(address, msg.stuRegisters[0].stuServers[0].szAddress); - - // 服务器端口号 - msg.stuRegisters[0].stuServers[0].nPort = nPort; - - // 设备ID - ToolKits.ByteArrayToByteArray(deviceId, msg.stuRegisters[0].szDeviceID); - - return ToolKits.SetDevConfig(m_hLoginHandle, -1, NetSDKLib.CFG_CMD_DVRIP, msg); - } - - /** - * \if ENGLISH_LANG - * Start Talk - * \else - * 开始通话 - * \endif - */ - public static boolean startTalk(LLong m_hLoginHandle) { - - // 设置语音对讲编码格式 - NetSDKLib.NETDEV_TALKDECODE_INFO talkEncode = new NetSDKLib.NETDEV_TALKDECODE_INFO(); - talkEncode.encodeType = NetSDKLib.NET_TALK_CODING_TYPE.NET_TALK_PCM; - talkEncode.dwSampleRate = 8000; - talkEncode.nAudioBit = 16; - talkEncode.nPacketPeriod = 25; - talkEncode.write(); - if(LoginModule.netsdk.CLIENT_SetDeviceMode(m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_ENCODE_TYPE, talkEncode.getPointer())) { - System.out.println("Set Talk Encode Type Succeed!"); - } else { - System.err.println("Set Talk Encode Type Failed!" + ToolKits.getErrorCodePrint()); - return false; - } - - // 设置对讲模式 - NetSDKLib.NET_SPEAK_PARAM speak = new NetSDKLib.NET_SPEAK_PARAM(); + // 监听服务句柄 + public static LLong mServerHandler = new NetSDKLib.LLong(0); + + // 设备信息 + public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); + + // 语音对讲句柄 + public static LLong m_hTalkHandle = new LLong(0); + private static boolean m_bRecordStatus = false; + + /** + * 开启服务 + * + * @param address 本地IP地址 + * @param port 本地端口, 可以任意 + * @param callback 回调函数 + */ + public static boolean startServer(String address, int port, fServiceCallBack callback) { + + mServerHandler = LoginModule.netsdk.CLIENT_ListenServer(address, port, 1000, callback, null); + if (0 == mServerHandler.longValue()) { + System.err.println("Failed to start server." + ToolKits.getErrorCodePrint()); + } else { + System.out.printf("Start server, [Server address %s][Server port %d]\n", address, port); + } + return mServerHandler.longValue() != 0; + } + + /** + * 结束服务 + */ + public static boolean stopServer() { + boolean bRet = false; + + if (mServerHandler.longValue() != 0) { + bRet = LoginModule.netsdk.CLIENT_StopListenServer(mServerHandler); + mServerHandler.setValue(0); + System.out.println("Stop server!"); + } + + return bRet; + } + + /** + * 登录设备(主动注册登陆接口) + * + * @param m_strIp 设备IP + * @param m_nPort 设备端口号 + * @param m_strUser 设备用户名 + * @param m_strPassword 设备密码 + * @return + */ + public static LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword, String deviceIds) { + Pointer deviceId = ToolKits.GetGBKStringToPointer(deviceIds); + + IntByReference nError = new IntByReference(0); + int tcpSpecCap = 2;// 主动注册方式 + + LLong m_hLoginHandle = LoginModule.netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, + tcpSpecCap, deviceId, m_stDeviceInfo, nError); + + return m_hLoginHandle; + } + + /** + * 登出设备 + * + * @param m_hLoginHandle 登陆句柄 + * @return + */ + public static boolean logout(LLong m_hLoginHandle) { + boolean bRet = false; + if (m_hLoginHandle.longValue() != 0) { + bRet = LoginModule.netsdk.CLIENT_Logout(m_hLoginHandle); + m_hLoginHandle.setValue(0); + } + + return bRet; + } + + /** + * 开始预览 + * + * @param m_hLoginHandle 登陆句柄 + * @param channel 通道号 + * @param stream 码流类型 + * @param realPlayWindow 拉流窗口 + * @return + */ + public static LLong startRealPlay(LLong m_hLoginHandle, int channel, int stream, Panel realPlayWindow) { + LLong m_hPlayHandle = LoginModule.netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, Native.getComponentPointer(realPlayWindow), stream); + + if (m_hPlayHandle.longValue() == 0) { + System.err.println("Failed to start realplay." + ToolKits.getErrorCodePrint()); + } else { + System.out.println("Success to start realplay"); + } + + return m_hPlayHandle; + } + + /** + * 停止预览 + * + * @param m_hPlayHandle 实时预览句柄 + * @return + */ + public static boolean stopRealPlay(LLong m_hPlayHandle) { + boolean bRet = false; + if (m_hPlayHandle.longValue() != 0) { + bRet = LoginModule.netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle); + m_hPlayHandle.setValue(0); + } + + return bRet; + } + + /** + * 远程抓图 + * + * @param m_hLoginHandle 登陆句柄 + * @param chn 通道号 + * @return + */ + public static boolean snapPicture(LLong m_hLoginHandle, int chn) { + // 发送抓图命令给前端设备,抓图的信息 + NetSDKLib.SNAP_PARAMS msg = new NetSDKLib.SNAP_PARAMS(); + msg.Channel = chn; // 抓图通道 + msg.mode = 0; // 抓图模式 + msg.Quality = 3; // 画质 + msg.InterSnap = 0; // 定时抓图时间间隔 + msg.CmdSerial = 0; // 请求序列号,有效值范围 0~65535,超过范围会被截断为 + + IntByReference reserved = new IntByReference(0); + + if (!LoginModule.netsdk.CLIENT_SnapPictureEx(m_hLoginHandle, msg, reserved)) { + System.err.printf("SnapPictureEx Failed!" + ToolKits.getErrorCodePrint()); + return false; + } else { + System.out.println("SnapPictureEx success"); + } + return true; + } + + /** + * 设置抓图回调函数, 图片主要在m_SnapReceiveCB中返回 + * + * @param m_SnapReceiveCB + */ + public static void setSnapRevCallBack(NetSDKLib.fSnapRev m_SnapReceiveCB) { + LoginModule.netsdk.CLIENT_SetSnapRevCallBack(m_SnapReceiveCB, null); + } + + /** + * 获取网络协议 + * + * @param m_hLoginHandle 登录句柄 + * @return + */ + public static CFG_DVRIP_INFO getDVRIPConfig(LLong m_hLoginHandle) { + CFG_DVRIP_INFO msg = new CFG_DVRIP_INFO(); + + if (!ToolKits.GetDevConfig(m_hLoginHandle, -1, NetSDKLib.CFG_CMD_DVRIP, msg)) { + return null; + } + + return msg; + } + + /** + * 网络协议配置 + * + * @param m_hLoginHandle 登陆句柄 + * @param enable 使能 + * @param address 服务器地址 + * @param nPort 服务器端口号 + * @param deviceId 设备ID + * @param info 获取到的网络协议配置 + * @return + */ + public static boolean setDVRIPConfig(LLong m_hLoginHandle, boolean enable, String address, int nPort, byte[] deviceId, CFG_DVRIP_INFO info) { + CFG_DVRIP_INFO msg = info; + // 主动注册配置个数 + msg.nRegistersNum = 1; + + // 主动注册使能 + msg.stuRegisters[0].bEnable = enable ? 1 : 0; + + // 服务器个数 + msg.stuRegisters[0].nServersNum = 1; + + // 服务器地址 + ToolKits.StringToByteArray(address, msg.stuRegisters[0].stuServers[0].szAddress); + + // 服务器端口号 + msg.stuRegisters[0].stuServers[0].nPort = nPort; + + // 设备ID + ToolKits.ByteArrayToByteArray(deviceId, msg.stuRegisters[0].szDeviceID); + + return ToolKits.SetDevConfig(m_hLoginHandle, -1, NetSDKLib.CFG_CMD_DVRIP, msg); + } + + /** + * \if ENGLISH_LANG + * Start Talk + * \else + * 开始通话 + * \endif + */ + public static boolean startTalk(LLong m_hLoginHandle) { + + // 设置语音对讲编码格式 + NetSDKLib.NETDEV_TALKDECODE_INFO talkEncode = new NetSDKLib.NETDEV_TALKDECODE_INFO(); + talkEncode.encodeType = NetSDKLib.NET_TALK_CODING_TYPE.NET_TALK_PCM; + talkEncode.dwSampleRate = 8000; + talkEncode.nAudioBit = 16; + talkEncode.nPacketPeriod = 25; + talkEncode.write(); + if (LoginModule.netsdk.CLIENT_SetDeviceMode(m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_ENCODE_TYPE, talkEncode.getPointer())) { + System.out.println("Set Talk Encode Type Succeed!"); + } else { + System.err.println("Set Talk Encode Type Failed!" + ToolKits.getErrorCodePrint()); + return false; + } + + // 设置对讲模式 + NetSDKLib.NET_SPEAK_PARAM speak = new NetSDKLib.NET_SPEAK_PARAM(); speak.nMode = 0; speak.bEnableWait = false; speak.nSpeakerChannel = 0; speak.write(); if (LoginModule.netsdk.CLIENT_SetDeviceMode(m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_SPEAK_PARAM, speak.getPointer())) { - System.out.println("Set Talk Speak Mode Succeed!"); + System.out.println("Set Talk Speak Mode Succeed!"); + } else { + System.err.println("Set Talk Speak Mode Failed!" + ToolKits.getErrorCodePrint()); + return false; + } + + // 设置语音对讲是否为转发模式 + NetSDKLib.NET_TALK_TRANSFER_PARAM talkTransfer = new NetSDKLib.NET_TALK_TRANSFER_PARAM(); + talkTransfer.bTransfer = 0; // 是否开启语音对讲转发模式, 1-true; 0-false + talkTransfer.write(); + if (LoginModule.netsdk.CLIENT_SetDeviceMode(m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_TRANSFER_MODE, talkTransfer.getPointer())) { + System.out.println("Set Talk Transfer Mode Succeed!"); + } else { + System.err.println("Set Talk Transfer Mode Failed!" + ToolKits.getErrorCodePrint()); + return false; + } + + m_hTalkHandle = LoginModule.netsdk.CLIENT_StartTalkEx(m_hLoginHandle, AudioDataCB.getInstance(), null); + + if (m_hTalkHandle.longValue() == 0) { + System.err.println("Start Talk Failed!" + ToolKits.getErrorCodePrint()); + return false; + } else { + System.out.println("Start Talk Success"); + if (LoginModule.netsdk.CLIENT_RecordStart()) { + System.out.println("Start Record Success"); + m_bRecordStatus = true; + } else { + System.err.println("Start Local Record Failed!" + ToolKits.getErrorCodePrint()); + stopTalk(m_hTalkHandle); + return false; + } + } + + return true; + } + + /** + * \if ENGLISH_LANG + * Stop Talk + * \else + * 结束通话 + * \endif + */ + public static void stopTalk(LLong m_hTalkHandle) { + if (m_hTalkHandle.longValue() == 0) { + return; + } + + if (m_bRecordStatus) { + LoginModule.netsdk.CLIENT_RecordStop(); + m_bRecordStatus = false; + } + + if (!LoginModule.netsdk.CLIENT_StopTalkEx(m_hTalkHandle)) { + System.err.println("Stop Talk Failed!" + ToolKits.getErrorCodePrint()); } else { - System.err.println("Set Talk Speak Mode Failed!" + ToolKits.getErrorCodePrint()); - return false; + m_hTalkHandle.setValue(0); + } + } + + /** + * \if ENGLISH_LANG + * Audio Data Callback + * \else + * 语音对讲的数据回调 + * \endif + */ + private static class AudioDataCB implements NetSDKLib.pfAudioDataCallBack { + + private AudioDataCB() { + } + + private static AudioDataCB audioCallBack = new AudioDataCB(); + + public static AudioDataCB getInstance() { + return audioCallBack; } - // 设置语音对讲是否为转发模式 - NetSDKLib.NET_TALK_TRANSFER_PARAM talkTransfer = new NetSDKLib.NET_TALK_TRANSFER_PARAM(); - talkTransfer.bTransfer = 0; // 是否开启语音对讲转发模式, 1-true; 0-false - talkTransfer.write(); - if(LoginModule.netsdk.CLIENT_SetDeviceMode(m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_TRANSFER_MODE, talkTransfer.getPointer())) { - System.out.println("Set Talk Transfer Mode Succeed!"); - } else { - System.err.println("Set Talk Transfer Mode Failed!" + ToolKits.getErrorCodePrint()); - return false; - } - - m_hTalkHandle = LoginModule.netsdk.CLIENT_StartTalkEx(m_hLoginHandle, AudioDataCB.getInstance(), null); - - if(m_hTalkHandle.longValue() == 0) { - System.err.println("Start Talk Failed!" + ToolKits.getErrorCodePrint()); - return false; - } else { - System.out.println("Start Talk Success"); - if(LoginModule.netsdk.CLIENT_RecordStart()){ - System.out.println("Start Record Success"); - m_bRecordStatus = true; - } else { - System.err.println("Start Local Record Failed!" + ToolKits.getErrorCodePrint()); - stopTalk(m_hTalkHandle); - return false; - } - } - - return true; - } - - /** - * \if ENGLISH_LANG - * Stop Talk - * \else - * 结束通话 - * \endif - */ - public static void stopTalk(LLong m_hTalkHandle) { - if(m_hTalkHandle.longValue() == 0) { - return; - } - - if (m_bRecordStatus){ - LoginModule.netsdk.CLIENT_RecordStop(); - m_bRecordStatus = false; - } - - if(!LoginModule.netsdk.CLIENT_StopTalkEx(m_hTalkHandle)) { - System.err.println("Stop Talk Failed!" + ToolKits.getErrorCodePrint()); - } else { - m_hTalkHandle.setValue(0); - } - } - - /** - * \if ENGLISH_LANG - * Audio Data Callback - * \else - * 语音对讲的数据回调 - * \endif - */ - private static class AudioDataCB implements NetSDKLib.pfAudioDataCallBack { - - private AudioDataCB() {} - private static AudioDataCB audioCallBack = new AudioDataCB(); - - public static AudioDataCB getInstance() { - return audioCallBack; - } - - public void invoke(LLong lTalkHandle, Pointer pDataBuf, int dwBufSize, byte byAudioFlag, Pointer dwUser){ - - if(lTalkHandle.longValue() != m_hTalkHandle.longValue()) { - return; - } - - if (byAudioFlag == 0) { // 将收到的本地PC端检测到的声卡数据发送给设备端 - - LLong lSendSize = LoginModule.netsdk.CLIENT_TalkSendData(m_hTalkHandle, pDataBuf, dwBufSize); - if(lSendSize.longValue() != (long)dwBufSize) { - System.err.println("send incomplete" + lSendSize.longValue() + ":" + dwBufSize); - } - }else if (byAudioFlag == 1) { // 将收到的设备端发送过来的语音数据传给SDK解码播放 - LoginModule.netsdk.CLIENT_AudioDecEx(m_hTalkHandle, pDataBuf, dwBufSize); - } - } - } + public void invoke(LLong lTalkHandle, Pointer pDataBuf, int dwBufSize, byte byAudioFlag, Pointer dwUser) { + + if (lTalkHandle.longValue() != m_hTalkHandle.longValue()) { + return; + } + + if (byAudioFlag == 0) { // 将收到的本地PC端检测到的声卡数据发送给设备端 + + LLong lSendSize = LoginModule.netsdk.CLIENT_TalkSendData(m_hTalkHandle, pDataBuf, dwBufSize); + if (lSendSize.longValue() != (long) dwBufSize) { + System.err.println("send incomplete" + lSendSize.longValue() + ":" + dwBufSize); + } + } else if (byAudioFlag == 1) { // 将收到的设备端发送过来的语音数据传给SDK解码播放 + LoginModule.netsdk.CLIENT_AudioDecEx(m_hTalkHandle, pDataBuf, dwBufSize); + } + } + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/DeviceInitModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/DeviceInitModule.java index 7879ca2..b69d502 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/DeviceInitModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/DeviceInitModule.java @@ -9,48 +9,48 @@ import com.example.dahua.lib.ToolKits; * 设备初始化接口实现 */ public class DeviceInitModule { - /* - * 设备初始化 - */ - public static boolean initDevAccount(String szMac, String password, String cellPhone_mail, byte byPwdResetWay) { - /** - * 入参 - */ - NetSDKLib.NET_IN_INIT_DEVICE_ACCOUNT inInit = new NET_IN_INIT_DEVICE_ACCOUNT(); + /* + * 设备初始化 + */ + public static boolean initDevAccount(String szMac, String password, String cellPhone_mail, byte byPwdResetWay) { + /** + * 入参 + */ + NetSDKLib.NET_IN_INIT_DEVICE_ACCOUNT inInit = new NET_IN_INIT_DEVICE_ACCOUNT(); // mac地址 System.arraycopy(szMac.getBytes(), 0, inInit.szMac, 0, szMac.getBytes().length); - + // 用户名 String username = "admin"; System.arraycopy(username.getBytes(), 0, inInit.szUserName, 0, username.getBytes().length); // 密码,必须字母与数字结合,8位以上,否则设备不识别 - if(password.getBytes().length <= 127) { - System.arraycopy(password.getBytes(), 0, inInit.szPwd, 0, password.getBytes().length); - } else if(password.getBytes().length > 127){ - System.arraycopy(password.getBytes(), 0, inInit.szPwd, 0, 127); + if (password.getBytes().length <= 127) { + System.arraycopy(password.getBytes(), 0, inInit.szPwd, 0, password.getBytes().length); + } else if (password.getBytes().length > 127) { + System.arraycopy(password.getBytes(), 0, inInit.szPwd, 0, 127); } // 设备支持的密码重置方式 inInit.byPwdResetWay = byPwdResetWay; - + // bit0-支持预置手机号 bit1-支持预置邮箱 - if((byPwdResetWay >> 1 & 0x01) == 0) { // 手机号 - System.arraycopy(cellPhone_mail.getBytes(), 0, inInit.szCellPhone, 0, cellPhone_mail.getBytes().length); - } else if((byPwdResetWay >> 1 & 0x01) == 1) { // 邮箱 - System.arraycopy(cellPhone_mail.getBytes(), 0, inInit.szMail, 0, cellPhone_mail.getBytes().length); + if ((byPwdResetWay >> 1 & 0x01) == 0) { // 手机号 + System.arraycopy(cellPhone_mail.getBytes(), 0, inInit.szCellPhone, 0, cellPhone_mail.getBytes().length); + } else if ((byPwdResetWay >> 1 & 0x01) == 1) { // 邮箱 + System.arraycopy(cellPhone_mail.getBytes(), 0, inInit.szMail, 0, cellPhone_mail.getBytes().length); + } + + /** + * 出参 + */ + NET_OUT_INIT_DEVICE_ACCOUNT outInit = new NET_OUT_INIT_DEVICE_ACCOUNT(); + + if (!LoginModule.netsdk.CLIENT_InitDevAccount(inInit, outInit, 5000, null)) { + System.err.println("初始化失败," + ToolKits.getErrorCodePrint()); + return false; } - - /** - * 出参 - */ - NET_OUT_INIT_DEVICE_ACCOUNT outInit = new NET_OUT_INIT_DEVICE_ACCOUNT(); - - if(!LoginModule.netsdk.CLIENT_InitDevAccount(inInit, outInit, 5000, null)) { - System.err.println("初始化失败," + ToolKits.getErrorCodePrint()); - return false; - } - - return true; - } + + return true; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/DeviceSearchModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/DeviceSearchModule.java index 7fe76ff..912d1f1 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/DeviceSearchModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/DeviceSearchModule.java @@ -10,53 +10,54 @@ import com.example.dahua.lib.NetSDKLib.*; */ public class DeviceSearchModule { - /** - * 设备组播和广播搜索 - */ - public static NetSDKLib.LLong multiBroadcastDeviceSearch(NetSDKLib.fSearchDevicesCB cbSearchDevices) { - return LoginModule.netsdk.CLIENT_StartSearchDevices(cbSearchDevices, null, null); - } - - /** - * 停止设备组播和广播搜索 - */ - public static void stopDeviceSearch(LLong m_DeviceSearchHandle) { - if(m_DeviceSearchHandle.longValue() == 0) { - return; - } - - LoginModule.netsdk.CLIENT_StopSearchDevices(m_DeviceSearchHandle); - m_DeviceSearchHandle.setValue(0); - } - - /** - * 设备IP单播搜索 - * @param startIP 起始IP - * @param nIpNum IP个数,最大 256 - */ - public static boolean unicastDeviceSearch(String startIP, int nIpNum, fSearchDevicesCB cbSearchDevices) { - String[] szIPStr = startIP.split("\\."); - - DEVICE_IP_SEARCH_INFO deviceSearchInfo = new DEVICE_IP_SEARCH_INFO(); - deviceSearchInfo.nIpNum = nIpNum; - for(int i = 0; i < deviceSearchInfo.nIpNum; i++) { - System.arraycopy(getIp(szIPStr, i).getBytes(), 0, deviceSearchInfo.szIPArr[i].szIP, 0, getIp(szIPStr, i).getBytes().length); - } - if(LoginModule.netsdk.CLIENT_SearchDevicesByIPs(deviceSearchInfo, cbSearchDevices, null, null, 6000)) { - System.out.println("SearchDevicesByIPs Succeed!"); - return true; - } - return false; - } - - public static String getIp(String[] ip, int num) { - String szIp = ""; - if(Integer.parseInt(ip[3]) >= 255) { - szIp = ip[0] + "." + ip[1] + "." + String.valueOf(Integer.parseInt(ip[2]) + 1) + "." + String.valueOf(Integer.parseInt(ip[3]) + num - 255); - } else { - szIp = ip[0] + "." + ip[1] + "." + ip[2] + "." + String.valueOf(Integer.parseInt(ip[3]) + num); - } - - return szIp; - } + /** + * 设备组播和广播搜索 + */ + public static NetSDKLib.LLong multiBroadcastDeviceSearch(NetSDKLib.fSearchDevicesCB cbSearchDevices) { + return LoginModule.netsdk.CLIENT_StartSearchDevices(cbSearchDevices, null, null); + } + + /** + * 停止设备组播和广播搜索 + */ + public static void stopDeviceSearch(LLong m_DeviceSearchHandle) { + if (m_DeviceSearchHandle.longValue() == 0) { + return; + } + + LoginModule.netsdk.CLIENT_StopSearchDevices(m_DeviceSearchHandle); + m_DeviceSearchHandle.setValue(0); + } + + /** + * 设备IP单播搜索 + * + * @param startIP 起始IP + * @param nIpNum IP个数,最大 256 + */ + public static boolean unicastDeviceSearch(String startIP, int nIpNum, fSearchDevicesCB cbSearchDevices) { + String[] szIPStr = startIP.split("\\."); + + DEVICE_IP_SEARCH_INFO deviceSearchInfo = new DEVICE_IP_SEARCH_INFO(); + deviceSearchInfo.nIpNum = nIpNum; + for (int i = 0; i < deviceSearchInfo.nIpNum; i++) { + System.arraycopy(getIp(szIPStr, i).getBytes(), 0, deviceSearchInfo.szIPArr[i].szIP, 0, getIp(szIPStr, i).getBytes().length); + } + if (LoginModule.netsdk.CLIENT_SearchDevicesByIPs(deviceSearchInfo, cbSearchDevices, null, null, 6000)) { + System.out.println("SearchDevicesByIPs Succeed!"); + return true; + } + return false; + } + + public static String getIp(String[] ip, int num) { + String szIp = ""; + if (Integer.parseInt(ip[3]) >= 255) { + szIp = ip[0] + "." + ip[1] + "." + String.valueOf(Integer.parseInt(ip[2]) + 1) + "." + String.valueOf(Integer.parseInt(ip[3]) + num - 255); + } else { + szIp = ip[0] + "." + ip[1] + "." + ip[2] + "." + String.valueOf(Integer.parseInt(ip[3]) + num); + } + + return szIp; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/FaceRecognitionModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/FaceRecognitionModule.java index a473dff..05957fa 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/FaceRecognitionModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/FaceRecognitionModule.java @@ -17,801 +17,824 @@ import com.sun.jna.Pointer; * IVSS 和 IPC-FR 人脸功能接口实现, IPC-FD只支持人脸检测事件 */ -public class FaceRecognitionModule { - // 查找句柄 - private static NetSDKLib.LLong m_FindHandle = null; - - // 查询密令 - public static int nToken = 0; - - //////////////////////////////// 人脸识别 和 人脸检测 事件 ///////////////////////////////////////////// - /** - * 人脸识别事件和人脸检测事件订阅 - * @param channel 通道号 - * @param callback 回调函数 - * @return true:成功 false:失败 - */ - public static LLong realLoadPicture(int channel, fAnalyzerDataCallBack callback) { - int bNeedPicture = 1; // 是否需要图片 - - LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(LoginModule.m_hLoginHandle, channel, - NetSDKLib.EVENT_IVS_ALL, bNeedPicture, callback, null, null); - if(m_hAttachHandle.longValue() == 0) { - System.err.println("CLIENT_RealLoadPictureEx Failed, Error:" + ToolKits.getErrorCodePrint()); +public class FaceRecognitionModule { + // 查找句柄 + private static NetSDKLib.LLong m_FindHandle = null; + + // 查询密令 + public static int nToken = 0; + + //////////////////////////////// 人脸识别 和 人脸检测 事件 ///////////////////////////////////////////// + + /** + * 人脸识别事件和人脸检测事件订阅 + * + * @param channel 通道号 + * @param callback 回调函数 + * @return true:成功 false:失败 + */ + public static LLong realLoadPicture(int channel, fAnalyzerDataCallBack callback) { + int bNeedPicture = 1; // 是否需要图片 + + LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(LoginModule.m_hLoginHandle, channel, + NetSDKLib.EVENT_IVS_ALL, bNeedPicture, callback, null, null); + if (m_hAttachHandle.longValue() == 0) { + System.err.println("CLIENT_RealLoadPictureEx Failed, Error:" + ToolKits.getErrorCodePrint()); + } else { + System.out.println("通道[" + channel + "]订阅成功!"); + } + + return m_hAttachHandle; + } + + /** + * 停止订阅 + * + * @param m_hAttachHandle 智能订阅句柄 + */ + public static void stopRealLoadPicture(LLong m_hAttachHandle) { + if (m_hAttachHandle.longValue() != 0) { + LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle); + m_hAttachHandle.setValue(0); + } + } + + + /////////////////////////////////////// 人脸库的增、删、改、查 //////////////////////////////// + + /** + * 查询人脸库 + * + * @param groupId 需要查找的人脸库ID; 为空表示查找所有的人脸库 + */ + public static NET_FACERECONGNITION_GROUP_INFO[] findGroupInfo(String groupId) { + NET_FACERECONGNITION_GROUP_INFO[] groupInfoRet = null; + + /* + * 入参 + */ + NET_IN_FIND_GROUP_INFO stuIn = new NET_IN_FIND_GROUP_INFO(); + System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length); + + /* + * 出参 + */ + int max = 20; + NET_FACERECONGNITION_GROUP_INFO[] groupInfo = new NET_FACERECONGNITION_GROUP_INFO[max]; + for (int i = 0; i < max; i++) { + groupInfo[i] = new NET_FACERECONGNITION_GROUP_INFO(); + } + + NET_OUT_FIND_GROUP_INFO stuOut = new NET_OUT_FIND_GROUP_INFO(); + stuOut.pGroupInfos = new Memory(groupInfo[0].size() * groupInfo.length); // Pointer初始化 + stuOut.pGroupInfos.clear(groupInfo[0].size() * groupInfo.length); + stuOut.nMaxGroupNum = groupInfo.length; + + ToolKits.SetStructArrToPointerData(groupInfo, stuOut.pGroupInfos); // 将数组内存拷贝给Pointer + + if (LoginModule.netsdk.CLIENT_FindGroupInfo(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) { + + // 将Pointer的值输出到 数组 NET_FACERECONGNITION_GROUP_INFO + ToolKits.GetPointerDataToStructArr(stuOut.pGroupInfos, groupInfo); + + if (stuOut.nRetGroupNum > 0) { + // 根据设备返回的,将有效的人脸库信息返回 + groupInfoRet = new NET_FACERECONGNITION_GROUP_INFO[stuOut.nRetGroupNum]; + for (int i = 0; i < stuOut.nRetGroupNum; i++) { + groupInfoRet[i] = groupInfo[i]; + } + } + } else { + System.err.println("查询人员信息失败" + ToolKits.getErrorCodePrint()); + return null; + } + + return groupInfoRet; + } + + /** + * 添加人脸库 + * + * @param groupName 需要添加的人脸库名称 + */ + public static boolean addGroup(String groupName) { + NET_ADD_FACERECONGNITION_GROUP_INFO addGroupInfo = new NET_ADD_FACERECONGNITION_GROUP_INFO(); + + // 人脸库名称 + try { + System.arraycopy(groupName.getBytes("GBK"), 0, addGroupInfo.stuGroupInfo.szGroupName, 0, groupName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + /* + * 入参 + */ + NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP(); + stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_ADD; // 添加人员组信息 + stuIn.pOPerateInfo = addGroupInfo.getPointer(); + + /* + * 出参 + */ + NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP(); + + addGroupInfo.write(); + boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); + addGroupInfo.read(); + System.out.println("添加人脸库:" + "bRet=" + bRet + " 人员组ID:" + new String(stuOut.szGroupId).trim() + " stuIn:" + stuIn.pOPerateInfo.getString(8680) + " stuOut:" + new String(stuOut.szGroupId)); + if (bRet) { + System.out.println("人员组ID : " + new String(stuOut.szGroupId).trim()); // 新增记录的人员组ID,唯一标识一组人员 + } + + return bRet; + } + + /** + * 修改人脸库 + * + * @param groupName 修改后的人脸库名称 + * @param groupId 需要修改的人脸库ID + */ + public static boolean modifyGroup(String groupName, String groupId) { + NET_MODIFY_FACERECONGNITION_GROUP_INFO modifyGroupInfo = new NET_MODIFY_FACERECONGNITION_GROUP_INFO(); + + // 人脸库名称 + try { + System.arraycopy(groupName.getBytes("GBK"), 0, modifyGroupInfo.stuGroupInfo.szGroupName, 0, groupName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 人脸库ID + System.arraycopy(groupId.getBytes(), 0, modifyGroupInfo.stuGroupInfo.szGroupId, 0, groupId.getBytes().length); + + /* + * 入参 + */ + NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP(); + stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_MODIFY; // 修改人员组信息 + stuIn.pOPerateInfo = modifyGroupInfo.getPointer(); + + /* + * 出参 + */ + NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP(); + + modifyGroupInfo.write(); + boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); + modifyGroupInfo.read(); + + if (bRet) { + System.out.println("修改人脸库成功."); + } + + return bRet; + } + + /** + * 删除人脸库 + * + * @param groupId 需要删除的人脸库ID; 为空表示删除所有的人脸库 + */ + public static boolean deleteGroup(String groupId) { + NET_DELETE_FACERECONGNITION_GROUP_INFO deleteGroupInfo = new NET_DELETE_FACERECONGNITION_GROUP_INFO(); + + // 人脸库ID + System.arraycopy(groupId.getBytes(), 0, deleteGroupInfo.szGroupId, 0, groupId.getBytes().length); + + /* + * 入参 + */ + NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP(); + stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_DELETE; // 删除人员组信息 + stuIn.pOPerateInfo = deleteGroupInfo.getPointer(); + + /* + * 出参 + */ + NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP(); + + deleteGroupInfo.write(); + boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); + deleteGroupInfo.read(); + + if (bRet) { + System.out.println("删除人脸库成功."); + } + + return bRet; + } + + ///////////////////////////// 按人脸库布控、撤控 /////////////////////////////////////// + + /** + * 以人脸库的角度进行布控 + * + * @param groupId 人脸库ID + * @param hashMap key:撤控通道 value:相似度 + */ + public static boolean putDisposition(String groupId, HashMap hashMap) { + int i = 0; + + /* + * 入参 + */ + NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO stuIn = new NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO(); + // 人脸库ID + System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length); + + for (Map.Entry entry : hashMap.entrySet()) { + stuIn.stuDispositionChnInfo[i].nChannelID = entry.getKey() - 1; + stuIn.stuDispositionChnInfo[i].nSimilary = entry.getValue(); + + i++; + } + + stuIn.nDispositionChnNum = hashMap.size(); // 布控视频通道个数 + + /* + * 出参 + */ + NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO stuOut = new NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO(); + + boolean bRet = LoginModule.netsdk.CLIENT_FaceRecognitionPutDisposition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); + if (bRet) { + System.out.println("通道布控结果个数:" + stuOut.nReportCnt); + } + return bRet; + } + + /** + * 以人脸库的角度进行撤控 + * + * @param groupId 人脸库ID + * @param arrayList 撤控通道列表 + */ + public static boolean delDisposition(String groupId, ArrayList arrayList) { + /* + * 入参 + */ + NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO stuIn = new NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO(); + + // 人脸库ID + System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length); + + // 撤控视频通道列表 + for (int i = 0; i < arrayList.size(); i++) { + stuIn.nDispositionChn[i] = arrayList.get(i) - 1; + } + + // 撤控视频通道个数 + stuIn.nDispositionChnNum = arrayList.size(); + + /* + * 出参 + */ + NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO stuOut = new NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO(); + + boolean bRet = LoginModule.netsdk.CLIENT_FaceRecognitionDelDisposition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); + if (bRet) { + System.out.println("通道撤控结果个数:" + stuOut.nReportCnt); + } + return bRet; + } + + ///////////////////////////// 按通道布控、撤控 /////////////////////////////////////// + + /** + * 获取布控在视频通道的组信息 + * + * @param channel 通道号 + */ + public static void GetGroupInfoForChannel(int channel) { + /* + * 入参 + */ + NET_IN_GET_GROUPINFO_FOR_CHANNEL stIn = new NET_IN_GET_GROUPINFO_FOR_CHANNEL(); + + // 通道号 + stIn.nChannelID = channel; + + /* + * 出参 + */ + NET_OUT_GET_GROUPINFO_FOR_CHANNEL stOut = new NET_OUT_GET_GROUPINFO_FOR_CHANNEL(); + + if (LoginModule.netsdk.CLIENT_GetGroupInfoForChannel(LoginModule.m_hLoginHandle, stIn, stOut, 4000)) { + for (int i = 0; i < stOut.nGroupIdNum; i++) { + System.out.println("人脸库ID:" + new String(stOut.szGroupIdArr[i].szGroupId).trim()); + System.out.println("相似度:" + stOut.nSimilary[i] + "\n"); + } + } else { + System.err.println("获取布控在视频通道的组信息失败, " + ToolKits.getErrorCodePrint()); + } + } + + /** + * 布控通道人员组信息 + * + * @param channel + * @param groupIds 人脸库ID,长度等于相似度 + * @param similarys 相似度, 长度等于人脸库ID + */ + public static void SetGroupInfoForChannel(int channel, String[] groupIds, int[] similarys) { + /* + * 入参 + */ + NET_IN_SET_GROUPINFO_FOR_CHANNEL stIn = new NET_IN_SET_GROUPINFO_FOR_CHANNEL(); + + // 通道号 + stIn.nChannelID = channel; + + // 人脸库ID个数 + stIn.nGroupIdNum = groupIds.length; + + // 相似度个数 + stIn.nSimilaryNum = similarys.length; + + for (int i = 0; i < groupIds.length; i++) { + // 人脸库ID赋值,用数组拷贝 + System.arraycopy(groupIds[i].getBytes(), 0, stIn.szGroupIdArr[i].szGroupId, 0, groupIds[i].getBytes().length); + + // 对应的人脸库的相似度 + stIn.nSimilary[i] = similarys[i]; + } + + /* + * 出参 + */ + NET_OUT_SET_GROUPINFO_FOR_CHANNEL stOut = new NET_OUT_SET_GROUPINFO_FOR_CHANNEL(); + + if (LoginModule.netsdk.CLIENT_SetGroupInfoForChannel(LoginModule.m_hLoginHandle, stIn, stOut, 4000)) { + + } + } + + ///////////////////////////// 人员操作 //////////////////////////////////////////// + + /** + * 按条件查询人脸识别结果 + * + * @param groupId 人脸库ID + * @param isStartBirthday 查询条件是否下发开始生日 + * @param startTime 生日起始时间 + * @param isEndBirthday 查询条件是否下发结束生日 + * @param endTime 生日结束时间 + * @param personName 姓名 + * @param sex 性别 + * @param idType 证件类型 + * @param idNo 证件号 + * @return 查询到的所有人员个数 + */ + public static int startFindPerson(String groupId, + boolean isStartBirthday, + String startTime, + boolean isEndBirthday, + String endTime, + String personName, + int sex, + int idType, + String idNo) { + + m_FindHandle = null; + nToken = 0; + + int nTotalCount = 0; + + /* + * 入参, IVVS设备,查询条件只有 stuInStartFind.stPerson 里的参数有效 + */ + NET_IN_STARTFIND_FACERECONGNITION stuIn = new NET_IN_STARTFIND_FACERECONGNITION(); + + stuIn.bPersonExEnable = 1; // 人员信息查询条件是否有效, 并使用扩展结构体 + + // 人脸库ID + System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); + + // 姓名 + try { + System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 性别 + stuIn.stPersonInfoEx.bySex = (byte) sex; + + // 证件类型 + stuIn.stPersonInfoEx.byIDType = (byte) idType; + + // 证件号 + System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length); + + stuIn.stFilterInfo.nGroupIdNum = 1; + + // 人脸库ID + System.arraycopy(groupId.getBytes(), 0, stuIn.stFilterInfo.szGroupIdArr[0].szGroupId, 0, groupId.getBytes().length); + + // 待查询人脸类型 + stuIn.stFilterInfo.emFaceType = EM_FACERECOGNITION_FACE_TYPE.EM_FACERECOGNITION_FACE_TYPE_ALL; + + // 开始生日 + if (isStartBirthday) { + String[] startTimeStr = startTime.split("-"); + + stuIn.stFilterInfo.stBirthdayRangeStart.dwYear = Integer.parseInt(startTimeStr[0]); + stuIn.stFilterInfo.stBirthdayRangeStart.dwMonth = Integer.parseInt(startTimeStr[1]); + stuIn.stFilterInfo.stBirthdayRangeStart.dwDay = Integer.parseInt(startTimeStr[2]); + } + + // 结束生日 + if (isEndBirthday) { + String[] endTimeStr = endTime.split("-"); + + stuIn.stFilterInfo.stBirthdayRangeEnd.dwYear = Integer.parseInt(endTimeStr[0]); + stuIn.stFilterInfo.stBirthdayRangeEnd.dwMonth = Integer.parseInt(endTimeStr[1]); + stuIn.stFilterInfo.stBirthdayRangeEnd.dwDay = Integer.parseInt(endTimeStr[2]); + } + + stuIn.stFilterInfo.nRangeNum = 1; + stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_BLACKLIST; + + /* + * 出参 + */ + NET_OUT_STARTFIND_FACERECONGNITION stuOut = new NET_OUT_STARTFIND_FACERECONGNITION(); + stuIn.write(); + stuOut.write(); + if (LoginModule.netsdk.CLIENT_StartFindFaceRecognition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) { + m_FindHandle = stuOut.lFindHandle; + nTotalCount = stuOut.nTotalCount; + nToken = stuOut.nToken; } else { - System.out.println("通道[" + channel + "]订阅成功!"); - } - - return m_hAttachHandle; - } - - /** - * 停止订阅 - * @param m_hAttachHandle 智能订阅句柄 - */ - public static void stopRealLoadPicture(LLong m_hAttachHandle) { - if(m_hAttachHandle.longValue() != 0) { - LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle); - m_hAttachHandle.setValue(0); - } - } - - - /////////////////////////////////////// 人脸库的增、删、改、查 //////////////////////////////// - - /** - * 查询人脸库 - * @param groupId 需要查找的人脸库ID; 为空表示查找所有的人脸库 - */ - public static NET_FACERECONGNITION_GROUP_INFO[] findGroupInfo(String groupId) { - NET_FACERECONGNITION_GROUP_INFO[] groupInfoRet = null; - - /* - * 入参 - */ - NET_IN_FIND_GROUP_INFO stuIn = new NET_IN_FIND_GROUP_INFO(); - System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length); - - /* - * 出参 - */ - int max = 20; - NET_FACERECONGNITION_GROUP_INFO[] groupInfo = new NET_FACERECONGNITION_GROUP_INFO[max]; - for(int i = 0; i < max; i++) { - groupInfo[i] = new NET_FACERECONGNITION_GROUP_INFO(); - } - - NET_OUT_FIND_GROUP_INFO stuOut = new NET_OUT_FIND_GROUP_INFO(); - stuOut.pGroupInfos = new Memory(groupInfo[0].size() * groupInfo.length); // Pointer初始化 - stuOut.pGroupInfos.clear(groupInfo[0].size() * groupInfo.length); - stuOut.nMaxGroupNum = groupInfo.length; - - ToolKits.SetStructArrToPointerData(groupInfo, stuOut.pGroupInfos); // 将数组内存拷贝给Pointer - - if(LoginModule.netsdk.CLIENT_FindGroupInfo(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) { - - // 将Pointer的值输出到 数组 NET_FACERECONGNITION_GROUP_INFO - ToolKits.GetPointerDataToStructArr(stuOut.pGroupInfos, groupInfo); - - if(stuOut.nRetGroupNum > 0) { - // 根据设备返回的,将有效的人脸库信息返回 - groupInfoRet = new NET_FACERECONGNITION_GROUP_INFO[stuOut.nRetGroupNum]; - for(int i = 0; i < stuOut.nRetGroupNum; i++) { - groupInfoRet[i] = groupInfo[i]; - } - } - } else { - System.err.println("查询人员信息失败" + ToolKits.getErrorCodePrint()); - return null; - } - - return groupInfoRet; - } - - /** - * 添加人脸库 - * @param groupName 需要添加的人脸库名称 - */ - public static boolean addGroup(String groupName) { - NET_ADD_FACERECONGNITION_GROUP_INFO addGroupInfo = new NET_ADD_FACERECONGNITION_GROUP_INFO(); - - // 人脸库名称 - try { - System.arraycopy(groupName.getBytes("GBK"), 0, addGroupInfo.stuGroupInfo.szGroupName, 0, groupName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - /* - * 入参 - */ - NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP(); - stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_ADD; // 添加人员组信息 - stuIn.pOPerateInfo = addGroupInfo.getPointer(); - - /* - * 出参 - */ - NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP(); - - addGroupInfo.write(); - boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); - addGroupInfo.read(); - System.out.println("添加人脸库:"+"bRet="+bRet+" 人员组ID:"+ new String(stuOut.szGroupId).trim()+" stuIn:"+stuIn.pOPerateInfo.getString(8680)+" stuOut:"+new String(stuOut.szGroupId)); - if(bRet) { - System.out.println("人员组ID : " + new String(stuOut.szGroupId).trim()); // 新增记录的人员组ID,唯一标识一组人员 - } - - return bRet; - } - - /** - * 修改人脸库 - * @param groupName 修改后的人脸库名称 - * @param groupId 需要修改的人脸库ID - */ - public static boolean modifyGroup(String groupName, String groupId) { - NET_MODIFY_FACERECONGNITION_GROUP_INFO modifyGroupInfo = new NET_MODIFY_FACERECONGNITION_GROUP_INFO(); - - // 人脸库名称 - try { - System.arraycopy(groupName.getBytes("GBK"), 0, modifyGroupInfo.stuGroupInfo.szGroupName, 0, groupName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 人脸库ID - System.arraycopy(groupId.getBytes(), 0, modifyGroupInfo.stuGroupInfo.szGroupId, 0, groupId.getBytes().length); - - /* - * 入参 - */ - NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP(); - stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_MODIFY; // 修改人员组信息 - stuIn.pOPerateInfo = modifyGroupInfo.getPointer(); - - /* - * 出参 - */ - NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP(); - - modifyGroupInfo.write(); - boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); - modifyGroupInfo.read(); - - if(bRet) { - System.out.println("修改人脸库成功."); - } - - return bRet; - } - - /** - * 删除人脸库 - * @param groupId 需要删除的人脸库ID; 为空表示删除所有的人脸库 - */ - public static boolean deleteGroup(String groupId) { - NET_DELETE_FACERECONGNITION_GROUP_INFO deleteGroupInfo = new NET_DELETE_FACERECONGNITION_GROUP_INFO(); - - // 人脸库ID - System.arraycopy(groupId.getBytes(), 0, deleteGroupInfo.szGroupId, 0, groupId.getBytes().length); - - /* - * 入参 - */ - NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP(); - stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_DELETE; // 删除人员组信息 - stuIn.pOPerateInfo = deleteGroupInfo.getPointer(); - - /* - * 出参 - */ - NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP(); - - deleteGroupInfo.write(); - boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); - deleteGroupInfo.read(); - - if(bRet) { - System.out.println("删除人脸库成功."); - } - - return bRet; - } - - ///////////////////////////// 按人脸库布控、撤控 /////////////////////////////////////// - /** - * 以人脸库的角度进行布控 - * @param groupId 人脸库ID - * @param hashMap key:撤控通道 value:相似度 - */ - public static boolean putDisposition(String groupId, HashMap hashMap) { - int i = 0; - - /* - * 入参 - */ - NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO stuIn = new NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO(); - // 人脸库ID - System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length); - - for(Map.Entry entry : hashMap.entrySet()) { - stuIn.stuDispositionChnInfo[i].nChannelID = entry.getKey() - 1; - stuIn.stuDispositionChnInfo[i].nSimilary = entry.getValue(); - - i++; - } - - stuIn.nDispositionChnNum = hashMap.size(); // 布控视频通道个数 - - /* - * 出参 - */ - NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO stuOut = new NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO(); - - boolean bRet = LoginModule.netsdk.CLIENT_FaceRecognitionPutDisposition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); - if(bRet) { - System.out.println("通道布控结果个数:" + stuOut.nReportCnt); - } - return bRet; - } - - /** - * 以人脸库的角度进行撤控 - * @param groupId 人脸库ID - * @param arrayList 撤控通道列表 - */ - public static boolean delDisposition(String groupId, ArrayList arrayList) { - /* - * 入参 - */ - NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO stuIn = new NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO(); - - // 人脸库ID - System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length); - - // 撤控视频通道列表 - for(int i = 0; i < arrayList.size(); i++) { - stuIn.nDispositionChn[i] = arrayList.get(i) - 1; - } - - // 撤控视频通道个数 - stuIn.nDispositionChnNum = arrayList.size(); - - /* - * 出参 - */ - NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO stuOut = new NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO(); - - boolean bRet = LoginModule.netsdk.CLIENT_FaceRecognitionDelDisposition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); - if(bRet) { - System.out.println("通道撤控结果个数:" + stuOut.nReportCnt); - } - return bRet; - } - - ///////////////////////////// 按通道布控、撤控 /////////////////////////////////////// - /** - * 获取布控在视频通道的组信息 - * @param channel 通道号 - */ - public static void GetGroupInfoForChannel(int channel) { - /* - * 入参 - */ - NET_IN_GET_GROUPINFO_FOR_CHANNEL stIn = new NET_IN_GET_GROUPINFO_FOR_CHANNEL(); - - // 通道号 - stIn.nChannelID = channel; - - /* - * 出参 - */ - NET_OUT_GET_GROUPINFO_FOR_CHANNEL stOut = new NET_OUT_GET_GROUPINFO_FOR_CHANNEL(); - - if(LoginModule.netsdk.CLIENT_GetGroupInfoForChannel(LoginModule.m_hLoginHandle, stIn, stOut, 4000)) { - for(int i = 0; i < stOut.nGroupIdNum; i++) { - System.out.println("人脸库ID:" + new String(stOut.szGroupIdArr[i].szGroupId).trim()); - System.out.println("相似度:" + stOut.nSimilary[i] + "\n"); - } - } else { - System.err.println("获取布控在视频通道的组信息失败, " + ToolKits.getErrorCodePrint()); - } - } - /** - * 布控通道人员组信息 - * @param channel - * @param groupIds 人脸库ID,长度等于相似度 - * @param similarys 相似度, 长度等于人脸库ID - */ - public static void SetGroupInfoForChannel(int channel, String[] groupIds, int[] similarys) { - /* - * 入参 - */ - NET_IN_SET_GROUPINFO_FOR_CHANNEL stIn = new NET_IN_SET_GROUPINFO_FOR_CHANNEL(); - - // 通道号 - stIn.nChannelID = channel; - - // 人脸库ID个数 - stIn.nGroupIdNum = groupIds.length; - - // 相似度个数 - stIn.nSimilaryNum = similarys.length; - - for(int i = 0; i < groupIds.length; i++) { - // 人脸库ID赋值,用数组拷贝 - System.arraycopy(groupIds[i].getBytes(), 0, stIn.szGroupIdArr[i].szGroupId, 0, groupIds[i].getBytes().length); - - // 对应的人脸库的相似度 - stIn.nSimilary[i] = similarys[i]; - } - - /* - * 出参 - */ - NET_OUT_SET_GROUPINFO_FOR_CHANNEL stOut = new NET_OUT_SET_GROUPINFO_FOR_CHANNEL(); - - if(LoginModule.netsdk.CLIENT_SetGroupInfoForChannel(LoginModule.m_hLoginHandle, stIn, stOut, 4000)) { - - } - } - - ///////////////////////////// 人员操作 //////////////////////////////////////////// - /** - * 按条件查询人脸识别结果 - * @param groupId 人脸库ID - * @param isStartBirthday 查询条件是否下发开始生日 - * @param startTime 生日起始时间 - * @param isEndBirthday 查询条件是否下发结束生日 - * @param endTime 生日结束时间 - * @param personName 姓名 - * @param sex 性别 - * @param idType 证件类型 - * @param idNo 证件号 - * @return 查询到的所有人员个数 - */ - public static int startFindPerson(String groupId, - boolean isStartBirthday, - String startTime, - boolean isEndBirthday, - String endTime, - String personName, - int sex, - int idType, - String idNo) { - - m_FindHandle = null; - nToken = 0; - - int nTotalCount = 0; - - /* - * 入参, IVVS设备,查询条件只有 stuInStartFind.stPerson 里的参数有效 - */ - NET_IN_STARTFIND_FACERECONGNITION stuIn = new NET_IN_STARTFIND_FACERECONGNITION(); - - stuIn.bPersonExEnable = 1; // 人员信息查询条件是否有效, 并使用扩展结构体 - - // 人脸库ID - System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); - - // 姓名 - try { - System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 性别 - stuIn.stPersonInfoEx.bySex = (byte)sex; - - // 证件类型 - stuIn.stPersonInfoEx.byIDType = (byte)idType; - - // 证件号 - System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length); - - stuIn.stFilterInfo.nGroupIdNum = 1; - - // 人脸库ID - System.arraycopy(groupId.getBytes(), 0, stuIn.stFilterInfo.szGroupIdArr[0].szGroupId, 0, groupId.getBytes().length); - - // 待查询人脸类型 - stuIn.stFilterInfo.emFaceType = EM_FACERECOGNITION_FACE_TYPE.EM_FACERECOGNITION_FACE_TYPE_ALL; - - // 开始生日 - if(isStartBirthday) { - String[] startTimeStr = startTime.split("-"); - - stuIn.stFilterInfo.stBirthdayRangeStart.dwYear = Integer.parseInt(startTimeStr[0]); - stuIn.stFilterInfo.stBirthdayRangeStart.dwMonth = Integer.parseInt(startTimeStr[1]); - stuIn.stFilterInfo.stBirthdayRangeStart.dwDay = Integer.parseInt(startTimeStr[2]); - } - - // 结束生日 - if(isEndBirthday) { - String[] endTimeStr = endTime.split("-"); - - stuIn.stFilterInfo.stBirthdayRangeEnd.dwYear = Integer.parseInt(endTimeStr[0]); - stuIn.stFilterInfo.stBirthdayRangeEnd.dwMonth = Integer.parseInt(endTimeStr[1]); - stuIn.stFilterInfo.stBirthdayRangeEnd.dwDay = Integer.parseInt(endTimeStr[2]); - } - - stuIn.stFilterInfo.nRangeNum = 1; - stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_BLACKLIST; - - /* - * 出参 - */ - NET_OUT_STARTFIND_FACERECONGNITION stuOut = new NET_OUT_STARTFIND_FACERECONGNITION(); - stuIn.write(); - stuOut.write(); - if(LoginModule.netsdk.CLIENT_StartFindFaceRecognition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) { - m_FindHandle = stuOut.lFindHandle; - nTotalCount = stuOut.nTotalCount; - nToken = stuOut.nToken; - } else { - System.out.println("CLIENT_StartFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint()); - } - - return nTotalCount; - } - - /** - * 查找人脸识别结果 - * @param beginNum 查询起始序号 - * @param nCount 当前想查询的记录条数 - * @return 返回人员信息数组 - */ - public static CANDIDATE_INFOEX[] doFindPerson(int beginNum, int nCount) { - /* - *入参 - */ - NetSDKLib.NET_IN_DOFIND_FACERECONGNITION stuIn = new NetSDKLib.NET_IN_DOFIND_FACERECONGNITION(); + System.out.println("CLIENT_StartFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint()); + } + + return nTotalCount; + } + + /** + * 查找人脸识别结果 + * + * @param beginNum 查询起始序号 + * @param nCount 当前想查询的记录条数 + * @return 返回人员信息数组 + */ + public static CANDIDATE_INFOEX[] doFindPerson(int beginNum, int nCount) { + /* + *入参 + */ + NetSDKLib.NET_IN_DOFIND_FACERECONGNITION stuIn = new NetSDKLib.NET_IN_DOFIND_FACERECONGNITION(); stuIn.lFindHandle = m_FindHandle; - stuIn.nCount = nCount; // 当前想查询的记录条数 - stuIn.nBeginNum = beginNum; // 查询起始序号 - + stuIn.nCount = nCount; // 当前想查询的记录条数 + stuIn.nBeginNum = beginNum; // 查询起始序号 + /* * 出参 */ - NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION stuOut = new NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION(); - stuOut.bUseCandidatesEx = 1; // 是否使用候选对象扩展结构体 - + NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION stuOut = new NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION(); + stuOut.bUseCandidatesEx = 1; // 是否使用候选对象扩展结构体 + // 必须申请内存,每次查询几个,必须至少申请几个,最大申请20个 - for(int i = 0; i < nCount; i++) { + for (int i = 0; i < nCount; i++) { stuOut.stuCandidatesEx[i].stPersonInfo.szFacePicInfo[0].nFilePathLen = 256; stuOut.stuCandidatesEx[i].stPersonInfo.szFacePicInfo[0].pszFilePath = new Memory(256); } - - stuIn.write(); - stuOut.write(); - if(LoginModule.netsdk.CLIENT_DoFindFaceRecognition(stuIn, stuOut, 4000)) { - stuIn.read(); - stuOut.read(); - - if(stuOut.nCadidateExNum == 0) { - return null; - } - - // 查询到的数据 - CANDIDATE_INFOEX[] stuCandidatesEx = new CANDIDATE_INFOEX[stuOut.nCadidateExNum]; - for(int i = 0; i < stuOut.nCadidateExNum; i++) { - stuCandidatesEx[i] = new CANDIDATE_INFOEX(); - stuCandidatesEx[i] = stuOut.stuCandidatesEx[i]; - } - - return stuCandidatesEx; + + stuIn.write(); + stuOut.write(); + if (LoginModule.netsdk.CLIENT_DoFindFaceRecognition(stuIn, stuOut, 4000)) { + stuIn.read(); + stuOut.read(); + + if (stuOut.nCadidateExNum == 0) { + return null; + } + + // 查询到的数据 + CANDIDATE_INFOEX[] stuCandidatesEx = new CANDIDATE_INFOEX[stuOut.nCadidateExNum]; + for (int i = 0; i < stuOut.nCadidateExNum; i++) { + stuCandidatesEx[i] = new CANDIDATE_INFOEX(); + stuCandidatesEx[i] = stuOut.stuCandidatesEx[i]; + } + + return stuCandidatesEx; } else { - System.out.println("CLIENT_DoFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint()); + System.out.println("CLIENT_DoFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint()); } - + return null; - } - - /** - * 结束查询 - */ - public static boolean doFindPerson() { - boolean bRet = false; - if(m_FindHandle.longValue() != 0) { - bRet = LoginModule.netsdk.CLIENT_StopFindFaceRecognition(m_FindHandle); - } - return bRet; - } - - /** - * 添加人员 - * @param groupId 人脸库ID - * @param memory 图片数据 - * @param personName 姓名 - * @param sex 性别 - * @param isBirthday 是否下发生日 - * @param birthday 生日 - * @param byIdType 证件类型 - * @param idNo 证件号 - * @return - */ - public static boolean addPerson(String groupId, - Memory memory, - String personName, - int sex, - boolean isBirthday, - String birthday, - int byIdType, - String idNo) { - /* - * 入参 - */ - NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB(); - stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_ADD; - - ///////// 使用人员扩展信息 ////////// - stuIn.bUsePersonInfoEx = 1; - - // 人脸库ID - System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); - - // 生日设置 - if(isBirthday) { - String[] birthdays = birthday.split("-"); - - stuIn.stPersonInfoEx.wYear = (short)Integer.parseInt(birthdays[0]); - stuIn.stPersonInfoEx.byMonth = (byte)Integer.parseInt(birthdays[1]); - stuIn.stPersonInfoEx.byDay = (byte)Integer.parseInt(birthdays[2]); - } - - // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效 - stuIn.stPersonInfoEx.bySex = (byte)sex; - - // 人员名字 - try { - System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 证件类型 - stuIn.stPersonInfoEx.byIDType = (byte)byIdType; - - // 证件号 - System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length); - - // 图片张数、大小、缓存设置 - if(memory != null) { - stuIn.stPersonInfoEx.wFacePicNum = 1; // 图片张数 - stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int)memory.size(); // 图片大小 - stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0; - - stuIn.nBufferLen = (int)memory.size(); - stuIn.pBuffer = memory; - } - - /* - * 出参 - */ - NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB() ; - - stuIn.write(); - boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000); - stuIn.read(); - - if(bRet) { - System.out.println("szUID : " + new String(stuOut.szUID).trim()); - } else { - System.err.println(ToolKits.getErrorCodePrint()); - } - - return bRet; - } - - /** - * 修改人员信息 - * @param groupId 人脸库ID - * @param uid 人员唯一标识符 - * @param memory 图片数据 - * @param personName 姓名 - * @param sex 性别 - * @param isBirthday 是否下发生日 - * @param birthday 生日 - * @param byIdType 证件类型 - * @param idNo 证件号 - * @return true:成功 , false:失败 - */ - public static boolean modifyPerson(String groupId, - String uid, - Memory memory, - String personName, - int sex, - boolean isBirthday, - String birthday, - int byIdType, - String idNo) { - // 入参 - NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB(); - stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_MODIFY; - - ///////// 使用人员扩展信息 //////// - stuIn.bUsePersonInfoEx = 1; - - // 人脸库ID - System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); - - // 人员唯一标识符 - System.arraycopy(uid.getBytes(), 0, stuIn.stPersonInfoEx.szUID, 0, uid.getBytes().length); - - // 生日设置 - if(isBirthday) { - String[] birthdays = birthday.split("-"); - - stuIn.stPersonInfoEx.wYear = (short)Integer.parseInt(birthdays[0]); - stuIn.stPersonInfoEx.byMonth = (byte)Integer.parseInt(birthdays[1]); - stuIn.stPersonInfoEx.byDay = (byte)Integer.parseInt(birthdays[2]); - } - - // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效 - stuIn.stPersonInfoEx.bySex = (byte)sex; - - // 人员名字 - try { - System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 证件类型 - stuIn.stPersonInfoEx.byIDType = (byte)byIdType; - - // 证件号 - System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length); - - // 图片张数、大小、缓存设置 - if(memory != null) { - stuIn.stPersonInfoEx.wFacePicNum = 1; // 图片张数 - stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int)memory.size(); // 图片大小 - stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0; - - stuIn.nBufferLen = (int)memory.size(); - stuIn.pBuffer = memory; - } - - // 出参 - NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB() ; - - stuIn.write(); - if(!LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000)) { - System.err.println("修改人员失败" + ToolKits.getErrorCodePrint()); - return false; - } - stuIn.read(); - - return true; - } - - /** - * 删除人员信息 - * @param groupId 人脸库ID - * @param sUID 人员唯一标识符 - */ - public static boolean delPerson(String groupId, String sUID) { - /* - * 入参 - */ - NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB(); - stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_DELETE; - - //////// 使用人员扩展信息 ////////// - stuIn.bUsePersonInfoEx = 1; - - // GroupID 赋值 - System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); - - // UID赋值 - System.arraycopy(sUID.getBytes(), 0, stuIn.stPersonInfoEx.szUID, 0, sUID.getBytes().length); - - /* - * 出参 - */ - NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB() ; - - boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000); - if(!bRet) { - System.err.println(LoginModule.netsdk.CLIENT_GetLastError()); - } - - return bRet; - } - - /** - * 下载图片, 用于修改人员信息 - * @param szFileName 需要下载的文件名 - * @param pszFileDst 存放文件路径 - */ - public static boolean downloadPersonPic(String szFileName, String pszFileDst) { - /* - * 入参 - */ - NET_IN_DOWNLOAD_REMOTE_FILE stuIn = new NET_IN_DOWNLOAD_REMOTE_FILE(); - // 需要下载的文件名 - stuIn.pszFileName = new NativeString(szFileName).getPointer(); - - // 存放文件路径 - stuIn.pszFileDst = new NativeString(pszFileDst).getPointer(); - - /* - * 出参 - */ - NET_OUT_DOWNLOAD_REMOTE_FILE stuOut = new NET_OUT_DOWNLOAD_REMOTE_FILE(); - - if(!LoginModule.netsdk.CLIENT_DownloadRemoteFile(LoginModule.m_hLoginHandle, stuIn, stuOut, 5000)) { - System.err.println("下载图片失败!" + ToolKits.getErrorCodePrint()); - return false; - } - return true; - } - - /** - * 显示/关闭规则库 - * @param m_hRealPlayHandle 实时预览 - * @param bTrue 1-打开, 0-关闭 - * @return - */ - public static void renderPrivateData(LLong m_hRealPlayHandle, int bTrue) { - if(m_hRealPlayHandle.longValue() != 0) { - LoginModule.netsdk.CLIENT_RenderPrivateData(m_hRealPlayHandle, bTrue); - } - } - - ////////////////////////// 查询事件对比记录 ///////////////////////// - private static LLong lFindHandle = new LLong(0); // 查找句柄 - - /** - * 获取查找句柄 - * @param nChn 通道号 - * @param startTime 开始时间 - * @param endTime 结束时间 - */ - public static boolean findFile(int nChn, String startTime, String endTime) { - int type = NetSDKLib.EM_FILE_QUERY_TYPE.NET_FILE_QUERY_FACE; - - /** - * 查询条件 - */ - MEDIAFILE_FACERECOGNITION_PARAM findContion = new MEDIAFILE_FACERECOGNITION_PARAM(); - - // 开始时间 - String[] starts = startTime.split(" "); - - findContion.stStartTime.dwYear = Integer.parseInt(starts[0].split("-")[0]); - findContion.stStartTime.dwMonth = Integer.parseInt(starts[0].split("-")[1]); - findContion.stStartTime.dwDay = Integer.parseInt(starts[0].split("-")[2]); - findContion.stStartTime.dwHour = Integer.parseInt(starts[1].split(":")[0]); - findContion.stStartTime.dwMinute = Integer.parseInt(starts[1].split(":")[1]); - findContion.stStartTime.dwSecond = Integer.parseInt(starts[1].split(":")[2]); - - // 结束时间 - String[] ends = endTime.split(" "); - findContion.stEndTime.dwYear = Integer.parseInt(ends[0].split("-")[0]); - findContion.stEndTime.dwMonth = Integer.parseInt(ends[0].split("-")[1]); - findContion.stEndTime.dwDay = Integer.parseInt(ends[0].split("-")[2]); - findContion.stEndTime.dwHour = Integer.parseInt(ends[1].split(":")[0]); - findContion.stEndTime.dwMinute = Integer.parseInt(ends[1].split(":")[1]); - findContion.stEndTime.dwSecond = Integer.parseInt(ends[1].split(":")[2]); - - // 通道号 - findContion.nChannelId = nChn; - - /** - * 以下注释的查询条件参数,目前设备不支持,后续会逐渐增加 - */ + } + + /** + * 结束查询 + */ + public static boolean doFindPerson() { + boolean bRet = false; + if (m_FindHandle.longValue() != 0) { + bRet = LoginModule.netsdk.CLIENT_StopFindFaceRecognition(m_FindHandle); + } + return bRet; + } + + /** + * 添加人员 + * + * @param groupId 人脸库ID + * @param memory 图片数据 + * @param personName 姓名 + * @param sex 性别 + * @param isBirthday 是否下发生日 + * @param birthday 生日 + * @param byIdType 证件类型 + * @param idNo 证件号 + * @return + */ + public static boolean addPerson(String groupId, + Memory memory, + String personName, + int sex, + boolean isBirthday, + String birthday, + int byIdType, + String idNo) { + /* + * 入参 + */ + NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB(); + stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_ADD; + + ///////// 使用人员扩展信息 ////////// + stuIn.bUsePersonInfoEx = 1; + + // 人脸库ID + System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); + + // 生日设置 + if (isBirthday) { + String[] birthdays = birthday.split("-"); + + stuIn.stPersonInfoEx.wYear = (short) Integer.parseInt(birthdays[0]); + stuIn.stPersonInfoEx.byMonth = (byte) Integer.parseInt(birthdays[1]); + stuIn.stPersonInfoEx.byDay = (byte) Integer.parseInt(birthdays[2]); + } + + // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效 + stuIn.stPersonInfoEx.bySex = (byte) sex; + + // 人员名字 + try { + System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 证件类型 + stuIn.stPersonInfoEx.byIDType = (byte) byIdType; + + // 证件号 + System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length); + + // 图片张数、大小、缓存设置 + if (memory != null) { + stuIn.stPersonInfoEx.wFacePicNum = 1; // 图片张数 + stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int) memory.size(); // 图片大小 + stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0; + + stuIn.nBufferLen = (int) memory.size(); + stuIn.pBuffer = memory; + } + + /* + * 出参 + */ + NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB(); + + stuIn.write(); + boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000); + stuIn.read(); + + if (bRet) { + System.out.println("szUID : " + new String(stuOut.szUID).trim()); + } else { + System.err.println(ToolKits.getErrorCodePrint()); + } + + return bRet; + } + + /** + * 修改人员信息 + * + * @param groupId 人脸库ID + * @param uid 人员唯一标识符 + * @param memory 图片数据 + * @param personName 姓名 + * @param sex 性别 + * @param isBirthday 是否下发生日 + * @param birthday 生日 + * @param byIdType 证件类型 + * @param idNo 证件号 + * @return true:成功 , false:失败 + */ + public static boolean modifyPerson(String groupId, + String uid, + Memory memory, + String personName, + int sex, + boolean isBirthday, + String birthday, + int byIdType, + String idNo) { + // 入参 + NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB(); + stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_MODIFY; + + ///////// 使用人员扩展信息 //////// + stuIn.bUsePersonInfoEx = 1; + + // 人脸库ID + System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); + + // 人员唯一标识符 + System.arraycopy(uid.getBytes(), 0, stuIn.stPersonInfoEx.szUID, 0, uid.getBytes().length); + + // 生日设置 + if (isBirthday) { + String[] birthdays = birthday.split("-"); + + stuIn.stPersonInfoEx.wYear = (short) Integer.parseInt(birthdays[0]); + stuIn.stPersonInfoEx.byMonth = (byte) Integer.parseInt(birthdays[1]); + stuIn.stPersonInfoEx.byDay = (byte) Integer.parseInt(birthdays[2]); + } + + // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效 + stuIn.stPersonInfoEx.bySex = (byte) sex; + + // 人员名字 + try { + System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 证件类型 + stuIn.stPersonInfoEx.byIDType = (byte) byIdType; + + // 证件号 + System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length); + + // 图片张数、大小、缓存设置 + if (memory != null) { + stuIn.stPersonInfoEx.wFacePicNum = 1; // 图片张数 + stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int) memory.size(); // 图片大小 + stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0; + + stuIn.nBufferLen = (int) memory.size(); + stuIn.pBuffer = memory; + } + + // 出参 + NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB(); + + stuIn.write(); + if (!LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000)) { + System.err.println("修改人员失败" + ToolKits.getErrorCodePrint()); + return false; + } + stuIn.read(); + + return true; + } + + /** + * 删除人员信息 + * + * @param groupId 人脸库ID + * @param sUID 人员唯一标识符 + */ + public static boolean delPerson(String groupId, String sUID) { + /* + * 入参 + */ + NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB(); + stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_DELETE; + + //////// 使用人员扩展信息 ////////// + stuIn.bUsePersonInfoEx = 1; + + // GroupID 赋值 + System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); + + // UID赋值 + System.arraycopy(sUID.getBytes(), 0, stuIn.stPersonInfoEx.szUID, 0, sUID.getBytes().length); + + /* + * 出参 + */ + NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB(); + + boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000); + if (!bRet) { + System.err.println(LoginModule.netsdk.CLIENT_GetLastError()); + } + + return bRet; + } + + /** + * 下载图片, 用于修改人员信息 + * + * @param szFileName 需要下载的文件名 + * @param pszFileDst 存放文件路径 + */ + public static boolean downloadPersonPic(String szFileName, String pszFileDst) { + /* + * 入参 + */ + NET_IN_DOWNLOAD_REMOTE_FILE stuIn = new NET_IN_DOWNLOAD_REMOTE_FILE(); + // 需要下载的文件名 + stuIn.pszFileName = new NativeString(szFileName).getPointer(); + + // 存放文件路径 + stuIn.pszFileDst = new NativeString(pszFileDst).getPointer(); + + /* + * 出参 + */ + NET_OUT_DOWNLOAD_REMOTE_FILE stuOut = new NET_OUT_DOWNLOAD_REMOTE_FILE(); + + if (!LoginModule.netsdk.CLIENT_DownloadRemoteFile(LoginModule.m_hLoginHandle, stuIn, stuOut, 5000)) { + System.err.println("下载图片失败!" + ToolKits.getErrorCodePrint()); + return false; + } + return true; + } + + /** + * 显示/关闭规则库 + * + * @param m_hRealPlayHandle 实时预览 + * @param bTrue 1-打开, 0-关闭 + * @return + */ + public static void renderPrivateData(LLong m_hRealPlayHandle, int bTrue) { + if (m_hRealPlayHandle.longValue() != 0) { + LoginModule.netsdk.CLIENT_RenderPrivateData(m_hRealPlayHandle, bTrue); + } + } + + ////////////////////////// 查询事件对比记录 ///////////////////////// + private static LLong lFindHandle = new LLong(0); // 查找句柄 + + /** + * 获取查找句柄 + * + * @param nChn 通道号 + * @param startTime 开始时间 + * @param endTime 结束时间 + */ + public static boolean findFile(int nChn, String startTime, String endTime) { + int type = NetSDKLib.EM_FILE_QUERY_TYPE.NET_FILE_QUERY_FACE; + + /** + * 查询条件 + */ + MEDIAFILE_FACERECOGNITION_PARAM findContion = new MEDIAFILE_FACERECOGNITION_PARAM(); + + // 开始时间 + String[] starts = startTime.split(" "); + + findContion.stStartTime.dwYear = Integer.parseInt(starts[0].split("-")[0]); + findContion.stStartTime.dwMonth = Integer.parseInt(starts[0].split("-")[1]); + findContion.stStartTime.dwDay = Integer.parseInt(starts[0].split("-")[2]); + findContion.stStartTime.dwHour = Integer.parseInt(starts[1].split(":")[0]); + findContion.stStartTime.dwMinute = Integer.parseInt(starts[1].split(":")[1]); + findContion.stStartTime.dwSecond = Integer.parseInt(starts[1].split(":")[2]); + + // 结束时间 + String[] ends = endTime.split(" "); + findContion.stEndTime.dwYear = Integer.parseInt(ends[0].split("-")[0]); + findContion.stEndTime.dwMonth = Integer.parseInt(ends[0].split("-")[1]); + findContion.stEndTime.dwDay = Integer.parseInt(ends[0].split("-")[2]); + findContion.stEndTime.dwHour = Integer.parseInt(ends[1].split(":")[0]); + findContion.stEndTime.dwMinute = Integer.parseInt(ends[1].split(":")[1]); + findContion.stEndTime.dwSecond = Integer.parseInt(ends[1].split(":")[2]); + + // 通道号 + findContion.nChannelId = nChn; + + /** + * 以下注释的查询条件参数,目前设备不支持,后续会逐渐增加 + */ // // 地点,支持模糊匹配 // String machineAddress = ""; // System.arraycopy(machineAddress.getBytes(), 0, findContion.szMachineAddress, 0, machineAddress.getBytes().length); // // // 待查询报警类型 // findContion.nAlarmType = EM_FACERECOGNITION_ALARM_TYPE.NET_FACERECOGNITION_ALARM_TYPE_ALL; - + // // 人员组数 // findContion.nGroupIdNum = 1; // @@ -824,57 +847,58 @@ public class FaceRecognitionModule { // // // 人员组ID(人脸库ID) // System.arraycopy(groupId.getBytes(), 0, findContion.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length); - - findContion.write(); - lFindHandle = LoginModule.netsdk.CLIENT_FindFileEx(LoginModule.m_hLoginHandle, type, findContion.getPointer(), null, 3000); - if(lFindHandle.longValue() == 0) { - System.err.println("FindFileEx Failed!" + ToolKits.getErrorCodePrint()); - return false; - } - findContion.read(); - - return true; - } - - - /** - * 查询对比数据 - * @param nFindCount 每次查询的个数 - */ - public static MEDIAFILE_FACERECOGNITION_INFO[] findNextFile(int nFindCount) { - MEDIAFILE_FACERECOGNITION_INFO[] msg = new MEDIAFILE_FACERECOGNITION_INFO[nFindCount]; - for (int i = 0; i < msg.length; ++i) { - msg[i] = new NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO(); - msg[i].bUseCandidatesEx = 1; - } - - int MemorySize = msg[0].size() * nFindCount; - Pointer pointer = new Memory(MemorySize); - pointer.clear(MemorySize); - - ToolKits.SetStructArrToPointerData(msg, pointer); - - int nRetCount = LoginModule.netsdk.CLIENT_FindNextFileEx(lFindHandle, nFindCount, pointer, MemorySize, null, 3000); - ToolKits.GetPointerDataToStructArr(pointer, msg); - - if (nRetCount <= 0) { - System.err.println("FindNextFileEx failed!" + ToolKits.getErrorCodePrint()); + + findContion.write(); + lFindHandle = LoginModule.netsdk.CLIENT_FindFileEx(LoginModule.m_hLoginHandle, type, findContion.getPointer(), null, 3000); + if (lFindHandle.longValue() == 0) { + System.err.println("FindFileEx Failed!" + ToolKits.getErrorCodePrint()); + return false; + } + findContion.read(); + + return true; + } + + + /** + * 查询对比数据 + * + * @param nFindCount 每次查询的个数 + */ + public static MEDIAFILE_FACERECOGNITION_INFO[] findNextFile(int nFindCount) { + MEDIAFILE_FACERECOGNITION_INFO[] msg = new MEDIAFILE_FACERECOGNITION_INFO[nFindCount]; + for (int i = 0; i < msg.length; ++i) { + msg[i] = new NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO(); + msg[i].bUseCandidatesEx = 1; + } + + int MemorySize = msg[0].size() * nFindCount; + Pointer pointer = new Memory(MemorySize); + pointer.clear(MemorySize); + + ToolKits.SetStructArrToPointerData(msg, pointer); + + int nRetCount = LoginModule.netsdk.CLIENT_FindNextFileEx(lFindHandle, nFindCount, pointer, MemorySize, null, 3000); + ToolKits.GetPointerDataToStructArr(pointer, msg); + + if (nRetCount <= 0) { + System.err.println("FindNextFileEx failed!" + ToolKits.getErrorCodePrint()); return null; - } - - MEDIAFILE_FACERECOGNITION_INFO[] retInfo = new MEDIAFILE_FACERECOGNITION_INFO[nRetCount]; - for (int i = 0; i < retInfo.length; ++i) { - retInfo[i] = new NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO(); - retInfo[i] = msg[i]; - } - - return retInfo; - } - - public static void findCloseFile() { - if(lFindHandle.longValue() != 0) { - LoginModule.netsdk.CLIENT_FindCloseEx(lFindHandle); - lFindHandle.setValue(0); - } - } + } + + MEDIAFILE_FACERECOGNITION_INFO[] retInfo = new MEDIAFILE_FACERECOGNITION_INFO[nRetCount]; + for (int i = 0; i < retInfo.length; ++i) { + retInfo[i] = new NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO(); + retInfo[i] = msg[i]; + } + + return retInfo; + } + + public static void findCloseFile() { + if (lFindHandle.longValue() != 0) { + LoginModule.netsdk.CLIENT_FindCloseEx(lFindHandle); + lFindHandle.setValue(0); + } + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java index cc64782..e8acde9 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java @@ -10,30 +10,31 @@ import com.sun.jna.ptr.IntByReference; public class GateModule { - // 查询句柄 - private static LLong m_lFindHandle = new LLong(0); + // 查询句柄 + private static LLong m_lFindHandle = new LLong(0); /** * 订阅实时上传智能分析数据 + * * @return */ - public static LLong realLoadPic(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB,LLong lLong) { - /** - * 说明: - * 通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取 - * 下列仅订阅了0通道的智能事件. - */ - int bNeedPicture = 1; // 是否需要图片 - LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(lLong, ChannelId, NetSDKLib.EVENT_IVS_ALL, - bNeedPicture , m_AnalyzerDataCB , null , null); - if( m_hAttachHandle.longValue() != 0 ) { - System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId); - } else { - System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint()); - return null; - } - - return m_hAttachHandle; + public static LLong realLoadPic(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB, LLong lLong) { + /** + * 说明: + * 通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取 + * 下列仅订阅了0通道的智能事件. + */ + int bNeedPicture = 1; // 是否需要图片 + LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(lLong, ChannelId, NetSDKLib.EVENT_IVS_ALL, + bNeedPicture, m_AnalyzerDataCB, null, null); + if (m_hAttachHandle.longValue() != 0) { + System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId); + } else { + System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint()); + return null; + } + + return m_hAttachHandle; } /** @@ -41,7 +42,7 @@ public class GateModule { */ public static void stopRealLoadPic(LLong m_hAttachHandle) { if (0 != m_hAttachHandle.longValue()) { - LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle); + LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle); System.out.println("Stop detach IVS event"); m_hAttachHandle.setValue(0); } @@ -49,854 +50,862 @@ public class GateModule { ////////////////////////////////////// 卡信息的增、删、改、清空 //////////////////////////////////////// - /** - * 添加卡 - * @param cardNo 卡号 - * @param userId 用户ID - * @param cardName 卡名 - * @param cardPwd 卡密码 - * @param cardStatus 卡状态 - * @param cardType 卡类型 - * @param useTimes 使用次数 - * @param isFirstEnter 是否首卡, 1-true, 0-false - * @param isValid 是否有效, 1-true, 0-false - * @param startValidTime 有效开始时间 - * @param endValidTime 有效结束时间 - * @return true:成功 false:失败 - */ - public static int insertCard(String cardNo, String userId, String cardName, String cardPwd, - int cardStatus, int cardType, int useTimes, int isFirstEnter, - int isValid, String startValidTime, String endValidTime) { - /** - * 门禁卡记录集信息 - */ - NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); - - // 卡号 - System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); - - // 用户ID - System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); - - // 卡名(设备上显示的姓名) - try { - System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 卡密码 - System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); - - //-- 设置开门权限 - accessCardInfo.nDoorNum = 2; - accessCardInfo.sznDoors[0] = 0; - accessCardInfo.sznDoors[1] = 1; - accessCardInfo.nTimeSectionNum = 2; // 与门数对应 - accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 - accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 - - // 卡状态 - accessCardInfo.emStatus = cardStatus; - - // 卡类型 - accessCardInfo.emType = cardType; - - // 使用次数 - accessCardInfo.nUserTime = useTimes; - - // 是否首卡 - accessCardInfo.bFirstEnter = isFirstEnter; - - // 是否有效 - accessCardInfo.bIsValid = isValid; - - // 有效开始时间 - String[] startTimes = startValidTime.split(" "); - accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); - accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); - accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); - accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); - accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); - accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); - - // 有效结束时间 - String[] endTimes = endValidTime.split(" "); - accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); - accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); - accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); - accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); - accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); - accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); - - /** - * 记录集操作 - */ - NET_CTRL_RECORDSET_INSERT_PARAM insert = new NET_CTRL_RECORDSET_INSERT_PARAM(); - insert.stuCtrlRecordSetInfo.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集类型 - insert.stuCtrlRecordSetInfo.pBuf = accessCardInfo.getPointer(); - - accessCardInfo.write(); - insert.write(); - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, - CtrlType.CTRLTYPE_CTRL_RECORDSET_INSERT, insert.getPointer(), 5000); - insert.read(); - accessCardInfo.read(); - - if(!bRet) { - System.err.println("添加卡信息失败." + ToolKits.getErrorCodePrint()); - return -1; - } else { - System.out.println("添加卡信息成功,卡信息记录集编号 : " + insert.stuCtrlRecordSetResult.nRecNo); - return insert.stuCtrlRecordSetResult.nRecNo; - } + /** + * 添加卡 + * + * @param cardNo 卡号 + * @param userId 用户ID + * @param cardName 卡名 + * @param cardPwd 卡密码 + * @param cardStatus 卡状态 + * @param cardType 卡类型 + * @param useTimes 使用次数 + * @param isFirstEnter 是否首卡, 1-true, 0-false + * @param isValid 是否有效, 1-true, 0-false + * @param startValidTime 有效开始时间 + * @param endValidTime 有效结束时间 + * @return true:成功 false:失败 + */ + public static int insertCard(String cardNo, String userId, String cardName, String cardPwd, + int cardStatus, int cardType, int useTimes, int isFirstEnter, + int isValid, String startValidTime, String endValidTime) { + /** + * 门禁卡记录集信息 + */ + NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); + + // 卡号 + System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); + + // 卡名(设备上显示的姓名) + try { + System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 卡密码 + System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); + + //-- 设置开门权限 + accessCardInfo.nDoorNum = 2; + accessCardInfo.sznDoors[0] = 0; + accessCardInfo.sznDoors[1] = 1; + accessCardInfo.nTimeSectionNum = 2; // 与门数对应 + accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 + accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 + + // 卡状态 + accessCardInfo.emStatus = cardStatus; + + // 卡类型 + accessCardInfo.emType = cardType; + + // 使用次数 + accessCardInfo.nUserTime = useTimes; + + // 是否首卡 + accessCardInfo.bFirstEnter = isFirstEnter; + + // 是否有效 + accessCardInfo.bIsValid = isValid; + + // 有效开始时间 + String[] startTimes = startValidTime.split(" "); + accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); + accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); + accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); + accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); + accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); + accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); + + // 有效结束时间 + String[] endTimes = endValidTime.split(" "); + accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); + accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); + accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); + accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); + accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); + accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); + + /** + * 记录集操作 + */ + NET_CTRL_RECORDSET_INSERT_PARAM insert = new NET_CTRL_RECORDSET_INSERT_PARAM(); + insert.stuCtrlRecordSetInfo.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集类型 + insert.stuCtrlRecordSetInfo.pBuf = accessCardInfo.getPointer(); + + accessCardInfo.write(); + insert.write(); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, + CtrlType.CTRLTYPE_CTRL_RECORDSET_INSERT, insert.getPointer(), 5000); + insert.read(); + accessCardInfo.read(); + + if (!bRet) { + System.err.println("添加卡信息失败." + ToolKits.getErrorCodePrint()); + return -1; + } else { + System.out.println("添加卡信息成功,卡信息记录集编号 : " + insert.stuCtrlRecordSetResult.nRecNo); + return insert.stuCtrlRecordSetResult.nRecNo; + } // return true; - } - - public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, - int cardStatus, int cardType, int useTimes, int isFirstEnter, - int isValid, String startValidTime, String endValidTime,LLong lLong) { - /** - * 门禁卡记录集信息 - */ - NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); - - // 卡号 - System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); - - // 用户ID - System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); - - // 卡名(设备上显示的姓名) - try { - System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 卡密码 - System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); - - //-- 设置开门权限 - accessCardInfo.nDoorNum = 2; - accessCardInfo.sznDoors[0] = 0; - accessCardInfo.sznDoors[1] = 1; - accessCardInfo.nTimeSectionNum = 2; // 与门数对应 - accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 - accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 - - // 卡状态 - accessCardInfo.emStatus = cardStatus; - - // 卡类型 - accessCardInfo.emType = cardType; - - // 使用次数 - accessCardInfo.nUserTime = useTimes; - - // 是否首卡 - accessCardInfo.bFirstEnter = isFirstEnter; - - // 是否有效 - accessCardInfo.bIsValid = isValid; - - // 有效开始时间 - String[] startTimes = startValidTime.split(" "); - accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); - accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); - accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); - accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); - accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); - accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); - - // 有效结束时间 - String[] endTimes = endValidTime.split(" "); - accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); - accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); - accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); - accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); - accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); - accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); - - /** - * 记录集操作 - */ - NET_CTRL_RECORDSET_INSERT_PARAM insert = new NET_CTRL_RECORDSET_INSERT_PARAM(); - insert.stuCtrlRecordSetInfo.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集类型 - insert.stuCtrlRecordSetInfo.pBuf = accessCardInfo.getPointer(); - - accessCardInfo.write(); - insert.write(); - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, - CtrlType.CTRLTYPE_CTRL_RECORDSET_INSERT, insert.getPointer(), 5000); - insert.read(); - accessCardInfo.read(); - - if(!bRet) { - System.err.println("添加卡信息失败." + ToolKits.getErrorCodePrint()); - return -1; - } else { - System.out.println("添加卡信息成功,卡信息记录集编号 : " + insert.stuCtrlRecordSetResult.nRecNo); - return insert.stuCtrlRecordSetResult.nRecNo; - } + } + + public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, + int cardStatus, int cardType, int useTimes, int isFirstEnter, + int isValid, String startValidTime, String endValidTime, LLong lLong) { + /** + * 门禁卡记录集信息 + */ + NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); + + // 卡号 + System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); + + // 卡名(设备上显示的姓名) + try { + System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 卡密码 + System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); + + //-- 设置开门权限 + accessCardInfo.nDoorNum = 2; + accessCardInfo.sznDoors[0] = 0; + accessCardInfo.sznDoors[1] = 1; + accessCardInfo.nTimeSectionNum = 2; // 与门数对应 + accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 + accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 + + // 卡状态 + accessCardInfo.emStatus = cardStatus; + + // 卡类型 + accessCardInfo.emType = cardType; + + // 使用次数 + accessCardInfo.nUserTime = useTimes; + + // 是否首卡 + accessCardInfo.bFirstEnter = isFirstEnter; + + // 是否有效 + accessCardInfo.bIsValid = isValid; + + // 有效开始时间 + String[] startTimes = startValidTime.split(" "); + accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); + accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); + accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); + accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); + accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); + accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); + + // 有效结束时间 + String[] endTimes = endValidTime.split(" "); + accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); + accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); + accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); + accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); + accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); + accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); + + /** + * 记录集操作 + */ + NET_CTRL_RECORDSET_INSERT_PARAM insert = new NET_CTRL_RECORDSET_INSERT_PARAM(); + insert.stuCtrlRecordSetInfo.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集类型 + insert.stuCtrlRecordSetInfo.pBuf = accessCardInfo.getPointer(); + + accessCardInfo.write(); + insert.write(); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, + CtrlType.CTRLTYPE_CTRL_RECORDSET_INSERT, insert.getPointer(), 5000); + insert.read(); + accessCardInfo.read(); + + if (!bRet) { + System.err.println("添加卡信息失败." + ToolKits.getErrorCodePrint()); + return -1; + } else { + System.out.println("添加卡信息成功,卡信息记录集编号 : " + insert.stuCtrlRecordSetResult.nRecNo); + return insert.stuCtrlRecordSetResult.nRecNo; + } // return true; - } - - /** - * 修改卡信息 - * @param recordNo 记录集编号 - * @param cardNo 卡号 - * @param userId 用户ID - * @param cardName 卡名 - * @param cardPwd 卡密码 - * @param cardStatus 卡状态 - * @param cardType 卡类型 - * @param useTimes 使用次数 - * @param isFirstEnter 是否首卡, 1-true, 0-false - * @param isValid 是否有效, 1-true, 0-false - * @param startValidTime 有效开始时间 - * @param endValidTime 有效结束时间 - * @return true:成功 false:失败 - */ - public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, - int cardStatus, int cardType, int useTimes, int isFirstEnter, - int isValid, String startValidTime, String endValidTime) { - /** - * 门禁卡记录集信息 - */ - NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); - // 记录集编号, 修改、删除卡信息必须填写 - accessCardInfo.nRecNo = recordNo; - - // 卡号 - System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); - - // 用户ID - System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); - - // 卡名(设备上显示的姓名) - try { - System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 卡密码 - System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); - - //-- 设置开门权限 - accessCardInfo.nDoorNum = 2; - accessCardInfo.sznDoors[0] = 0; - accessCardInfo.sznDoors[1] = 1; - accessCardInfo.nTimeSectionNum = 2; // 与门数对应 - accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 - accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 - - // 卡状态 - accessCardInfo.emStatus = cardStatus; - - // 卡类型 - accessCardInfo.emType = cardType; - - // 使用次数 - accessCardInfo.nUserTime = useTimes; - - // 是否首卡 - accessCardInfo.bFirstEnter = isFirstEnter; - - // 是否有效 - accessCardInfo.bIsValid = isValid; - - // 有效开始时间 - String[] startTimes = startValidTime.split(" "); - accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); - accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); - accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); - accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); - accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); - accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); - - // 有效结束时间 - String[] endTimes = endValidTime.split(" "); - accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); - accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); - accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); - accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); - accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); - accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); - - /** - * 记录集操作 - */ - NET_CTRL_RECORDSET_PARAM update = new NET_CTRL_RECORDSET_PARAM(); - update.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集信息类型 - update.pBuf = accessCardInfo.getPointer(); - - accessCardInfo.write(); - update.write(); - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, - CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000); - update.read(); - accessCardInfo.read(); - - if(!bRet) { - System.err.println("修改卡信息失败." + ToolKits.getErrorCodePrint()); - return false; - } else { - System.out.println("修改卡信息成功 "); - } - - return true; - } - - public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, - int cardStatus, int cardType, int useTimes, int isFirstEnter, - int isValid, String startValidTime, String endValidTime,LLong lLong) { - /** - * 门禁卡记录集信息 - */ - NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); - // 记录集编号, 修改、删除卡信息必须填写 - accessCardInfo.nRecNo = recordNo; - - // 卡号 - System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); - - // 用户ID - System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); - - // 卡名(设备上显示的姓名) - try { - System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - // 卡密码 - System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); - - //-- 设置开门权限 - accessCardInfo.nDoorNum = 2; - accessCardInfo.sznDoors[0] = 0; - accessCardInfo.sznDoors[1] = 1; - accessCardInfo.nTimeSectionNum = 2; // 与门数对应 - accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 - accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 - - // 卡状态 - accessCardInfo.emStatus = cardStatus; - - // 卡类型 - accessCardInfo.emType = cardType; - - // 使用次数 - accessCardInfo.nUserTime = useTimes; - - // 是否首卡 - accessCardInfo.bFirstEnter = isFirstEnter; - - // 是否有效 - accessCardInfo.bIsValid = isValid; - - // 有效开始时间 - String[] startTimes = startValidTime.split(" "); - accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); - accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); - accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); - accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); - accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); - accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); - - // 有效结束时间 - String[] endTimes = endValidTime.split(" "); - accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); - accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); - accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); - accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); - accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); - accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); - - /** - * 记录集操作 - */ - NET_CTRL_RECORDSET_PARAM update = new NET_CTRL_RECORDSET_PARAM(); - update.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集信息类型 - update.pBuf = accessCardInfo.getPointer(); - - accessCardInfo.write(); - update.write(); - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, - CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000); - update.read(); - accessCardInfo.read(); - - if(!bRet) { - System.err.println("修改卡信息失败." + ToolKits.getErrorCodePrint()); - return false; - } else { - System.out.println("修改卡信息成功 "); - } - - return true; - } - - /** - * 删除卡信息(单个删除) - * @param recordNo 记录集编号 - */ - public static boolean deleteCard(int recordNo) { - /** - * 记录集操作 - */ - NET_CTRL_RECORDSET_PARAM msg = new NET_CTRL_RECORDSET_PARAM(); - msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; - msg.pBuf = new IntByReference(recordNo).getPointer(); - - msg.write(); - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, - CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000); - msg.read(); - - if(!bRet){ - System.err.println("删除卡信息失败." + ToolKits.getErrorCodePrint()); - } else { - System.out.println("删除卡信息成功."); - } - - return bRet; - } - - - public static boolean deleteCard(int recordNo,LLong lLong) { - /** - * 记录集操作 - */ - NET_CTRL_RECORDSET_PARAM msg = new NET_CTRL_RECORDSET_PARAM(); - msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; - msg.pBuf = new IntByReference(recordNo).getPointer(); - - msg.write(); - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, - CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000); - msg.read(); - - if(!bRet){ - System.err.println("删除卡信息失败." + ToolKits.getErrorCodePrint()); - } else { - System.out.println("删除卡信息成功."); - } - - return bRet; - } - - /** - * 清除所有卡信息 - */ - public static boolean clearCard(LLong lLong) { - /** - * 记录集操作 - */ - NetSDKLib.NET_CTRL_RECORDSET_PARAM msg = new NetSDKLib.NET_CTRL_RECORDSET_PARAM(); - msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 门禁卡记录集信息类型 - - msg.write(); - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, - CtrlType.CTRLTYPE_CTRL_RECORDSET_CLEAR, msg.getPointer(), 5000); - msg.read(); - if(!bRet){ - System.err.println("清空卡信息失败." + ToolKits.getErrorCodePrint()); - } else { - System.out.println("清空卡信息成功."); - } - - return bRet; - } - - - ///////////////////////////////// 人脸的增、删、改、清空 /////////////////////////////////////// - - /** - * 添加人脸 - * @param userId 用户ID - * @param memory 图片缓存 - * @return - */ - public static boolean addFaceInfo(String userId, Memory memory) { - int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加 - - /** - * 入参 - */ - NET_IN_ADD_FACE_INFO stIn = new NET_IN_ADD_FACE_INFO(); - - // 用户ID - System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); - - // 人脸照片个数 - stIn.stuFaceInfo.nFacePhoto = 1; - - // 每张图片的大小 - stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); - - // 人脸照片数据,大小不超过100K, 图片格式为jpg - stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; - - /** - * 出参 - */ - NET_OUT_ADD_FACE_INFO stOut = new NET_OUT_ADD_FACE_INFO(); - - stIn.write(); - stOut.write(); - boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000); - stIn.read(); - stOut.read(); - if(bRet) { - System.out.println("添加人脸成功!"); - } else { - System.err.println("添加人脸失败!" + ToolKits.getErrorCodePrint()); - return false; - } - - return true; } - public static synchronized boolean addFaceInfo(String userId, Memory memory,LLong lLong) { - int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加 - - /** - * 入参 - */ - NET_IN_ADD_FACE_INFO stIn = new NET_IN_ADD_FACE_INFO(); - - // 用户ID - System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); - - // 人脸照片个数 - stIn.stuFaceInfo.nFacePhoto = 1; - - // 每张图片的大小 - stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); - - // 人脸照片数据,大小不超过100K, 图片格式为jpg - stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; - - /** - * 出参 - */ - NET_OUT_ADD_FACE_INFO stOut = new NET_OUT_ADD_FACE_INFO(); - - stIn.write(); - stOut.write(); - boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000); - stIn.read(); - stOut.read(); - if(bRet) { - System.out.println("添加人脸成功!"); - } else { - System.err.println("添加人脸失败!" + ToolKits.getErrorCodePrint()); - return false; - } - - return true; - } - - /** - * 修改人脸 - * @param userId 用户ID - * @param memory 图片缓存 - * @return - */ - public static boolean modifyFaceInfo(String userId, Memory memory) { - int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 - - /** - * 入参 - */ - NET_IN_UPDATE_FACE_INFO stIn = new NET_IN_UPDATE_FACE_INFO(); - - // 用户ID - System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); - - // 人脸照片个数 - stIn.stuFaceInfo.nFacePhoto = 1; - - // 每张图片的大小 - stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); - - // 人脸照片数据,大小不超过100K, 图片格式为jpg - stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; - - /** - * 出参 - */ - NET_OUT_UPDATE_FACE_INFO stOut = new NET_OUT_UPDATE_FACE_INFO(); - - stIn.write(); - stOut.write(); - boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000); - stIn.read(); - stOut.read(); - if(bRet) { - System.out.println("修改人脸成功!"); - } else { - System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint()); - return false; - } - - return true; + /** + * 修改卡信息 + * + * @param recordNo 记录集编号 + * @param cardNo 卡号 + * @param userId 用户ID + * @param cardName 卡名 + * @param cardPwd 卡密码 + * @param cardStatus 卡状态 + * @param cardType 卡类型 + * @param useTimes 使用次数 + * @param isFirstEnter 是否首卡, 1-true, 0-false + * @param isValid 是否有效, 1-true, 0-false + * @param startValidTime 有效开始时间 + * @param endValidTime 有效结束时间 + * @return true:成功 false:失败 + */ + public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, + int cardStatus, int cardType, int useTimes, int isFirstEnter, + int isValid, String startValidTime, String endValidTime) { + /** + * 门禁卡记录集信息 + */ + NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); + // 记录集编号, 修改、删除卡信息必须填写 + accessCardInfo.nRecNo = recordNo; + + // 卡号 + System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); + + // 卡名(设备上显示的姓名) + try { + System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 卡密码 + System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); + + //-- 设置开门权限 + accessCardInfo.nDoorNum = 2; + accessCardInfo.sznDoors[0] = 0; + accessCardInfo.sznDoors[1] = 1; + accessCardInfo.nTimeSectionNum = 2; // 与门数对应 + accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 + accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 + + // 卡状态 + accessCardInfo.emStatus = cardStatus; + + // 卡类型 + accessCardInfo.emType = cardType; + + // 使用次数 + accessCardInfo.nUserTime = useTimes; + + // 是否首卡 + accessCardInfo.bFirstEnter = isFirstEnter; + + // 是否有效 + accessCardInfo.bIsValid = isValid; + + // 有效开始时间 + String[] startTimes = startValidTime.split(" "); + accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); + accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); + accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); + accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); + accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); + accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); + + // 有效结束时间 + String[] endTimes = endValidTime.split(" "); + accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); + accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); + accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); + accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); + accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); + accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); + + /** + * 记录集操作 + */ + NET_CTRL_RECORDSET_PARAM update = new NET_CTRL_RECORDSET_PARAM(); + update.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集信息类型 + update.pBuf = accessCardInfo.getPointer(); + + accessCardInfo.write(); + update.write(); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, + CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000); + update.read(); + accessCardInfo.read(); + + if (!bRet) { + System.err.println("修改卡信息失败." + ToolKits.getErrorCodePrint()); + return false; + } else { + System.out.println("修改卡信息成功 "); + } + + return true; + } + + public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, + int cardStatus, int cardType, int useTimes, int isFirstEnter, + int isValid, String startValidTime, String endValidTime, LLong lLong) { + /** + * 门禁卡记录集信息 + */ + NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); + // 记录集编号, 修改、删除卡信息必须填写 + accessCardInfo.nRecNo = recordNo; + + // 卡号 + System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); + + // 卡名(设备上显示的姓名) + try { + System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + // 卡密码 + System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); + + //-- 设置开门权限 + accessCardInfo.nDoorNum = 2; + accessCardInfo.sznDoors[0] = 0; + accessCardInfo.sznDoors[1] = 1; + accessCardInfo.nTimeSectionNum = 2; // 与门数对应 + accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 + accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 + + // 卡状态 + accessCardInfo.emStatus = cardStatus; + + // 卡类型 + accessCardInfo.emType = cardType; + + // 使用次数 + accessCardInfo.nUserTime = useTimes; + + // 是否首卡 + accessCardInfo.bFirstEnter = isFirstEnter; + + // 是否有效 + accessCardInfo.bIsValid = isValid; + + // 有效开始时间 + String[] startTimes = startValidTime.split(" "); + accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); + accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); + accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); + accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); + accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); + accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); + + // 有效结束时间 + String[] endTimes = endValidTime.split(" "); + accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); + accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); + accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); + accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); + accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); + accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); + + /** + * 记录集操作 + */ + NET_CTRL_RECORDSET_PARAM update = new NET_CTRL_RECORDSET_PARAM(); + update.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集信息类型 + update.pBuf = accessCardInfo.getPointer(); + + accessCardInfo.write(); + update.write(); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, + CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000); + update.read(); + accessCardInfo.read(); + + if (!bRet) { + System.err.println("修改卡信息失败." + ToolKits.getErrorCodePrint()); + return false; + } else { + System.out.println("修改卡信息成功 "); + } + + return true; + } + + /** + * 删除卡信息(单个删除) + * + * @param recordNo 记录集编号 + */ + public static boolean deleteCard(int recordNo) { + /** + * 记录集操作 + */ + NET_CTRL_RECORDSET_PARAM msg = new NET_CTRL_RECORDSET_PARAM(); + msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; + msg.pBuf = new IntByReference(recordNo).getPointer(); + + msg.write(); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, + CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000); + msg.read(); + + if (!bRet) { + System.err.println("删除卡信息失败." + ToolKits.getErrorCodePrint()); + } else { + System.out.println("删除卡信息成功."); + } + + return bRet; } - public static boolean modifyFaceInfo(String userId, Memory memory,LLong lLong) { - int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 + public static boolean deleteCard(int recordNo, LLong lLong) { + /** + * 记录集操作 + */ + NET_CTRL_RECORDSET_PARAM msg = new NET_CTRL_RECORDSET_PARAM(); + msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; + msg.pBuf = new IntByReference(recordNo).getPointer(); - /** - * 入参 - */ - NET_IN_UPDATE_FACE_INFO stIn = new NET_IN_UPDATE_FACE_INFO(); + msg.write(); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, + CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000); + msg.read(); - // 用户ID - System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); + if (!bRet) { + System.err.println("删除卡信息失败." + ToolKits.getErrorCodePrint()); + } else { + System.out.println("删除卡信息成功."); + } - // 人脸照片个数 - stIn.stuFaceInfo.nFacePhoto = 1; + return bRet; + } - // 每张图片的大小 - stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); + /** + * 清除所有卡信息 + */ + public static boolean clearCard(LLong lLong) { + /** + * 记录集操作 + */ + NetSDKLib.NET_CTRL_RECORDSET_PARAM msg = new NetSDKLib.NET_CTRL_RECORDSET_PARAM(); + msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 门禁卡记录集信息类型 + + msg.write(); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, + CtrlType.CTRLTYPE_CTRL_RECORDSET_CLEAR, msg.getPointer(), 5000); + msg.read(); + if (!bRet) { + System.err.println("清空卡信息失败." + ToolKits.getErrorCodePrint()); + } else { + System.out.println("清空卡信息成功."); + } + + return bRet; + } - // 人脸照片数据,大小不超过100K, 图片格式为jpg - stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; - /** - * 出参 - */ - NET_OUT_UPDATE_FACE_INFO stOut = new NET_OUT_UPDATE_FACE_INFO(); + ///////////////////////////////// 人脸的增、删、改、清空 /////////////////////////////////////// - stIn.write(); - stOut.write(); - boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000); - stIn.read(); - stOut.read(); - if(bRet) { - System.out.println("修改人脸成功!"); - } else { - System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint()); - return false; - } + /** + * 添加人脸 + * + * @param userId 用户ID + * @param memory 图片缓存 + * @return + */ + public static boolean addFaceInfo(String userId, Memory memory) { + int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加 + + /** + * 入参 + */ + NET_IN_ADD_FACE_INFO stIn = new NET_IN_ADD_FACE_INFO(); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); + + // 人脸照片个数 + stIn.stuFaceInfo.nFacePhoto = 1; + + // 每张图片的大小 + stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); + + // 人脸照片数据,大小不超过100K, 图片格式为jpg + stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; + + /** + * 出参 + */ + NET_OUT_ADD_FACE_INFO stOut = new NET_OUT_ADD_FACE_INFO(); + + stIn.write(); + stOut.write(); + boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000); + stIn.read(); + stOut.read(); + if (bRet) { + System.out.println("添加人脸成功!"); + } else { + System.err.println("添加人脸失败!" + ToolKits.getErrorCodePrint()); + return false; + } - return true; - } + return true; + } + + public static synchronized boolean addFaceInfo(String userId, Memory memory, LLong lLong) { + int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加 + + /** + * 入参 + */ + NET_IN_ADD_FACE_INFO stIn = new NET_IN_ADD_FACE_INFO(); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); + + // 人脸照片个数 + stIn.stuFaceInfo.nFacePhoto = 1; + + // 每张图片的大小 + stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); + + // 人脸照片数据,大小不超过100K, 图片格式为jpg + stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; + + /** + * 出参 + */ + NET_OUT_ADD_FACE_INFO stOut = new NET_OUT_ADD_FACE_INFO(); + + stIn.write(); + stOut.write(); + boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000); + stIn.read(); + stOut.read(); + if (bRet) { + System.out.println("添加人脸成功!"); + } else { + System.err.println("添加人脸失败!" + ToolKits.getErrorCodePrint()); + return false; + } + + return true; + } - /** - * 删除人脸(单个删除) - * @param userId 用户ID - */ + /** + * 修改人脸 + * + * @param userId 用户ID + * @param memory 图片缓存 + * @return + */ + public static boolean modifyFaceInfo(String userId, Memory memory) { + int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 + + /** + * 入参 + */ + NET_IN_UPDATE_FACE_INFO stIn = new NET_IN_UPDATE_FACE_INFO(); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); + + // 人脸照片个数 + stIn.stuFaceInfo.nFacePhoto = 1; + + // 每张图片的大小 + stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); + + // 人脸照片数据,大小不超过100K, 图片格式为jpg + stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; + + /** + * 出参 + */ + NET_OUT_UPDATE_FACE_INFO stOut = new NET_OUT_UPDATE_FACE_INFO(); + + stIn.write(); + stOut.write(); + boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000); + stIn.read(); + stOut.read(); + if (bRet) { + System.out.println("修改人脸成功!"); + } else { + System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint()); + return false; + } + + return true; + } + + + public static boolean modifyFaceInfo(String userId, Memory memory, LLong lLong) { + int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 + + /** + * 入参 + */ + NET_IN_UPDATE_FACE_INFO stIn = new NET_IN_UPDATE_FACE_INFO(); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); + + // 人脸照片个数 + stIn.stuFaceInfo.nFacePhoto = 1; + + // 每张图片的大小 + stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); + + // 人脸照片数据,大小不超过100K, 图片格式为jpg + stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; + + /** + * 出参 + */ + NET_OUT_UPDATE_FACE_INFO stOut = new NET_OUT_UPDATE_FACE_INFO(); + + stIn.write(); + stOut.write(); + boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000); + stIn.read(); + stOut.read(); + if (bRet) { + System.out.println("修改人脸成功!"); + } else { + System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint()); + return false; + } + + return true; + } + + /** + * 删除人脸(单个删除) + * + * @param userId 用户ID + */ public static boolean deleteFaceInfo(String userId) { - int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_REMOVE; - - /** - * 入参 - */ - NET_IN_REMOVE_FACE_INFO inRemove = new NET_IN_REMOVE_FACE_INFO(); - - // 用户ID - System.arraycopy(userId.getBytes(), 0, inRemove.szUserID, 0, userId.getBytes().length); - - /** - * 出参 - */ - NET_OUT_REMOVE_FACE_INFO outRemove = new NET_OUT_REMOVE_FACE_INFO(); - - inRemove.write(); - outRemove.write(); - boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, inRemove.getPointer(), outRemove.getPointer(), 5000); - inRemove.read(); - outRemove.read(); - if(bRet) { - System.out.println("删除人脸成功!"); - } else { - System.err.println("删除人脸失败!" + ToolKits.getErrorCodePrint()); - } - - return bRet; + int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_REMOVE; + + /** + * 入参 + */ + NET_IN_REMOVE_FACE_INFO inRemove = new NET_IN_REMOVE_FACE_INFO(); + + // 用户ID + System.arraycopy(userId.getBytes(), 0, inRemove.szUserID, 0, userId.getBytes().length); + + /** + * 出参 + */ + NET_OUT_REMOVE_FACE_INFO outRemove = new NET_OUT_REMOVE_FACE_INFO(); + + inRemove.write(); + outRemove.write(); + boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, inRemove.getPointer(), outRemove.getPointer(), 5000); + inRemove.read(); + outRemove.read(); + if (bRet) { + System.out.println("删除人脸成功!"); + } else { + System.err.println("删除人脸失败!" + ToolKits.getErrorCodePrint()); + } + + return bRet; } - /** - * 清除所有人脸 - */ + /** + * 清除所有人脸 + */ public static boolean clearFaceInfo(LLong lLong) { - int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_CLEAR; // 清除 - - /** - * 入参 - */ - NET_IN_CLEAR_FACE_INFO stIn = new NET_IN_CLEAR_FACE_INFO(); - - /** - * 出参 - */ - NET_OUT_REMOVE_FACE_INFO stOut = new NET_OUT_REMOVE_FACE_INFO(); - - stIn.write(); - stOut.write(); - boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, - stIn.getPointer(), stOut.getPointer(), 5000); - stIn.read(); - stOut.read(); - if(bRet) { - System.out.println("清空人脸成功!"); - } else { - System.err.println("清空人脸失败!" + ToolKits.getErrorCodePrint()); - } - - return bRet; + int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_CLEAR; // 清除 + + /** + * 入参 + */ + NET_IN_CLEAR_FACE_INFO stIn = new NET_IN_CLEAR_FACE_INFO(); + + /** + * 出参 + */ + NET_OUT_REMOVE_FACE_INFO stOut = new NET_OUT_REMOVE_FACE_INFO(); + + stIn.write(); + stOut.write(); + boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, + stIn.getPointer(), stOut.getPointer(), 5000); + stIn.read(); + stOut.read(); + if (bRet) { + System.out.println("清空人脸成功!"); + } else { + System.err.println("清空人脸失败!" + ToolKits.getErrorCodePrint()); + } + + return bRet; } /** * 查询卡信息,获取查询句柄 + * * @param cardNo 卡号,为空,查询所有的 * @return */ public static boolean findCard(String cardNo) { - /** - * 查询条件 - */ - NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION findCondition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION(); - - if(!cardNo.isEmpty()) { - // 卡号查询条件是否有效 - findCondition.abCardNo = 1; - - // 卡号 - System.arraycopy(cardNo.getBytes(), 0, findCondition.szCardNo, 0, cardNo.getBytes().length); - } - - /** - * CLIENT_FindRecord 接口入参 - */ - NetSDKLib.NET_IN_FIND_RECORD_PARAM stIn = new NetSDKLib.NET_IN_FIND_RECORD_PARAM(); - stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; - if(!cardNo.isEmpty()) { - stIn.pQueryCondition = findCondition.getPointer(); - } - - /** - * CLIENT_FindRecord 接口出参 - */ - NetSDKLib.NET_OUT_FIND_RECORD_PARAM stOut = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM(); - - findCondition.write(); - if(!LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle, stIn, stOut, 5000)) { - System.err.println("没查到卡信息!" + ToolKits.getErrorCodePrint()); - return false; - } - findCondition.read(); - - m_lFindHandle = stOut.lFindeHandle; - return true; + /** + * 查询条件 + */ + NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION findCondition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION(); + + if (!cardNo.isEmpty()) { + // 卡号查询条件是否有效 + findCondition.abCardNo = 1; + + // 卡号 + System.arraycopy(cardNo.getBytes(), 0, findCondition.szCardNo, 0, cardNo.getBytes().length); + } + + /** + * CLIENT_FindRecord 接口入参 + */ + NetSDKLib.NET_IN_FIND_RECORD_PARAM stIn = new NetSDKLib.NET_IN_FIND_RECORD_PARAM(); + stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; + if (!cardNo.isEmpty()) { + stIn.pQueryCondition = findCondition.getPointer(); + } + + /** + * CLIENT_FindRecord 接口出参 + */ + NetSDKLib.NET_OUT_FIND_RECORD_PARAM stOut = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM(); + + findCondition.write(); + if (!LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle, stIn, stOut, 5000)) { + System.err.println("没查到卡信息!" + ToolKits.getErrorCodePrint()); + return false; + } + findCondition.read(); + + m_lFindHandle = stOut.lFindeHandle; + return true; } - public static boolean findCard(String cardNo,LLong lLong) { - /** - * 查询条件 - */ - NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION findCondition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION(); + public static boolean findCard(String cardNo, LLong lLong) { + /** + * 查询条件 + */ + NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION findCondition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION(); - if(!cardNo.isEmpty()) { - // 卡号查询条件是否有效 - findCondition.abCardNo = 1; + if (!cardNo.isEmpty()) { + // 卡号查询条件是否有效 + findCondition.abCardNo = 1; - // 卡号 - System.arraycopy(cardNo.getBytes(), 0, findCondition.szCardNo, 0, cardNo.getBytes().length); - } + // 卡号 + System.arraycopy(cardNo.getBytes(), 0, findCondition.szCardNo, 0, cardNo.getBytes().length); + } - /** - * CLIENT_FindRecord 接口入参 - */ - NetSDKLib.NET_IN_FIND_RECORD_PARAM stIn = new NetSDKLib.NET_IN_FIND_RECORD_PARAM(); - stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; - if(!cardNo.isEmpty()) { - stIn.pQueryCondition = findCondition.getPointer(); - } + /** + * CLIENT_FindRecord 接口入参 + */ + NetSDKLib.NET_IN_FIND_RECORD_PARAM stIn = new NetSDKLib.NET_IN_FIND_RECORD_PARAM(); + stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; + if (!cardNo.isEmpty()) { + stIn.pQueryCondition = findCondition.getPointer(); + } - /** - * CLIENT_FindRecord 接口出参 - */ - NetSDKLib.NET_OUT_FIND_RECORD_PARAM stOut = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM(); + /** + * CLIENT_FindRecord 接口出参 + */ + NetSDKLib.NET_OUT_FIND_RECORD_PARAM stOut = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM(); - findCondition.write(); - if(!LoginModule.netsdk.CLIENT_FindRecord(lLong, stIn, stOut, 5000)) { - System.err.println("没查到卡信息!" + ToolKits.getErrorCodePrint()); - return false; - } - findCondition.read(); + findCondition.write(); + if (!LoginModule.netsdk.CLIENT_FindRecord(lLong, stIn, stOut, 5000)) { + System.err.println("没查到卡信息!" + ToolKits.getErrorCodePrint()); + return false; + } + findCondition.read(); - m_lFindHandle = stOut.lFindeHandle; + m_lFindHandle = stOut.lFindeHandle; - System.err.println("没查到卡信息!" + ToolKits.getErrorCodePrint()); + System.err.println("没查到卡信息!" + ToolKits.getErrorCodePrint()); - return true; - } + return true; + } /** * 查询具体的卡信息 + * * @param nFindCount 每次查询的个数 * @return 返回具体的查询信息 */ public static NET_RECORDSET_ACCESS_CTL_CARD[] findNextCard(int nFindCount) { - // 用于申请内存 - NET_RECORDSET_ACCESS_CTL_CARD[] pstRecord = new NET_RECORDSET_ACCESS_CTL_CARD[nFindCount]; - for(int i = 0; i < nFindCount; i++) { - pstRecord[i] = new NET_RECORDSET_ACCESS_CTL_CARD(); - } - - /** - * CLIENT_FindNextRecord 接口入参 - */ - NET_IN_FIND_NEXT_RECORD_PARAM stNextIn = new NET_IN_FIND_NEXT_RECORD_PARAM(); - stNextIn.lFindeHandle = m_lFindHandle; - stNextIn.nFileCount = nFindCount; //想查询的记录条数 - - /** - * CLIENT_FindNextRecord 接口出参 - */ - NET_OUT_FIND_NEXT_RECORD_PARAM stNextOut = new NET_OUT_FIND_NEXT_RECORD_PARAM(); - stNextOut.nMaxRecordNum = nFindCount; - stNextOut.pRecordList = new Memory(pstRecord[0].dwSize * nFindCount); // 申请内存 - stNextOut.pRecordList.clear(pstRecord[0].dwSize * nFindCount); - - ToolKits.SetStructArrToPointerData(pstRecord, stNextOut.pRecordList); // 将数组内存拷贝给指针 - - if(LoginModule.netsdk.CLIENT_FindNextRecord(stNextIn, stNextOut, 5000)) { - if(stNextOut.nRetRecordNum == 0) { - return null; - } - - ToolKits.GetPointerDataToStructArr(stNextOut.pRecordList, pstRecord); // 获取卡信息 - - // 获取有用的信息 - NET_RECORDSET_ACCESS_CTL_CARD[] pstRecordEx = new NET_RECORDSET_ACCESS_CTL_CARD[stNextOut.nRetRecordNum]; - for(int i = 0; i < stNextOut.nRetRecordNum; i++) { - pstRecordEx[i] = new NET_RECORDSET_ACCESS_CTL_CARD(); - pstRecordEx[i] = pstRecord[i]; - } - - return pstRecordEx; - } - - return null; + // 用于申请内存 + NET_RECORDSET_ACCESS_CTL_CARD[] pstRecord = new NET_RECORDSET_ACCESS_CTL_CARD[nFindCount]; + for (int i = 0; i < nFindCount; i++) { + pstRecord[i] = new NET_RECORDSET_ACCESS_CTL_CARD(); + } + + /** + * CLIENT_FindNextRecord 接口入参 + */ + NET_IN_FIND_NEXT_RECORD_PARAM stNextIn = new NET_IN_FIND_NEXT_RECORD_PARAM(); + stNextIn.lFindeHandle = m_lFindHandle; + stNextIn.nFileCount = nFindCount; //想查询的记录条数 + + /** + * CLIENT_FindNextRecord 接口出参 + */ + NET_OUT_FIND_NEXT_RECORD_PARAM stNextOut = new NET_OUT_FIND_NEXT_RECORD_PARAM(); + stNextOut.nMaxRecordNum = nFindCount; + stNextOut.pRecordList = new Memory(pstRecord[0].dwSize * nFindCount); // 申请内存 + stNextOut.pRecordList.clear(pstRecord[0].dwSize * nFindCount); + + ToolKits.SetStructArrToPointerData(pstRecord, stNextOut.pRecordList); // 将数组内存拷贝给指针 + + if (LoginModule.netsdk.CLIENT_FindNextRecord(stNextIn, stNextOut, 5000)) { + if (stNextOut.nRetRecordNum == 0) { + return null; + } + + ToolKits.GetPointerDataToStructArr(stNextOut.pRecordList, pstRecord); // 获取卡信息 + + // 获取有用的信息 + NET_RECORDSET_ACCESS_CTL_CARD[] pstRecordEx = new NET_RECORDSET_ACCESS_CTL_CARD[stNextOut.nRetRecordNum]; + for (int i = 0; i < stNextOut.nRetRecordNum; i++) { + pstRecordEx[i] = new NET_RECORDSET_ACCESS_CTL_CARD(); + pstRecordEx[i] = pstRecord[i]; + } + + return pstRecordEx; + } + + return null; } /** * 关闭查询 */ public static void findCardClose() { - if(m_lFindHandle.longValue() != 0) { - LoginModule.netsdk.CLIENT_FindRecordClose(m_lFindHandle); - m_lFindHandle.setValue(0); - } + if (m_lFindHandle.longValue() != 0) { + LoginModule.netsdk.CLIENT_FindRecordClose(m_lFindHandle); + m_lFindHandle.setValue(0); + } } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/LoginModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/LoginModule.java index 057795d..a66f461 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/LoginModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/LoginModule.java @@ -15,122 +15,122 @@ import com.sun.jna.ptr.IntByReference; */ public class LoginModule { - public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; - public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE; - - // 设备信息 - public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); - - // 登陆句柄 - public static LLong m_hLoginHandle = new LLong(0); - - private static boolean bInit = false; - private static boolean bLogopen = false; - - /** - * \if ENGLISH_LANG - * Init - * \else - * 初始化 - * \endif - */ - public static boolean init(NetSDKLib.fDisConnect disConnect, NetSDKLib.fHaveReConnect haveReConnect) { - bInit = netsdk.CLIENT_Init(disConnect, null); - if(!bInit) { - System.out.println("Initialize SDK failed"); - return false; - } - - //打开日志,可选 - NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO(); + public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; + public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE; + + // 设备信息 + public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); + + // 登陆句柄 + public static LLong m_hLoginHandle = new LLong(0); + + private static boolean bInit = false; + private static boolean bLogopen = false; + + /** + * \if ENGLISH_LANG + * Init + * \else + * 初始化 + * \endif + */ + public static boolean init(NetSDKLib.fDisConnect disConnect, NetSDKLib.fHaveReConnect haveReConnect) { + bInit = netsdk.CLIENT_Init(disConnect, null); + if (!bInit) { + System.out.println("Initialize SDK failed"); + return false; + } + + //打开日志,可选 + NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO(); File path = new File("./sdklog/"); if (!path.exists()) { path.mkdir(); } - String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + ToolKits.getDate() + ".log"; - setLog.nPrintStrategy = 0; - setLog.bSetFilePath = 1; - System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length); - System.out.println(logPath); - setLog.bSetPrintStrategy = 1; - bLogopen = netsdk.CLIENT_LogOpen(setLog); - if(!bLogopen ) { - System.err.println("Failed to open NetSDK log"); - } - - // 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作 - // 此操作为可选操作,但建议用户进行设置 - netsdk.CLIENT_SetAutoReconnect(haveReConnect, null); - - //设置登录超时时间和尝试次数,可选 - int waitTime = 5000; //登录请求响应超时时间设置为5S - int tryTimes = 1; //登录时尝试建立链接1次 - netsdk.CLIENT_SetConnectTime(waitTime, tryTimes); - - // 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime - // 接口设置的登录设备超时时间和尝试次数意义相同,可选 - NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM(); - netParam.nConnectTime = 10000; // 登录时尝试建立链接的超时时间 - netParam.nGetConnInfoTime = 3000; // 设置子连接的超时时间 - netsdk.CLIENT_SetNetworkParam(netParam); - - return true; - } - - /** - * \if ENGLISH_LANG - * CleanUp - * \else - * 清除环境 - * \endif - */ - public static void cleanup() { - if(bLogopen) { - netsdk.CLIENT_LogClose(); - } - - if(bInit) { - netsdk.CLIENT_Cleanup(); - } - } - - /** - * \if ENGLISH_LANG - * Login Device - * \else - * 登录设备 - * \endif - */ - public static boolean login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { - IntByReference nError = new IntByReference(0); - - m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, m_stDeviceInfo, nError); - if(m_hLoginHandle.longValue() == 0) { - System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort, ToolKits.getErrorCodePrint()); - } else { - System.out.println("Login Success [ " + m_strIp + " ]"); - } - - return m_hLoginHandle.longValue() == 0? false:true; - } - - /** - * \if ENGLISH_LANG - * Logout Device - * \else - * 登出设备 - * \endif - */ - public static boolean logout() { - if(m_hLoginHandle.longValue() == 0) { - return false; - } - - boolean bRet = netsdk.CLIENT_Logout(m_hLoginHandle); - if(bRet) { - m_hLoginHandle.setValue(0); - } - - return bRet; - } + String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + ToolKits.getDate() + ".log"; + setLog.nPrintStrategy = 0; + setLog.bSetFilePath = 1; + System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length); + System.out.println(logPath); + setLog.bSetPrintStrategy = 1; + bLogopen = netsdk.CLIENT_LogOpen(setLog); + if (!bLogopen) { + System.err.println("Failed to open NetSDK log"); + } + + // 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作 + // 此操作为可选操作,但建议用户进行设置 + netsdk.CLIENT_SetAutoReconnect(haveReConnect, null); + + //设置登录超时时间和尝试次数,可选 + int waitTime = 5000; //登录请求响应超时时间设置为5S + int tryTimes = 1; //登录时尝试建立链接1次 + netsdk.CLIENT_SetConnectTime(waitTime, tryTimes); + + // 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime + // 接口设置的登录设备超时时间和尝试次数意义相同,可选 + NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM(); + netParam.nConnectTime = 10000; // 登录时尝试建立链接的超时时间 + netParam.nGetConnInfoTime = 3000; // 设置子连接的超时时间 + netsdk.CLIENT_SetNetworkParam(netParam); + + return true; + } + + /** + * \if ENGLISH_LANG + * CleanUp + * \else + * 清除环境 + * \endif + */ + public static void cleanup() { + if (bLogopen) { + netsdk.CLIENT_LogClose(); + } + + if (bInit) { + netsdk.CLIENT_Cleanup(); + } + } + + /** + * \if ENGLISH_LANG + * Login Device + * \else + * 登录设备 + * \endif + */ + public static boolean login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { + IntByReference nError = new IntByReference(0); + + m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, m_stDeviceInfo, nError); + if (m_hLoginHandle.longValue() == 0) { + System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort, ToolKits.getErrorCodePrint()); + } else { + System.out.println("Login Success [ " + m_strIp + " ]"); + } + + return m_hLoginHandle.longValue() == 0 ? false : true; + } + + /** + * \if ENGLISH_LANG + * Logout Device + * \else + * 登出设备 + * \endif + */ + public static boolean logout() { + if (m_hLoginHandle.longValue() == 0) { + return false; + } + + boolean bRet = netsdk.CLIENT_Logout(m_hLoginHandle); + if (bRet) { + m_hLoginHandle.setValue(0); + } + + return bRet; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/RealPlayModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/RealPlayModule.java index 00cf146..1cb08ac 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/RealPlayModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/RealPlayModule.java @@ -12,41 +12,41 @@ import com.sun.jna.Native; * 实时预览接口实现 * 主要有 :开始拉流、停止拉流功能 */ -public class RealPlayModule { - /** - * \if ENGLISH_LANG - * Start RealPlay - * \else - * 开始预览 - * \endif - */ - public static NetSDKLib.LLong startRealPlay(int channel, int stream, Panel realPlayWindow) { - LLong m_hPlayHandle = LoginModule.netsdk.CLIENT_RealPlayEx(LoginModule.m_hLoginHandle, channel, Native.getComponentPointer(realPlayWindow), stream); - - if(m_hPlayHandle.longValue() == 0) { - System.err.println("开始实时监视失败,错误码" + ToolKits.getErrorCodePrint()); - } else { - System.out.println("Success to start realplay"); - } - - return m_hPlayHandle; - } - - /** - * \if ENGLISH_LANG - * Start RealPlay - * \else - * 停止预览 - * \endif - */ - public static void stopRealPlay(LLong m_hPlayHandle) { - if(m_hPlayHandle.longValue() == 0) { - return; - } - - boolean bRet = LoginModule.netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle); - if(bRet) { - m_hPlayHandle.setValue(0); - } - } +public class RealPlayModule { + /** + * \if ENGLISH_LANG + * Start RealPlay + * \else + * 开始预览 + * \endif + */ + public static NetSDKLib.LLong startRealPlay(int channel, int stream, Panel realPlayWindow) { + LLong m_hPlayHandle = LoginModule.netsdk.CLIENT_RealPlayEx(LoginModule.m_hLoginHandle, channel, Native.getComponentPointer(realPlayWindow), stream); + + if (m_hPlayHandle.longValue() == 0) { + System.err.println("开始实时监视失败,错误码" + ToolKits.getErrorCodePrint()); + } else { + System.out.println("Success to start realplay"); + } + + return m_hPlayHandle; + } + + /** + * \if ENGLISH_LANG + * Start RealPlay + * \else + * 停止预览 + * \endif + */ + public static void stopRealPlay(LLong m_hPlayHandle) { + if (m_hPlayHandle.longValue() == 0) { + return; + } + + boolean bRet = LoginModule.netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle); + if (bRet) { + m_hPlayHandle.setValue(0); + } + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/SearchByPictureModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/SearchByPictureModule.java index 1e00251..ea80343 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/SearchByPictureModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/SearchByPictureModule.java @@ -12,198 +12,202 @@ import com.sun.jna.ptr.IntByReference; * 目前只支持IVSS */ public class SearchByPictureModule { - // 查询密令 - public static int nToken = 0; - - private static NetSDKLib.LLong m_FindHandle = null; - - // 订阅句柄 - private static LLong attachFaceHandle = new LLong(0); - - /** - * 按条件查询人脸识别结果 - * @param memory 图片缓存 - * @param startTime 起始时间, 历史库需要时间,人脸库不需要时间 - * @param endTime 结束时间, 历史库需要时间,人脸库不需要时间 - * @param isHistory 是否是历史库, true-历史库; false-人脸库 - * @param nChn 通道号, 历史库需要通道号,人脸库不需要通道号 - * @param similary 相似度 - * @return 查询到的所有人员个数 - */ - public static int startFindPerson(Memory memory, - String startTime, - String endTime, - boolean isHistory, - int nChn, - String similary) { - - m_FindHandle = null; - nToken = 0; - int nTotalCount = 0; - - /* - * 入参, IVVS设备,查询条件只有 stuInStartFind.stPerson 里的参数有效 - */ - NET_IN_STARTFIND_FACERECONGNITION stuIn = new NET_IN_STARTFIND_FACERECONGNITION(); - - // 人员信息查询条件是否有效, 并使用扩展结构体 - stuIn.bPersonExEnable = 1; - - // 图片信息 - if(memory != null) { - stuIn.pBuffer = memory; - stuIn.nBufferLen = (int)memory.size(); - stuIn.stPersonInfoEx.wFacePicNum = 1; - stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0; - stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int)memory.size(); - } - - // 相似度 - if(!similary.isEmpty()) { - stuIn.stMatchOptions.nSimilarity = Integer.parseInt(similary); - } - - stuIn.stFilterInfo.nGroupIdNum = 0; - stuIn.stFilterInfo.nRangeNum = 1; - - if(isHistory) { // 历史库 - // 通道号 - stuIn.nChannelID = nChn; - stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_HISTORY; // 待查询数据库类型,设备只支持一个 - // 开始时间 - String[] startTimeStr = startTime.split("-"); - stuIn.stFilterInfo.stStartTime.dwYear = Integer.parseInt(startTimeStr[0]); - stuIn.stFilterInfo.stStartTime.dwMonth = Integer.parseInt(startTimeStr[1]); - stuIn.stFilterInfo.stStartTime.dwDay = Integer.parseInt(startTimeStr[2]); - - // 结束时间 - String[] endTimeStr = endTime.split("-"); - stuIn.stFilterInfo.stEndTime.dwYear = Integer.parseInt(endTimeStr[0]); - stuIn.stFilterInfo.stEndTime.dwMonth = Integer.parseInt(endTimeStr[1]); - stuIn.stFilterInfo.stEndTime.dwDay = Integer.parseInt(endTimeStr[2]); - stuIn.stFilterInfo.emFaceType = EM_FACERECOGNITION_FACE_TYPE.EM_FACERECOGNITION_FACE_TYPE_ALL; - } else { // 人脸库 - stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_BLACKLIST; // 待查询数据库类型,设备只支持一个 - } - - /* - * 出参 - */ - NET_OUT_STARTFIND_FACERECONGNITION stuOut = new NET_OUT_STARTFIND_FACERECONGNITION(); - stuIn.write(); - stuOut.write(); - if(LoginModule.netsdk.CLIENT_StartFindFaceRecognition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) { - m_FindHandle = stuOut.lFindHandle; - nTotalCount = stuOut.nTotalCount; - nToken = stuOut.nToken; - } else { - System.out.println("CLIENT_StartFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint()); - } - - return nTotalCount; - } - - /** - * 查找人脸识别结果 - * @param beginNum 查询起始序号 - * @param nCount 当前想查询的记录条数 - * @return 返回人员信息数组 - */ - public static CANDIDATE_INFOEX[] doFindNextPerson(int beginNum, int nCount) { - /* - *入参 - */ - NetSDKLib.NET_IN_DOFIND_FACERECONGNITION stuIn = new NetSDKLib.NET_IN_DOFIND_FACERECONGNITION(); + // 查询密令 + public static int nToken = 0; + + private static NetSDKLib.LLong m_FindHandle = null; + + // 订阅句柄 + private static LLong attachFaceHandle = new LLong(0); + + /** + * 按条件查询人脸识别结果 + * + * @param memory 图片缓存 + * @param startTime 起始时间, 历史库需要时间,人脸库不需要时间 + * @param endTime 结束时间, 历史库需要时间,人脸库不需要时间 + * @param isHistory 是否是历史库, true-历史库; false-人脸库 + * @param nChn 通道号, 历史库需要通道号,人脸库不需要通道号 + * @param similary 相似度 + * @return 查询到的所有人员个数 + */ + public static int startFindPerson(Memory memory, + String startTime, + String endTime, + boolean isHistory, + int nChn, + String similary) { + + m_FindHandle = null; + nToken = 0; + int nTotalCount = 0; + + /* + * 入参, IVVS设备,查询条件只有 stuInStartFind.stPerson 里的参数有效 + */ + NET_IN_STARTFIND_FACERECONGNITION stuIn = new NET_IN_STARTFIND_FACERECONGNITION(); + + // 人员信息查询条件是否有效, 并使用扩展结构体 + stuIn.bPersonExEnable = 1; + + // 图片信息 + if (memory != null) { + stuIn.pBuffer = memory; + stuIn.nBufferLen = (int) memory.size(); + stuIn.stPersonInfoEx.wFacePicNum = 1; + stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0; + stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int) memory.size(); + } + + // 相似度 + if (!similary.isEmpty()) { + stuIn.stMatchOptions.nSimilarity = Integer.parseInt(similary); + } + + stuIn.stFilterInfo.nGroupIdNum = 0; + stuIn.stFilterInfo.nRangeNum = 1; + + if (isHistory) { // 历史库 + // 通道号 + stuIn.nChannelID = nChn; + stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_HISTORY; // 待查询数据库类型,设备只支持一个 + // 开始时间 + String[] startTimeStr = startTime.split("-"); + stuIn.stFilterInfo.stStartTime.dwYear = Integer.parseInt(startTimeStr[0]); + stuIn.stFilterInfo.stStartTime.dwMonth = Integer.parseInt(startTimeStr[1]); + stuIn.stFilterInfo.stStartTime.dwDay = Integer.parseInt(startTimeStr[2]); + + // 结束时间 + String[] endTimeStr = endTime.split("-"); + stuIn.stFilterInfo.stEndTime.dwYear = Integer.parseInt(endTimeStr[0]); + stuIn.stFilterInfo.stEndTime.dwMonth = Integer.parseInt(endTimeStr[1]); + stuIn.stFilterInfo.stEndTime.dwDay = Integer.parseInt(endTimeStr[2]); + stuIn.stFilterInfo.emFaceType = EM_FACERECOGNITION_FACE_TYPE.EM_FACERECOGNITION_FACE_TYPE_ALL; + } else { // 人脸库 + stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_BLACKLIST; // 待查询数据库类型,设备只支持一个 + } + + /* + * 出参 + */ + NET_OUT_STARTFIND_FACERECONGNITION stuOut = new NET_OUT_STARTFIND_FACERECONGNITION(); + stuIn.write(); + stuOut.write(); + if (LoginModule.netsdk.CLIENT_StartFindFaceRecognition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) { + m_FindHandle = stuOut.lFindHandle; + nTotalCount = stuOut.nTotalCount; + nToken = stuOut.nToken; + } else { + System.out.println("CLIENT_StartFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint()); + } + + return nTotalCount; + } + + /** + * 查找人脸识别结果 + * + * @param beginNum 查询起始序号 + * @param nCount 当前想查询的记录条数 + * @return 返回人员信息数组 + */ + public static CANDIDATE_INFOEX[] doFindNextPerson(int beginNum, int nCount) { + /* + *入参 + */ + NetSDKLib.NET_IN_DOFIND_FACERECONGNITION stuIn = new NetSDKLib.NET_IN_DOFIND_FACERECONGNITION(); stuIn.lFindHandle = m_FindHandle; - stuIn.nCount = nCount; // 当前想查询的记录条数 - stuIn.nBeginNum = beginNum; // 查询起始序号 - + stuIn.nCount = nCount; // 当前想查询的记录条数 + stuIn.nBeginNum = beginNum; // 查询起始序号 + /* * 出参 */ - NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION stuOut = new NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION();; - stuOut.bUseCandidatesEx = 1; // 是否使用候选对象扩展结构体 - + NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION stuOut = new NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION(); + ; + stuOut.bUseCandidatesEx = 1; // 是否使用候选对象扩展结构体 + // 必须申请内存,每次查询几个,必须至少申请几个,最大申请20个 - for(int i = 0; i < nCount; i++) { + for (int i = 0; i < nCount; i++) { stuOut.stuCandidatesEx[i].stPersonInfo.szFacePicInfo[0].nFilePathLen = 256; stuOut.stuCandidatesEx[i].stPersonInfo.szFacePicInfo[0].pszFilePath = new Memory(256); } - - stuIn.write(); - stuOut.write(); - if(LoginModule.netsdk.CLIENT_DoFindFaceRecognition(stuIn, stuOut, 4000)) { - stuIn.read(); - stuOut.read(); - - if(stuOut.nCadidateExNum == 0) { - return null; - } - - // 获取到的信息 - CANDIDATE_INFOEX[] stuCandidatesEx = new CANDIDATE_INFOEX[stuOut.nCadidateExNum]; - for(int i = 0; i < stuOut.nCadidateExNum; i++) { - stuCandidatesEx[i] = new CANDIDATE_INFOEX(); - stuCandidatesEx[i] = stuOut.stuCandidatesEx[i]; - } - - return stuCandidatesEx; + + stuIn.write(); + stuOut.write(); + if (LoginModule.netsdk.CLIENT_DoFindFaceRecognition(stuIn, stuOut, 4000)) { + stuIn.read(); + stuOut.read(); + + if (stuOut.nCadidateExNum == 0) { + return null; + } + + // 获取到的信息 + CANDIDATE_INFOEX[] stuCandidatesEx = new CANDIDATE_INFOEX[stuOut.nCadidateExNum]; + for (int i = 0; i < stuOut.nCadidateExNum; i++) { + stuCandidatesEx[i] = new CANDIDATE_INFOEX(); + stuCandidatesEx[i] = stuOut.stuCandidatesEx[i]; + } + + return stuCandidatesEx; } else { - System.out.println("CLIENT_DoFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint()); + System.out.println("CLIENT_DoFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint()); } - + return null; - } - - /** - * 结束查询 - */ - public static boolean doFindClosePerson() { - boolean bRet = false; - if(m_FindHandle.longValue() != 0) { - bRet = LoginModule.netsdk.CLIENT_StopFindFaceRecognition(m_FindHandle); - } - return bRet; - } - - /** - * 订阅人脸查询状态 - * @param faceFindStateCb 人脸状态回调函数 - * @return - */ - public static boolean attachFaceFindState(fFaceFindState faceFindStateCb) { - /* - * 入参 - */ - NET_IN_FACE_FIND_STATE stuIn = new NET_IN_FACE_FIND_STATE(); - stuIn.nTokenNum = 1; - stuIn.nTokens = new IntByReference(nToken); // 查询令牌 - stuIn.cbFaceFindState = faceFindStateCb; - - /* - * 出参 - */ - NET_OUT_FACE_FIND_STATE stuOut = new NET_OUT_FACE_FIND_STATE(); - - stuIn.write(); - attachFaceHandle = LoginModule.netsdk.CLIENT_AttachFaceFindState(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); - stuIn.read(); - - if(attachFaceHandle.longValue() != 0) { - System.out.println("AttachFaceFindState Succeed!"); - return true; - } - - return false; - } - - /** - * 关闭订阅 - */ - public static void detachFaceFindState() { - if(attachFaceHandle.longValue() != 0) { - LoginModule.netsdk.CLIENT_DetachFaceFindState(attachFaceHandle); - attachFaceHandle.setValue(0); - } - } + } + + /** + * 结束查询 + */ + public static boolean doFindClosePerson() { + boolean bRet = false; + if (m_FindHandle.longValue() != 0) { + bRet = LoginModule.netsdk.CLIENT_StopFindFaceRecognition(m_FindHandle); + } + return bRet; + } + + /** + * 订阅人脸查询状态 + * + * @param faceFindStateCb 人脸状态回调函数 + * @return + */ + public static boolean attachFaceFindState(fFaceFindState faceFindStateCb) { + /* + * 入参 + */ + NET_IN_FACE_FIND_STATE stuIn = new NET_IN_FACE_FIND_STATE(); + stuIn.nTokenNum = 1; + stuIn.nTokens = new IntByReference(nToken); // 查询令牌 + stuIn.cbFaceFindState = faceFindStateCb; + + /* + * 出参 + */ + NET_OUT_FACE_FIND_STATE stuOut = new NET_OUT_FACE_FIND_STATE(); + + stuIn.write(); + attachFaceHandle = LoginModule.netsdk.CLIENT_AttachFaceFindState(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000); + stuIn.read(); + + if (attachFaceHandle.longValue() != 0) { + System.out.println("AttachFaceFindState Succeed!"); + return true; + } + + return false; + } + + /** + * 关闭订阅 + */ + public static void detachFaceFindState() { + if (attachFaceHandle.longValue() != 0) { + LoginModule.netsdk.CLIENT_DetachFaceFindState(attachFaceHandle); + attachFaceHandle.setValue(0); + } + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/mqtt/MqttManager.java b/cloud/dahua/src/main/java/com/example/dahua/mqtt/MqttManager.java index f233855..2d2a878 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/mqtt/MqttManager.java +++ b/cloud/dahua/src/main/java/com/example/dahua/mqtt/MqttManager.java @@ -1,5 +1,6 @@ package com.example.dahua.mqtt; +import lombok.extern.log4j.Log4j2; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; @@ -20,7 +21,7 @@ public class MqttManager { private static int qosLevel; - public void init(){ + public void init() { final String brokerUrl = "tcp://post-cn-4590mq2hr03.mqtt.aliyuncs.com:1883"; groupId = "GID_HFJSIURFHAQO110"; topic = "Topic_Quene_Test"; @@ -92,10 +93,10 @@ public class MqttManager { } } - public void sendMq(String deviceId,String content) { - String recvClientId = groupId + "@@@"+deviceId; + public void sendMq(String deviceId, String cmd) { + String recvClientId = groupId + "@@@" + deviceId; final String p2pSendTopic = topic + "/p2p/" + recvClientId; -// String content = "{\"cmd\":\""+cmd+"\",\"clientId\":\"\",\"data\": \"6:00-19:25\"}"; + String content = "{\"cmd\":\"" + cmd + "\",\"clientId\":\"" + deviceId + "\",\"data\": \"http://update.myjxt.com/CloundWindowYueQing.apk\"}"; MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(qosLevel); System.out.println("发送内容:" + p2pSendTopic); @@ -109,4 +110,23 @@ public class MqttManager { } + + public void sendMqQD(String deviceId, String content) { + String recvClientId = groupId + "@@@" + deviceId; + final String p2pSendTopic = topic + "/p2p/" + recvClientId; +// String content = "{\"cmd\":\""+cmd+"\",\"clientId\":\""+deviceId+"\",\"data\": \"http://update.myjxt.com/CloundWindow.apk\"}"; + MqttMessage message = new MqttMessage(content.getBytes()); + message.setQos(qosLevel); +// System.out.println("发送内容:" + p2pSendTopic); + if (null != mqttClient) { + try { + mqttClient.publish(p2pSendTopic, message); + } catch (MqttException e) { + e.printStackTrace(); + } + } + + } + + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceImp.java b/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceImp.java index e08f083..28215f3 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceImp.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceImp.java @@ -22,10 +22,10 @@ public class AttendanceImp implements AttendanceService { if (attendanceBeans.size() == 0) {//设备不存在 // insert SZ_Attendance(clint_id, clint_type, ip, port, intime, school_id, state) // * values(@clint_id,@clint_type,@ip,@port,GETDATE(),-1,1) - String insertSql = String.format("insert into SZ_Attendance(clint_id, clint_type, ip, port, intime, school_id, state,isConnection) values ('%s','%s','%s','%s','%s','%s','%s','%s')", clint_id, clint_type, ip, port, intime, school_id, state,1); + String insertSql = String.format("insert into SZ_Attendance(clint_id, clint_type, ip, port, intime, school_id, state,isConnection) values ('%s','%s','%s','%s','%s','%s','%s','%s')", clint_id, clint_type, ip, port, intime, school_id, state, 1); return jdbcTemplate.update(insertSql); } else {//设备 已经存在,更新在线状态 - updateConnectStateWithDevid(1,clint_id); + updateConnectStateWithDevid(1, clint_id); } } catch (Exception e) { e.printStackTrace(); @@ -34,21 +34,20 @@ public class AttendanceImp implements AttendanceService { } /** - * * @param isConnection 连接状态 * @param ip * @param port * @return */ @Override - public int updateConnectState(int isConnection,String ip,String port) { + public int updateConnectState(int isConnection, String ip, String port) { int index = 0; try { - String updateSql = String.format(" update SZ_Attendance set isConnection = %d where ip = '%s' and port = '%s' ",isConnection,ip,port); + String updateSql = String.format(" update SZ_Attendance set isConnection = %d where ip = '%s' and port = '%s' ", isConnection, ip, port); index = jdbcTemplate.update(updateSql); // System.out.println("updateIndex:"+index+" isConnection:"+isConnection+"updateSql:"+updateSql); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } @@ -59,10 +58,10 @@ public class AttendanceImp implements AttendanceService { public int updateConnectStateWithDevid(int isConnection, String clint_id) { int index = 0; try { - String updateSql = String.format(" update SZ_Attendance set isConnection = %d where clint_id = '%s' ",isConnection,clint_id); + String updateSql = String.format(" update SZ_Attendance set isConnection = %d where clint_id = '%s' ", isConnection, clint_id); index = jdbcTemplate.update(updateSql); // System.out.println("updateIndex:"+index+" isConnection:"+isConnection+"updateSql:"+updateSql); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java b/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java index a283819..6db5399 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java @@ -6,17 +6,19 @@ public interface AttendanceService { /** * insert SZ_Attendance(clint_id, clint_type, ip, port, intime, school_id, state) * values(@clint_id,@clint_type,@ip,@port,GETDATE(),-1,1) + * * @return */ - public int insert(String clint_id,String clint_type,String ip,String port,String intime,String school_id, + public int insert(String clint_id, String clint_type, String ip, String port, String intime, String school_id, String state); /** * 更新联网状态 + * * @return */ - int updateConnectState(int isConnection,String ip,String port); + int updateConnectState(int isConnection, String ip, String port); - int updateConnectStateWithDevid(int isConnection,String clint_id); + int updateConnectStateWithDevid(int isConnection, String clint_id); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/DeviceService.java b/cloud/dahua/src/main/java/com/example/dahua/service/DeviceService.java index 971e216..172570b 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/DeviceService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/DeviceService.java @@ -7,6 +7,6 @@ public interface DeviceService { boolean restart(String deviceId); - boolean setDVRIPConfig(String deviceId,String ip,int port); + boolean setDVRIPConfig(String deviceId, String ip, int port); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/DeviceServiceImp.java b/cloud/dahua/src/main/java/com/example/dahua/service/DeviceServiceImp.java index 8bf0783..a9d86a9 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/DeviceServiceImp.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/DeviceServiceImp.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Service; @Repository @Service -public class DeviceServiceImp implements DeviceService{ +public class DeviceServiceImp implements DeviceService { @Override public boolean restart(String deviceId) { @@ -15,9 +15,9 @@ public class DeviceServiceImp implements DeviceService{ } @Override - public boolean setDVRIPConfig(String deviceId,String ip,int port) { + public boolean setDVRIPConfig(String deviceId, String ip, int port) { - return DeviceControlModule.setDVRIPConfig(deviceId,ip,port); + return DeviceControlModule.setDVRIPConfig(deviceId, ip, port); } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/UserService.java b/cloud/dahua/src/main/java/com/example/dahua/service/UserService.java index e671678..f1814e2 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/UserService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/UserService.java @@ -12,38 +12,42 @@ public interface UserService { /** * 获取学校下的大华人脸设备 + * * @param schoolId * @param clint_type * @return */ - List getAttendanceBeans(String schoolId,String clint_type,String devid); + List getAttendanceBeans(String schoolId, String clint_type, String devid); /** * 获取学生基本信息 + * * @param schoolId * @param studentCode * @return */ - UserInfoBean getUserInfo(String schoolId,String studentCode); + UserInfoBean getUserInfo(String schoolId, String studentCode); /** * 上传人脸和学生信息 + * * @param file * @param schoolId * @param studentCode * @return */ // boolean uploadImgAndUserInfo(MultipartFile file,String schoolId,String studentCode,String clint_type); - boolean uploadImgAndUserInfo(String file,String schoolId,String studentCode,String clint_type,int userType,String devid); + boolean uploadImgAndUserInfo(String file, String schoolId, String studentCode, String clint_type, int userType, String devid); /** * 批量下发人脸 + * * @param schoolId * @param clint_type - * @param type 0:主卡 1:副卡 + * @param type 0:主卡 1:副卡 */ - void sendUserInfos(String schoolId,String clint_type,int type); + void sendUserInfos(String schoolId, String clint_type, int type); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/utils/AuthService.java b/cloud/dahua/src/main/java/com/example/dahua/utils/AuthService.java index 69539fa..bd03427 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/utils/AuthService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/utils/AuthService.java @@ -15,8 +15,10 @@ public class AuthService { public static final String APP_ID = "15990462"; public static final String API_KEY = "t70Rzr6SGmfU9S6MrqAkspsY"; public static final String SECRET_KEY = "nSqpqtrf7cCjo8vOB9knL85nwWNoxwvS "; + /** * 获取权限token + * * @return 返回示例: * { * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", @@ -43,6 +45,7 @@ public class AuthService { /** * 获取API访问token * 该token有一定的有效期,需要自行管理,当失效时需重新获取. + * * @param ak - 百度云官网获取的 API Key * @param sk - 百度云官网获取的 Securet Key * @return assess_token 示例: diff --git a/cloud/dahua/src/main/java/com/example/dahua/utils/FileUtils.java b/cloud/dahua/src/main/java/com/example/dahua/utils/FileUtils.java index cda7d0b..b48da30 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/utils/FileUtils.java +++ b/cloud/dahua/src/main/java/com/example/dahua/utils/FileUtils.java @@ -12,7 +12,7 @@ public class FileUtils { public static String checkFail = "检测失败.txt"; public static String checkSuc = "检测成功.txt"; - public static String device_login="设备登录id.txt"; + public static String device_login = "设备登录id.txt"; private static FileUtils fileUtils; private String filePath = "./log/";//日志记录目录 @@ -57,10 +57,10 @@ public class FileUtils { String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); - File path = new File(filePath+date); - if (!path.exists())path.mkdirs(); + File path = new File(filePath + date); + if (!path.exists()) path.mkdirs(); - File logPath = new File(filePath+date, fileName); + File logPath = new File(filePath + date, fileName); try { // System.out.println("logPath:" + logPath.getAbsolutePath()); diff --git a/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java b/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java index 80d7194..d2be633 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java +++ b/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java @@ -18,13 +18,13 @@ import java.util.Map; public class HttpUtils { - public static boolean uploadImgs(File file,String schoolId,String studentCode,String clint_type,int userType){ + public static boolean uploadImgs(File file, String schoolId, String studentCode, String clint_type, int userType) { - if (!file.exists()){ + if (!file.exists()) { System.out.println("图片不存在"); return false; } - String targPath = FilePath.picPathComp + studentCode+ ".jpg"; + String targPath = FilePath.picPathComp + studentCode + ".jpg"; // String targPath = "C:\\Users\\taohandong\\Desktop\\comp\\"+userInfoBean.getStudentcode()+".jpg"; try { CompressPic.CompressPic(file.getAbsolutePath(), targPath, studentCode);//压缩后的图片 @@ -41,30 +41,30 @@ public class HttpUtils { headers.setContentType(mediaType); - MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); + MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); FileSystemResource fileSystemResource = new FileSystemResource(targPath); - multivaluedMap.add("file",fileSystemResource); - multivaluedMap.add("schoolId",schoolId); - multivaluedMap.add("studentCode",studentCode); - multivaluedMap.add("clint_type",clint_type); - multivaluedMap.add("userType",userType); + multivaluedMap.add("file", fileSystemResource); + multivaluedMap.add("schoolId", schoolId); + multivaluedMap.add("studentCode", studentCode); + multivaluedMap.add("clint_type", clint_type); + multivaluedMap.add("userType", userType); - HttpEntity> httpEntity = new HttpEntity<>(multivaluedMap,headers); + HttpEntity> httpEntity = new HttpEntity<>(multivaluedMap, headers); - ResponseEntity responseEntity = restTemplate.postForEntity(url,httpEntity, String.class); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); - System.out.println("responseEntity:"+responseEntity.getBody()); + System.out.println("responseEntity:" + responseEntity.getBody()); return responseEntity.getBody().equals("1"); } - public static boolean imgsSend(String schoolId, int type){ - String url = "http://121.40.109.21:8991/file/imgsSend?schoolId="+schoolId+"&type="+type; + public static boolean imgsSend(String schoolId, int type) { + String url = "http://121.40.109.21:8991/file/imgsSend?schoolId=" + schoolId + "&type=" + type; RestTemplate restTemplate = new RestTemplate(); - ResponseEntity result = restTemplate.getForEntity(url,Boolean.class); - System.out.println("result:"+result.getBody()); + ResponseEntity result = restTemplate.getForEntity(url, Boolean.class); + System.out.println("result:" + result.getBody()); return result.getBody(); } diff --git a/cloud/dahua/src/main/resources/application.yml b/cloud/dahua/src/main/resources/application.yml index 9c00388..216e376 100644 --- a/cloud/dahua/src/main/resources/application.yml +++ b/cloud/dahua/src/main/resources/application.yml @@ -9,27 +9,26 @@ spring: datasource: - campus: - username: szjxtuser - password: RQminVCJota3H1u8bBYH - jdbc-url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus - driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver -# username: SZJXTUSER -# password: xst200919 -# jdbc-url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ -# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - xiaoan: - jdbc-url: jdbc:sqlserver://116.62.241.27:33419;database=xiaoanhxy - username: szjxtuser - password: RQminVCJota3H1u8bBYH - driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + campus: + username: szjxtuser + password: RQminVCJota3H1u8bBYH + jdbc-url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + # username: SZJXTUSER + # password: xst200919 + # jdbc-url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ + # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + xiaoan: + jdbc-url: jdbc:sqlserver://116.62.241.27:33419;database=xiaoanhxy + username: szjxtuser + password: RQminVCJota3H1u8bBYH + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # jdbc-url: jdbc:sqlserver://60.190.202.57:14333;database=xiaoanhxy # username: SZJXTUSER # password: xst200919 # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - mybatis: campus: type-aliases-package: com.example.dahua.dao @@ -46,3 +45,5 @@ mybatis: + + diff --git a/cloud/dahua/src/main/resources/bootstrap.yml b/cloud/dahua/src/main/resources/bootstrap.yml index e594e5a..577db97 100644 --- a/cloud/dahua/src/main/resources/bootstrap.yml +++ b/cloud/dahua/src/main/resources/bootstrap.yml @@ -8,20 +8,20 @@ spring: application: name: dahuaserver -#management: -# endpoints: -# web: -# exposure: -# include: "*" -# endpoint: -# health: -# show-details: always - + #management: + # endpoints: + # web: + # exposure: + # include: "*" + # endpoint: + # health: + # show-details: always + #eureka client配置 eureka: client: serviceUrl: -# defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ + # defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/ #http://134.224.249.33:1111/eureka/ 正式库 #http://134.224.249.33:1111/eureka/ 测试库 @@ -29,12 +29,12 @@ eureka: registry-fetch-interval-seconds: 5 instance-info-replication-interval-seconds: 10 instance: -# prefer-ip-address: false + # prefer-ip-address: false instance-id: ${spring.application.name} -# instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} #固定端口 -# instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${randomServerPort.value[5000,5005]}} #随机端口 + # instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} #固定端口 + # instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${randomServerPort.value[5000,5005]}} #随机端口 lease-renewal-interval-in-seconds: 10 #每隔几秒告诉eureka服务器我还存活,用于心跳检测 lease-expiration-duration-in-seconds: 10 #如果心跳检测一直没有发送,10秒后会从eureka服务器中将此服务剔除 -# status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/doc.html # ${server.port}为该服务的端口号 + # status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/doc.html # ${server.port}为该服务的端口号 hostname: localhost # status-page-url: http://${spring.cloud.client.ip-address}:${randomServerPort.value[5000,5005]}/document.html # ${server.port}为该服务的端口号 \ No newline at end of file diff --git a/cloud/dahua/src/main/resources/mapper/usermapper.xml b/cloud/dahua/src/main/resources/mapper/usermapper.xml index da70c2a..4853f4f 100644 --- a/cloud/dahua/src/main/resources/mapper/usermapper.xml +++ b/cloud/dahua/src/main/resources/mapper/usermapper.xml @@ -3,10 +3,10 @@ - - - - + + + + \ No newline at end of file diff --git a/cloud/dahua/src/main/resources/mybatis-config.xml b/cloud/dahua/src/main/resources/mybatis-config.xml index 595ed53..55dfbbc 100644 --- a/cloud/dahua/src/main/resources/mybatis-config.xml +++ b/cloud/dahua/src/main/resources/mybatis-config.xml @@ -4,25 +4,25 @@ "http://mybatis.org/dtd/mybatis-3-config.dtd"> - - + + - + - + - + - + - + - + - + diff --git a/cloud/dahua/src/main/resources/res_en_US.properties b/cloud/dahua/src/main/resources/res_en_US.properties index e702e0b..1958142 100644 --- a/cloud/dahua/src/main/resources/res_en_US.properties +++ b/cloud/dahua/src/main/resources/res_en_US.properties @@ -12,35 +12,28 @@ FACERECOGNITION=FaceRecognition ALARM_LISTEN=Alarm Listen DEVICE_CONTROL=Device Control AUTOREGISTER=AutoRegister - ONLINE=Online - # Login Info DEVICE_IP=Device IP DEVICE_PORT=Port USERNAME=UserName PASSWORD=Password IP=IP - LOGIN=Login LOGOUT=Logout - LOGIN_SUCCEED=Login Succeed LOGIN_FAILED=Login Failed DISCONNECT=Device disconnect DISCONNECT_RECONNECTING=Device disconnect, reconnecting PROMPT_MESSAGE=Prompt Message ERROR_MESSAGE=Error Message - SUCCEED=Succeed FAILED=Failed - PLEASE_INPUT_DEVICE_IP=Please input device IP PLEASE_INPUT_DEVICE_PORT=Please input device port PLEASE_INPUT_DEVICE_USERNAME=Please input userName PLEASE_INPUT_DEVICE_PASSWORD=Please input password PLEASE_INPUT_CONFIRM_PASSWORD=Please input confirm password - # Error Info NET_NOERROR=No error NET_ERROR=Unknown error @@ -184,7 +177,7 @@ NET_ERROR_GETCFG_VIDEO_OSD=Failed to get video OSD setup NET_ERROR_SETCFG_VIDEO_OSD=Failed to set video OSD NET_ERROR_GETCFG_GPRSCDMA=Failed to get CDMA\GPRS configuration NET_ERROR_SETCFG_GPRSCDMA=Failed to set CDMA\GPRS configuration -NET_ERROR_GETCFG_IPFILTER= Failed to get IP Filter configuration +NET_ERROR_GETCFG_IPFILTER=Failed to get IP Filter configuration NET_ERROR_SETCFG_IPFILTER=Failed to set IP Filter configuration NET_ERROR_GETCFG_TALKENCODE=Failed to get Talk Encode configuration NET_ERROR_SETCFG_TALKENCODE=Failed to set Talk Encode configuration @@ -261,7 +254,7 @@ NET_ERROR_SENIOR_VALIDATE_FAILED=senior validation failure NET_ERROR_DEVICE_ID_NOT_EXIST=device ID is not exist NET_ERROR_UNSUPPORTED=unsupport operation NET_ERROR_PROXY_DLLLOAD=proxy dll load error -NET_ERROR_PROXY_ILLEGAL_PARAM= proxy user parameter is not legal +NET_ERROR_PROXY_ILLEGAL_PARAM=proxy user parameter is not legal NET_ERROR_PROXY_INVALID_HANDLE=handle invalid NET_ERROR_PROXY_LOGIN_DEVICE_ERROR=login device error NET_ERROR_PROXY_START_SERVER_ERROR=start proxy server error @@ -296,7 +289,7 @@ NET_ERROR_SEND_DATA_FAILED=Failed to send out data NET_ERROR_OBSOLESCENT_INTERFACE=Abandoned port NET_ERROR_INSUFFICIENT_INTERAL_BUF=Internal buffer is not sufficient NET_ERROR_NEED_ENCRYPTION_PASSWORD=verify password when changing device IP -NET_ERROR_NOSUPPORT_RECORD =device not support the record +NET_ERROR_NOSUPPORT_RECORD=device not support the record NET_ERROR_SERIALIZE_ERROR=Failed to serialize data NET_ERROR_DESERIALIZE_ERROR=Failed to deserialize data NET_ERROR_LOWRATEWPAN_ID_EXISTED=the wireless id is already existed @@ -324,7 +317,6 @@ NET_ERROR_CHANNEL_ALREADY_OPENED=channel has already been opened NET_ERROR_CREATE_SOCKET=create socket error NET_ERROR_CHANNEL_NUM=Invalid channel number NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED=face recognition server group id exceed - # RealPlay Info START_REALPLAY=Start RealPlay STOP_REALPLAY=Stop RealPlay @@ -332,24 +324,20 @@ ATTACH=Attach DETACH=Detach REALPLAY_SUCCEED=Success to start realPlay REALPLAY_FAILED=Failed to start realPlay - CHN=Chn CHANNEL=Channel STREAM_TYPE=Stream MASTER_AND_SUB_STREAM=Master/Sub stream MASTER_STREAM=Master Stream SUB_STREAM=Sub Stream - # Capture Picture LOCAL_CAPTURE=Local Capture REMOTE_CAPTURE=Remote Capture TIMER_CAPTURE=Timer Capture STOP_CAPTURE=Stop Capture INTERVAL=Interval - TIME_INTERVAL_ILLEGAL=Time Interval Illegal PLEASE_START_REALPLAY=Please Start Real Play - # PTZ Info PTZ_CONTROL=PTZControl LEFT_UP=LeftUp @@ -360,16 +348,13 @@ RIGHT=Right LEFT_DOWN=LeftDown DOWN=Down RIGHT_DOWN=RightDown - ZOOM_ADD=Zoom+ ZOOM_DEC=Zoom- FOCUS_ADD=Focus+ FOCUS_DEC=Focus- IRIS_ADD=Iris+ IRIS_DEC=Iris- - SPEED=Speed - #ITS EVENT_INFO=Event Information EVENT_NAME=Event Name @@ -391,10 +376,8 @@ MANUAL_CAPTURE=Manual Capture OPEN_STROBE=Open Strobe CLOSE_STROBE=Close Strobe INDEX=Index - OPERATE=Operate FUNCTION=Function - UNDEFINED_COLOR=Undefined Color BLACK=Black WHITE=White @@ -404,22 +387,18 @@ GREEN=Green YELLOW=Yellow GRAY=Gray ORANGE=Orange - LIGHT_DUTY=Light Duty MEDIUM=Medium OVER_SIZE=Over Size MINI_SIZE=Miniature Size LARGE_SIZE=Large Size - NO_PLATENUMBER=No PlateNumber MANUALSNAP_SUCCEED=Manual snap succeed MANUALSNAP_FAILED=Manual snap failed - OPEN_STROBE_SUCCEED=Open strobe succeed OPEN_STROBE_FAILED=Open strobe failed CLOSE_STROBE_SUCCEED=Close strobe succeed CLOSE_STROBE_FAILED=Close strobe failed - EVENT_IVS_TRAFFICJUNCTION=Junction EVENT_IVS_TRAFFIC_RUNREDLIGHT=RunRedLight EVENT_IVS_TRAFFIC_OVERLINE=OverLine @@ -442,7 +421,6 @@ EVENT_IVS_TRAFFIC_BACKING=Backing EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING=ParkingSpaceParking EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING=ParkingSpaceNoParking EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT=WithoutSafeBelt - # DownLoad Info DOWNLOAD_RECORD_BYTIME=DownloadRecordByTime DOWNLOAD_RECORD_BYFILE=DownloadRecordByFile @@ -452,20 +430,16 @@ STOP_DOWNLOAD=StopDownLoad START_TIME=Start Time END_TIME=End Time RECORD_TYPE=Record Type - GENERAL_RECORD=General Record ALARM_RECORD=Alarm Record MOTION_DETECTION=Motion Detection Record CARD_NUMBER_RECORD=Card Number Record - QUERY_RECORD_IS_NOT_EXIST=Query record is not exist PLEASE_CHECK_RECORD_TIME=Please check record time PLEASE_SELECT_TIME_AGAIN=Please select time again,max time different is 6 hour DOWNLOAD_COMPLETED=Download completed - PLEASE_FIRST_QUERY_RECORD=Please first query record PLEASE_FIRST_SELECT_ROW_WITH_DATA=Please first select row with data - # Time Set YEAR=Year MONTH=Month @@ -476,7 +450,6 @@ SECOND=Second CONFIRM=Confirm CANCEL=Cancel DATE_CHOOSER=Date Chooser - MONDAY=Mon TUESDAY=Tue WEDNESDAY=Wed @@ -484,7 +457,6 @@ THURSDAY=Thur FRIDAY=Fri SATURDAY=Sat SUNDAY=Sun - # Talk TRANSMIT_TYPE=Transmit Type LOCAL_TRANSMIT_TYPE=Local(not transmit) @@ -493,21 +465,16 @@ TRANSMIT_CHANNEL=Speaker Channel START_TALK=Start Talk STOP_TALK=Stop Talk TALK_FAILED=Talk Failed - # DeviceSearchAndInt DEVICESEARCH_OPERATE=DeviceSearch Operate DEVICESEARCH_RESULT=DeviceSearch Result DEVICEINIT=DeviceInit - DEVICESEARCH=DeviceSearch DEVICE_POINT_TO_POINT_SEARCH=Device IP Point To Point Search - START_SEARCH=Start Search STOP_SEARCH=Stop Search - START_IP=Start IP END_IP=End IP - DEVICE_TYPE=Device Type MAC=MAC SN=SN @@ -521,27 +488,22 @@ GETWAY=GetWay DETAIL_TYPE=Detail Type HTTP_PORT=HTTP Port CONFIRM_PASSWORD=Confirm Password - OLD_DEVICE=Old Device DONOT_SUPPORT_INITIALIZATION=Do not support initialization NOT_INITIALIZED=Uninitialized INITIALIZED=Initialized - THE_IP_CONTROL_SCOPE=The scope is too large, please control it between the 1000 PLEASE_FIRST_SELECT_INITIALIZED_DEVICE=Please first select initialized device PLEASE_INPUT_PHONE=Please input phone PLEASE_INPUT_MAIL=Please input mail INCONSISTENT=The password and the confirm password are inconsistent PLEASE_CHECK_IP=Please check IP - SEARCHING_WAITING=Searching, please waiting - START_LISTEN=Start Listen STOP_LISTEN=Stop Listen SHOW_ALARM_EVENT=Show Alarm Event Info ALARM_LISTEN_FAILED=Alarm Listen Failed ALARM_MESSAGE=Alarm Message - EXTERNAL_ALARM=External alarm MOTION_ALARM=Motion detection alarm VIDEOLOST_ALARM=Video loss alarm @@ -550,7 +512,6 @@ DISKFULL_ALARM=HDD full alarm DISKERROR_ALARM=HDD error alarm START=start STOP=stop - CURRENT_TIME=Current Time DEVICE_REBOOT=Device Reboot SYNCHRONIZE_TIME=Synchronize Time @@ -559,22 +520,17 @@ SET_TIME=Set Time GET_TIME=Get Time REBOOT_TIPS=Are you sure you want to reboot it? OPERATE_SUCCESS=Operate Success - #FaceRecognition FACE_GROUP_ID=Group Id FACE_GROUP_NAME=Group Name PERSON_COUNT=Person Count - GROUP_OPERATE=Group Operate PERSON_OPERATE=Person Operate - FACE_RECOGNITION_EVENT=FaceRecognition Event FACE_DETECT_EVENT=FaceDetect Event - GLOBAL_PICTURE=Global Picture PERSON_PICTURE=Person Picture CANDIDATE_PICTURE=Candidate Picture - TIME=Time SEX=Sex AGE=Age @@ -611,7 +567,6 @@ WEAR_GLASSES=Wear Glasses NO_GLASSES=No Glasses UNKNOW=UnKnow UNLIMITED=Unlimited - NAME=Name BIRTHDAY=Birthday ID_NO=Id No @@ -619,7 +574,6 @@ ID_TYPE=ID Type SIMILARITY=Similarity UID=UID STRANGER=Stranger - ADD=Add MODIFY=Modify FRESH=Fresh @@ -628,27 +582,22 @@ MODIFY_GROUP=Modify Group DEL_GROUP=Delete Group DISPOSITION=Disposition DEL_DISPOSITION=Delete Disposition - FIND_CONDITION=Find Condition FIND_PERSON=Find Person ADD_PERSON=Add Person MODIFY_PERSON=Modify Person DEL_PERSON=Delete Person - PREVIOUSPAGE=Previous Page LASTPAGE=Last Page SELECT_PICTURE=Select Picture EVENT_TYPE=Event Type PAGES_NUMBER=Pages Number - SIMILARITY_RANGE=Similarity range[0, 100] PLEASE_INPUT_GROUPNAME=Please input groupName PLEASE_SELECT_GROUP=Please select group - PLEASE_SELECT_PERSON=Please select person PLEASE_ADD_DISPOSITION_INFO=Please add disposition info PLEASE_SELECT_DEL_DISPOSITION_INFO=Please select delDisposition info - #AutoRegister AUTOREGISTER_LISTEN=AutoRegister Listen DEVICE_CONFIG=Device Configure @@ -668,17 +617,14 @@ GET=Get SET=Set RECORD=Record DEVICE_LOGIN=Device has logged in - ALREADY_EXISTED=Already existed ALREADY_EXISTED_WHETHER_OR_NOT_TO_COVER=Already existed, whether or not to cover(no, not export) FILE_OPEN_PLEASE_CLOSE_FILE=The file is opened, please first close the file IMPORT_COMPLETION=Import completed EXPORT_COMPLETION=Export completed FILE_NOT_EXIST=File is not existed - PLEASE_INPUT=Please input MAX_SUPPORT_100=Maximum support is 100 - #Attendance ATTENDANCE=Attendance USER_ID=User ID @@ -720,19 +666,14 @@ USER_NAME_EXCEED_LENGTH=User name exceed max length CARD_NO_EXCEED_LENGTH=Card no exceed max length CARD_NAME_EXCEED_LENGTH=Card name exceed max length CARD_PASSWD_EXCEED_LENGTH=Card password exceed max length - #Gate GATE=Gate - CARD_OPERATE=Card Operate CARD_INFO=Card Information CARD_MANAGER=Card Manager - CLEAR=Clear - OPEN_STATUS=Open Status OPEN_METHOD=Open Method - CARD_UNKNOW=UnKnown Card CARD_GENERAL=General Card CARD_VIP=VIP Card @@ -742,7 +683,6 @@ CARD_BACKLIST=BackList Card CARD_COERCE=Coerce Card CARD_POLLING=Polling Card CARD_MOTHERCARD=Mother Card - STATE_UNKNOWN=UnKnown STATE_NORMAL=Normal STATE_LOSE=Lose @@ -751,7 +691,6 @@ STATE_FREEZE=Freeze STATE_ARREARS=Arrears STATE_OVERDUE=OverDue STATE_PREARREARS=PreArrears - RECORD_NO=Record No CARD_NAME=Card Name CARD_STATUS=Card Status @@ -767,22 +706,18 @@ FIRST_ENTER=FirstEnter NO_FIRST_ENTER=No FirstEnter VALID=Valid INVALID=Invalid - PLEASE_SELECT_CARD=Please select card PLEASE_INPUT_CARDNO=Please input cardNo PLEASE_INPUT_USERID=Please input userId WANT_CLEAR_ALL_INFO=Do you want to clear all information ? - ADD_CARD_INDO_FAILED=Failed to add card information ADD_CARD_INFO_AND_PERSON_PICTURE_SUCCEED=Succeed to add card information and person picture ADD_CARD_INFO_SUCCEED_BUT_ADD_PERSON_PICTURE_FAILED=Succeed to add card information, but failed to add person picture CARD_EXISTED_ADD_PERSON_PICTURE_SUCCEED=Card information is existed, succeed to add person picture - MODIFY_CARD_INFO_SUCCEED=Succeed to modify card information MODIFY_CARD_INFO_FAILED=Failed to modify card information MODIFY_CARD_INFO_AND_PERSON_PICTURE_SUCCEED=Succeed to modify card information and person picture MODIFY_CARD_INFO_SUCCEED_BUT_MODIFY_PERSON_PICTURE_FAILED=Succeed to modify card information, but failed to modify person picture - NET_ACCESS_DOOROPEN_METHOD_UNKNOWN=UnKnow NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY=Password NET_ACCESS_DOOROPEN_METHOD_CARD=Card @@ -806,7 +741,7 @@ NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD=Custom password NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD=UserID and password NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD=Face and password NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD=Fingerprint and password -NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE= FingerPrint and face +NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE=FingerPrint and face NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE=Card and face NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD=Face or password NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD=Fingerprint or password @@ -824,7 +759,6 @@ NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD=Card and finger NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD=Card or fingerprint or face or password NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE=ID card and compasion of face and ID card or card or face NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE=ID card and compasion of face or card or face - #ThermalCamera THERMAL_CAMERA=Thermal Camera THERMAL_OPERATE=Operate diff --git a/cloud/dahua/src/main/resources/res_zh_CN.properties b/cloud/dahua/src/main/resources/res_zh_CN.properties index af65df8..3bd8ff8 100644 --- a/cloud/dahua/src/main/resources/res_zh_CN.properties +++ b/cloud/dahua/src/main/resources/res_zh_CN.properties @@ -12,35 +12,28 @@ FACERECOGNITION=\u4EBA\u8138\u8BC6\u522B ALARM_LISTEN=\u62A5\u8B66\u76D1\u542C DEVICE_CONTROL=\u8BBE\u5907\u63A7\u5236 AUTOREGISTER=\u4E3B\u52A8\u6CE8\u518C - ONLINE=\u5728\u7EBF - # Login Info DEVICE_IP=\u8BBE\u5907\u5730\u5740 DEVICE_PORT=\u7AEF\u53E3\u53F7 USERNAME=\u7528\u6237\u540D PASSWORD=\u5BC6\u7801 IP=\u5730\u5740 - LOGIN=\u767B\u5F55 LOGOUT=\u767B\u51FA - LOGIN_SUCCEED=\u767B\u5F55\u6210\u529F LOGIN_FAILED=\u767B\u5F55\u5931\u8D25 DISCONNECT=\u8BBE\u5907\u65AD\u7EBF DISCONNECT_RECONNECTING=\u8BBE\u5907\u65AD\u7EBF\uFF0C\u6B63\u5728\u91CD\u8FDE\u4E2D PROMPT_MESSAGE=\u63D0\u793A\u4FE1\u606F ERROR_MESSAGE=\u9519\u8BEF\u4FE1\u606F - SUCCEED=\u6210\u529F FAILED=\u5931\u8D25 - PLEASE_INPUT_DEVICE_IP=\u8BF7\u8F93\u5165\u8BBE\u5907\u5730\u5740 PLEASE_INPUT_DEVICE_PORT=\u8BF7\u8F93\u5165\u8BBE\u5907\u7AEF\u53E3\u53F7 PLEASE_INPUT_DEVICE_USERNAME=\u8BF7\u8F93\u5165\u7528\u6237\u540D PLEASE_INPUT_DEVICE_PASSWORD=\u8BF7\u8F93\u5165\u5BC6\u7801 PLEASE_INPUT_CONFIRM_PASSWORD=\u8BF7\u8F93\u5165\u786E\u8BA4\u5BC6\u7801 - # Error Info NET_NOERROR=\u6CA1\u6709\u9519\u8BEF NET_ERROR=\u672A\u77E5\u9519\u8BEF @@ -324,7 +317,6 @@ NET_ERROR_CHANNEL_ALREADY_OPENED=\u901A\u9053\u5DF2\u7ECF\u6253\u5F00 NET_ERROR_CREATE_SOCKET=\u521B\u5EFA\u5957\u63A5\u5B57\u5931\u8D25 NET_ERROR_CHANNEL_NUM=\u901A\u9053\u53F7\u9519\u8BEF NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED=\u7EC4ID\u8D85\u8FC7\u6700\u5927\u503C - # RealPlay Info START_REALPLAY=\u5F00\u59CB\u9884\u89C8 STOP_REALPLAY=\u505C\u6B62\u9884\u89C8 @@ -332,24 +324,20 @@ ATTACH=\u667A\u80FD\u8BA2\u9605 DETACH=\u53D6\u6D88\u8BA2\u9605 REALPLAY_SUCCEED=\u5B9E\u65F6\u9884\u89C8\u6210\u529F REALPLAY_FAILED=\u5B9E\u65F6\u9884\u89C8\u5931\u8D25 - CHN=\u901A\u9053 CHANNEL=\u901A\u9053 STREAM_TYPE=\u7801\u6D41 MASTER_AND_SUB_STREAM=\u4E3B\u8F85\u7801\u6D41 MASTER_STREAM=\u4E3B\u7801\u6D41 SUB_STREAM=\u8F85\u7801\u6D41 - # Capture Picture LOCAL_CAPTURE=\u672C\u5730\u6293\u56FE REMOTE_CAPTURE=\u8FDC\u7A0B\u6293\u56FE TIMER_CAPTURE=\u5B9A\u65F6\u6293\u56FE STOP_CAPTURE=\u505C\u6B62\u6293\u56FE INTERVAL=\u95F4\u9694 - TIME_INTERVAL_ILLEGAL=\u65F6\u95F4\u95F4\u9694\u8F93\u5165\u975E\u6CD5 PLEASE_START_REALPLAY=\u8BF7\u5148\u6253\u5F00\u5B9E\u65F6\u9884\u89C8 - # PTZ Info PTZ_CONTROL=\u4E91\u53F0\u63A7\u5236 LEFT_UP=\u5DE6\u4E0A @@ -360,16 +348,13 @@ RIGHT=\u53F3 LEFT_DOWN=\u5DE6\u4E0B DOWN=\u4E0B RIGHT_DOWN=\u53F3\u4E0B - ZOOM_ADD=\u53D8\u500D+ ZOOM_DEC=\u53D8\u500D- FOCUS_ADD=\u8C03\u7126+ FOCUS_DEC=\u8C03\u7126- IRIS_ADD=\u5149\u5708+ IRIS_DEC=\u5149\u5708- - SPEED=\u901F\u7387 - #ITS EVENT_INFO=\u4E8B\u4EF6\u4FE1\u606F EVENT_NAME=\u4E8B\u4EF6\u540D\u79F0 @@ -391,10 +376,8 @@ MANUAL_CAPTURE=\u624B\u52A8\u6293\u62CD OPEN_STROBE=\u51FA\u5165\u53E3\u5F00\u95F8 CLOSE_STROBE=\u51FA\u5165\u53E3\u5173\u95F8 INDEX=\u5E8F\u53F7 - OPERATE=\u64CD\u4F5C FUNCTION=\u57FA\u672C - UNDEFINED_COLOR=\u672A\u5B9A\u4E49\u989C\u8272 BLACK=\u9ED1\u8272 WHITE=\u767D\u8272 @@ -404,22 +387,18 @@ GREEN=\u7EFF\u8272 YELLOW=\u9EC4\u8272 GRAY=\u7070\u8272 ORANGE=\u6A59\u8272 - LIGHT_DUTY=\u5C0F\u578B\u8F66 MEDIUM=\u4E2D\u578B\u8F66 OVER_SIZE=\u5927\u578B\u8F66 MINI_SIZE=\u5FAE\u578B\u8F66 LARGE_SIZE=\u957F\u8F66 - NO_PLATENUMBER=\u65E0\u8F66\u724C MANUALSNAP_SUCCEED=\u624B\u52A8\u6293\u62CD\u6210\u529F MANUALSNAP_FAILED=\u624B\u52A8\u6293\u62CD\u5931\u8D25 - OPEN_STROBE_SUCCEED=\u5F00\u95F8\u6210\u529F OPEN_STROBE_FAILED=\u5F00\u95F8\u5931\u8D25 CLOSE_STROBE_SUCCEED=\u5173\u95F8\u6210\u529F CLOSE_STROBE_FAILED=\u5173\u95F8\u5931\u8D25 - EVENT_IVS_TRAFFICJUNCTION=\u4EA4\u901A\u5361\u53E3 EVENT_IVS_TRAFFIC_RUNREDLIGHT=\u95EF\u7EA2\u706F EVENT_IVS_TRAFFIC_OVERLINE=\u538B\u8F66\u9053\u7EBF @@ -442,7 +421,6 @@ EVENT_IVS_TRAFFIC_BACKING=\u8FDD\u7AE0\u5012\u8F66 EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING=\u8F66\u4F4D\u6709\u8F66 EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING=\u8F66\u4F4D\u65E0\u8F66 EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT=\u4EA4\u901A\u672A\u7CFB\u5B89\u5168\u5E26 - # DownLoad Info DOWNLOAD_RECORD_BYTIME=\u6309\u65F6\u95F4\u4E0B\u8F7D DOWNLOAD_RECORD_BYFILE=\u6309\u6587\u4EF6\u4E0B\u8F7D @@ -452,20 +430,16 @@ STOP_DOWNLOAD=\u505C\u6B62\u4E0B\u8F7D START_TIME=\u5F00\u59CB\u65F6\u95F4 END_TIME=\u7ED3\u675F\u65F6\u95F4 RECORD_TYPE=\u5F55\u50CF\u7C7B\u578B - GENERAL_RECORD=\u666E\u901A\u5F55\u50CF ALARM_RECORD=\u62A5\u8B66\u5F55\u50CF MOTION_DETECTION=\u79FB\u52A8\u68C0\u6D4B\u5F55\u50CF CARD_NUMBER_RECORD=\u5361\u53F7\u5F55\u50CF - QUERY_RECORD_IS_NOT_EXIST=\u67E5\u8BE2\u5F55\u50CF\u4E0D\u5B58\u5728 PLEASE_CHECK_RECORD_TIME=\u8BF7\u68C0\u67E5\u5F55\u50CF\u65F6\u95F4 PLEASE_SELECT_TIME_AGAIN=\u8BF7\u91CD\u65B0\u9009\u62E9\u65F6\u95F4\uFF0C\u6700\u5927\u65F6\u95F4\u5DEE6\u5C0F\u65F6 DOWNLOAD_COMPLETED=\u4E0B\u8F7D\u7ED3\u675F - PLEASE_FIRST_QUERY_RECORD=\u8BF7\u5148\u67E5\u8BE2\u5F55\u50CF PLEASE_FIRST_SELECT_ROW_WITH_DATA=\u8BF7\u5148\u9009\u62E9\u6709\u5F55\u50CF\u7684\u4E00\u884C - # Time Set YEAR=\u5E74 MONTH=\u6708 @@ -476,7 +450,6 @@ SECOND=\u79D2 CONFIRM=\u786E\u5B9A CANCEL=\u53D6\u6D88 DATE_CHOOSER=\u65F6\u95F4\u9009\u62E9 - MONDAY=\u661F\u671F\u4E00 TUESDAY=\u661F\u671F\u4E8C WEDNESDAY=\u661F\u671F\u4E09 @@ -484,7 +457,6 @@ THURSDAY=\u661F\u671F\u56DB FRIDAY=\u661F\u671F\u4E94 SATURDAY=\u661F\u671F\u516D SUNDAY=\u661F\u671F\u65E5 - # Talk TRANSMIT_TYPE=\u8F6C\u53D1\u7C7B\u578B LOCAL_TRANSMIT_TYPE=\u672C\u5730\uFF08\u4E0D\u8F6C\u53D1\uFF09 @@ -493,21 +465,16 @@ TRANSMIT_CHANNEL=\u8F6C\u53D1\u901A\u9053 START_TALK=\u5F00\u59CB\u901A\u8BDD STOP_TALK=\u7ED3\u675F\u901A\u8BDD TALK_FAILED=\u901A\u8BDD\u5931\u8D25 - # DeviceSearchAndInt DEVICESEARCH_OPERATE=\u8BBE\u5907\u641C\u7D22\u64CD\u4F5C DEVICESEARCH_RESULT=\u8BBE\u5907\u641C\u7D22\u7ED3\u679C DEVICEINIT=\u8BBE\u5907\u521D\u59CB\u5316 - DEVICESEARCH=\u8BBE\u5907\u641C\u7D22 DEVICE_POINT_TO_POINT_SEARCH=\u8BBE\u5907IP\u70B9\u5BF9\u70B9\u641C\u7D22 - START_SEARCH=\u5F00\u59CB\u641C\u7D22 STOP_SEARCH=\u505C\u6B62\u641C\u7D22 - START_IP=\u8D77\u59CBIP END_IP=\u7ED3\u675FIP - DEVICE_TYPE=\u8BBE\u5907\u7C7B\u578B MAC=MAC SN=\u5E8F\u5217\u53F7 @@ -521,27 +488,22 @@ GETWAY=\u7F51\u5173 DETAIL_TYPE=\u8BE6\u7EC6\u7C7B\u578B HTTP_PORT=HTTP\u7AEF\u53E3\u53F7 CONFIRM_PASSWORD=\u786E\u8BA4\u5BC6\u7801 - OLD_DEVICE=\u8001\u8BBE\u5907 DONOT_SUPPORT_INITIALIZATION=\u4E0D\u652F\u6301\u521D\u59CB\u5316 NOT_INITIALIZED=\u672A\u521D\u59CB\u5316 INITIALIZED=\u5DF2\u521D\u59CB\u5316 - THE_IP_CONTROL_SCOPE=\u8303\u56F4\u592A\u5927\uFF0C\u8BF7\u63A7\u5236\u57281000\u4E2A\u4E4B\u95F4 PLEASE_FIRST_SELECT_INITIALIZED_DEVICE=\u8BF7\u5148\u9009\u62E9\u9700\u8981\u521D\u59CB\u5316\u7684\u8BBE\u5907 PLEASE_INPUT_PHONE=\u8BF7\u8F93\u5165\u624B\u673A\u53F7 PLEASE_INPUT_MAIL=\u8BF7\u8F93\u5165\u90AE\u7BB1 INCONSISTENT=\u5BC6\u7801\u548C\u786E\u8BA4\u5BC6\u7801\u4E0D\u4E00\u81F4 PLEASE_CHECK_IP=\u8BF7\u68C0\u67E5IP - SEARCHING_WAITING=\u6B63\u5728\u641C\u7D22\uFF0C\u8BF7\u7B49\u5F85\u641C\u7D22\u7ED3\u675F - START_LISTEN=\u5F00\u59CB\u76D1\u542C STOP_LISTEN=\u505C\u6B62\u76D1\u542C SHOW_ALARM_EVENT=\u62A5\u8B66\u4E8B\u4EF6\u7ED3\u679C\u4FE1\u606F ALARM_LISTEN_FAILED=\u62A5\u8B66\u76D1\u542C\u5931\u8D25 ALARM_MESSAGE=\u62A5\u8B66\u4FE1\u606F - EXTERNAL_ALARM=\u5916\u90E8\u62A5\u8B66 MOTION_ALARM=\u52A8\u6001\u68C0\u6D4B\u62A5\u8B66 VIDEOLOST_ALARM=\u89C6\u9891\u4E22\u5931\u62A5\u8B66 @@ -550,7 +512,6 @@ DISKFULL_ALARM=\u786C\u76D8\u6EE1\u62A5\u8B66 DISKERROR_ALARM=\u574F\u786C\u76D8\u62A5\u8B66 START=\u5F00\u59CB STOP=\u7ED3\u675F - CURRENT_TIME=\u5F53\u524D\u65F6\u95F4 DEVICE_REBOOT=\u8BBE\u5907\u91CD\u542F SYNCHRONIZE_TIME=\u65F6\u95F4\u540C\u6B65 @@ -559,22 +520,17 @@ SET_TIME=\u8BBE\u7F6E\u65F6\u95F4 GET_TIME=\u83B7\u53D6\u65F6\u95F4 REBOOT_TIPS=\u60A8\u786E\u5B9A\u8981\u91CD\u542F\u5417\uFF1F OPERATE_SUCCESS=\u64CD\u4F5C\u6210\u529F - #FaceRecognition FACE_GROUP_ID=\u4EBA\u8138\u5E93ID FACE_GROUP_NAME=\u4EBA\u8138\u5E93\u540D\u79F0 PERSON_COUNT=\u4EBA\u5458\u4E2A\u6570 - GROUP_OPERATE=\u4EBA\u8138\u5E93\u64CD\u4F5C PERSON_OPERATE=\u4EBA\u5458\u64CD\u4F5C - FACE_RECOGNITION_EVENT=\u4EBA\u8138\u8BC6\u522B\u4E8B\u4EF6 FACE_DETECT_EVENT=\u4EBA\u8138\u68C0\u6D4B\u4E8B\u4EF6 - GLOBAL_PICTURE=\u5168\u666F\u56FE PERSON_PICTURE=\u4EBA\u8138\u56FE CANDIDATE_PICTURE=\u5019\u9009\u4EBA\u56FE - TIME=\u65F6\u95F4 SEX=\u6027\u522B AGE=\u5E74\u9F84 @@ -611,7 +567,6 @@ WEAR_GLASSES=\u6234\u773C\u955C NO_GLASSES=\u4E0D\u6234\u773C\u955C UNKNOW=\u672A\u77E5 UNLIMITED=\u4E0D\u9650 - NAME=\u59D3\u540D BIRTHDAY=\u751F\u65E5 ID_NO=\u8BC1\u4EF6\u53F7 @@ -619,7 +574,6 @@ ID_TYPE=\u8BC1\u4EF6\u7C7B\u578B SIMILARITY=\u76F8\u4F3C\u5EA6 UID=\u4EBA\u5458\u6807\u8BC6\u7B26 STRANGER=\u964C\u751F\u4EBA - ADD=\u6DFB\u52A0 MODIFY=\u4FEE\u6539 DELETE=\u5220\u9664 @@ -629,27 +583,22 @@ MODIFY_GROUP=\u4FEE\u6539\u4EBA\u8138\u5E93 DEL_GROUP=\u5220\u9664\u4EBA\u8138\u5E93 DISPOSITION=\u5E03\u63A7 DEL_DISPOSITION=\u64A4\u63A7 - FIND_CONDITION=\u67E5\u627E\u6761\u4EF6 FIND_PERSON=\u67E5\u627E\u4EBA\u5458 ADD_PERSON=\u6DFB\u52A0\u4EBA\u5458 MODIFY_PERSON=\u4FEE\u6539\u4EBA\u5458 DEL_PERSON=\u5220\u9664\u4EBA\u5458 - PREVIOUSPAGE=\u4E0A\u4E00\u9875 LASTPAGE=\u4E0B\u4E00\u9875 SELECT_PICTURE=\u9009\u62E9\u56FE\u7247 EVENT_TYPE=\u4E8B\u4EF6\u7C7B\u578B PAGES_NUMBER=\u9875\u6570 - SIMILARITY_RANGE=\u76F8\u4F3C\u5EA6\u8303\u56F4[0, 100] PLEASE_INPUT_GROUPNAME=\u8BF7\u8F93\u5165\u4EBA\u8138\u5E93\u540D\u79F0 PLEASE_SELECT_GROUP=\u8BF7\u9009\u62E9\u4EBA\u8138\u5E93 - PLEASE_SELECT_PERSON=\u8BF7\u9009\u62E9\u4EBA\u5458 PLEASE_ADD_DISPOSITION_INFO=\u8BF7\u6DFB\u52A0\u5E03\u63A7\u4FE1\u606F PLEASE_SELECT_DEL_DISPOSITION_INFO=\u8BF7\u9009\u62E9\u64A4\u63A7\u4FE1\u606F - #AutoRegister AUTOREGISTER_LISTEN=\u4E3B\u52A8\u6CE8\u518C\u76D1\u542C DEVICE_CONFIG=\u8BBE\u5907\u914D\u7F6E @@ -669,17 +618,14 @@ GET=\u83B7\u53D6 SET=\u8BBE\u7F6E RECORD=\u5F55\u97F3 DEVICE_LOGIN=\u8BBE\u5907\u5DF2\u767B\u5F55 - ALREADY_EXISTED=\u5DF2\u5B58\u5728 ALREADY_EXISTED_WHETHER_OR_NOT_TO_COVER=\u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6(\u5426\uFF0C\u4E0D\u4F1A\u5BFC\u51FA) FILE_OPEN_PLEASE_CLOSE_FILE=\u6587\u4EF6\u88AB\u6253\u5F00\uFF0C\u8BF7\u5148\u5173\u95ED\u6587\u4EF6 IMPORT_COMPLETION=\u5BFC\u5165\u5B8C\u6210 EXPORT_COMPLETION=\u5BFC\u51FA\u5B8C\u6210 FILE_NOT_EXIST=\u6587\u4EF6\u4E0D\u5B58\u5728 - PLEASE_INPUT=\u8BF7\u8F93\u5165 MAX_SUPPORT_100=\u6700\u5927\u652F\u6301100\u4E2A - #Attendance ATTENDANCE=\u8003\u52E4\u673A USER_ID=\u7528\u6237ID @@ -720,19 +666,14 @@ USER_NAME_EXCEED_LENGTH=\u7528\u6237\u540D\u8D85\u8FC7\u6700\u5927\u957F\u5EA6 CARD_NO_EXCEED_LENGTH=\u5361\u53F7\u8D85\u8FC7\u6700\u5927\u957F\u5EA6 CARD_NAME_EXCEED_LENGTH=\u5361\u540D\u8D85\u8FC7\u6700\u5927\u9650\u5236 CARD_PASSWD_EXCEED_LENGTH=\u5361\u5BC6\u7801\u8D85\u8FC7\u6700\u5927\u9650\u5236 - #Gate GATE=\u95F8\u673A - CARD_OPERATE=\u5361\u64CD\u4F5C CARD_INFO=\u5361\u4FE1\u606F CARD_MANAGER=\u5361\u7BA1\u7406 - CLEAR=\u6E05\u7A7A - OPEN_STATUS=\u5F00\u95E8\u72B6\u6001 OPEN_METHOD=\u5F00\u95E8\u65B9\u5F0F - CARD_UNKNOW=\u672A\u77E5\u5361 CARD_GENERAL=\u4E00\u822C\u5361 CARD_VIP=VIP\u5361 @@ -742,7 +683,6 @@ CARD_BACKLIST=\u9ED1\u540D\u5355\u5361 CARD_COERCE=\u80C1\u8FEB\u5361 CARD_POLLING=\u5DE1\u68C0\u5361 CARD_MOTHERCARD=\u6BCD\u5361 - STATE_UNKNOWN=\u672A\u77E5 STATE_NORMAL=\u6B63\u5E38 STATE_LOSE=\u4E22\u5931 @@ -751,7 +691,6 @@ STATE_FREEZE=\u51BB\u7ED3 STATE_ARREARS=\u6B20\u8D39 STATE_OVERDUE=\u903E\u671F STATE_PREARREARS=\u9884\u6B20\u8D39 - RECORD_NO=\u8BB0\u5F55\u96C6\u7F16\u53F7 CARD_NAME=\u5361\u540D CARD_STATUS=\u5361\u72B6\u6001 @@ -767,22 +706,18 @@ FIRST_ENTER=\u9996\u5361 NO_FIRST_ENTER=\u975E\u9996\u5361 VALID=\u6709\u6548 INVALID=\u65E0\u6548 - PLEASE_SELECT_CARD=\u8BF7\u9009\u62E9\u5361 PLEASE_INPUT_CARDNO=\u8BF7\u8F93\u5165\u5361\u53F7 PLEASE_INPUT_USERID=\u8BF7\u8F93\u5165\u7528\u6237ID WANT_CLEAR_ALL_INFO=\u4F60\u662F\u5426\u60F3\u8981\u6E05\u7A7A\u6240\u6709\u4FE1\u606F? - ADD_CARD_INDO_FAILED=\u6DFB\u52A0\u5361\u4FE1\u606F\u5931\u8D25 ADD_CARD_INFO_AND_PERSON_PICTURE_SUCCEED=\u6DFB\u52A0\u5361\u4FE1\u606F\u548C\u4EBA\u8138\u6210\u529F ADD_CARD_INFO_SUCCEED_BUT_ADD_PERSON_PICTURE_FAILED=\u6DFB\u52A0\u5361\u4FE1\u606F\u6210\u529F\uFF0C\u4F46\u6DFB\u52A0\u4EBA\u8138\u5931\u8D25 CARD_EXISTED_ADD_PERSON_PICTURE_SUCCEED=\u5361\u4FE1\u606F\u5DF2\u5B58\u5728\uFF0C\u6DFB\u52A0\u4EBA\u8138\u6210\u529F - MODIFY_CARD_INFO_SUCCEED=\u4FEE\u6539\u5361\u4FE1\u606F\u6210\u529F MODIFY_CARD_INFO_FAILED=\u4FEE\u6539\u5361\u4FE1\u606F\u5931\u8D25 MODIFY_CARD_INFO_AND_PERSON_PICTURE_SUCCEED=\u4FEE\u6539\u5361\u4FE1\u606F\u548C\u4EBA\u8138\u6210\u529F MODIFY_CARD_INFO_SUCCEED_BUT_MODIFY_PERSON_PICTURE_FAILED=\u4FEE\u6539\u5361\u4FE1\u606F\u6210\u529F\uFF0C\u4F46\u4FEE\u6539\u4EBA\u8138\u5931\u8D25 - NET_ACCESS_DOOROPEN_METHOD_UNKNOWN=\u672A\u77E5 NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY=\u5BC6\u7801\u5F00\u9501 NET_ACCESS_DOOROPEN_METHOD_CARD=\u5237\u5361\u5F00\u9501 @@ -818,13 +753,12 @@ NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD=\u5237\u5361+\u4EBA\u8138+\u5BC NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD=\u5237\u5361+\u6307\u7EB9+\u5BC6\u7801\u5F00\u9501 NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE=\u5361+\u6307\u7EB9+\u4EBA\u8138\u7EC4\u5408\u5F00\u9501 NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD=\u6307\u7EB9\u6216\u4EBA\u8138\u6216\u5BC6\u7801 -NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD =\u5361\u6216\u4EBA\u8138\u6216\u5BC6\u7801\u5F00\u9501 +NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD=\u5361\u6216\u4EBA\u8138\u6216\u5BC6\u7801\u5F00\u9501 NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE=\u5361\u6216\u6307\u7EB9\u6216\u4EBA\u8138\u5F00\u9501 NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD=\u5361+\u6307\u7EB9+\u4EBA\u8138+\u5BC6\u7801\u7EC4\u5408\u5F00\u9501 NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD=\u5361\u6216\u6307\u7EB9\u6216\u4EBA\u8138\u6216\u5BC6\u7801\u5F00\u9501 NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE=(\u8EAB\u4EFD\u8BC1+\u4EBA\u8BC1\u6BD4\u5BF9)\u6216 \u5237\u5361 \u6216 \u4EBA\u8138 NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE=\u4EBA\u8BC1\u6BD4\u5BF9 \u6216 \u5237\u5361(\u4E8C\u7EF4\u7801) \u6216 \u4EBA\u8138 - #ThemalCamera THERMAL_CAMERA=\u70ED\u6210\u50CF THERMAL_OPERATE=\u64CD\u4F5C diff --git a/cloud/dahua/src/main/resources/xiaoanmapper/usermapper.xml b/cloud/dahua/src/main/resources/xiaoanmapper/usermapper.xml index 130de98..ddaf90e 100644 --- a/cloud/dahua/src/main/resources/xiaoanmapper/usermapper.xml +++ b/cloud/dahua/src/main/resources/xiaoanmapper/usermapper.xml @@ -3,10 +3,10 @@ - - - - + + + + \ No newline at end of file diff --git a/cloud/dahua/src/test/java/com/example/dahua/DahuaApplicationTests.java b/cloud/dahua/src/test/java/com/example/dahua/DahuaApplicationTests.java index 739393d..b9d1d3d 100644 --- a/cloud/dahua/src/test/java/com/example/dahua/DahuaApplicationTests.java +++ b/cloud/dahua/src/test/java/com/example/dahua/DahuaApplicationTests.java @@ -1,11 +1,7 @@ package com.example.dahua; -import com.drew.imaging.jpeg.JpegMetadataReader; -import com.drew.imaging.jpeg.JpegProcessingException; -import com.drew.metadata.Directory; -import com.drew.metadata.Metadata; -import com.drew.metadata.MetadataException; -import com.drew.metadata.Tag; +import com.alibaba.fastjson.JSON; + import com.example.dahua.async.SendUserInfoTask; import com.example.dahua.bean.*; import com.example.dahua.dao.TestDao; @@ -13,8 +9,11 @@ import com.example.dahua.dao.UserDao; import com.example.dahua.mqtt.MqttManager; import com.example.dahua.service.UserService; import com.example.dahua.xiananDao.SendRecordDao; +import org.apache.http.util.TextUtils; import org.junit.Test; import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpEntity; @@ -22,13 +21,8 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; -import java.io.*; -import java.text.SimpleDateFormat; import java.util.*; @RunWith(SpringRunner.class) @@ -50,7 +44,7 @@ public class DahuaApplicationTests { @Autowired SendRecordDao sendRecordDao; - List list = new ArrayList<>(); + List list = new ArrayList(); long sysTime = 0; /* @Test @@ -308,131 +302,208 @@ public class DahuaApplicationTests { }*/ + Logger logger = LoggerFactory.getLogger(DahuaApplicationTests.class); + @Test public void test2() { - - List stuCodes = sendRecordDao.getStudentCode(); - RestTemplate restTemplate = new RestTemplate(); + String sex = "2"; + List studentBeans = userDao.getStudentWithSchoolId("27", sex, "2"); + String[] deviceids = null; + + if (sex.equals("1")) { + deviceids = new String[]{"253169240", "253169204", "253169216", "253169229", "253169870", "253169869", "253169873", "253169226", "253169191"}; + } else if (sex.equals("2") || sex.equals("3")) { + deviceids = new String[]{"253169192", "253169444", "253169469", "253169463", "253169456", "253169467", "253169462", "253169468"}; + } else { - for (int i = 0; i < stuCodes.size(); i++) { - String stuCode = stuCodes.get(i); - String url = "http://114.55.30.100:8991/user/checkFace?url=E:/wwwhtdocs/SmartCampus/face17e5/School1037/Student/" + stuCode + ".png"; - ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); - System.out.println("responseEntity:" + responseEntity.getBody()); } + String times = "00:00,23:00"; - } + System.out.println("studentBeans:" + studentBeans.get(0).toString()); - @Test - public void test1() { + for (int i = 0; i < studentBeans.size(); i++) { + UserInfoBean studentBean = studentBeans.get(i); + String card = studentBean.getStudent_num(); + if (!TextUtils.isEmpty(card)) { + for (int j = 0; j < deviceids.length; j++) { + String clint_id = deviceids[j]; -// String url = "http://121.40.109.21:9000/cleanFail?deviceId="; -// RestTemplate restTemplate = new RestTemplate(); -// -// String result = restTemplate.getForObject(url + "253164293", String.class); -// System.out.println("result:" + result); - /* try { - BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\TaoHandong\\copy\\宿舍.txt")); - String content = null; -// StringBuilder stringBuilder = new StringBuilder(); - Set strings = new HashSet<>(); - while ((content = bufferedReader.readLine()) != null) { - strings.add(content); - } - System.out.println("strings:" + strings.toString()); + String url = "http://campus.myjxt.com/api/OneCard/SendSingleByClintId?SchoolId=" + 27 + "&Card=" + card + "&ClassId=" + studentBean.getClass_id() + "&clint_id=" + clint_id + "×=" + times + + "&studentType=2&sex=" + sex; + System.out.println("下发卡号url:" + url); + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + logger.error("下发卡号:{}", responseEntity.getBody()); + } - List studentIds = userDao.getStudentIds(); + } + } - Iterator iterator = strings.iterator(); + } - Set result = new HashSet<>(); - while (iterator.hasNext()) { + @Test + public void sendStuPost() { - String studentId = iterator.next(); - boolean isHas = false; - for (int i = 0; i < studentIds.size(); i++) { - if (studentId.contains(studentIds.get(i))) isHas = true; + RestTemplate restTemplate = new RestTemplate(); + List teacherBeans = userDao.getTeachers("562"); + String[] deviceids = new String[]{"253164171", "253164252"}; + String url = "http://121.40.109.21:9000/setSignalCardInfo"; + + for (int i = 0; i < teacherBeans.size(); i++) { + TeacherBean teacherBean = teacherBeans.get(i); + + if (!TextUtils.isEmpty(teacherBean.getTeacher_num())) + for (int j = 0; j < deviceids.length; j++) { + String deviceId = deviceids[j]; + + SendCards sendCards = new SendCards(); + sendCards.setCardNo(teacherBean.getTeacher_num()); + sendCards.setEndTime("2030-06-23 00:07:59"); + sendCards.setId("5"); + sendCards.setShiduan("0"); + sendCards.setSn(deviceId); + sendCards.setStartTime("2020-06-23 00:07:59"); + sendCards.setType("1"); + + Map body = new HashMap(); + body.put("cardNo", teacherBean.getTeacher_num()); + body.put("endTime", "2030-06-23T00:07:59"); + body.put("id", "5"); + body.put("shiduan", "0"); + body.put("sn", deviceId); + body.put("startTime", "2020-06-23T00:07:59"); + body.put("type", "1"); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + String jsonData = JSON.toJSONString(body); + HttpEntity request = new HttpEntity(jsonData, headers); + +// String responseEntity = restTemplate.postForObject(url,new Gson().toJson(sendCards), String.class); + ResponseEntity responseEntity = restTemplate.postForEntity(url, request, String.class); + System.out.println("下发卡号:" + responseEntity.getBody()); } - if (!isHas) result.add("'" + studentId + "'"); - - } - - System.out.println("result:" + result.toString()+result.size()); + } - } catch (Exception e) { - e.printStackTrace(); - }*/ } - @Test - public void Mqtt() { - + public void delete() { + RestTemplate restTemplate = new RestTemplate(); + String sex = "2"; + List studentBeans = userDao.getStudentWithSchoolId("27", sex, "1"); + String[] deviceids = null; + + //女生设备 + deviceids = new String[]{"253169192", "253169444", "253169469", "253169463", "253169456", "253169467", "253169462", "253169468", "253169454"}; + + String url = "http://121.40.109.21:9000/clearSinglePower"; + System.out.println("学生数量:" + studentBeans.size()); + for (int i = 0; i < studentBeans.size(); i++) { + UserInfoBean teacherBean = studentBeans.get(i); + + if (!TextUtils.isEmpty(teacherBean.getStudent_num())) + for (int j = 0; j < deviceids.length; j++) { + String deviceId = deviceids[j]; + + Map body = new HashMap(); + body.put("cardNo", teacherBean.getStudent_num()); + body.put("id", "8"); + body.put("sn", deviceId); + body.put("type", "1"); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + String jsonData = JSON.toJSONString(body); + HttpEntity request = new HttpEntity(jsonData, headers); + +// String responseEntity = restTemplate.postForObject(url,new Gson().toJson(sendCards), String.class); + ResponseEntity responseEntity = restTemplate.postForEntity(url, request, String.class); + System.out.println("下发卡号:" + responseEntity.getBody()); + } - for (int i = 0; i < 2; i++) { - sendUserInfoTask.testSMS(); } - /* File file = new File("C:\\Users\\Administrator\\Desktop\\2020-04-30 08.log"); - - try { - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GB2312")); - String content = null; - - MqttManager mqttManager = new MqttManager(); + } - mqttManager.init(); - while ((content=bufferedReader.readLine())!=null){ + @Test + public void delete1() { - String cardNum = content.substring(content.indexOf("卡号")+3,content.indexOf("卡号")+11); + RestTemplate restTemplate = new RestTemplate(); + String sex = "2"; + List studentBeans = userDao.getStudentWithSchoolId("27", sex, "2"); + String[] deviceids = null; + + //男生设备 + deviceids = new String[]{"253169240", "253169204", "253169216", "253169229", "253169870", "253169869", "253169873", "253169226", "253169191"}; + String url = "http://121.40.109.21:9000/clearSinglePower"; + System.out.println("学生数量:" + studentBeans.size()); + for (int i = studentBeans.size() - 1; i >= 0; i--) { + UserInfoBean teacherBean = studentBeans.get(i); + + if (!TextUtils.isEmpty(teacherBean.getStudent_num())) + for (int j = 0; j < deviceids.length; j++) { + String deviceId = deviceids[j]; + + Map body = new HashMap(); + body.put("cardNo", teacherBean.getStudent_num()); + body.put("id", "8"); + body.put("sn", deviceId); + body.put("type", "1"); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + String jsonData = JSON.toJSONString(body); + HttpEntity request = new HttpEntity(jsonData, headers); + +// String responseEntity = restTemplate.postForObject(url,new Gson().toJson(sendCards), String.class); + ResponseEntity responseEntity = restTemplate.postForEntity(url, request, String.class); + System.out.println("下发卡号:" + responseEntity.getBody()); + } - System.out.println("cardNum:"+cardNum); + } - String inOrOut = content.substring(content.indexOf("方向:")+3,content.indexOf("方向:")+5).endsWith("进门")?"0":"1"; + } - System.out.println("inOrOut:"+inOrOut); + @Test + public void test1() { + List list = userDao.getStudentUserIdsWith(); - List clintIds = userDao.getClintIds(); - for (int i = 0; i < clintIds.size(); i++) { - String clintId = clintIds.get(i); + for (int i = 0; i < list.size(); i++) { + StudentBean studentBean = list.get(i); + } - String data = "{\"cmd\":\""+34+"\",\"clientId\":\""+clintId+"\",\"data\":{\"cardNum\":\""+cardNum+"\",\"inOrOut\":\""+inOrOut+"\"}}"; + System.out.println("list:" + list.toString()); - mqttManager.sendMq(clintId, data); - } + } - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - }*/ + @Test + public void Mqtt() { - /* MqttManager mqttManager = new MqttManager(); + MqttManager mqttManager = new MqttManager(); mqttManager.init(); - List stringList = userDao.getAllDecWithSch(27); - System.out.println("stringList:" + stringList); + List stringList = userDao.getAllDecWithSch(13); + System.out.println("stringList:" + stringList.size()); for (int i = 0; i < stringList.size(); i++) { String devId = stringList.get(i); //30关闭显示屏 31打开显示屏,9升级客户端 - mqttManager.sendMq(devId, 9); - }*/ + mqttManager.sendMq(devId, "9"); + } } } diff --git a/cloud/fIle-center/pom.xml b/cloud/fIle-center/pom.xml index 7aac998..49f370f 100644 --- a/cloud/fIle-center/pom.xml +++ b/cloud/fIle-center/pom.xml @@ -55,6 +55,7 @@ 4.1.2 + diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/FileApplication.java b/cloud/fIle-center/src/main/java/com/sincere/file/FileApplication.java index cb82a5e..58eac03 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/FileApplication.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/FileApplication.java @@ -11,6 +11,6 @@ import org.springframework.context.annotation.Configuration; public class FileApplication { public static void main(String[] args) { - SpringApplication.run(FileApplication.class,args); + SpringApplication.run(FileApplication.class, args); } } diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/Test.java b/cloud/fIle-center/src/main/java/com/sincere/file/Test.java index adfec6e..6c06117 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/Test.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/Test.java @@ -23,7 +23,8 @@ public class Test { param.add("file", resource); // param.add("fileName", "test.txt"); String string = rest.postForObject(url, param, String.class); - System.out.println("sssssssssssss:"+string); + System.out.println("sssssssssssss:" + string); } + } diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/config/AliyunOSSConfig.java b/cloud/fIle-center/src/main/java/com/sincere/file/config/AliyunOSSConfig.java index 6b151eb..046b403 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/config/AliyunOSSConfig.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/config/AliyunOSSConfig.java @@ -15,22 +15,22 @@ import org.springframework.context.annotation.Configuration; @Configuration public class AliyunOSSConfig { - @Value("${aliyun.oss.endpoint:xxxxx}") - private String endpoint; - @Value("${aliyun.oss.access-key:xxxxx}") - private String accessKeyId; - @Value("${aliyun.oss.accessKeySecret:xxxxx}") - private String accessKeySecret; + @Value("${aliyun.oss.endpoint:xxxxx}") + private String endpoint; + @Value("${aliyun.oss.access-key:xxxxx}") + private String accessKeyId; + @Value("${aliyun.oss.accessKeySecret:xxxxx}") + private String accessKeySecret; - /** - * 阿里云文件存储client - * 只有配置了aliyun.oss.access-key才可以使用 - */ - @Bean - @ConditionalOnProperty(name = "aliyun.oss.access-key", matchIfMissing = true) - public OSSClient ossClient() { - OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); - return ossClient; - } + /** + * 阿里云文件存储client + * 只有配置了aliyun.oss.access-key才可以使用 + */ + @Bean + @ConditionalOnProperty(name = "aliyun.oss.access-key", matchIfMissing = true) + public OSSClient ossClient() { + OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); + return ossClient; + } } diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/config/SwaggerConfig.java b/cloud/fIle-center/src/main/java/com/sincere/file/config/SwaggerConfig.java index b1dd9af..311dbaf 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/config/SwaggerConfig.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/config/SwaggerConfig.java @@ -30,60 +30,59 @@ import java.util.List; @EnableSwagger2 public class SwaggerConfig implements WebMvcConfigurer { - @Bean - public Docket createRestApi() { - - - ParameterBuilder tokenPar = new ParameterBuilder(); - List pars = new ArrayList<>(); - tokenPar.name("ossPath").description("OSS存储路径,例如: YikeData"). - modelRef(new ModelRef("string")). - parameterType("header").required(false).build(); - - pars.add(tokenPar.build()); - - return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select() - .apis(RequestHandlerSelectors.basePackage("com.sincere.file.control")) + @Bean + public Docket createRestApi() { + + + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList<>(); + tokenPar.name("ossPath").description("OSS存储路径,例如: YikeData"). + modelRef(new ModelRef("string")). + parameterType("header").required(false).build(); + + pars.add(tokenPar.build()); + + return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select() + .apis(RequestHandlerSelectors.basePackage("com.sincere.file.control")) // .apis(RequestHandlerSelectors.any()) // .paths( input ->PathSelectors.regex("/file/*").apply(input) || PathSelectors.regex("/fileinfo.*").apply(input) // ) - .paths(PathSelectors.any()) - .build().globalOperationParameters(pars); - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder().title("文件中心api").description("文件中心api").version("1.0").build(); - } - - @Bean - public ViewResolver viewResolver() { - InternalResourceViewResolver resolver = new InternalResourceViewResolver(); - resolver.setViewClass(JstlView.class); - resolver.setPrefix("/"); - resolver.setSuffix(".html"); - return resolver; - - } - - @Bean - public MessageSource messageSource() { - ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); - messageSource.setBasename("messages"); - return messageSource; - } - - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { + .paths(PathSelectors.any()) + .build().globalOperationParameters(pars); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder().title("文件中心api").description("文件中心api").version("1.0").build(); + } + + @Bean + public ViewResolver viewResolver() { + InternalResourceViewResolver resolver = new InternalResourceViewResolver(); + resolver.setViewClass(JstlView.class); + resolver.setPrefix("/"); + resolver.setSuffix(".html"); + return resolver; + + } + + @Bean + public MessageSource messageSource() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("messages"); + return messageSource; + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { // super.addResourceHandlers(registry); - registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); - registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); - } + registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); + } - @Override - public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } + @Override + public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { + configurer.enable(); + } - } \ No newline at end of file diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/control/FileControl.java b/cloud/fIle-center/src/main/java/com/sincere/file/control/FileControl.java index aeb5c2c..b682706 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/control/FileControl.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/control/FileControl.java @@ -83,7 +83,7 @@ public class FileControl { @RequestMapping(value = "getWord", method = RequestMethod.GET) @ApiOperation("获取21世纪题目") @ApiImplicitParams( - {@ApiImplicitParam(name = "url",value = "链接")} + {@ApiImplicitParam(name = "url", value = "链接")} ) public String getWord(@RequestParam("url") String url) { diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/model/FileInfo.java b/cloud/fIle-center/src/main/java/com/sincere/file/model/FileInfo.java index 66df809..c7a78f8 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/model/FileInfo.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/model/FileInfo.java @@ -9,31 +9,31 @@ import java.util.Date; * @author 作者 owen E-mail: 624191343@qq.com * @version 创建时间:2017年11月12日 上午22:57:51 * file实体类 -*/ + */ @Data public class FileInfo implements Serializable { - private static final long serialVersionUID = -1438078028040922174L; -// md5字段 - private String id; -// 原始文件名 - private String name; -// 是否图片 - private Boolean isImg; -// 上传文件类型 - private String contentType; -// 文件大小 - private long size; -// 冗余字段 - private String path; -// oss访问路径 oss需要设置公共读 - private String url; -// FileType字段 - private String source; - private Date createTime; - /** - * 目录磁盘地址 - */ + private static final long serialVersionUID = -1438078028040922174L; + // md5字段 + private String id; + // 原始文件名 + private String name; + // 是否图片 + private Boolean isImg; + // 上传文件类型 + private String contentType; + // 文件大小 + private long size; + // 冗余字段 + private String path; + // oss访问路径 oss需要设置公共读 + private String url; + // FileType字段 + private String source; + private Date createTime; + /** + * 目录磁盘地址 + */ // @TableField(exist = false) // private String pathDir; } diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/service/FileService.java b/cloud/fIle-center/src/main/java/com/sincere/file/service/FileService.java index be26bd2..07976db 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/service/FileService.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/service/FileService.java @@ -10,18 +10,18 @@ import java.util.Map; * @author 作者 owen E-mail: 624191343@qq.com * @version 创建时间:2017年11月12日 上午22:57:51 * 文件service 目前仅支持阿里云oss,七牛云 -*/ + */ public interface FileService { - FileInfo upload(MultipartFile file,String filePath) throws Exception; + FileInfo upload(MultipartFile file, String filePath) throws Exception; - String uploadLocalFile(File file,String filePath); + String uploadLocalFile(File file, String filePath); + + void delete(String fileName, String filePath); + + FileInfo getById(String id); - void delete(String fileName,String filePath); - - FileInfo getById(String id); - // PageResult findList(Map params); - void unZip(String filePath, String descDir) throws RuntimeException ; + void unZip(String filePath, String descDir) throws RuntimeException; } diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AbstractFileService.java b/cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AbstractFileService.java index a54ce4f..f14e277 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AbstractFileService.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AbstractFileService.java @@ -14,50 +14,52 @@ import java.util.concurrent.Executors; * @version 创建时间:2017年11月12日 上午22:57:51 * AbstractFileService 抽取类 * 根据filetype 实例化具体oss对象 -*/ + */ @Slf4j public abstract class AbstractFileService implements FileService { -// protected abstract FileDao getFileDao(); - protected static ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); - @Override - public FileInfo upload(MultipartFile file,String filePath) throws Exception { - FileInfo fileInfo = FileUtil.getFileInfo(file); + // protected abstract FileDao getFileDao(); + protected static ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); - uploadFile(file, fileInfo,filePath); + @Override + public FileInfo upload(MultipartFile file, String filePath) throws Exception { + FileInfo fileInfo = FileUtil.getFileInfo(file); - return fileInfo; - } + uploadFile(file, fileInfo, filePath); - /** - * 上传文件 - * - * @param file - * @param fileInfo - */ - protected abstract void uploadFile(MultipartFile file, FileInfo fileInfo,String filePath) throws Exception; + return fileInfo; + } - @Override - public void delete(String fileName,String filePath) { - deleteFile(fileName,filePath); + /** + * 上传文件 + * + * @param file + * @param fileInfo + */ + protected abstract void uploadFile(MultipartFile file, FileInfo fileInfo, String filePath) throws Exception; + + @Override + public void delete(String fileName, String filePath) { + deleteFile(fileName, filePath); // getFileDao().delete(fileInfo.getId()); - log.info("删除文件:{}", fileName); - } + log.info("删除文件:{}", fileName); + } + + /** + * 删除文件资源 + *

+ * // * @param fileInfo + * + * @return + */ + protected abstract boolean deleteFile(String fileName, String filePath); - /** - * 删除文件资源 - * -// * @param fileInfo - * @return - */ - protected abstract boolean deleteFile(String fileName,String filePath); - - @Override - public FileInfo getById(String id){ + @Override + public FileInfo getById(String id) { // return getFileDao().getById(id); - return null; - } - + return null; + } + // public PageResult findList(Map params){ // //设置分页信息,分别是当前页数和每页显示的总记录数【记住:必须在mapper接口中的方法执行之前设置该分页信息】 // PageHelper.startPage(MapUtils.getInteger(params, "page"),MapUtils.getInteger(params, "limit"),true); @@ -67,8 +69,8 @@ public abstract class AbstractFileService implements FileService { // return PageResult.builder().data(pageInfo.getList()).code(0).count(pageInfo.getTotal()).build(); // } - @Override - public void unZip(String filePath, String descDir) throws RuntimeException { + @Override + public void unZip(String filePath, String descDir) throws RuntimeException { - } + } } diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AliyunOssServiceImpl.java b/cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AliyunOssServiceImpl.java index 2c01091..abded0f 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AliyunOssServiceImpl.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/service/impl/AliyunOssServiceImpl.java @@ -15,8 +15,8 @@ import java.util.UUID; /** * @author 作者 owen E-mail: 624191343@qq.com * @version 创建时间:2017年11月12日 上午22:57:51 -* 阿里云oss存储文件 -*/ + * 阿里云oss存储文件 + */ @Service("aliyunOssServiceImpl") public class AliyunOssServiceImpl extends AbstractFileService { @@ -33,19 +33,19 @@ public class AliyunOssServiceImpl extends AbstractFileService { // return FileType.ALIYUN; // } - @Autowired - private OSSClient ossClient; + @Autowired + private OSSClient ossClient; - @Value("${aliyun.oss.bucketName:xxxxx}") - private String bucketName; - @Value("${aliyun.oss.domain:xxxxx}") - private String domain; + @Value("${aliyun.oss.bucketName:xxxxx}") + private String bucketName; + @Value("${aliyun.oss.domain:xxxxx}") + private String domain; - @Override - protected void uploadFile(MultipartFile file, FileInfo fileInfo,String filePath) throws Exception { + @Override + protected void uploadFile(MultipartFile file, FileInfo fileInfo, String filePath) throws Exception { // String fileName = UUID.randomUUID().toString()+"."+fileInfo.getName().split("\\.")[1]; - String fileName = fileInfo.getName(); - String keyObjectName = filePath+"/"+fileName; + String fileName = fileInfo.getName(); + String keyObjectName = filePath + "/" + fileName; // boolean isExist = ossClient.doesObjectExist(bucketName, keyObjectName); // if (isExist){ @@ -53,21 +53,21 @@ public class AliyunOssServiceImpl extends AbstractFileService { // keyObjectName = filePath+"/"+fileName.split("\\.")[0]+; // } - ossClient.putObject(bucketName, keyObjectName, file.getInputStream()); + ossClient.putObject(bucketName, keyObjectName, file.getInputStream()); - fileInfo.setUrl(domain+"/" +keyObjectName); - } + fileInfo.setUrl(domain + "/" + keyObjectName); + } - @Override - protected boolean deleteFile(String fileName,String filePath) { - ossClient.deleteObject(bucketName,filePath+"/"+ fileName); - return true; - } + @Override + protected boolean deleteFile(String fileName, String filePath) { + ossClient.deleteObject(bucketName, filePath + "/" + fileName); + return true; + } - @Override - public String uploadLocalFile(File file, String filePath) { - PutObjectResult putObjectResult = ossClient.putObject(bucketName,filePath+"/"+file.getName(),file); - System.out.println("uploadLocalFile;"+putObjectResult.toString()); - return domain+"/"+filePath+"/"+file.getName(); - } + @Override + public String uploadLocalFile(File file, String filePath) { + PutObjectResult putObjectResult = ossClient.putObject(bucketName, filePath + "/" + file.getName(), file); + System.out.println("uploadLocalFile;" + putObjectResult.toString()); + return domain + "/" + filePath + "/" + file.getName(); + } } diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/utils/FileUtil.java b/cloud/fIle-center/src/main/java/com/sincere/file/utils/FileUtil.java index 18e238c..e1ac9c3 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/utils/FileUtil.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/utils/FileUtil.java @@ -14,75 +14,75 @@ import java.util.Date; * @author 作者 owen E-mail: 624191343@qq.com * @version 创建时间:2017年11月12日 上午22:57:51 * 文件工具类 -*/ + */ @Slf4j public class FileUtil { - public static FileInfo getFileInfo(MultipartFile file) throws Exception { - String md5 = fileMd5(file.getInputStream()); - - FileInfo fileInfo = new FileInfo(); - fileInfo.setId(md5);// 将文件的md5设置为文件表的id - fileInfo.setName(file.getOriginalFilename()); - fileInfo.setContentType(file.getContentType()); - fileInfo.setIsImg(fileInfo.getContentType().startsWith("image/")); - fileInfo.setSize(file.getSize()); - fileInfo.setCreateTime(new Date()); - - return fileInfo; - } - - /** - * 文件的md5 - * - * @param inputStream - * @return - */ - public static String fileMd5(InputStream inputStream) { - try { - return DigestUtils.md5Hex(inputStream); - } catch (IOException e) { - log.error("FileUtil->fileMd5:{}" ,e.getMessage()); - } - - return null; - } - - public static String saveFile(MultipartFile file, String path) { - try { - File targetFile = new File(path); - if (targetFile.exists()) { - return path; - } - - if (!targetFile.getParentFile().exists()) { - targetFile.getParentFile().mkdirs(); - } - file.transferTo(targetFile); - - return path; - } catch (Exception e) { - log.error("FileUtil->saveFile:{}" ,e.getMessage()); - } - - return null; - } - - public static boolean deleteFile(String pathname) { - File file = new File(pathname); - if (file.exists()) { - boolean flag = file.delete(); - - if (flag) { - File[] files = file.getParentFile().listFiles(); - if (files == null || files.length == 0) { - file.getParentFile().delete(); - } - } - - return flag; - } - - return false; - } + public static FileInfo getFileInfo(MultipartFile file) throws Exception { + String md5 = fileMd5(file.getInputStream()); + + FileInfo fileInfo = new FileInfo(); + fileInfo.setId(md5);// 将文件的md5设置为文件表的id + fileInfo.setName(file.getOriginalFilename()); + fileInfo.setContentType(file.getContentType()); + fileInfo.setIsImg(fileInfo.getContentType().startsWith("image/")); + fileInfo.setSize(file.getSize()); + fileInfo.setCreateTime(new Date()); + + return fileInfo; + } + + /** + * 文件的md5 + * + * @param inputStream + * @return + */ + public static String fileMd5(InputStream inputStream) { + try { + return DigestUtils.md5Hex(inputStream); + } catch (IOException e) { + log.error("FileUtil->fileMd5:{}", e.getMessage()); + } + + return null; + } + + public static String saveFile(MultipartFile file, String path) { + try { + File targetFile = new File(path); + if (targetFile.exists()) { + return path; + } + + if (!targetFile.getParentFile().exists()) { + targetFile.getParentFile().mkdirs(); + } + file.transferTo(targetFile); + + return path; + } catch (Exception e) { + log.error("FileUtil->saveFile:{}", e.getMessage()); + } + + return null; + } + + public static boolean deleteFile(String pathname) { + File file = new File(pathname); + if (file.exists()) { + boolean flag = file.delete(); + + if (flag) { + File[] files = file.getParentFile().listFiles(); + if (files == null || files.length == 0) { + file.getParentFile().delete(); + } + } + + return flag; + } + + return false; + } } diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/utils/HtmlUtil.java b/cloud/fIle-center/src/main/java/com/sincere/file/utils/HtmlUtil.java index 5ba7f3c..a36db53 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/utils/HtmlUtil.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/utils/HtmlUtil.java @@ -13,15 +13,9 @@ public class HtmlUtil { private static final String regEx_space = "//s*|/t|/r|/n";//定义空格回车换行符 - /** - * @param htmlStr - - * @return - - * 删除Html标签 - + * @return 删除Html标签 */ public static String delHTMLTag(String htmlStr) { diff --git a/cloud/fIle-center/src/main/java/com/sincere/file/utils/PoiUtils.java b/cloud/fIle-center/src/main/java/com/sincere/file/utils/PoiUtils.java index f01a6e7..84cf183 100644 --- a/cloud/fIle-center/src/main/java/com/sincere/file/utils/PoiUtils.java +++ b/cloud/fIle-center/src/main/java/com/sincere/file/utils/PoiUtils.java @@ -39,52 +39,52 @@ public class PoiUtils { p.setAlignment(ParagraphAlignment.LEFT);//设置对其方式 - if (channel_type_name.contains("img")){ - getImg(channel_type_name,doc,p); - }else { - writeP(HtmlUtil.delHTMLTag(channel_type_name) + "\r\n",p); + if (channel_type_name.contains("img")) { + getImg(channel_type_name, doc, p); + } else { + writeP(HtmlUtil.delHTMLTag(channel_type_name) + "\r\n", p); } - question_text=question_text.replaceAll(" "," "); + question_text = question_text.replaceAll(" ", " "); - if (question_text.contains("img")){ + if (question_text.contains("img")) { writeP(question_text.replaceAll("]*/>", " "), p); - getImg(question_text,doc,p); - }else { + getImg(question_text, doc, p); + } else { writeP(HtmlUtil.delHTMLTag(question_text) + "\r\n", p); } if (null != options) { String A = options.getString("A"); if (A.contains("src")) { - writeP("A."+A.replaceAll("]*/>", " "), p); - getImg(A, doc,p); + writeP("A." + A.replaceAll("]*/>", " "), p); + getImg(A, doc, p); } else { - writeP( "A." + A+"\r\n", p); + writeP("A." + A + "\r\n", p); } String B = options.getString("B"); if (B.contains("src")) { - writeP("B."+B.replaceAll("]*/>", " "), p); - getImg(B, doc,p); + writeP("B." + B.replaceAll("]*/>", " "), p); + getImg(B, doc, p); } else { - writeP("B." + B+"\r\n", p); + writeP("B." + B + "\r\n", p); } String C = options.getString("C"); if (C.contains("src")) { - writeP("C."+C.replaceAll("]*/>", " "), p); - getImg(C, doc,p); + writeP("C." + C.replaceAll("]*/>", " "), p); + getImg(C, doc, p); } else { - writeP("C." + C+"\r\n", p); + writeP("C." + C + "\r\n", p); } String D = options.getString("D"); if (D.contains("src")) { - writeP("D."+D.replaceAll("]*/>", " "), p); - getImg(D, doc,p); + writeP("D." + D.replaceAll("]*/>", " "), p); + getImg(D, doc, p); } else { - writeP("D." + D+"\r\n", p); + writeP("D." + D + "\r\n", p); } } } @@ -92,22 +92,22 @@ public class PoiUtils { try { File file = new File("D://POI"); if (!file.exists()) file.mkdirs(); - File file1 = new File(file.getAbsolutePath() + File.separator + System.currentTimeMillis()+".doc"); + File file1 = new File(file.getAbsolutePath() + File.separator + System.currentTimeMillis() + ".doc"); if (!file1.exists()) file1.createNewFile(); FileOutputStream out = new FileOutputStream(file1); doc.write(out); out.close(); - return file1.getAbsolutePath(); + return file1.getAbsolutePath(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } -return ""; + return ""; } - private static void writeP( String content, XWPFParagraph p) { + private static void writeP(String content, XWPFParagraph p) { XWPFRun r = p.createRun();//创建段落文本 @@ -118,7 +118,7 @@ return ""; } - private static void getImg(String imgHtml, XWPFDocument doc,XWPFParagraph paragraph) { + private static void getImg(String imgHtml, XWPFDocument doc, XWPFParagraph paragraph) { // imgHtml = HtmlUtil.delHTMLTag(imgHtml); // imgHtml = imgHtml.substring(imgHtml.indexOf("src="), imgHtml.indexOf("style")); // imgHtml = imgHtml.replace("\"", ""); @@ -126,17 +126,17 @@ return ""; // logger.error("imgHtml:{}", imgHtml); Set imgSer = getImgStr(imgHtml); Iterator iterator = imgSer.iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { String imgUrl = iterator.next(); String imgName = System.currentTimeMillis() + ".png"; String filePath = "D://POI//Img"; download(imgUrl, imgName, filePath); - writeImg2Word(filePath + File.separator + imgName, doc,paragraph); + writeImg2Word(filePath + File.separator + imgName, doc, paragraph); } } - private static String writeImg2Word(String s, XWPFDocument doc,XWPFParagraph paragraph) { + private static String writeImg2Word(String s, XWPFDocument doc, XWPFParagraph paragraph) { try { diff --git a/cloud/fIle-center/src/main/resources/application.yml b/cloud/fIle-center/src/main/resources/application.yml index 266b210..9fbb3b4 100644 --- a/cloud/fIle-center/src/main/resources/application.yml +++ b/cloud/fIle-center/src/main/resources/application.yml @@ -6,32 +6,32 @@ aliyun: endpoint: http://oss-cn-hangzhou.aliyuncs.com bucketName: szyundisk domain: https://szyundisk.oss-cn-hangzhou.aliyuncs.com -##七牛文件上传 -#qiniu: -# oss: -# access-key: owGiAWGn6DpU5zlrfLP4K9iQusahmspTW6PxRABW -# accessKeySecret: 5CBWKFd1pP-OSiusd1Bvhokp-ih4i3bs2QA2r-U2 -# endpoint: http://q4c5xw7eb.bkt.clouddn.com -# bucketName: ocpowenwangwen -## 本地文件上传 -#file: -# oss: -# domain: http://127.0.0.1:9200/api-file -# path: d:/uploadshp -# prefix: /statics - -#fastDFS配置 -#fdfs: -# oss : -# ##nginx需要安装fastdfs插件 -# domain: http://192.168.235.173/ -# soTimeout: 1500 -# connectTimeout: 600 -# pool: -# jmx-enabled: false -# trackerList: 192.168.235.173:22122 + ##七牛文件上传 + #qiniu: + # oss: + # access-key: owGiAWGn6DpU5zlrfLP4K9iQusahmspTW6PxRABW + # accessKeySecret: 5CBWKFd1pP-OSiusd1Bvhokp-ih4i3bs2QA2r-U2 + # endpoint: http://q4c5xw7eb.bkt.clouddn.com + # bucketName: ocpowenwangwen + ## 本地文件上传 + #file: + # oss: + # domain: http://127.0.0.1:9200/api-file + # path: d:/uploadshp + # prefix: /statics + + #fastDFS配置 + #fdfs: + # oss : + # ##nginx需要安装fastdfs插件 + # domain: http://192.168.235.173/ + # soTimeout: 1500 + # connectTimeout: 600 + # pool: + # jmx-enabled: false + # trackerList: 192.168.235.173:22122 + - #spring: # datasource: # dynamic: @@ -142,39 +142,39 @@ aliyun: #设置最大超时时间 -ribbon: +ribbon: httpclient: enabled: false okhttp: - enabled: true - ReadTimeout: 90000 - ConnectTimeout: 90000 + enabled: true + ReadTimeout: 90000 + ConnectTimeout: 90000 OkToRetryOnAllOperations: true MaxAutoRetries: 1 MaxAutoRetriesNextServer: 1 -#设置最大容错超时时间 -#hystrix: -# command: -# default: -# execution: -# timeout: -# enabled: true -# isolation: -# thread: -# timeoutInMilliseconds: 90000 + #设置最大容错超时时间 + #hystrix: + # command: + # default: + # execution: + # timeout: + # enabled: true + # isolation: + # thread: + # timeoutInMilliseconds: 90000 + - -#logging: -# level: -# com.open.capacity: INFO -# org.hibernate: INFO -# org.hibernate.type.descriptor.sql.BasicBinder: TRACE -# org.hibernate.type.descriptor.sql.BasicExtractor: TRACE -# com.neusoft: DEBUG -# com.netflix: DEBUG #用于心跳检测输出的日志 + #logging: + # level: + # com.open.capacity: INFO + # org.hibernate: INFO + # org.hibernate.type.descriptor.sql.BasicBinder: TRACE + # org.hibernate.type.descriptor.sql.BasicExtractor: TRACE + # com.neusoft: DEBUG + # com.netflix: DEBUG #用于心跳检测输出的日志 diff --git a/cloud/fIle-center/src/main/resources/bootstrap.yml b/cloud/fIle-center/src/main/resources/bootstrap.yml index 624fd53..bf07120 100644 --- a/cloud/fIle-center/src/main/resources/bootstrap.yml +++ b/cloud/fIle-center/src/main/resources/bootstrap.yml @@ -12,20 +12,20 @@ spring: max-request-size: 400MB max-file-size: 400MB -#management: -# endpoints: -# web: -# exposure: -# include: "*" -# endpoint: -# health: -# show-details: always - + #management: + # endpoints: + # web: + # exposure: + # include: "*" + # endpoint: + # health: + # show-details: always + #eureka client配置 eureka: client: serviceUrl: -# defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ + # defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/ #http://134.224.249.33:1111/eureka/ 正式库 #http://134.224.249.33:1111/eureka/ 测试库 @@ -33,12 +33,12 @@ eureka: registry-fetch-interval-seconds: 5 instance-info-replication-interval-seconds: 10 instance: -# prefer-ip-address: false + # prefer-ip-address: false instance-id: ${spring.application.name} -# instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} #固定端口 -# instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${randomServerPort.value[5000,5005]}} #随机端口 + # instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} #固定端口 + # instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${randomServerPort.value[5000,5005]}} #随机端口 lease-renewal-interval-in-seconds: 10 #每隔几秒告诉eureka服务器我还存活,用于心跳检测 lease-expiration-duration-in-seconds: 10 #如果心跳检测一直没有发送,10秒后会从eureka服务器中将此服务剔除 -# status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/doc.html # ${server.port}为该服务的端口号 + # status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/doc.html # ${server.port}为该服务的端口号 hostname: 121.40.30.78 # status-page-url: http://${spring.cloud.client.ip-address}:${randomServerPort.value[5000,5005]}/document.html # ${server.port}为该服务的端口号 \ No newline at end of file diff --git a/cloud/fIle-center/src/main/view/index.html b/cloud/fIle-center/src/main/view/index.html index a60c62c..915525d 100644 --- a/cloud/fIle-center/src/main/view/index.html +++ b/cloud/fIle-center/src/main/view/index.html @@ -11,7 +11,7 @@ 上传图片 -

+
\ No newline at end of file diff --git a/cloud/getaway/src/main/java/com/sincere/getaway/client/config/CorsConfig.java b/cloud/getaway/src/main/java/com/sincere/getaway/client/config/CorsConfig.java index 3aa90c4..5b7c8a2 100644 --- a/cloud/getaway/src/main/java/com/sincere/getaway/client/config/CorsConfig.java +++ b/cloud/getaway/src/main/java/com/sincere/getaway/client/config/CorsConfig.java @@ -33,44 +33,44 @@ import reactor.core.publisher.Mono; */ @Configuration public class CorsConfig { - private static final String ALL = "*"; - private static final String MAX_AGE = "18000L"; + private static final String ALL = "*"; + private static final String MAX_AGE = "18000L"; - @Bean - public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient, - DiscoveryLocatorProperties properties) { - return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties); - } + @Bean + public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient, + DiscoveryLocatorProperties properties) { + return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties); + } - @Bean - public ServerCodecConfigurer serverCodecConfigurer() { - return new DefaultServerCodecConfigurer(); - } + @Bean + public ServerCodecConfigurer serverCodecConfigurer() { + return new DefaultServerCodecConfigurer(); + } - @Bean - public WebFilter corsFilter() { - return (ServerWebExchange ctx, WebFilterChain chain) -> { - ServerHttpRequest request = ctx.getRequest(); - if (!CorsUtils.isCorsRequest(request)) { - return chain.filter(ctx); - } - HttpHeaders requestHeaders = request.getHeaders(); - ServerHttpResponse response = ctx.getResponse(); - HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod(); - HttpHeaders headers = response.getHeaders(); - headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin()); - headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders()); - if (requestMethod != null) { - headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name()); - } - headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); - headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, ALL); - headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE); - if (request.getMethod() == HttpMethod.OPTIONS) { - response.setStatusCode(HttpStatus.OK); - return Mono.empty(); - } - return chain.filter(ctx); - }; - } + @Bean + public WebFilter corsFilter() { + return (ServerWebExchange ctx, WebFilterChain chain) -> { + ServerHttpRequest request = ctx.getRequest(); + if (!CorsUtils.isCorsRequest(request)) { + return chain.filter(ctx); + } + HttpHeaders requestHeaders = request.getHeaders(); + ServerHttpResponse response = ctx.getResponse(); + HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod(); + HttpHeaders headers = response.getHeaders(); + headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin()); + headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders()); + if (requestMethod != null) { + headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name()); + } + headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); + headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, ALL); + headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE); + if (request.getMethod() == HttpMethod.OPTIONS) { + response.setStatusCode(HttpStatus.OK); + return Mono.empty(); + } + return chain.filter(ctx); + }; + } } diff --git a/cloud/getaway/src/main/java/com/sincere/getaway/client/config/PermitUrlProperties.java b/cloud/getaway/src/main/java/com/sincere/getaway/client/config/PermitUrlProperties.java index 83395cf..2f61a78 100644 --- a/cloud/getaway/src/main/java/com/sincere/getaway/client/config/PermitUrlProperties.java +++ b/cloud/getaway/src/main/java/com/sincere/getaway/client/config/PermitUrlProperties.java @@ -11,39 +11,40 @@ import java.util.List; @ConfigurationProperties(prefix = "url") public class PermitUrlProperties { - /** - * swagger需要访问的url - */ - private static final String[] ENDPOINTS = { - - "/v2/api-docs/**", "/swagger-ui.html","/swagger/index.html", "/swagger-resources/**", "/webjars/**" , // api-gateway webflux swagger - "/**/v2/api-docs/**", "/**/swagger-ui.html", "/**/swagger-resources/**", "/**/webjars/**" //业务中心swagger - }; - - private String[] ignored; - - /** - * 需要放开权限的url - * @return 自定义的url和监控中心需要访问的url集合 - */ - public String[] getIgnored() { - if (ignored == null || ignored.length == 0) { - return ENDPOINTS; - } - - List list = new ArrayList<>(); - for (String url : ENDPOINTS) { - list.add(url); - } - for (String url : ignored) { - list.add(url); - } - - return list.toArray(new String[list.size()]); - } - - public void setIgnored(String[] ignored) { - this.ignored = ignored; - } + /** + * swagger需要访问的url + */ + private static final String[] ENDPOINTS = { + + "/v2/api-docs/**", "/swagger-ui.html", "/swagger/index.html", "/swagger-resources/**", "/webjars/**", // api-gateway webflux swagger + "/**/v2/api-docs/**", "/**/swagger-ui.html", "/**/swagger-resources/**", "/**/webjars/**" //业务中心swagger + }; + + private String[] ignored; + + /** + * 需要放开权限的url + * + * @return 自定义的url和监控中心需要访问的url集合 + */ + public String[] getIgnored() { + if (ignored == null || ignored.length == 0) { + return ENDPOINTS; + } + + List list = new ArrayList<>(); + for (String url : ENDPOINTS) { + list.add(url); + } + for (String url : ignored) { + list.add(url); + } + + return list.toArray(new String[list.size()]); + } + + public void setIgnored(String[] ignored) { + this.ignored = ignored; + } } diff --git a/cloud/getaway/src/main/java/com/sincere/getaway/client/config/SwaggerProvider.java b/cloud/getaway/src/main/java/com/sincere/getaway/client/config/SwaggerProvider.java index 43f87c6..4a4cbdf 100644 --- a/cloud/getaway/src/main/java/com/sincere/getaway/client/config/SwaggerProvider.java +++ b/cloud/getaway/src/main/java/com/sincere/getaway/client/config/SwaggerProvider.java @@ -34,7 +34,7 @@ public class SwaggerProvider implements SwaggerResourcesProvider { .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName())) .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0") - .replace("/**", API_URI),routeDefinition)))); + .replace("/**", API_URI), routeDefinition)))); return resources; } @@ -44,9 +44,9 @@ public class SwaggerProvider implements SwaggerResourcesProvider { swaggerResource.setLocation(location); swaggerResource.setSwaggerVersion("2.0"); // swaggerResource.setUrl(routeDefinition.getUri().toString()); - System.out.println("location:-------------------------------------------"+location); - System.out.println("host-----------------------------------------------"+routeDefinition.getUri().toString()); - System.out.println("name:-------------------------------------------"+routeDefinition.toString()); + System.out.println("location:-------------------------------------------" + location); + System.out.println("host-----------------------------------------------" + routeDefinition.getUri().toString()); + System.out.println("name:-------------------------------------------" + routeDefinition.toString()); return swaggerResource; } } diff --git a/cloud/getaway/src/main/java/com/sincere/getaway/client/filter/AccessFilter.java b/cloud/getaway/src/main/java/com/sincere/getaway/client/filter/AccessFilter.java index 88b9c72..7999d14 100644 --- a/cloud/getaway/src/main/java/com/sincere/getaway/client/filter/AccessFilter.java +++ b/cloud/getaway/src/main/java/com/sincere/getaway/client/filter/AccessFilter.java @@ -30,72 +30,72 @@ import java.util.List; @EnableConfigurationProperties(PermitUrlProperties.class) public class AccessFilter implements GlobalFilter, Ordered { - // url匹配器 - private AntPathMatcher pathMatcher = new AntPathMatcher(); + // url匹配器 + private AntPathMatcher pathMatcher = new AntPathMatcher(); - @Resource - private PermitUrlProperties permitUrlProperties; + @Resource + private PermitUrlProperties permitUrlProperties; - @Override - public int getOrder() { - // TODO Auto-generated method stub - return -500; - } + @Override + public int getOrder() { + // TODO Auto-generated method stub + return -500; + } - @Override - public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - String accessToken = this.extractToken(exchange.getRequest()); - System.out.println("path:"+exchange.getRequest().getPath().value()); - // 默认 - boolean flag = false; - for (String ignored :permitUrlProperties.getIgnored()) { - if (pathMatcher.match(ignored, exchange.getRequest().getPath().value())) { - flag = true; // 白名单 - } - } - if (flag) { - return chain.filter(exchange); - } else { - ResultEnums result = getResult(accessToken); - if(result.getCode() == 0){ - return chain.filter(exchange); - }else { - exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); - ServerHttpResponse response = exchange.getResponse(); - JSONObject message = new JSONObject(); - message.put("code", result.getCode()); - message.put("message", result.getMessage()); - byte[] bits = message.toJSONString().getBytes(StandardCharsets.UTF_8); - DataBuffer buffer = response.bufferFactory().wrap(bits); - response.setStatusCode(HttpStatus.UNAUTHORIZED); - // 指定编码,否则在浏览器中会中文乱码 - response.getHeaders().add("Content-Type", "application/json;charset=UTF-8"); - return response.writeWith(Mono.just(buffer)); - } + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + String accessToken = this.extractToken(exchange.getRequest()); + System.out.println("path:" + exchange.getRequest().getPath().value()); + // 默认 + boolean flag = false; + for (String ignored : permitUrlProperties.getIgnored()) { + if (pathMatcher.match(ignored, exchange.getRequest().getPath().value())) { + flag = true; // 白名单 + } + } + if (flag) { + return chain.filter(exchange); + } else { + ResultEnums result = getResult(accessToken); + if (result.getCode() == 0) { + return chain.filter(exchange); + } else { + exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); + ServerHttpResponse response = exchange.getResponse(); + JSONObject message = new JSONObject(); + message.put("code", result.getCode()); + message.put("message", result.getMessage()); + byte[] bits = message.toJSONString().getBytes(StandardCharsets.UTF_8); + DataBuffer buffer = response.bufferFactory().wrap(bits); + response.setStatusCode(HttpStatus.UNAUTHORIZED); + // 指定编码,否则在浏览器中会中文乱码 + response.getHeaders().add("Content-Type", "application/json;charset=UTF-8"); + return response.writeWith(Mono.just(buffer)); + } - } - } + } + } - private ResultEnums getResult(String token){ - if (StringUtils.isBlank(token)) { - return ResultEnums.no_token ; - }else { - try { - TokenUtils.validToken(token); - } catch (ResultException e) { - return ResultEnums.getByCode(e.getCode()); - } - } - return ResultEnums.success ; - } + private ResultEnums getResult(String token) { + if (StringUtils.isBlank(token)) { + return ResultEnums.no_token; + } else { + try { + TokenUtils.validToken(token); + } catch (ResultException e) { + return ResultEnums.getByCode(e.getCode()); + } + } + return ResultEnums.success; + } - public String extractToken(ServerHttpRequest request) { - List strings = request.getHeaders().get("X-Authorization"); - String authToken = ""; - if (strings != null) { - authToken = strings.get(0).trim(); - } - return authToken; - } + public String extractToken(ServerHttpRequest request) { + List strings = request.getHeaders().get("X-Authorization"); + String authToken = ""; + if (strings != null) { + authToken = strings.get(0).trim(); + } + return authToken; + } } diff --git a/cloud/getaway/src/main/java/com/sincere/getaway/client/filter/SwaggerHeaderFilter.java b/cloud/getaway/src/main/java/com/sincere/getaway/client/filter/SwaggerHeaderFilter.java index c2db915..9d47201 100644 --- a/cloud/getaway/src/main/java/com/sincere/getaway/client/filter/SwaggerHeaderFilter.java +++ b/cloud/getaway/src/main/java/com/sincere/getaway/client/filter/SwaggerHeaderFilter.java @@ -22,7 +22,7 @@ public class SwaggerHeaderFilter extends AbstractGatewayFilterFactory { ServerHttpRequest request = exchange.getRequest(); String path = request.getURI().getPath(); - System.out.println("path:"+path); + System.out.println("path:" + path); if (!StringUtils.endsWithIgnoreCase(path, SwaggerProvider.API_URI)) { return chain.filter(exchange); diff --git a/cloud/getaway/src/main/resources/application.yml b/cloud/getaway/src/main/resources/application.yml index f6ec630..0dac4a3 100644 --- a/cloud/getaway/src/main/resources/application.yml +++ b/cloud/getaway/src/main/resources/application.yml @@ -3,7 +3,7 @@ eureka: fetch-registry: true register-with-eureka: true service-url: -# defaultZone: http://localhost:8761/eureka/ + # defaultZone: http://localhost:8761/eureka/ defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ instance: hostname: localhost @@ -14,12 +14,12 @@ eureka: spring: cloud: gateway: -# globalcors: -# corsConfigurations: -# '[/**]': -# allowedOrigins: "*" -# allowedMethods: "*" -# allowedHeaders: "*" + # globalcors: + # corsConfigurations: + # '[/**]': + # allowedOrigins: "*" + # allowedMethods: "*" + # allowedHeaders: "*" routes: - id: usersearch uri: http://121.40.30.78:9004 @@ -28,7 +28,7 @@ spring: filters: - StripPrefix=1 - id: SmartCampusWebApi -# uri: http://120.26.116.253:9022 + # uri: http://120.26.116.253:9022 uri: lb://SmartCampusWebApi predicates: - Path=/SmartCampusWebApi/** @@ -36,34 +36,34 @@ spring: - StripPrefix=1 - id: file-center uri: lb://file-center -# uri: http://121.40.30.78:5000 + # uri: http://121.40.30.78:5000 predicates: - Path=/file-center/** filters: - StripPrefix=1 - id: authserver -# uri: http://121.40.30.78:9005 + # uri: http://121.40.30.78:9005 uri: lb://authserver predicates: - Path=/authserver/** filters: - StripPrefix=1 - id: NewSmartCampus -# uri: http://114.55.30.100:1111 + # uri: http://114.55.30.100:1111 uri: lb://NewSmartCampus predicates: - Path=/NewSmartCampus/** filters: - StripPrefix=1 - id: dahua -# uri: lb://dahua + # uri: lb://dahua uri: http://114.55.30.100:8991 predicates: - Path=/dahua/** filters: - StripPrefix=1 - id: haikangserver - # uri: lb://dahua + # uri: lb://dahua uri: http://121.40.109.21:9898 predicates: - Path=/haikang/** diff --git a/cloud/getaway/src/main/resources/bootstrap.yml b/cloud/getaway/src/main/resources/bootstrap.yml index 334e569..7af7a1a 100644 --- a/cloud/getaway/src/main/resources/bootstrap.yml +++ b/cloud/getaway/src/main/resources/bootstrap.yml @@ -6,10 +6,10 @@ server: #服务名称 spring: application: - name: sincere_geteway + name: sincere_geteway main: - allow-bean-definition-overriding: true - + allow-bean-definition-overriding: true + management: endpoints: diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/CMSServer.java b/cloud/haikang/src/main/java/com/sincere/haikang/CMSServer.java index fb99e38..036ce77 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/CMSServer.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/CMSServer.java @@ -234,7 +234,7 @@ public class CMSServer implements ApplicationRunner { /** * 下发卡号 */ - public synchronized void sendCards(String clint_id, String cardNo, String name, String clint_type,int valid) { + public synchronized void sendCards(String clint_id, String cardNo, String name, String clint_type, int valid) { if (!deviceAndLoginIdMap.containsKey(clint_id)) { FileUtils.getInstance().writeLogs("该学校下不存在该设备:" + clint_id, FileUtils.sendNodevice); } else { @@ -353,7 +353,7 @@ public class CMSServer implements ApplicationRunner { /** * 获取指纹信息 */ - public void getFingerPrint(String clint_id, String cardNo){ + public void getFingerPrint(String clint_id, String cardNo) { HCEHomeCMS.NET_EHOME_XML_CFG struXMLCard = new HCEHomeCMS.NET_EHOME_XML_CFG(); HCEHomeCMS.NET_DVR_STRING_POINTER stringRequestCard = new HCEHomeCMS.NET_DVR_STRING_POINTER(); @@ -370,7 +370,7 @@ public class CMSServer implements ApplicationRunner { struConfigXMLCard.read(); String strConfigXMLCard = "\n" + "GetFingerPrint\n" + - ""+cardNo+"\n" + + "" + cardNo + "\n" + "1,2,3,4,5,6,7,8,9,10\n" + "1\n" + "0\n" + @@ -399,11 +399,11 @@ public class CMSServer implements ApplicationRunner { int i = struXMLCard.size(); if (!hCEhomeCMS.NET_ECMS_XMLConfig(deviceAndLoginIdMap.get(clint_id), struXMLCard, struXMLCard.size())) { int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); - System.err.println("获取指纹信息,错误号:" + iErr+"card:"+cardNo); + System.err.println("获取指纹信息,错误号:" + iErr + "card:" + cardNo); } else { stringOutCard.read(); try { - System.out.println("获取指纹信息成功:"+new String(stringOutCard.byString,"utf-8").trim()); + System.out.println("获取指纹信息成功:" + new String(stringOutCard.byString, "utf-8").trim()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } @@ -412,6 +412,7 @@ public class CMSServer implements ApplicationRunner { /** * 删除指纹机信息 + * * @param clint_id * @param cardNo */ @@ -434,10 +435,10 @@ public class CMSServer implements ApplicationRunner { String strConfigXMLCard = "\r\n" + "DelFingerPrintByCardNo\r\n" + "" + cardNo + "\r\n" + - "\n"+ - ""+1+"\n"+ - ""+"1,2,3,4,5,6,7,8,9,10"+"\n"+ - "\n"+ + "\n" + + "" + 1 + "\n" + + "" + "1,2,3,4,5,6,7,8,9,10" + "\n" + + "\n" + ""; struConfigXMLCard.byString = strConfigXMLCard.getBytes(); struConfigXMLCard.write(); @@ -463,7 +464,7 @@ public class CMSServer implements ApplicationRunner { int i = struXMLCard.size(); if (!hCEhomeCMS.NET_ECMS_XMLConfig(deviceAndLoginIdMap.get(clint_id), struXMLCard, struXMLCard.size())) { int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); - System.err.println("删除指纹,错误号:" + iErr+"card:"+cardNo); + System.err.println("删除指纹,错误号:" + iErr + "card:" + cardNo); } else { System.out.println("删除指纹成功"); } @@ -480,134 +481,134 @@ public class CMSServer implements ApplicationRunner { try { - if (pAlarmMsg.dwXmlBufLen != 0) { - HCEHomeAlarm.NET_EHOME_XML_DATA strXMLData = new HCEHomeAlarm.NET_EHOME_XML_DATA(); - strXMLData.write(); - Pointer pPlateInfo = strXMLData.getPointer(); - pPlateInfo.write(0, pAlarmMsg.pXmlBuf.getByteArray(0, strXMLData.size()), 0, strXMLData.size()); - strXMLData.read(); - - String strXML = new String(strXMLData.byXMLData); - FileUtils.getInstance().writeLogs("报警内容:" + strXML, FileUtils.baojingneirong); - //主类型 - String majirType = strXML.substring(strXML.indexOf("MajorType"), strXML.lastIndexOf("MajorType")).trim(); - majirType = majirType.replace("MajorType>", ""); - majirType = majirType.replace("", ""); - minorType = minorType.replace("", ""); - cardNo = cardNo.replace("", ""); - deviceID = deviceID.replace("", ""); - time = time.replace("", ""); + majirType = majirType.replace("", ""); + minorType = minorType.replace("", ""); + cardNo = cardNo.replace("", ""); + deviceID = deviceID.replace("", ""); + time = time.replace(" 0) { - if (cardNo.length() >= 10) { - FileUtils.getInstance().writeLogs("学生id异常:" + deviceID + " 卡号:" + cardNo+" minorType:"+minorType, FileUtils.qiandaoErr); - return true; + } else if (majirType.equals("0x3")) {//操作 + + } else if (majirType.equals("0x4")) {// + + } else if (majirType.equals("0x5")) {//事件 + + switch (minorType) { + case "0x01"://合法卡认证通过 + System.out.println("minorType:" + minorType + " deviceID:" + deviceID + " cardNo:" + cardNo); + FileUtils.getInstance().writeLogs("minorType:" + minorType + " deviceID:" + deviceID + " cardNo:" + cardNo, FileUtils.zhiwen); + break; + case "0x9"://重复上报同一条数据 + FileUtils.getInstance().writeLogs("minorType:" + minorType + " deviceID:" + deviceID + " time:" + time, FileUtils.yichangtime); + break; + case "0x26"://指纹比对通过 + System.out.println("minorType:" + minorType + " deviceID:" + deviceID + " cardNo:" + cardNo); + FileUtils.getInstance().writeLogs("minorType:" + minorType + " deviceID:" + deviceID + " cardNo:" + cardNo, FileUtils.zhiwen); + break; + case "0x27"://指纹比对失败 + System.out.println("minorType:" + minorType + " deviceID:" + deviceID + " cardNo:" + cardNo); + FileUtils.getInstance().writeLogs("minorType:" + minorType + " deviceID:" + deviceID + " cardNo:" + cardNo, FileUtils.zhiwen); + break; + case "0x31"://指纹不存在 + System.out.println("minorType:" + minorType + " deviceID:" + deviceID + " cardNo:" + cardNo); + FileUtils.getInstance().writeLogs("minorType:" + minorType + " deviceID:" + deviceID + " cardNo:" + cardNo, FileUtils.zhiwen); + break; } - cardNo = userDao.getStudent_Num(cardNo); + if (cardNo != null && cardNo.length() > 0) { + if (cardNo.length() >= 10) { + FileUtils.getInstance().writeLogs("学生id异常:" + deviceID + " 卡号:" + cardNo + " minorType:" + minorType, FileUtils.qiandaoErr); + return true; + } + + cardNo = userDao.getStudent_Num(cardNo); // BigInteger bigInteger = new BigInteger(cardNo); // cardNo = String.format("%08x", bigInteger); //16进制取8位,不够补0 // cardNo = cardNo(cardNo).toUpperCase(); // System.out.println("cardNo:"+cardNo+" minorType:"+minorType); - if (deviceID != null && !deviceID.isEmpty()&&!StringUtils.isEmpty(cardNo)) { - cardNo = new BigInteger(cardNo, 16).toString(); - - System.out.println(String.format("设备号:%s 卡号:%s 时间:%s", deviceID, cardNo, time)); - PlaceAttendance placeAttendance = deviceDao.getPlaceAttendance(deviceID); - - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String info = String.format("", - simpleDateFormat.format(new Date()), deviceID, cardNo, time, "-1"); - - AttendanceInfoBean attendanceInfoBean = new AttendanceInfoBean(); - attendanceInfoBean.setInfo(info); - attendanceInfoBean.setIsControl(0); - attendanceInfoBean.setPwd(pwd); - attendanceInfoBean.setUsername(account); - - String jsonResult = JSON.toJSONString(attendanceInfoBean); - - if (placeAttendance == null) {//出入校 - String urlXST = host + "api/XiaoAnCommon/SendXST"; - String result1 = ApiHelper.doPost(urlXST, new HashMap(), jsonResult); - JSONObject jsonObject = JSONObject.parseObject(result1); - if ((int) jsonObject.get("status") == 1) - FileUtils.getInstance().writeLogs("出入校签到成功:" + deviceID + " 卡号:" + cardNo, FileUtils.qiandaoSuccess); - else - FileUtils.getInstance().writeLogs("出入校签到失败:" + deviceID + " 卡号:" + cardNo + " result1:" + result1, FileUtils.qiandaoErr); - System.out.println("urlXST:" + result1);//{"status":1,"message":null,"data":"0"} - } else {//出入寝室 - String urlHXY = host + "api/XiaoAnCommon/SendHXY"; - String result2 = ApiHelper.doPost(urlHXY, new HashMap(), jsonResult); - JSONObject jsonObject = JSONObject.parseObject(result2); - if ((int) jsonObject.get("status") == 1) - FileUtils.getInstance().writeLogs("出入寝签到成功:" + deviceID + " 卡号:" + cardNo, FileUtils.qiandaoSuccess); - else - FileUtils.getInstance().writeLogs("出入寝签到失败:" + deviceID + " 卡号:" + cardNo + " result1:" + result2, FileUtils.qiandaoErr); - FileUtils.getInstance().writeLogs("出入寝签到:" + deviceID + " 卡号:" + cardNo + " result2:" + result2+" 传入参数:"+jsonResult, FileUtils.qinshiResult); - System.out.println("urlHXY:" + result2); - } + if (deviceID != null && !deviceID.isEmpty() && !StringUtils.isEmpty(cardNo)) { + cardNo = new BigInteger(cardNo, 16).toString(); + + System.out.println(String.format("设备号:%s 卡号:%s 时间:%s", deviceID, cardNo, time)); + PlaceAttendance placeAttendance = deviceDao.getPlaceAttendance(deviceID); + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String info = String.format("", + simpleDateFormat.format(new Date()), deviceID, cardNo, time, "-1"); + + AttendanceInfoBean attendanceInfoBean = new AttendanceInfoBean(); + attendanceInfoBean.setInfo(info); + attendanceInfoBean.setIsControl(0); + attendanceInfoBean.setPwd(pwd); + attendanceInfoBean.setUsername(account); + + String jsonResult = JSON.toJSONString(attendanceInfoBean); + + if (placeAttendance == null) {//出入校 + String urlXST = host + "api/XiaoAnCommon/SendXST"; + String result1 = ApiHelper.doPost(urlXST, new HashMap(), jsonResult); + JSONObject jsonObject = JSONObject.parseObject(result1); + if ((int) jsonObject.get("status") == 1) + FileUtils.getInstance().writeLogs("出入校签到成功:" + deviceID + " 卡号:" + cardNo, FileUtils.qiandaoSuccess); + else + FileUtils.getInstance().writeLogs("出入校签到失败:" + deviceID + " 卡号:" + cardNo + " result1:" + result1, FileUtils.qiandaoErr); + System.out.println("urlXST:" + result1);//{"status":1,"message":null,"data":"0"} + } else {//出入寝室 + String urlHXY = host + "api/XiaoAnCommon/SendHXY"; + String result2 = ApiHelper.doPost(urlHXY, new HashMap(), jsonResult); + JSONObject jsonObject = JSONObject.parseObject(result2); + if ((int) jsonObject.get("status") == 1) + FileUtils.getInstance().writeLogs("出入寝签到成功:" + deviceID + " 卡号:" + cardNo, FileUtils.qiandaoSuccess); + else + FileUtils.getInstance().writeLogs("出入寝签到失败:" + deviceID + " 卡号:" + cardNo + " result1:" + result2, FileUtils.qiandaoErr); + FileUtils.getInstance().writeLogs("出入寝签到:" + deviceID + " 卡号:" + cardNo + " result2:" + result2 + " 传入参数:" + jsonResult, FileUtils.qinshiResult); + System.out.println("urlHXY:" + result2); + } - } - } else System.out.println("卡号为空"); + } + } else System.out.println("卡号为空"); + } } - } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } return true; diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/HaikangApplication.java b/cloud/haikang/src/main/java/com/sincere/haikang/HaikangApplication.java index 5171278..4deff5f 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/HaikangApplication.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/HaikangApplication.java @@ -27,10 +27,10 @@ public class HaikangApplication { @EnableAsync @Configuration - class TaskPoolConfig{ + class TaskPoolConfig { @Bean("taskExecutor") - public Executor taskExecutor(){ + public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); executor.setMaxPoolSize(20); diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/SchduleTask.java b/cloud/haikang/src/main/java/com/sincere/haikang/SchduleTask.java index c9e8730..97347e6 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/SchduleTask.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/SchduleTask.java @@ -5,6 +5,7 @@ import com.sincere.haikang.bean.AttendanceBean; import com.sincere.haikang.bean.StudentBean; import com.sincere.haikang.dao.DeviceDao; import com.sincere.haikang.dao.UserDao; +import org.apache.http.util.TextUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; @@ -41,107 +42,141 @@ public class SchduleTask { @Autowired SendUserAsync sendUserAsync; + @Autowired + DeviceDao deviceDao; + + private boolean isSending = false; + /** * 定时任务,取更新的学生信息 */ -// @Scheduled(fixedRate = 5000) + @Scheduled(fixedRate = 5000) public synchronized void getUpdateStudentInfo() { - try { - - if (!saveFile.exists()) { - try { - saveFile.mkdirs(); - File saveFile_txt = new File(saveFile, "save.txt"); - if (!saveFile_txt.exists()) saveFile_txt.createNewFile(); - } catch (IOException e) { - System.out.println("e:" + e.toString()); - e.printStackTrace(); + if (!isSending) { + isSending = true; + + try { + + if (!saveFile.exists()) { + try { + saveFile.mkdirs(); + File saveFile_txt = new File(saveFile, "save.txt"); + if (!saveFile_txt.exists()) saveFile_txt.createNewFile(); + } catch (IOException e) { + System.out.println("e:" + e.toString()); + e.printStackTrace(); + } } - } - FileInputStream fileInputStream = new FileInputStream(savePth); - byte[] readByte = new byte[1024]; - fileInputStream.read(readByte); - //存储的数据库下标 - String index = new String(readByte, 0, readByte.length).trim(); + FileInputStream fileInputStream = new FileInputStream(savePth); + byte[] readByte = new byte[1024]; + fileInputStream.read(readByte); + //存储的数据库下标 + String index = new String(readByte, 0, readByte.length).trim(); // System.out.println("定时任务取得下标:" + index); - List studentBeans = null; - if (StringUtils.isEmpty(index)) {//没记录,取前十条 - studentBeans = userDao.getStudents(); + List studentBeans = null; + if (StringUtils.isEmpty(index)) {//没记录,取前十条 + studentBeans = userDao.getStudents(); // System.out.println("getStudents:"+studentBeans.toString()); - } else { - studentBeans = userDao.getAllStudents(Long.parseLong(index),2); + } else { + studentBeans = userDao.getAllStudents(Long.parseLong(index), 2); // System.out.println("getAllStudents:"+studentBeans.toString()); - } + } // System.out.println("定时任务:" + studentBeans.toString()); -// System.out.println("studentBeans:"+studentBeans); - if (sendUserAsync != null && studentBeans != null && studentBeans.size() > 0){ - sendUserAsync.sendStu(studentBeans, 1); - for (int i = 0; i < studentBeans.size(); i++) { - Thread.sleep(100); - StudentBean studentBean = studentBeans.get(i); + System.out.println("studentBeans:" + studentBeans.size()); + if (sendUserAsync != null && studentBeans != null && studentBeans.size() > 0) { + sendUserAsync.sendStu(studentBeans, 1); + for (int i = studentBeans.size() - 1; i >= 0; i--) { + Thread.sleep(200); + StudentBean studentBean = studentBeans.get(i); // System.out.println("studentBeans:"+studentBean.toString()); - if (null!=studentBean.getStudentCode()&&0!=studentBean.getSchoolId()&&null!=studentBean.getCard()){ - sendCImg(studentBean); - sendCard(studentBean); + if (null != studentBean.getStudentCode() && 0 != studentBean.getSchoolId() && null != studentBean.getCard()) { + sendCImg(studentBean); + sendCard(studentBean); + FileOutputStream fileOutputStream = null; + fileOutputStream = new FileOutputStream(savePth); + System.out.println("getId:" + studentBeans.get(0).getID()); + fileOutputStream.write((studentBean.getID() + "").getBytes()); + fileInputStream.close(); + fileOutputStream.close(); + } } } - } - if (studentBeans.size() > 0 && CMSServer.deviceAndLoginIdMap.keySet().size() > 0) { - FileOutputStream fileOutputStream = null; - fileOutputStream = new FileOutputStream(savePth); - fileOutputStream.write((studentBeans.get(0).getID() + "").getBytes()); + /*if (studentBeans.size() > 0 && CMSServer.deviceAndLoginIdMap.keySet().size() >= 0) { + FileOutputStream fileOutputStream = null; + fileOutputStream = new FileOutputStream(savePth); + System.out.println("getId:"+studentBeans.get(0).getID()); + fileOutputStream.write((studentBeans.get(0).getID() + "").getBytes()); + fileInputStream.close(); + fileOutputStream.close(); + }*/ + } catch (Exception e) { + e.printStackTrace(); } - - } catch (Exception e) { - e.printStackTrace(); + isSending = false; } - } - private void sendCImg(StudentBean studentBean){ + private void sendCImg(StudentBean studentBean) { + + int SchoolId = studentBean.getSchoolId(); + + List attendanceBeans = deviceDao.getAttendancesWithSchoolId(SchoolId); + + int type = -1;//18为海康,22为大华 + + String clientIds = ""; + for (int i = 0; i < attendanceBeans.size(); i++) { + if (i < attendanceBeans.size() - 1) { + if (attendanceBeans.get(i).getClint_type().equals("22")) { + type = 22; + clientIds += attendanceBeans.get(i).getClint_id() + ","; + } else if (attendanceBeans.get(i).getClint_type().equals("18")) { + type = 18; + clientIds += attendanceBeans.get(i).getClint_id(); + } + } + } + RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); - multiValueMap.add("StudentCode", studentBean.getStudentCode()); - multiValueMap.add("ParentId", "0"); - multiValueMap.add("SchoolId", studentBean.getSchoolId()+""); - multiValueMap.add("OldCard", ""); - multiValueMap.add("Card", studentBean.getCard()); - multiValueMap.add("TerminalType", "1");//1:海康 - multiValueMap.add("Count", "1"); - multiValueMap.add("UpdateType", "1"); - HttpEntity requestEntity = new HttpEntity(multiValueMap, - headers); - String url = "http://campus.myjxt.com/api/OneCard/UpdateDataBK"; -// String url = "http://114.55.30.100:9020/facereco/SendStudentSingleImage?schoolId=110&deviceId=212476514&studentCode=" + studdentCode; - ResponseEntity result = restTemplate.postForEntity(url, requestEntity, String.class); + headers.setContentType(MediaType.APPLICATION_JSON_UTF8); + + String card = TextUtils.isEmpty(studentBean.getCard()) ? studentBean.getOldCard() : studentBean.getCard(); + String imgFile = "E://wwwhtdocs//SmartCampus//face17e5//School" + SchoolId + "//Student//" + studentBean.getStudentCode() + ".png"; + + if (type == 18 && !TextUtils.isEmpty(card)) { + String url = "http://114.55.30.100:8089/facereco/sendFaceToDevices?card=" + card + "&deviceIds=" + clientIds + + "&file=" + imgFile + "&name=" + studentBean.getName() + "&userType=2"; + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + System.out.println("下发人脸:" + responseEntity.getBody()); + } else if (type == 22 && !TextUtils.isEmpty(card)) { + String url = "http://121.40.109.21:8991/user/uploadImgAndUserInfo?clint_type=22&file=" + imgFile + "&schoolId=" + SchoolId + "&studentCode=" + studentBean.getStudentCode(); + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + System.out.println("下发人脸:" + responseEntity.getBody()); + + } + + // String result = restTemplate.getForObject(url, String.class); // System.out.println("result:" + result.getBody() + " studdentCode:" + studentBean.getStudentCode()); } - private void sendCard(StudentBean studentBean){ - RestTemplate restTemplate = new RestTemplate(); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); - multiValueMap.add("StudentCode", studentBean.getStudentCode()); - multiValueMap.add("ParentId", "0"); - multiValueMap.add("SchoolId", studentBean.getSchoolId()+""); - multiValueMap.add("OldCard", ""); - multiValueMap.add("Card", studentBean.getCard()); - multiValueMap.add("TerminalType", "2");//2:微耕 - multiValueMap.add("Count", "1"); - multiValueMap.add("UpdateType", "1"); - HttpEntity requestEntity = new HttpEntity(multiValueMap, - headers); - String url = "http://campus.myjxt.com/api/OneCard/UpdateDataBK"; -// String url = "http://114.55.30.100:9020/facereco/SendStudentSingleImage?schoolId=110&deviceId=212476514&studentCode=" + studdentCode; - ResponseEntity result = restTemplate.postForEntity(url, requestEntity, String.class); -// String result = restTemplate.getForObject(url, String.class); -// System.out.println("result:" + result.getBody() + " studdentCode:" + studentBean.getStudentCode()); + private void sendCard(StudentBean studentBean) { + int SchoolId = studentBean.getSchoolId(); + String card = TextUtils.isEmpty(studentBean.getCard()) ? studentBean.getOldCard() : studentBean.getCard(); + if (!TextUtils.isEmpty(card)) { + RestTemplate restTemplate = new RestTemplate(); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON_UTF8); + String url = "http://campus.myjxt.com/api/OneCard/SendSingle?SchoolId=" + SchoolId + "&Card=" + card + "&ClassId=" + studentBean.getClassId(); + System.out.println("下发卡号url:" + url); + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + System.out.println("下发卡号:" + responseEntity.getBody()); + } + + } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/async/SendUserAsync.java b/cloud/haikang/src/main/java/com/sincere/haikang/async/SendUserAsync.java index e5a7a77..3703119 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/async/SendUserAsync.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/async/SendUserAsync.java @@ -38,7 +38,6 @@ public class SendUserAsync { DeviceDao deviceDao; /** - * * @param studentBeans * @param type */ @@ -65,26 +64,27 @@ public class SendUserAsync { //取到设备列表 List attendanceBeanList = deviceDao.selectDeviceWithschool_id(clint_type, school_id + ""); - FileUtils.getInstance().writeLogs("学校ID:"+school_id+" 设备列表:"+attendanceBeanList,FileUtils.schoolId); + FileUtils.getInstance().writeLogs("学校ID:" + school_id + " 设备列表:" + attendanceBeanList, FileUtils.schoolId); for (int i = 0; i < attendanceBeanList.size(); i++) { /**attendanceBeans * 下发卡号给人脸设备 */ String clint_id = attendanceBeanList.get(i).getClint_id(); if (!StringUtils.isEmpty(stu.getCard()) || stu.getCard() != null || !StringUtils.isEmpty(stu.getStudent_num())) { - cmsServer.sendCards(clint_id, cardNum, stu.getName(),clint_type,1); + cmsServer.sendCards(clint_id, cardNum, stu.getName(), clint_type, 1); } else FileUtils.getInstance().writeLogs("没有卡号:" + stu.getName(), FileUtils.sendUserErrTxt); } } } catch (Exception e) { - System.out.println("e:"+e.toString()); + System.out.println("e:" + e.toString()); e.printStackTrace(); } } /** * 删除卡号 + * * @param clint_id * @param cardNo * @param name @@ -92,16 +92,16 @@ public class SendUserAsync { * @param valid */ @Async("taskExecutor") - public void deleteCard( String clint_id, String cardNo, String name, String clint_type, int valid){ + public void deleteCard(String clint_id, String cardNo, String name, String clint_type, int valid) { - cmsServer.deleteFingerPrintByCardNo(clint_id,cardNo); - cmsServer.sendCards(clint_id,cardNo,name,clint_type,valid); + cmsServer.deleteFingerPrintByCardNo(clint_id, cardNo); + cmsServer.sendCards(clint_id, cardNo, name, clint_type, valid); } @Async("taskExecutor") - public void getFingerPrint(String cardNo,String clint_id){ + public void getFingerPrint(String cardNo, String clint_id) { - cmsServer.getFingerPrint(clint_id,cardNo); + cmsServer.getFingerPrint(clint_id, cardNo); } @Async("taskExecutor") @@ -127,25 +127,24 @@ public class SendUserAsync { //取到设备列表 List attendanceBeanList = deviceDao.selectDeviceWithschool_id(haikang_clintType, school_id + ""); - FileUtils.getInstance().writeLogs("学校ID:"+school_id+" 设备列表:"+attendanceBeanList,FileUtils.schoolId); + FileUtils.getInstance().writeLogs("学校ID:" + school_id + " 设备列表:" + attendanceBeanList, FileUtils.schoolId); for (int i = 0; i < attendanceBeanList.size(); i++) { /**attendanceBeans * 下发卡号给人脸设备 */ String clint_id = attendanceBeanList.get(i).getClint_id(); if (!StringUtils.isEmpty(stu.getCard()) || stu.getCard() != null || !StringUtils.isEmpty(stu.getStudent_num())) { - cmsServer.sendCards(clint_id, cardNum, stu.getName(),haikang_clintType,1); + cmsServer.sendCards(clint_id, cardNum, stu.getName(), haikang_clintType, 1); } else FileUtils.getInstance().writeLogs("没有卡号:" + stu.getName(), FileUtils.sendUserErrTxt); } } } catch (Exception e) { - System.out.println("e:"+e.toString()); + System.out.println("e:" + e.toString()); e.printStackTrace(); } } - } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/bean/SmsBean.java b/cloud/haikang/src/main/java/com/sincere/haikang/bean/SmsBean.java index c7ffffe..c80ae8c 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/bean/SmsBean.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/bean/SmsBean.java @@ -6,14 +6,14 @@ import io.swagger.annotations.ApiModel; public class SmsBean { private String LoginName = "13095656162"; - private String MessageContent ="你好,五一快乐"; + private String MessageContent = "你好,五一快乐"; private String MessageType = "2"; private String Password = "yxt_123456"; private String ScheduleTime = ""; private String SerialNumber = ""; - private String SpCode ="13095656162"; - private String UserNumber=""; - private String f= "1"; + private String SpCode = "13095656162"; + private String UserNumber = ""; + private String f = "1"; public String getLoginName() { diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/bean/StudentBean.java b/cloud/haikang/src/main/java/com/sincere/haikang/bean/StudentBean.java index 43f5cb6..7504057 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/bean/StudentBean.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/bean/StudentBean.java @@ -35,7 +35,7 @@ public class StudentBean implements Serializable { private Date AddTime; - private int Sex; + private int Sex; private String Face; @@ -46,7 +46,6 @@ public class StudentBean implements Serializable { private String student_id; - public String getUserId() { return UserId; } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/control/SmsControl.java b/cloud/haikang/src/main/java/com/sincere/haikang/control/SmsControl.java index d24ddc1..6c0d242 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/control/SmsControl.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/control/SmsControl.java @@ -22,9 +22,9 @@ import java.util.*; public class SmsControl { - @RequestMapping(value = "sendMsg", method = RequestMethod.GET,produces="application/json;charset=UTF-8") + @RequestMapping(value = "sendMsg", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") @ResponseBody - @ApiImplicitParam(name = "ExtendAccessNum",required = false) + @ApiImplicitParam(name = "ExtendAccessNum", required = false) public String sendMsg(@RequestParam("SpCode") String SpCode, @RequestParam("LoginName") String LoginName, @RequestParam("Password") String Password , @RequestParam("MessageContent") String MessageContent, @RequestParam("MessageType") String MessageType , @RequestParam("UserNumber") String UserNumber, @RequestParam("SerialNumber") String SerialNumber @@ -36,8 +36,8 @@ public class SmsControl { } @PostMapping(value = "sendMsgs") - public String sendMags(@RequestBody SmsBean smsBean){ - System.out.println("接口请求POST:"+smsBean.toString()); + public String sendMags(@RequestBody SmsBean smsBean) { + System.out.println("接口请求POST:" + smsBean.toString()); return sendSms(smsBean.getSpCode(), smsBean.getLoginName(), smsBean.getPassword(), smsBean.getMessageContent(), smsBean.getMessageType(), smsBean.getUserNumber(), smsBean.getSerialNumber(), smsBean.getScheduleTime(), "", smsBean.getF()); @@ -60,12 +60,12 @@ public class SmsControl { try { result = SmsHttpUtils.doGet(url, params); } catch (IOException e) { - FileUtils.getInstance().writeLogs(String.format("GET短信发送的响应失败【%s】",e.toString()),FileUtils.liantong); + FileUtils.getInstance().writeLogs(String.format("GET短信发送的响应失败【%s】", e.toString()), FileUtils.liantong); e.printStackTrace(); } - System.out.println(String.format("GET短信发送的响应报文【%s】",result)+" messageContent:"+messageContent); + System.out.println(String.format("GET短信发送的响应报文【%s】", result) + " messageContent:" + messageContent); - FileUtils.getInstance().writeLogs(String.format("GET短信发送的响应报文【%s】",result),FileUtils.liantong); + FileUtils.getInstance().writeLogs(String.format("GET短信发送的响应报文【%s】", result), FileUtils.liantong); return result; } @@ -84,7 +84,7 @@ public class SmsControl { * @param scheduleTime * @param extendAccessNum * @param f - * @return java.util.Map + * @return java.util.Map * @author uccp * @date 2019/3/22 23:09 */ @@ -98,7 +98,7 @@ public class SmsControl { //用户密码 params.put("Password", password); //短信内容, 最大480个字(短信内容要求的编码为gbk) - params.put("MessageContent",EncodeUtils.encodeStr(messageContent)); + params.put("MessageContent", EncodeUtils.encodeStr(messageContent)); //短信类型,1=验证码、2=通知、3=广告 (没传或者非1、2、3系统会默认为4=其他) params.put("MessageType", messageType); //手机号码(多个号码用”,”分隔),最多1000个号码 @@ -108,8 +108,8 @@ public class SmsControl { //预约发送时间,格式:yyyyMMddhhmmss,如‘20090901010101’ params.put("ScheduleTime", scheduleTime); //接入号扩展号(默认不填,扩展号为数字,扩展位数由当前所配的接入号长度决定,整个接入号最长4位) - if (extendAccessNum!=null) - params.put("ExtendAccessNum", extendAccessNum); + if (extendAccessNum != null) + params.put("ExtendAccessNum", extendAccessNum); /* * 提交时检测方式 * 为1时,提交号码中有效的号码仍正常发出短信,无效的号码在返回参数faillist中列出 diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/control/UserControl.java b/cloud/haikang/src/main/java/com/sincere/haikang/control/UserControl.java index 057e463..28c88c9 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/control/UserControl.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/control/UserControl.java @@ -27,38 +27,35 @@ public class UserControl { @Autowired CMSServer cmsServer; - @RequestMapping(value = "sendUsers",method = RequestMethod.GET) - public boolean sendUsers(@RequestParam("schoolId")String schoolId){ + @RequestMapping(value = "sendUsers", method = RequestMethod.GET) + public boolean sendUsers(@RequestParam("schoolId") String schoolId) { List studentBeans = userDao.getAllStudentsWithSchoolId(schoolId); - System.out.println("schoolId:"+schoolId+" 学生数量:"+studentBeans.size()); + System.out.println("schoolId:" + schoolId + " 学生数量:" + studentBeans.size()); // System.out.println("studentBeans:"+studentBeans); - sendUserAsync.sendStu(studentBeans,0); + sendUserAsync.sendStu(studentBeans, 0); return true; } - @RequestMapping(value = "deleteCard",method = RequestMethod.GET) + @RequestMapping(value = "deleteCard", method = RequestMethod.GET) public boolean deleteCard(@RequestParam("clint_id") String clint_id, @RequestParam("student_id") String cardNo, @RequestParam("name") String name, - @RequestParam("clint_type") String clint_type,@RequestParam("valid") int valid){ + @RequestParam("clint_type") String clint_type, @RequestParam("valid") int valid) { // System.out.println("studentBeans:"+studentBeans); - sendUserAsync.deleteCard(clint_id,cardNo,name,clint_type,valid); + sendUserAsync.deleteCard(clint_id, cardNo, name, clint_type, valid); return true; } - @RequestMapping(value = "getFingerPrint",method = RequestMethod.GET) - public boolean getFingerPrint(@RequestParam("card")String card,@RequestParam("clint_id")String clint_id){ - sendUserAsync.getFingerPrint(card,clint_id); + @RequestMapping(value = "getFingerPrint", method = RequestMethod.GET) + public boolean getFingerPrint(@RequestParam("card") String card, @RequestParam("clint_id") String clint_id) { + sendUserAsync.getFingerPrint(card, clint_id); return true; } - - - // @RequestMapping(value = "uploadImg", method= RequestMethod.GET) // public String uploadImg(@RequestParam("filePath")String filePath){ // return cmsServer.jbtnUploadActionPerformed(filePath); diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/dao/DeviceDao.java b/cloud/haikang/src/main/java/com/sincere/haikang/dao/DeviceDao.java index dcc1b37..6525632 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/dao/DeviceDao.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/dao/DeviceDao.java @@ -17,21 +17,25 @@ public interface DeviceDao { int addDevide(AttendanceBean attendanceBean); @Select("select * from SZ_Attendance where clint_id = #{clint_id}") - AttendanceBean selectDevice(@Param("clint_id")String clint_id); + AttendanceBean selectDevice(@Param("clint_id") String clint_id); @Update("update SZ_Attendance set isConnection = #{isConnection} where ip = #{ip} and port = #{port} and clint_id = #{clint_id}") - int updateDeviceStatu(@Param("isConnection")int isConnection,@Param("ip")String ip,@Param("port")int port,@Param("clint_id")String clint_id); + int updateDeviceStatu(@Param("isConnection") int isConnection, @Param("ip") String ip, @Param("port") int port, @Param("clint_id") String clint_id); @Select("select * from SZ_Attendance where clint_type = #{clint_type} and school_id = #{school_id}") - List selectDeviceWithschool_id(@Param("clint_type")String clint_type, @Param("school_id")String school_id); + List selectDeviceWithschool_id(@Param("clint_type") String clint_type, @Param("school_id") String school_id); /** * 获取活动场地 + * * @param KaoQinAttendance * @return */ @Select("select Top(1)* from XA_PlaceAttendance where KaoQinAttendance = #{KaoQinAttendance}") - PlaceAttendance getPlaceAttendance(@Param("KaoQinAttendance")String KaoQinAttendance); + PlaceAttendance getPlaceAttendance(@Param("KaoQinAttendance") String KaoQinAttendance); + + @Select("select DISTINCT clint_id,clint_type from SZ_Attendance where school_id = #{school_id}") + List getAttendancesWithSchoolId(@Param("school_id") int schoolId); } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/dao/UserDao.java b/cloud/haikang/src/main/java/com/sincere/haikang/dao/UserDao.java index f3531f1..5b228df 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/dao/UserDao.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/dao/UserDao.java @@ -13,6 +13,7 @@ public interface UserDao { /** * 没有记录取最新十条下发 + * * @return */ @Select("select top (10) * from HS_StudentUpdateCard order by AddTime desc") @@ -23,21 +24,22 @@ public interface UserDao { /** * 获取所有的学生 + * * @return */ - @Select("select * from HS_StudentUpdateCard where ID > #{id} and StudentType = #{StudentType} order by AddTime desc") - List getAllStudents(@Param("id")long id,@Param("StudentType")int StudentType); + @Select("select * from HS_StudentUpdateCard where ID > #{id} and UserType = #{UserType} order by AddTime desc") + List getAllStudents(@Param("id") long id, @Param("UserType") int UserType); // @Select("select * from HS_StudentUpdateCard where ID > #{id} order by AddTime desc") // List getAllStudents(@Param("id")long id); @Select("select * from SZ_V_School_Student where school_id = #{school_id}") - List getAllStudentsWithSchoolId(@Param("school_id")String school_id); + List getAllStudentsWithSchoolId(@Param("school_id") String school_id); @Update("update SZ_V_School_Student set name = #{name} where student_id = #{student_id}") - void updateTest(@Param("student_id")String student_id,@Param("name")String name); + void updateTest(@Param("student_id") String student_id, @Param("name") String name); @Select("select Top(1) student_num from SZ_V_School_Student where student_id = #{student_id} and role_state = 1") - String getStudent_Num(@Param("student_id")String student_id); + String getStudent_Num(@Param("student_id") String student_id); @Select("select * from TK_QuestionBar") List getQuestion(); @@ -47,10 +49,12 @@ public interface UserDao { "GradeId,SourceId,OrderId,SId,StemId,AutomaticCorrection,SchoolId) values(#{Question},#{Qtype},#{Answer},#{CorrectAnswer},#{Analysis}" + ",#{State},#{Intime},#{ExamineFlag},#{ExamineUserId},#{CreateUserId},#{SubjectId},#{SuggestionTime},#{DifficulteId},#{KnowledgeId},#{TestId}" + ",#{ChapterId},#{GradeId},#{SourceId},#{OrderId},#{SId},#{StemId},#{AutomaticCorrection},#{SchoolId})") - int insertTK(@Param("Question")String Question,@Param("Qtype")String Qtype,@Param("Answer")String Answer,@Param("CorrectAnswer")String CorrectAnswer, - @Param("Analysis")String Analysis,@Param("State")String State,@Param("Intime")String Intime,@Param("ExamineFlag")String ExamineFlag,@Param("ExamineUserId")String ExamineUserId, - @Param("CreateUserId")String CreateUserId,@Param("SubjectId")String SubjectId,@Param("SuggestionTime")String SuggestionTime,@Param("DifficulteId")String DifficulteId, - @Param("KnowledgeId")String KnowledgeId,@Param("TestId")String TestId,@Param("ChapterId")String ChapterId,@Param("GradeId")String GradeId,@Param("SourceId")String SourceId, - @Param("OrderId")String OrderId,@Param("SId")String SId,@Param("StemId")String StemId,@Param("AutomaticCorrection")String AutomaticCorrection,@Param("SchoolId")String SchoolId); - + int insertTK(@Param("Question") String Question, @Param("Qtype") String Qtype, @Param("Answer") String Answer, @Param("CorrectAnswer") String CorrectAnswer, + @Param("Analysis") String Analysis, @Param("State") String State, @Param("Intime") String Intime, @Param("ExamineFlag") String ExamineFlag, @Param("ExamineUserId") String ExamineUserId, + @Param("CreateUserId") String CreateUserId, @Param("SubjectId") String SubjectId, @Param("SuggestionTime") String SuggestionTime, @Param("DifficulteId") String DifficulteId, + @Param("KnowledgeId") String KnowledgeId, @Param("TestId") String TestId, @Param("ChapterId") String ChapterId, @Param("GradeId") String GradeId, @Param("SourceId") String SourceId, + @Param("OrderId") String OrderId, @Param("SId") String SId, @Param("StemId") String StemId, @Param("AutomaticCorrection") String AutomaticCorrection, @Param("SchoolId") String SchoolId); + + @Select("select photo from SZ_V_School_Student where user_id = #{userId}") + String getPhotoWithUserId(@Param("userId") String userId); } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeAlarm.java b/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeAlarm.java index 8c0bad4..dc0ed34 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeAlarm.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeAlarm.java @@ -10,7 +10,6 @@ */ /** - * * @author Xubinfeng */ @@ -64,22 +63,23 @@ public interface HCEHomeAlarm extends StdCallLibrary { public NET_EHOME_IPADDRESS struAddress; public EHomeMsgCallBack fnMsgCb; //报警信息回调函数 public Pointer pUserData; //用户数据 - public byte byProtocolType; //协议类型,0-TCP,1-UDP - public byte byUseCmsPort; //是否复用CMS端口,0-不复用,非0-复用,如果复用cms端口,协议类型字段无效(此时本地监听信息struAddress填本地回环地址) - public byte byUseThreadPool; //0-回调报警时,使用线程池,1-回调报警时,不使用线程池,默认情况下,报警回调的时候,使用线程池 - public byte byRes[]= new byte[29];; + public byte byProtocolType; //协议类型,0-TCP,1-UDP + public byte byUseCmsPort; //是否复用CMS端口,0-不复用,非0-复用,如果复用cms端口,协议类型字段无效(此时本地监听信息struAddress填本地回环地址) + public byte byUseThreadPool; //0-回调报警时,使用线程池,1-回调报警时,不使用线程池,默认情况下,报警回调的时候,使用线程池 + public byte byRes[] = new byte[29]; + ; } //初始化,反初始化 - boolean NET_EALARM_Init(); - boolean NET_EALARM_Fini(); + boolean NET_EALARM_Init(); + + boolean NET_EALARM_Fini(); - NativeLong NET_EALARM_StartListen(NET_EHOME_ALARM_LISTEN_PARAM pAlarmListenParam); + NativeLong NET_EALARM_StartListen(NET_EHOME_ALARM_LISTEN_PARAM pAlarmListenParam); } //windows user32接口,user32.dll in system32 folder, 在设置遮挡区域,移动侦测区域等情况下使用 -interface USER32 extends W32API -{ +interface USER32 extends W32API { USER32 INSTANCE = (USER32) Native.loadLibrary("user32", USER32.class, DEFAULT_OPTIONS); diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeCMS.java b/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeCMS.java index 185ea5f..b351883 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeCMS.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeCMS.java @@ -10,7 +10,6 @@ */ /** - * * @author Xubinfeng */ @@ -40,8 +39,8 @@ public interface HCEHomeCMS extends StdCallLibrary { /***宏定义***/ //常量 - public static final int MAX_NAMELEN = 16; //DVR本地登陆名 - public static final int MAX_RIGHT = 32; //设备支持的权限(1-12表示本地权限,13-32表示远程权限) + public static final int MAX_NAMELEN = 16; //DVR本地登陆名 + public static final int MAX_RIGHT = 32; //设备支持的权限(1-12表示本地权限,13-32表示远程权限) public static final int NAME_LEN = 32; //用户名长度 public static final int PASSWD_LEN = 16; //密码长度 public static final int MAX_DEVICE_ID_LEN = 256; //设备ID长度 @@ -59,44 +58,44 @@ public interface HCEHomeCMS extends StdCallLibrary { public byte[] sDeviceSerial = new byte[NET_EHOME_SERIAL_LEN/*12*/]; //设备序列号,数字序列号 public byte[] byRes = new byte[52]; } - + public static class NET_EHOME_SERVER_INFO extends Structure { public int dwSize; public int dwKeepAliveSec; - public int dwTimeOutCount; + public int dwTimeOutCount; public NET_EHOME_IPADDRESS struTCPAlarmSever = new NET_EHOME_IPADDRESS(); - public NET_EHOME_IPADDRESS struUDPAlarmSever= new NET_EHOME_IPADDRESS(); - public int dwAlarmServerType; - public NET_EHOME_IPADDRESS struNTPSever= new NET_EHOME_IPADDRESS(); + public NET_EHOME_IPADDRESS struUDPAlarmSever = new NET_EHOME_IPADDRESS(); + public int dwAlarmServerType; + public NET_EHOME_IPADDRESS struNTPSever = new NET_EHOME_IPADDRESS(); public int dwNTPInterval; - public NET_EHOME_IPADDRESS struPictureSever= new NET_EHOME_IPADDRESS(); - public int dwPicServerType; - public NET_EHOME_BLACKLIST_SEVER struBlackListServer= new NET_EHOME_BLACKLIST_SEVER(); - public byte[] byRes = new byte[128]; + public NET_EHOME_IPADDRESS struPictureSever = new NET_EHOME_IPADDRESS(); + public int dwPicServerType; + public NET_EHOME_BLACKLIST_SEVER struBlackListServer = new NET_EHOME_BLACKLIST_SEVER(); + public byte[] byRes = new byte[128]; } - + public static class NET_EHOME_BLACKLIST_SEVER extends Structure { - public NET_EHOME_IPADDRESS struAdd = new NET_EHOME_IPADDRESS(); + public NET_EHOME_IPADDRESS struAdd = new NET_EHOME_IPADDRESS(); public byte[] byServerName = new byte[32]; public byte[] byUserName = new byte[32]; public byte[] byPassWord = new byte[32]; public byte[] byRes = new byte[64]; } - + public static class NET_EHOME_LOCAL_ACCESS_SECURITY extends Structure { - public int dwSize; - public byte byAccessSecurity; - public byte[] byRes = new byte[127]; - } - + public int dwSize; + public byte byAccessSecurity; + public byte[] byRes = new byte[127]; + } + public static class NET_EHOME_AMS_ADDRESS extends Structure { - public int dwSize; - public byte byEnable; - public byte[] byRes1 = new byte[3]; - public NET_EHOME_IPADDRESS struAddress = new NET_EHOME_IPADDRESS(); - public byte[] byRes2 = new byte[32]; -} - + public int dwSize; + public byte byEnable; + public byte[] byRes1 = new byte[3]; + public NET_EHOME_IPADDRESS struAddress = new NET_EHOME_IPADDRESS(); + public byte[] byRes2 = new byte[32]; + } + public static class NET_EHOME_IPADDRESS extends Structure { public byte[] szIP = new byte[128]; public short wPort; //端口 @@ -109,7 +108,7 @@ public interface HCEHomeCMS extends StdCallLibrary { public static class NET_EHOME_CMS_LISTEN_PARAM extends Structure { public NET_EHOME_IPADDRESS struAddress; //本地监听信息,IP为0.0.0.0的情况下,默认为本地地址,多个网卡的情况下,默认为从操作系统获取到的第一个 - public DEVICE_REGISTER_CB fnCB; //报警信息回调函数 + public DEVICE_REGISTER_CB fnCB; //报警信息回调函数 public Pointer pUserData; //用户数据 public byte[] byRes = new byte[32]; } @@ -117,12 +116,13 @@ public interface HCEHomeCMS extends StdCallLibrary { public static interface fVoiceDataCallBack extends StdCallCallback { public void invoke(NativeLong iVoiceHandle, byte[] pRecvDataBuffer, int dwBufSize, int dwEncodeType, byte byAudioFlag, Pointer pUser); } + public static class NET_EHOME_VOICETALK_PARA extends Structure { public boolean bNeedCBNoEncData; //需要回调的语音类型:0-编码后语音,1-编码前语音(语音转发时不支持) - public fVoiceDataCallBack cbVoiceDataCallBack; //用于回调音频数据的回调函数 + public fVoiceDataCallBack cbVoiceDataCallBack; //用于回调音频数据的回调函数 public int dwEncodeType; //SDK赋值,SDK的语音编码类型,0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM public Pointer pUser; //用户参数 - public byte byVoiceTalk; //0-语音对讲,1-语音转发 + public byte byVoiceTalk; //0-语音对讲,1-语音转发 public byte byDevAudioEnc; //输出参数,设备的音频编码方式 0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM public byte[] byRes = new byte[62];//Reserved, set as 0. 0 } @@ -142,8 +142,8 @@ public interface HCEHomeCMS extends StdCallLibrary { public NET_EHOME_IPADDRESS struStreamSever; public byte byDelayPreview; public byte[] byRes = new byte[31]; - } - + } + public static class NET_EHOME_PREVIEWINFO_OUT extends Structure { public NativeLong lSessionID; public byte[] byRes = new byte[128]; @@ -190,141 +190,172 @@ public interface HCEHomeCMS extends StdCallLibrary { public byte[] byRes = new byte[24]; } - public static class NET_EHOME_XML_REMOTE_CTRL_PARAM extends Structure - { - public int dwSize; - public Pointer lpInbuffer; - public int dwInBufferSize; - public int dwSendTimeOut; - public int dwRecvTimeOut; + public static class NET_EHOME_XML_REMOTE_CTRL_PARAM extends Structure { + public int dwSize; + public Pointer lpInbuffer; + public int dwInBufferSize; + public int dwSendTimeOut; + public int dwRecvTimeOut; public Pointer lpOutBuffer; //输出缓冲区 public int dwOutBufferSize; //输出缓冲区大小 public Pointer lpStatusBuffer; //状态缓冲区,若不需要可置为NULL public int dwStatusBufferSize; //状态缓冲区大小 public byte[] byRes = new byte[16]; - }; - + } + + ; + public static class NET_DVR_STRING_POINTER extends Structure { - public byte[] byString = new byte[2*1024]; + public byte[] byString = new byte[2 * 1024]; } - public static class NET_EHOME_CONFIG extends Structure{ - public Pointer pCondBuf; - public int dwCondSize; + public static class NET_EHOME_CONFIG extends Structure { + public Pointer pCondBuf; + public int dwCondSize; public Pointer pInBuf; - public int dwInSize; - public Pointer pOutBuf; - public int dwOutSize; + public int dwInSize; + public Pointer pOutBuf; + public int dwOutSize; public byte[] byRes = new byte[40]; } - - public static class NET_EHOME_DEVICE_INFO extends Structure{ - public int dwSize; - public int dwChannelNumber; - public int dwChannelAmount; - public int dwDevType; - public int dwDiskNumber; - public byte[] sSerialNumber = new byte[128]; - public int dwAlarmInPortNum; - public int dwAlarmInAmount; - public int dwAlarmOutPortNum; - public int dwAlarmOutAmount; - public int dwStartChannel; - public int dwAudioChanNum; - public int dwMaxDigitChannelNum; - public int dwAudioEncType; + + public static class NET_EHOME_DEVICE_INFO extends Structure { + public int dwSize; + public int dwChannelNumber; + public int dwChannelAmount; + public int dwDevType; + public int dwDiskNumber; + public byte[] sSerialNumber = new byte[128]; + public int dwAlarmInPortNum; + public int dwAlarmInAmount; + public int dwAlarmOutPortNum; + public int dwAlarmOutAmount; + public int dwStartChannel; + public int dwAudioChanNum; + public int dwMaxDigitChannelNum; + public int dwAudioEncType; public byte[] sSIMCardSN = new byte[128]; - public byte[] sSIMCardPhoneNum = new byte[32]; - public int dwSupportZeroChan; - public int dwStartZeroChan; - public int dwSmartType; + public byte[] sSIMCardPhoneNum = new byte[32]; + public int dwSupportZeroChan; + public int dwStartZeroChan; + public int dwSmartType; public byte[] byRes = new byte[160]; - }; - public static class NET_EHOME_REC_FILE_COND extends Structure{ - public int dwChannel; //通道号 - public int dwRecType;//录像类型:0xff-全部类型,0-定时录像,1-移动报警,2-报警触发,3-报警|动测,4-报警&动测,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警(或者取证录像),10(0x0a)-PIR报警,11(0x0b)-无线报警,12(0x0c)-呼救报警,13(0x0d)-全部报警 + } + + ; + + public static class NET_EHOME_REC_FILE_COND extends Structure { + public int dwChannel; //通道号 + public int dwRecType;//录像类型:0xff-全部类型,0-定时录像,1-移动报警,2-报警触发,3-报警|动测,4-报警&动测,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警(或者取证录像),10(0x0a)-PIR报警,11(0x0b)-无线报警,12(0x0c)-呼救报警,13(0x0d)-全部报警 public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME();//开始时间 public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME();//结束时间 - public int dwStartIndex;//查询起始位置,从0开始 - public int dwMaxFileCountPer;//单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8 + public int dwStartIndex;//查询起始位置,从0开始 + public int dwMaxFileCountPer;//单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8 public byte[] byRes = new byte[64]; - }; - public static class NET_EHOME_REC_FILE extends Structure{ - public int dwSize; - public byte[] sFileName = new byte[100]; - public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME(); - public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME(); - public int dwFileSize; - public int dwFileMainType; - public int dwFileSubType; - public int dwFileIndex; + } + + ; + + public static class NET_EHOME_REC_FILE extends Structure { + public int dwSize; + public byte[] sFileName = new byte[100]; + public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME(); + public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME(); + public int dwFileSize; + public int dwFileMainType; + public int dwFileSubType; + public int dwFileIndex; public byte[] byRes = new byte[128]; - }; - public static class NET_EHOME_TIME extends Structure{ - public short wYear;//年 - public byte byMonth;//月 - public byte byDay;//日 - public byte byHour;//时 - public byte byMinute;//分 - public byte bySecond;//秒 - public byte byRes1;//保留 - public short wMSecond;//毫秒 + } + + ; + + public static class NET_EHOME_TIME extends Structure { + public short wYear;//年 + public byte byMonth;//月 + public byte byDay;//日 + public byte byHour;//时 + public byte byMinute;//分 + public byte bySecond;//秒 + public byte byRes1;//保留 + public short wMSecond;//毫秒 public byte[] byRes2 = new byte[2]; - } + } + //初始化,反初始化 - boolean NET_ECMS_Init(); - boolean NET_ECMS_Fini(); - + boolean NET_ECMS_Init(); + + boolean NET_ECMS_Fini(); + //获取错误码 int NET_ECMS_GetLastError(); //获取版本号 int NET_ECMS_GetBuildVersion(); - boolean NET_ECMS_SetSDKLocalCfg(int enumType, Pointer lpInBuff); - boolean NET_ECMS_GetSDKLocalCfg(int enumType, Pointer lpOutBuff); - + boolean NET_ECMS_SetSDKLocalCfg(int enumType, Pointer lpInBuff); + + boolean NET_ECMS_GetSDKLocalCfg(int enumType, Pointer lpOutBuff); + //开启关闭监听 NativeLong NET_ECMS_StartListen(NET_EHOME_CMS_LISTEN_PARAM lpCMSListenPara); + boolean NET_ECMS_StopListen(NativeLong iHandle); + boolean NET_ECMS_GetDevConfig(NativeLong lUserID, int dwCommand, NET_EHOME_CONFIG lpConfig, int dwConfigSize); + //注销设备 boolean NET_ECMS_ForceLogout(NativeLong lUserID) - ; + ; + boolean NET_ECMS_SetLogToFile(int iLogLevel, String strLogDir, boolean bAutoDel); - NativeLong NET_ECMS_StartVoiceTalk(NativeLong lUserID, int dwVoiceChan, NET_EHOME_VOICETALK_PARA pVoiceTalkPara); + + NativeLong NET_ECMS_StartVoiceTalk(NativeLong lUserID, int dwVoiceChan, NET_EHOME_VOICETALK_PARA pVoiceTalkPara); boolean NET_ECMS_StopVoiceTalk(NativeLong iVoiceHandle); + boolean NET_ECMS_StopVoiceTalkWithStmServer(NativeLong lUserID, NativeLong lSessionID); + boolean NET_ECMS_SendVoiceTransData(NativeLong iVoiceHandle, String pSendBuf, int dwBufSize); - boolean NET_ECMS_StartGetRealStream(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); //lUserID由SDK分配的用户ID,由设备注册回调时fDeviceRegisterCallBack返回 - boolean NET_ECMS_StartGetRealStreamV11(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN_V11 pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); - boolean NET_ECMS_StopGetRealStream(NativeLong lUserID, NativeLong lSessionID); + boolean NET_ECMS_StartGetRealStream(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); //lUserID由SDK分配的用户ID,由设备注册回调时fDeviceRegisterCallBack返回 + + boolean NET_ECMS_StartGetRealStreamV11(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN_V11 pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); + + boolean NET_ECMS_StopGetRealStream(NativeLong lUserID, NativeLong lSessionID); + boolean NET_ECMS_StartPushRealStream(NativeLong lUserID, NET_EHOME_PUSHSTREAM_IN pPushInfoIn, NET_EHOME_PUSHSTREAM_OUT pPushInfoOut); + boolean NET_ESTREAM_StopPreview(NativeLong lPreviewHandle); + boolean NET_ESTREAM_StopListenPreview(NativeLong lPreivewListenHandle); //透传 boolean NET_ECMS_GetPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam); + boolean NET_ECMS_PutPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam); + boolean NET_ECMS_PostPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam); + boolean NET_ECMS_DeletePTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam); + boolean NET_ECMS_XMLConfig(NativeLong iUserID, NET_EHOME_XML_CFG pXmlCfg, int dwConfigSize); + boolean NET_ECMS_XMLRemoteControl(NativeLong lUserID, NET_EHOME_XML_REMOTE_CTRL_PARAM lpCtrlParam, int dwCtrlSize); - - //获取查下句柄 + + //获取查下句柄 NativeLong NET_ECMS_StartFindFile_V11(NativeLong lUserID, int lSearchType, Pointer pFindCond, int dwCondSize); + NativeLong NET_ECMS_FindNextFile_V11(NativeLong lHandle, Pointer pFindData, int dwDataSize); + boolean NET_ECMS_StopFindFile(NativeLong lHandle); //boolean NET_ECMS_StartPlayBack(NativeLong lUserID, NET_EHOME_PLAYBACK_INFO_IN pPlaybackInfoIn, NET_EHOME_PLAYBACK_INFO_OUT pPlaybackInfoOut); //boolean NET_ECMS_StartPushPlayBack(NativeLong lUserID, NET_EHOME_PUSHPLAYBACK_IN struPushPlayBackIn, NET_EHOME_PUSHPLAYBACK_OUT struPushPlayBackOut); - + } -interface GDI32 extends W32API -{ +interface GDI32 extends W32API { GDI32 INSTANCE = (GDI32) Native.loadLibrary("gdi32", GDI32.class, DEFAULT_OPTIONS); public static final int TRANSPARENT = 1; diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeStream.java b/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeStream.java index 5f09e2a..eaa04ed 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeStream.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/libutils/HCEHomeStream.java @@ -11,17 +11,15 @@ public interface HCEHomeStream extends StdCallLibrary { HCEHomeStream INSTANCE = (HCEHomeStream) Native.loadLibrary("C:\\lib\\HCEHomeStream", HCEHomeStream.class); - public class NET_EHOME_LISTEN_PREVIEW_CFG extends Structure - { + public class NET_EHOME_LISTEN_PREVIEW_CFG extends Structure { public HCEHomeCMS.NET_EHOME_IPADDRESS struIPAdress; //本地监听信息,IP为0.0.0.0的情况下,默认为本地地址,多个网卡的情况下,默认为从操作系统获取到的第一个 - public PREVIEW_NEWLINK_CB fnNewLinkCB; //预览请求回调函数,当收到预览连接请求后,SDK会回调该回调函数。 + public PREVIEW_NEWLINK_CB fnNewLinkCB; //预览请求回调函数,当收到预览连接请求后,SDK会回调该回调函数。 public Pointer pUser; // 用户参数,在fnNewLinkCB中返回出来 public byte byLinkMode; //0:TCP,1:UDP 2: HRUDP方式 public byte[] byRes = new byte[127]; } - public class NET_EHOME_NEWLINK_CB_MSG extends Structure - { + public class NET_EHOME_NEWLINK_CB_MSG extends Structure { public byte[] szDeviceID = new byte[HCEHomeCMS.MAX_DEVICE_ID_LEN]; //设备标示符 public NativeLong iSessionID; //设备分配给该取流会话的ID public int dwChannelNo; //设备通道号 @@ -30,9 +28,8 @@ public interface HCEHomeStream extends StdCallLibrary { public byte[] sDeviceSerial = new byte[HCEHomeCMS.NET_EHOME_SERIAL_LEN]; //设备序列号,数字序列号 public byte[] byRes = new byte[112]; } - - public class NET_EHOME_PREVIEW_CB_MSG extends Structure - { + + public class NET_EHOME_PREVIEW_CB_MSG extends Structure { public byte byDataType; //NET_DVR_SYSHEAD(1)-码流头,NET_DVR_STREAMDATA(2)-码流数据 public byte[] byRes1 = new byte[3]; public Pointer pRecvdata; //码流头或者数据 @@ -40,8 +37,7 @@ public interface HCEHomeStream extends StdCallLibrary { public byte[] byRes2 = new byte[128]; } - public class NET_EHOME_PREVIEW_DATA_CB_PARAM extends Structure - { + public class NET_EHOME_PREVIEW_DATA_CB_PARAM extends Structure { public PREVIEW_DATA_CB fnPreviewDataCB; //数据回调函数 public Pointer pUserData; //用户参数, 在fnPreviewDataCB回调出来 public byte[] byRes = new byte[128]; //保留 @@ -50,7 +46,7 @@ public interface HCEHomeStream extends StdCallLibrary { public interface PREVIEW_NEWLINK_CB extends StdCallCallback { public boolean invoke(NativeLong lLinkHandle, NET_EHOME_NEWLINK_CB_MSG pNewLinkCBMsg, Pointer pUserData); } - + public interface PREVIEW_DATA_CB extends StdCallCallback { public void invoke(NativeLong iPreviewHandle, NET_EHOME_PREVIEW_CB_MSG pPreviewCBMsg, Pointer pUserData); } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceImp.java b/cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceImp.java index 8750768..8d2a4bd 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceImp.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceImp.java @@ -23,12 +23,12 @@ public class AttendanceImp implements AttendanceService { try { String selectSql = String.format("select * from SZ_Attendance where clint_id =\'%s\'", clint_id); List attendanceBeans = jdbcTemplate.query(selectSql, new Object[]{}, new BeanPropertyRowMapper(AttendanceBean.class)); - System.out.println("attendanceBeans:"+attendanceBeans); + System.out.println("attendanceBeans:" + attendanceBeans); if (attendanceBeans.size() == 0) {//设备不存在 - String insertSql = String.format("insert into SZ_Attendance(clint_id, clint_type, ip, port, intime, school_id, state,isConnection) values ('%s','%s','%s','%s','%s','%s','%s','%s')", clint_id, clint_type, ip, port, intime, school_id, state,1); + String insertSql = String.format("insert into SZ_Attendance(clint_id, clint_type, ip, port, intime, school_id, state,isConnection) values ('%s','%s','%s','%s','%s','%s','%s','%s')", clint_id, clint_type, ip, port, intime, school_id, state, 1); return jdbcTemplate.update(insertSql); } else {//设备 已经存在,更新在线状态 - updateConnectStateWithDevid(1,clint_id); + updateConnectStateWithDevid(1, clint_id); } } catch (Exception e) { e.printStackTrace(); @@ -37,21 +37,20 @@ public class AttendanceImp implements AttendanceService { } /** - * * @param isConnection 连接状态 * @param ip * @param port * @return */ @Override - public int updateConnectState(int isConnection,String ip,String port) { + public int updateConnectState(int isConnection, String ip, String port) { int index = 0; try { - String updateSql = String.format(" update SZ_Attendance set isConnection = %d where ip = '%s' and port = '%s' ",isConnection,ip,port); + String updateSql = String.format(" update SZ_Attendance set isConnection = %d where ip = '%s' and port = '%s' ", isConnection, ip, port); index = jdbcTemplate.update(updateSql); // System.out.println("updateIndex:"+index+" isConnection:"+isConnection+"updateSql:"+updateSql); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } @@ -62,10 +61,10 @@ public class AttendanceImp implements AttendanceService { public int updateConnectStateWithDevid(int isConnection, String clint_id) { int index = 0; try { - String updateSql = String.format(" update SZ_Attendance set isConnection = %d where clint_id = '%s' ",isConnection,clint_id); + String updateSql = String.format(" update SZ_Attendance set isConnection = %d where clint_id = '%s' ", isConnection, clint_id); index = jdbcTemplate.update(updateSql); // System.out.println("updateIndex:"+index+" isConnection:"+isConnection+"updateSql:"+updateSql); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceService.java b/cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceService.java index c05943f..8e990cf 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceService.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/server/AttendanceService.java @@ -8,6 +8,7 @@ public interface AttendanceService { /** * insert SZ_Attendance(clint_id, clint_type, ip, port, intime, school_id, state) * values(@clint_id,@clint_type,@ip,@port,GETDATE(),-1,1) + * * @return */ public int insert(String clint_id, String clint_type, String ip, String port, String intime, String school_id, @@ -15,10 +16,11 @@ public interface AttendanceService { /** * 更新联网状态 + * * @return */ int updateConnectState(int isConnection, String ip, String port); - int updateConnectStateWithDevid(int isConnection, String clint_id); + int updateConnectStateWithDevid(int isConnection, String clint_id); } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/utils/ApiHelper.java b/cloud/haikang/src/main/java/com/sincere/haikang/utils/ApiHelper.java index 1fe4e64..a7cdbab 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/utils/ApiHelper.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/utils/ApiHelper.java @@ -19,7 +19,7 @@ import java.util.*; public class ApiHelper { - public static String doGet(String url,Map headerParamMap) { + public static String doGet(String url, Map headerParamMap) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; String result = ""; @@ -30,7 +30,7 @@ public class ApiHelper { HttpGet httpGet = new HttpGet(url); // 设置请求头信息, for (Map.Entry entry : headerParamMap.entrySet()) { - httpGet.setHeader(entry.getKey(),entry.getValue()); + httpGet.setHeader(entry.getKey(), entry.getValue()); } // 为httpGet实例设置配置 @@ -66,8 +66,7 @@ public class ApiHelper { } - - public static String doDelete(String url,Map headerParamMap) { + public static String doDelete(String url, Map headerParamMap) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; String result = ""; @@ -78,7 +77,7 @@ public class ApiHelper { HttpDelete httpDelete = new HttpDelete(url); // 设置请求头信息, for (Map.Entry entry : headerParamMap.entrySet()) { - httpDelete.setHeader(entry.getKey(),entry.getValue()); + httpDelete.setHeader(entry.getKey(), entry.getValue()); } // 为httpGet实例设置配置 httpDelete.setConfig(setRequestConfig()); @@ -155,11 +154,13 @@ public class ApiHelper { e.printStackTrace(); } } - result = closeHttpAndResult(httpClient, httpPost,null); + result = closeHttpAndResult(httpClient, httpPost, null); return result; } + /** * post请求,内容体比较灵活,任意字符串格式的内容 + * * @param url * @param headerParamMap * @param jsonParam @@ -175,19 +176,19 @@ public class ApiHelper { // 设置请求头 httpPost.addHeader("Content-Type", "application/json"); for (Map.Entry entry : headerParamMap.entrySet()) { - httpPost.setHeader(entry.getKey(),entry.getValue()); + httpPost.setHeader(entry.getKey(), entry.getValue()); } // 为httpPost实例设置配置 httpPost.setConfig(setRequestConfig()); // try { - StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json","UTF-8")); + StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json", "UTF-8")); // stringEntity.setContentType("application/json"); // stringEntity.setContentEncoding("gzip");//请求头的编码格式 httpPost.setEntity(stringEntity); // }catch (UnsupportedEncodingException e){ // e.printStackTrace(); // } - result = closeHttpAndResult(httpClient,httpPost,null); + result = closeHttpAndResult(httpClient, httpPost, null); return result; } @@ -197,32 +198,32 @@ public class ApiHelper { // 创建httpClient实例 httpClient = HttpClients.createDefault(); // 创建httpPost远程连接实例 - HttpPut httpPut= new HttpPut(url); + HttpPut httpPut = new HttpPut(url); // 设置请求头 httpPut.addHeader("Content-Type", "application/json"); for (Map.Entry entry : headerParamMap.entrySet()) { - httpPut.setHeader(entry.getKey(),entry.getValue()); + httpPut.setHeader(entry.getKey(), entry.getValue()); } // 为httpPut实例设置配置 httpPut.setConfig(setRequestConfig()); - StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json","UTF-8")); + StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json", "UTF-8")); httpPut.setEntity(stringEntity); - result = closeHttpAndResult(httpClient,null,httpPut); + result = closeHttpAndResult(httpClient, null, httpPut); return result; } - private static String closeHttpAndResult(CloseableHttpClient httpClient,HttpPost httpPost,HttpPut httpPut){ + private static String closeHttpAndResult(CloseableHttpClient httpClient, HttpPost httpPost, HttpPut httpPut) { CloseableHttpResponse httpResponse = null; String result = null; try { // httpClient对象执行post或者是put请求,并返回响应参数对象 - if(httpPost != null) { + if (httpPost != null) { httpResponse = httpClient.execute(httpPost); - }else { + } else { httpResponse = httpClient.execute(httpPut); } // 从响应对象中获取响应内容 @@ -256,15 +257,16 @@ public class ApiHelper { /** * 设置配置请求参数 + * * @return */ - private static RequestConfig setRequestConfig(){ + private static RequestConfig setRequestConfig() { RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间 .setConnectionRequestTimeout(35000)// 请求超时时间 .setSocketTimeout(60000)// 数据读取超时时间 .build(); - return requestConfig; + return requestConfig; } } diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/utils/EncodeUtils.java b/cloud/haikang/src/main/java/com/sincere/haikang/utils/EncodeUtils.java index 294d911..65cdf43 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/utils/EncodeUtils.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/utils/EncodeUtils.java @@ -10,8 +10,8 @@ import java.net.URLEncoder; *

* 类名称: EncodeUtils.java * - * @version v1.0.0 * @author uccp + * @version v1.0.0 * @date 2019/3/22 22:37 *

* Modification History: @@ -30,7 +30,7 @@ public class EncodeUtils { * @author uccp * @date 2019/3/22 10:47 PM */ - public static String encodeStr(String str){ + public static String encodeStr(String str) { try { return URLEncoder.encode(str, EncodeUtils.DEFAULT_ENCODING); } catch (UnsupportedEncodingException e) { @@ -46,7 +46,7 @@ public class EncodeUtils { * @author uccp * @date 2019/3/22 10:47 PM */ - public static String decodeStr(String str){ + public static String decodeStr(String str) { try { return URLDecoder.decode(str, EncodeUtils.DEFAULT_ENCODING); } catch (UnsupportedEncodingException e) { diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/utils/FileUtils.java b/cloud/haikang/src/main/java/com/sincere/haikang/utils/FileUtils.java index fe8e1f6..50a8190 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/utils/FileUtils.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/utils/FileUtils.java @@ -64,11 +64,11 @@ public class FileUtils { String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); - File path = new File(filePath+datePath+"/"); - if (!path.exists())path.mkdirs(); + File path = new File(filePath + datePath + "/"); + if (!path.exists()) path.mkdirs(); String time = new SimpleDateFormat("HH").format(new Date()); - File logPath = new File(path, time+"_"+fileName); + File logPath = new File(path, time + "_" + fileName); try { // System.out.println("logPath:" + logPath.getAbsolutePath()); diff --git a/cloud/haikang/src/main/java/com/sincere/haikang/utils/SmsHttpUtils.java b/cloud/haikang/src/main/java/com/sincere/haikang/utils/SmsHttpUtils.java index bb4b71e..792be3e 100644 --- a/cloud/haikang/src/main/java/com/sincere/haikang/utils/SmsHttpUtils.java +++ b/cloud/haikang/src/main/java/com/sincere/haikang/utils/SmsHttpUtils.java @@ -32,8 +32,8 @@ import java.util.Map; *

* 类名称: HttpUtils.java * - * @version v1.0.0 * @author uccp + * @version v1.0.0 * @date 2019/3/22 22:37 *

* Modification History: @@ -45,6 +45,7 @@ public class SmsHttpUtils { private static RequestConfig requestConfig; private static final int MAX_TIMEOUT = 10000; + static { RequestConfig.Builder configBuilder = RequestConfig.custom(); // 设置连接超时 @@ -70,13 +71,13 @@ public class SmsHttpUtils { /** * 功能描述:发送 GET 请求(HTTP),带参数Key-Value形式 * - * @param url 请求地址 + * @param url 请求地址 * @param params 请求参数对象 * @return java.lang.String * @author uccp * @date 2019/3/22 23:14 */ - public static String doGet(String url, Map params) throws IOException{ + public static String doGet(String url, Map params) throws IOException { String apiUrl = url; StringBuffer param = new StringBuffer(); int i = 0; @@ -122,7 +123,7 @@ public class SmsHttpUtils { /** * 功能描述:发送 POST 请求(HTTP),带参数Key-Value形式 * - * @param url 请求地址 + * @param url 请求地址 * @param params 请求参数对象 * @return java.lang.String * @author uccp @@ -170,7 +171,7 @@ public class SmsHttpUtils { * @author uccp * @date 2019/3/22 23:17 */ - private static String readInputStreamToString(InputStream inputStream, String charsetName)throws IOException{ + private static String readInputStreamToString(InputStream inputStream, String charsetName) throws IOException { StringBuffer sb = new StringBuffer(); // 定义BufferedReader输入流来读取URL的响应 BufferedReader in; @@ -180,10 +181,10 @@ public class SmsHttpUtils { while ((line = in.readLine()) != null) { sb.append(line); } - }catch (IOException e){ + } catch (IOException e) { logger.error("readInputStreamToString读取异常", e); throw e; - }finally { + } finally { try { if (inputStream != null) { inputStream.close(); diff --git a/cloud/haikang/src/main/resources/application.yaml b/cloud/haikang/src/main/resources/application.yaml index f5baa74..b94c0a0 100644 --- a/cloud/haikang/src/main/resources/application.yaml +++ b/cloud/haikang/src/main/resources/application.yaml @@ -24,7 +24,7 @@ eureka: lease-renewal-interval-in-seconds: 10 client: service-url: -# defaultZone: http://localhost:8761/eureka/ + # defaultZone: http://localhost:8761/eureka/ defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/ mybatis: diff --git a/cloud/haikang/src/main/resources/mapper/usermapper.xml b/cloud/haikang/src/main/resources/mapper/usermapper.xml index da70c2a..4853f4f 100644 --- a/cloud/haikang/src/main/resources/mapper/usermapper.xml +++ b/cloud/haikang/src/main/resources/mapper/usermapper.xml @@ -3,10 +3,10 @@ - - - - + + + + \ No newline at end of file diff --git a/cloud/haikang/src/main/resources/mybatis-config.xml b/cloud/haikang/src/main/resources/mybatis-config.xml index 595ed53..55dfbbc 100644 --- a/cloud/haikang/src/main/resources/mybatis-config.xml +++ b/cloud/haikang/src/main/resources/mybatis-config.xml @@ -4,25 +4,25 @@ "http://mybatis.org/dtd/mybatis-3-config.dtd"> - - + + - + - + - + - + - + - + - + diff --git a/cloud/haikang/src/test/java/com/sincere/haikang/HaikangApplicationTests.java b/cloud/haikang/src/test/java/com/sincere/haikang/HaikangApplicationTests.java index bd6fc6f..31031b2 100644 --- a/cloud/haikang/src/test/java/com/sincere/haikang/HaikangApplicationTests.java +++ b/cloud/haikang/src/test/java/com/sincere/haikang/HaikangApplicationTests.java @@ -77,8 +77,7 @@ public class HaikangApplicationTests { } @Test - public void test(){ - + public void test() { } diff --git a/cloud/haikangface/pom.xml b/cloud/haikangface/pom.xml index 8545d3f..bf9e8c5 100644 --- a/cloud/haikangface/pom.xml +++ b/cloud/haikangface/pom.xml @@ -23,18 +23,25 @@ org.springframework.boot spring-boot-starter-web - - - - + + + + - - com.sincere - common - 1.0.0 - + + + + + + + + + + + + org.slf4j diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java index 11c9cb3..c6d91e5 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java @@ -14,6 +14,7 @@ import com.sincere.haikangface.utils.*; import com.sincere.haikangface.xiananDao.SendRecordDao; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; +import org.apache.http.util.TextUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; @@ -29,6 +30,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.regex.Pattern; @Component public class CMSServer implements ApplicationRunner { @@ -43,11 +45,16 @@ public class CMSServer implements ApplicationRunner { @Autowired SendRecordDao sendRecordDao; + //114.55.30.100 + //120.26.116.253 + private String ip_cloud = "120.26.116.253"; + // private String ip_cloud = "114.55.30.100"; private String ip; { try { ip = InetAddress.getLocalHost().getHostAddress(); +// ip_cloud = ip; } catch (UnknownHostException e) { e.printStackTrace(); } @@ -128,7 +135,6 @@ public class CMSServer implements ApplicationRunner { e.printStackTrace(); } pInBuffer.dwSize = pInBuffer.size(); - System.err.println("注册成功:" + deviceId); AttendanceBean attendanceBean = new AttendanceBean(); attendanceBean.setClint_id(deviceId); attendanceBean.setClint_type("18"); @@ -153,7 +159,8 @@ public class CMSServer implements ApplicationRunner { } */ - byte[] byIP = ip.getBytes(); +// byte[] byIP = ip.getBytes(); + byte[] byIP = ip_cloud.getBytes(); System.arraycopy(byIP, 0, pInBuffer.struUDPAlarmSever.szIP, 0, byIP.length); pInBuffer.dwAlarmServerType = 0; //报警服务器类型:0- 只支持UDP协议上报,1- 支持UDP、TCP两种协议上报 pInBuffer.struTCPAlarmSever.wPort = 7661; @@ -166,6 +173,7 @@ public class CMSServer implements ApplicationRunner { dwInLen = pInBuffer.size(); // lLoginID = lUserID; map.put(deviceId, lUserID); + System.err.println("注册成功:" + deviceId + "---ip:" + ip); /* try { Thread.sleep(1000); @@ -389,7 +397,6 @@ public class CMSServer implements ApplicationRunner { class EHomeMsgCallBack implements HCEHomeAlarm.EHomeMsgCallBack { @Override public boolean invoke(NativeLong iHandle, HCEHomeAlarm.NET_EHOME_ALARM_MSG pAlarmMsg, Pointer pUser) { - if (pAlarmMsg.dwXmlBufLen != 0) { HCEHomeAlarm.BYTE_ARRAY strXMLData = new HCEHomeAlarm.BYTE_ARRAY(pAlarmMsg.dwXmlBufLen); strXMLData.write(); @@ -404,11 +411,11 @@ public class CMSServer implements ApplicationRunner { alarmUtils = new AlarmUtils(deviceDao); alarmUtils.setCallBack(new AlarmUtils.AlarmCallBack() { @Override - public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId) { + public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) { switch (minorType) { case "0x4b"://人脸认证通过 // sendSMS(cardNo, deviceID, time); - saveFaceRecoder(deviceID, cardNo, time, picDataUrlId); + saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); break; case "0x426"://人证设备在线 @@ -418,7 +425,10 @@ public class CMSServer implements ApplicationRunner { deviceDao.updateDeviceStatu(0, deviceID); break; case "0x69"://人证比对通过 - saveFaceRecoder(deviceID, cardNo, time, picDataUrlId); + saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); + break; + case "0x6": + saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); break; } } @@ -429,6 +439,7 @@ public class CMSServer implements ApplicationRunner { } } + System.out.println("监听回调"); return true; } } @@ -440,35 +451,46 @@ public class CMSServer implements ApplicationRunner { * @param time * @param picDataUrlId */ - private void saveFaceRecoder(String deviceID, String cardNo, String time, String picDataUrlId) { + private void saveFaceRecoder(String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) { + try { - if (!StringUtils.isEmpty(cardNo)) { - Face_Recoder face_recoder = new Face_Recoder(); + if (!StringUtils.isEmpty(cardNo) && isNumeric(cardNo)) { + Face_Recoder face_recoder = new Face_Recoder(); - //卡号逆转 - cardNo = sendRecoderUtils.getCard(splicingZero(Long.toHexString(Long.parseLong(cardNo)), 8).toUpperCase()); + String card = splicingZero(Long.toHexString(Long.parseLong(cardNo)), 8).toUpperCase(); + //卡号逆转 + cardNo = sendRecoderUtils.getCard(card); + + StudentBean studentBean = userDao.getStudentWithCard(cardNo); - StudentBean studentBean = userDao.getStudentWithCard(cardNo); + if (null != studentBean) { + FileUtils.getInstance().writeLogs(studentBean.getName() + " " + cardNo, FileUtils.facerecoder); - if (null != studentBean) { - FileUtils.getInstance().writeLogs(studentBean.getName() + " " + cardNo, FileUtils.facerecoder); + face_recoder.setCardNum(cardNo); + face_recoder.setDeviceId(deviceID); + face_recoder.setTime(time); + face_recoder.setName(studentBean.getName()); + String imgUrl = "http://" + ip_cloud + ":8081/kms/services/rest/dataInfoService/downloadFile?id=" + picDataUrlId; +// String imgUrl = "http://114.55.30.100:8081/kms/services/rest/dataInfoService/downloadFile?id=" + picDataUrlId; + face_recoder.setImgurl(imgUrl); + face_recoder.setUser_id(studentBean.getUser_id()); + face_recoder.setInOrOut(1); - face_recoder.setCardNum(cardNo); - face_recoder.setDeviceId(deviceID); - face_recoder.setTime(time); - face_recoder.setName(studentBean.getName()); - //114.55.30.100 -// String imgUrl = "http://120.26.116.253:8081/kms/services/rest/dataInfoService/downloadFile?id=" + picDataUrlId; - String imgUrl = "http://114.55.30.100:8081/kms/services/rest/dataInfoService/downloadFile?id=" + picDataUrlId; - face_recoder.setImgurl(imgUrl); - face_recoder.setUser_id(studentBean.getUser_id()); - face_recoder.setInOrOut(1); + if (!TextUtils.isEmpty(currTemperature)) {//只有有温度的才存记录 + userDao.addWGTem(studentBean.getUser_id(), studentBean.getStudent_id(), studentBean.getName(), studentBean.getClass_id() + "", + studentBean.getClass_name(), currTemperature, studentBean.getStudent_type() + "", studentBean.getSchool_id() + "", time); - sendRecordDao.addFaceRecoder(face_recoder.getDeviceId(), face_recoder.getUser_id(), face_recoder.getName(), - face_recoder.getImgurl(), face_recoder.getInOrOut(), face_recoder.getTime(), face_recoder.getCardNum()); + sendRecordDao.addFaceRecoder(face_recoder.getDeviceId(), face_recoder.getUser_id(), face_recoder.getName(), + face_recoder.getImgurl(), face_recoder.getInOrOut(), face_recoder.getTime(), face_recoder.getCardNum(), currTemperature); + } + } else { + FileUtils.getInstance().writeLogs("card:" + card, FileUtils.faceSuccess); + } } - } + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -509,8 +531,8 @@ public class CMSServer implements ApplicationRunner { int err = hCEhomeSS.NET_ESS_GetLastError(); System.out.println("NET_ESS_ClientDoUpload失败,错误号:" + err); } else { -// url = "http://120.26.116.253:" + 8081 + new String(szUrl).trim(); - url = "http://114.55.30.100:" + 8081 + new String(szUrl).trim(); + url = "http://" + ip_cloud + ":" + 8081 + new String(szUrl).trim(); +// url = "http://114.55.30.100:" + 8081 + new String(szUrl).trim(); // System.err.println("NET_ESS_ClientDoUpload成功!:" + url); } hCEhomeSS.NET_ESS_DestroyClient(client);//释放资源 @@ -638,7 +660,7 @@ public class CMSServer implements ApplicationRunner { int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); if (validTimeEnabled == 0) System.err.println("删除卡号失败,错误号:" + iErr + "card:" + card); else System.err.println("下发卡号失败,错误号:" + iErr + "card:" + card); - if (iErr==10)map.remove(deviceId); + if (iErr == 10) map.remove(deviceId); } else { if (validTimeEnabled == 0) System.out.println("删除卡号成功"); else System.out.println("下发卡号成功"); @@ -651,7 +673,7 @@ public class CMSServer implements ApplicationRunner { * * @param clint_id */ - public void SetCardWeekPlan(String clint_id, String strConfigXMLCard, String content) { + public void SetCardWeekPlan(String clint_id, String card, String userType, String strConfigXMLCard, String content) { HCEHomeCMS.NET_EHOME_XML_CFG struXMLCard = new HCEHomeCMS.NET_EHOME_XML_CFG(); HCEHomeCMS.NET_DVR_STRING_POINTER stringRequestCard = new HCEHomeCMS.NET_DVR_STRING_POINTER(); @@ -691,6 +713,7 @@ public class CMSServer implements ApplicationRunner { if (!hCEhomeCMS.NET_ECMS_XMLConfig(map.get(clint_id), struXMLCard, struXMLCard.size())) { int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); System.err.println(content + "失败:" + iErr); + sendRecoderUtils.sendFail(sendRecordDao, card, "", clint_id, userDao, content + "失败:" + iErr, userType); } else { System.out.println(content + "成功"); } @@ -760,13 +783,13 @@ public class CMSServer implements ApplicationRunner { if (type == 1) {//下发人脸 if (!hCEhomeCMS.NET_ECMS_PostPTXMLConfig(map.get(deviceId), struISAPXML)) { int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); - System.err.println(content + "失败,错误号:" + iErr+"---"+strConfigXML+"\n"); + System.err.println(content + "失败,错误号:" + iErr + "---" + strConfigXML + "\n"); sendRecoderUtils.sendFail(sendRecordDao, card, srcFile, deviceId, userDao, content + "失败,错误号:" + iErr, userType); } else { stringXMLOut.read(); String strOutXML = new String(stringXMLOut.byString).trim(); sendRecoderUtils.sendSuccess(sendRecordDao, card, faceUrl, deviceId, userDao, userType); - System.out.println(content + "成功:"+card); + System.out.println(content + "成功:" + card); } } else if (type == 2) {//删除人脸 if (!hCEhomeCMS.NET_ECMS_PutPTXMLConfig(map.get(deviceId), struISAPXML)) { @@ -776,7 +799,7 @@ public class CMSServer implements ApplicationRunner { } else { stringXMLOut.read(); String strOutXML = new String(stringXMLOut.byString).trim(); - System.out.println(content + "成功:"+card); + System.out.println(content + "成功:" + card); return true; } } else if (type == 3) {//获取人脸信息 @@ -866,4 +889,15 @@ public class CMSServer implements ApplicationRunner { return strReturn; } + /** + * 判断是否为整数 + * + * @param str + * @return + */ + public static boolean isNumeric(String str) { + Pattern pattern = Pattern.compile("[0-9]*"); + return pattern.matcher(str).matches(); + } + } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/QieTuClass.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/QieTuClass.java index 97da780..afa4f84 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/QieTuClass.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/QieTuClass.java @@ -92,7 +92,7 @@ public class QieTuClass extends JFrame { int y, int width, int height, int changeX, int changeY, Component component) { try { - JSONArray jsonArray = ApiUtil.getInstance().youDaoAPi(new File("C:\\Users\\taohandong\\Desktop\\归档\\TIM图片20191105093448.jpg")); + JSONArray jsonArray = ApiUtil.getInstance().youDaoAPi(new File("C:\\Users\\taohandong\\Desktop\\归档\\TIM图片20191105093448.jpg")); } catch (IOException e) { e.printStackTrace(); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/admindao/ZuoyeAdminDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/admindao/ZuoyeAdminDao.java index 1bfa2dd..4f2bcbb 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/admindao/ZuoyeAdminDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/admindao/ZuoyeAdminDao.java @@ -33,7 +33,7 @@ public interface ZuoyeAdminDao { int getStemId(); @Update("update ZY_YYQuestion set StemId = #{StemId} where ID = #{ID}") - void updateQuestion(@Param("StemId") long StemId, @Param("ID")long ID); + void updateQuestion(@Param("StemId") long StemId, @Param("ID") long ID); @Select("select top (961)ID\n" + "from ZY_YYQuestionStem order by ID desc") @@ -45,5 +45,5 @@ public interface ZuoyeAdminDao { @Insert("insert into ZY_YYQuestionAndKnowledg (QuestionId, KnowledgId, IsTest, Status)\n" + "values (#{QuestionId},#{KnowledgId},#{IsTest},#{Status})") - void addYYQuestionAndKnowledg(@Param("QuestionId")long QuestionId,@Param("KnowledgId")long KnowledgId,@Param("IsTest")long IsTest,@Param("Status")long Status ); + void addYYQuestionAndKnowledg(@Param("QuestionId") long QuestionId, @Param("KnowledgId") long KnowledgId, @Param("IsTest") long IsTest, @Param("Status") long Status); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java index 60e9674..37857eb 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java @@ -46,17 +46,17 @@ public class SendUserAsync { if (check) {//合格 //根据设备是5603 还是新设备 String employeeNo = ""; - if (deviceId.contains("ymzx")||deviceId.contains("5607")||deviceId.contains("5671")||deviceId.contains("5604")){ - employeeNo = System.currentTimeMillis()+""; - cmsServer.SetCardWeekPlan(deviceId, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板"); - cmsServer.SetCardWeekPlan(deviceId, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划"); + if (deviceId.contains("ymzx") || deviceId.contains("5607") || deviceId.contains("5671") || deviceId.contains("5604")) { + employeeNo = System.currentTimeMillis() + ""; + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板"); + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划"); for (int i = 0; i < 7; i++) { - cmsServer. SetCardWeekPlan(deviceId, HKXmlUtils.getInstance().SetCardWeekPlanTime("00:00:00", "23:00:00",""+i), "设置卡权限周计划时间"); + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlanTime("00:00:00", "23:00:00", "" + i), "设置卡权限周计划时间"); } - cmsServer.SetCardWeekPlan(deviceId, HKXmlUtils.getInstance().SetCardRightCfg(card), "设置卡权限"); + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardRightCfg(card), "设置卡权限"); } - boolean result = cmsServer.createImgPath(srcFile, picUrl, card, startTime, endTime, validTimeEnabled, name, deviceId, userType,employeeNo); + boolean result = cmsServer.createImgPath(srcFile, picUrl, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo); } else {//不合格 sendRecoderUtils.sendFail(sendRecordDao, card, srcFile, deviceId, userDao, "人脸照片不合格", userType); } @@ -65,6 +65,7 @@ public class SendUserAsync { /** * 调用传图片接口 + * * @param filePath * @param card * @param name @@ -75,19 +76,19 @@ public class SendUserAsync { * @param userType */ // @Async("taskExecutor") - public void uploadImgs(String filePath,String card,String name,String deviceId,String startTime,String endTime,int validTimeEnabled,String userType){ - HttpUtil.uploadImgs(filePath,card,name,deviceId,startTime,endTime,validTimeEnabled,userType); + public void uploadImgs(String filePath, String card, String name, String deviceId, String startTime, String endTime, int validTimeEnabled, String userType) { + HttpUtil.uploadImgs(filePath, card, name, deviceId, startTime, endTime, validTimeEnabled, userType); } -// @Async("taskExecutor") - public void deleteCard(String deviceId, String card){ - HttpUtil.deleteCard(deviceId,card); + // @Async("taskExecutor") + public void deleteCard(String deviceId, String card) { + HttpUtil.deleteCard(deviceId, card); } @Async("taskExecutor") - public boolean IsDeviceOnline( String deviceId){ - return HttpUtil.IsDeviceOnline(deviceId); + public boolean IsDeviceOnline(String deviceId) { + return HttpUtil.IsDeviceOnline(deviceId); } } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/StudentBean.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/StudentBean.java index c4a7982..3f3608e 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/StudentBean.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/StudentBean.java @@ -17,14 +17,20 @@ public class StudentBean implements Serializable { private int StudentType; + private String student_type; + private int UserType; private String name; private int ClassId; + private String class_id; + private String ClassName; + private String class_name; + private String OldCard; private String Card; @@ -39,7 +45,7 @@ public class StudentBean implements Serializable { private Date AddTime; - private int Sex; + private int Sex; private String Face; @@ -273,6 +279,30 @@ public class StudentBean implements Serializable { this.student_id = student_id; } + public String getClass_name() { + return class_name; + } + + public void setClass_name(String class_name) { + this.class_name = class_name; + } + + public String getClass_id() { + return class_id; + } + + public void setClass_id(String class_id) { + this.class_id = class_id; + } + + public String getStudent_type() { + return student_type; + } + + public void setStudent_type(String student_type) { + this.student_type = student_type; + } + @Override public String toString() { return "StudentBean{" + @@ -285,7 +315,9 @@ public class StudentBean implements Serializable { ", UserType=" + UserType + ", name='" + name + '\'' + ", ClassId=" + ClassId + + ", class_id='" + class_id + '\'' + ", ClassName='" + ClassName + '\'' + + ", class_name='" + class_name + '\'' + ", OldCard='" + OldCard + '\'' + ", Card='" + Card + '\'' + ", SchoolId=" + SchoolId + diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/FaceRecoder.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/FaceRecoder.java index 665e6ec..6ffd6a2 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/FaceRecoder.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/FaceRecoder.java @@ -2,19 +2,19 @@ package com.sincere.haikangface.bean.face; public class FaceRecoder { - private String deviceId; + private String deviceId; - private String user_id; + private String user_id; - private String name; + private String name; - private String imgurl; + private String imgurl; - private int inOrOut; + private int inOrOut; - private String time; + private String time; - private String cardNum; + private String cardNum; public String getDeviceId() { return deviceId; diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/Homework.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/Homework.java index 4e806d6..a284f3c 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/Homework.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/Homework.java @@ -63,7 +63,7 @@ public class Homework implements Serializable { ", CreatorUser='" + CreatorUserId + '\'' + ", Title='" + Title + '\'' + ", Intime='" + Intime + '\'' + - '}'+"\r\n"; + '}' + "\r\n"; } public void setPaperId(String paperId) { diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/StudentBean.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/StudentBean.java index 1ac0ecc..25ff194 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/StudentBean.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/homework/StudentBean.java @@ -35,7 +35,7 @@ public class StudentBean implements Serializable { private Date AddTime; - private int Sex; + private int Sex; private String Face; diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCBaseBean.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCBaseBean.java new file mode 100644 index 0000000..d22c699 --- /dev/null +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCBaseBean.java @@ -0,0 +1,43 @@ +package com.sincere.haikangface.bean.isc; + +public class ISCBaseBean { + + private String code; + + private String msg; + + private ISCData data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public ISCData getData() { + return data; + } + + public void setData(ISCData data) { + this.data = data; + } + + @Override + public String toString() { + return "ISCBaseBean{" + + "code='" + code + '\'' + + ", msg='" + msg + '\'' + + ", data=" + data + + '}'; + } +} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCData.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCData.java new file mode 100644 index 0000000..4641d0f --- /dev/null +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/isc/ISCData.java @@ -0,0 +1,21 @@ +package com.sincere.haikangface.bean.isc; + +public class ISCData { + + private T result; + + public T getResult() { + return result; + } + + public void setResult(T result) { + this.result = result; + } + + @Override + public String toString() { + return "ISCData{" + + "result=" + result + + '}'; + } +} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java index 171bc65..d71efc5 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java @@ -6,6 +6,7 @@ import com.sincere.haikangface.bean.Images2Ddevices; import com.sincere.haikangface.bean.StudentBean; import com.sincere.haikangface.bean.UploadBean; import com.sincere.haikangface.dao.UserDao; +import com.sincere.haikangface.utils.CompressPic; import com.sincere.haikangface.utils.FileUtils; import com.sincere.haikangface.utils.SendRecoderUtils; import com.sincere.haikangface.xiananDao.SendRecordDao; @@ -50,8 +51,8 @@ public class FileControl { try { - if (!cmsServer.getIsDeviceOnline(deviceId)){ - FileUtils.getInstance().writeLogs("设备不在线:" +deviceId, FileUtils.devices); + if (!cmsServer.getIsDeviceOnline(deviceId)) { + FileUtils.getInstance().writeLogs("设备不在线:" + deviceId, FileUtils.devices); return "0"; } @@ -67,7 +68,15 @@ public class FileControl { long time = System.currentTimeMillis(); if (filePath.contains(".jpg")) filePath = filePath.replace(".jpg", ".png"); if (new File(filePath.trim()).exists()) { - String targetPath = FileUtils.picPathComp + new File(filePath).getName().replace(".png",".jpg"); + String targetPath = FileUtils.picPathComp + new File(filePath).getName().replace(".png", ".jpg"); + + try { + CompressPic.CompressPic(filePath, targetPath); + } catch (Exception e) { + e.printStackTrace(); + } + File targetFile = new File(targetPath); + System.out.println("targetPath:" + targetFile.exists() + targetFile.getAbsolutePath()); try { int isPiliang = 0;//0:批量,1:单张 if (filePath.contains("face17e50")) {//批量发送 @@ -114,7 +123,7 @@ public class FileControl { @RequestMapping(value = "getCard", method = RequestMethod.GET) @ApiOperation("获取设备人脸是否存在") public String getCard(@RequestParam("deviceId") String deviceId, @RequestParam("card") String card) { - if (cmsServer.getFace(deviceId, Long.parseLong(getCard(card), 16) + "") ) + if (cmsServer.getFace(deviceId, Long.parseLong(getCard(card), 16) + "")) return "1"; return "0"; } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/HelpControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/HelpControl.java index d95c78c..c5e47cf 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/HelpControl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/HelpControl.java @@ -51,19 +51,19 @@ public class HelpControl { File file4 = file3[j]; String fileName = file4.getName(); String fileDirName = file2.getName(); - list.add(fileDirName+","+fileName); + list.add(fileDirName + "," + fileName); } - }else if (file2.isFile()){ - String fileName = file2.getName() ; + } else if (file2.isFile()) { + String fileName = file2.getName(); String fileDirName = file1.getName(); - list.add(fileDirName+","+fileName); + list.add(fileDirName + "," + fileName); } } - return writeToExcel(workbook,"文件",list).getAbsolutePath(); + return writeToExcel(workbook, "文件", list).getAbsolutePath(); } @@ -78,7 +78,7 @@ public class HelpControl { cell = row.createCell(i); if (i == 0) cell.setCellValue("目录名称"); - else if (i==1) + else if (i == 1) cell.setCellValue("文件名称"); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/QueControl21.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/QueControl21.java index 4bb4b58..dca4511 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/QueControl21.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/QueControl21.java @@ -1,7 +1,7 @@ package com.sincere.haikangface.control; import com.baidu.aip.util.Base64Util; -import com.sincere.common.util.AuthService; +//import com.sincere.common.util.AuthService; import com.sincere.haikangface.admindao.ZuoyeAdminDao; import com.sincere.haikangface.bean.Answer; import com.sincere.haikangface.bean.ShijiBean; @@ -82,22 +82,22 @@ public class QueControl21 { String gradeId = zuoyeAdminDao.getGradeId(shijiBean.getGrade()); explanation = "

\"image.png\"/

"; String answer = getAnswerUrl(question_id, shijiBean.getAnswer());//答案 - System.out.println("answer:" + answer + "KnowledgeId:" + KnowledgeId + " chapterId:" + shijiBean.getChapter()+chapterId+" gradeId:"+gradeId+" Knowledge:"+Knowledge); + System.out.println("answer:" + answer + "KnowledgeId:" + KnowledgeId + " chapterId:" + shijiBean.getChapter() + chapterId + " gradeId:" + gradeId + " Knowledge:" + Knowledge); - if (StringUtils.isEmpty(chapterId)){ + if (StringUtils.isEmpty(chapterId)) { return "章节不存在"; } - if (StringUtils.isEmpty(KnowledgeId)){ + if (StringUtils.isEmpty(KnowledgeId)) { return "知识点不存在"; } - if (StringUtils.isEmpty(gradeId)){ + if (StringUtils.isEmpty(gradeId)) { return "年级不存在"; } - if (StringUtils.isEmpty(answer)){ + if (StringUtils.isEmpty(answer)) { return "答案解析失败"; } @@ -174,7 +174,8 @@ public class QueControl21 { } - private String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+ AuthService.getAuth(); + private String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="; +// + AuthService.getAuth(); private String getAnswer(String imgUrl, int type) { @@ -203,7 +204,7 @@ public class QueControl21 { } // System.out.println("result:"+result.getBody()); JSONArray words_result = jsonObject.optJSONArray("words_result"); - System.out.println("words_result:"+words_result); + System.out.println("words_result:" + words_result); StringBuilder stringBuilder = new StringBuilder(); if (words_result != null) { for (int i = 0; i < words_result.length(); i++) { @@ -217,7 +218,7 @@ public class QueControl21 { private byte[] download(String urlString) { try { -System.out.println("urlString:"+urlString); + System.out.println("urlString:" + urlString); // 构造URL URL url = new URL(urlString); // 打开连接 @@ -231,15 +232,15 @@ System.out.println("urlString:"+urlString); // 输出的文件流 String filename = "./imgs/"; //下载路径及下载图片名称 File file = new File(filename); - if (!file.exists())file.mkdirs(); + if (!file.exists()) file.mkdirs(); - String filePath = filename+File.separator+System.currentTimeMillis()+".png"; + String filePath = filename + File.separator + System.currentTimeMillis() + ".png"; File outFile = new File(filePath); - if (!outFile.exists())outFile.createNewFile(); + if (!outFile.exists()) outFile.createNewFile(); FileOutputStream os = new FileOutputStream(outFile, true); // 开始读取 while ((len = is.read(bs)) != -1) { - os.write(bs,0,len); + os.write(bs, 0, len); } // 完毕,关闭所有链接 is.close(); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java index 50df6d4..a940f44 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java @@ -1,8 +1,9 @@ package com.sincere.haikangface.control; -import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; +//import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; + import com.sincere.haikangface.bean.Images2Ddevices; -import com.sincere.haikangface.utils.BaiduApiUtiols; +//import com.sincere.haikangface.utils.BaiduApiUtiols; import com.sincere.haikangface.CMSServer; import com.sincere.haikangface.async.SendUserAsync; import com.sincere.haikangface.bean.StudentBean; @@ -62,7 +63,13 @@ public class UserControl { if (filePath.contains(".jpg")) filePath = filePath.replace(".jpg", ".png"); if (new File(filePath.trim()).exists()) { - return sendImg(filePath, deviceId, card, name, userType); + String targetPath = FileUtils.picPathComp + new File(filePath).getName(); + try { + CompressPic.CompressPic(filePath, targetPath); + } catch (Exception e) { + e.printStackTrace(); + } + return sendImg(filePath, targetPath, deviceId, card, name, userType); } else { if (null == sendRecoderUtils) sendRecoderUtils = new SendRecoderUtils(); sendRecoderUtils.sendFail(sendRecordDao, Long.parseLong(getCard(card), 16) + "", filePath, deviceId, userDao, "文件不存在", userType); @@ -74,13 +81,12 @@ public class UserControl { return true; } - private boolean sendImg(String filePath, String deviceId, String card, String name, String userType) { + private boolean sendImg(String filePath, String targetPath, String deviceId, String card, String name, String userType) { String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.YEAR, 10); String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); - String targetPath = FileUtils.picPathComp + new File(filePath).getName(); try { int isPiliang = 0;//0:批量,1:单张 if (filePath.contains("face17e50")) {//批量发送 @@ -89,13 +95,7 @@ public class UserControl { isPiliang = 1; } - try { - CompressPic.CompressPic(filePath, targetPath); - } catch (Exception e) { - e.printStackTrace(); - } - - FileUtils.getInstance().writeLogs("startTime:" + startTime + "---endTime:" + endTime, "下发参数"); + FileUtils.getInstance().writeLogs("startTime:" + startTime + "---endTime:" + endTime + "---card:" + card, "下发参数"); if (cmsServer.getIsDeviceOnline(deviceId)) sendUserAsync.sendStuToHaiKang(filePath, targetPath, Long.parseLong(getCard(card), 16) + "", startTime, endTime, 1, name, deviceId, userType, isPiliang); @@ -116,10 +116,10 @@ public class UserControl { @RequestMapping(value = "sendImg2Devices", method = RequestMethod.POST) @ApiOperation("本地下发人脸给设备") public boolean sendImg2Devices(@RequestBody Images2Ddevices images2Ddevices) throws Exception { - String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd").format(new Date()); + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.YEAR, 10); - String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd").format(calendar.getTime()); + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); String devices = images2Ddevices.getDevices(); String imgPath = images2Ddevices.getImgPath(); @@ -129,7 +129,7 @@ public class UserControl { File[] imgStrs = new File(imgPath).listFiles(); String schoolId = null; - logger.error("sendImg2Devices:{}",images2Ddevices.toString()); + logger.error("sendImg2Devices:{}", images2Ddevices.toString()); if (null != imgStrs) { for (int i = 0; i < imgStrs.length; i++) { @@ -207,6 +207,12 @@ public class UserControl { for (int i = 0; i < imgfiles.length; i++) { File file = imgfiles[i];//图片 + String targetPath = FileUtils.picPathComp + file.getName(); + try { + CompressPic.CompressPic(file.getAbsolutePath(), targetPath); + } catch (Exception e) { + e.printStackTrace(); + } if (file.exists()) for (int j = 0; j < deviceIdsStr.length; j++) { String deviceId = deviceIdsStr[j]; @@ -227,8 +233,9 @@ public class UserControl { } } - if (!StringUtils.isEmpty(card)) - sendImg(file.getAbsolutePath(), deviceId, card, name, userType); + if (!StringUtils.isEmpty(card)) { + sendImg(file.getAbsolutePath(), targetPath, deviceId, card, name, userType); + } } @@ -247,10 +254,16 @@ public class UserControl { @RequestParam("card") String card, @RequestParam("name") String name) { String[] deviceIdsStr = deviceIds.split(","); - + File file1 = new File(file); + String targetPath = FileUtils.picPathComp + file1.getName(); + try { + CompressPic.CompressPic(file1.getAbsolutePath(), targetPath); + } catch (Exception e) { + e.printStackTrace(); + } for (int i = 0; i < deviceIdsStr.length; i++) { String deviceId = deviceIdsStr[i]; - sendImg(file, deviceId, card, name, userType); + sendImg(file1.getAbsolutePath(), targetPath, deviceId, card, name, userType); } } @@ -294,38 +307,38 @@ public class UserControl { } - @RequestMapping(value = "getKaoqinTem", method = RequestMethod.GET) - @ApiOperation("根据设备获取考勤模板") - public String getKaoqinTem(@RequestParam("deviceId") String deviceId) { - SZ_AttendanceDto attendanceBean = haikangfaceFegin.selectAttendaceWithId(deviceId); - System.out.println("isKaoqin:" + attendanceBean.toString()); - int isKaoqin = attendanceBean.getIsKaoqin();//获取考勤模板id - List attendanceBeans = haikangfaceFegin.getAttensWithIsKaoqin(isKaoqin);//获取同一模板下的设备 - String content = ""; - - for (int i = 0; i < attendanceBeans.size(); i++) { - String clientId = attendanceBeans.get(i).getClint_id(); - if (!StringUtils.isEmpty(clientId)) content += clientId + ","; - } - return content.substring(0, content.lastIndexOf(",")); - } - - - @RequestMapping(value = "addFace", method = RequestMethod.GET) - @ApiOperation("注册人脸") - public String addFace(@RequestParam("imgPath") String imgPath, @RequestParam("group_id") String group_id, - @RequestParam("user_id") String user_id, @RequestParam("user_info") String user_info) { - - return BaiduApiUtiols.getInstance().registerFace(imgPath, group_id, user_id, user_info); - } - - @RequestMapping(value = "searchFace", method = RequestMethod.GET) - @ApiOperation("搜索人脸") - public String searchFace(@RequestParam("imgPath") String imgPath, @RequestParam("group_id") String group_id, - @RequestParam("user_id") String user_id) { - - return BaiduApiUtiols.getInstance().searchFace(imgPath, group_id, user_id); - } +// @RequestMapping(value = "getKaoqinTem", method = RequestMethod.GET) +// @ApiOperation("根据设备获取考勤模板") +// public String getKaoqinTem(@RequestParam("deviceId") String deviceId) { +// SZ_AttendanceDto attendanceBean = haikangfaceFegin.selectAttendaceWithId(deviceId); +// System.out.println("isKaoqin:" + attendanceBean.toString()); +// int isKaoqin = attendanceBean.getIsKaoqin();//获取考勤模板id +// List attendanceBeans = haikangfaceFegin.getAttensWithIsKaoqin(isKaoqin);//获取同一模板下的设备 +// String content = ""; +// +// for (int i = 0; i < attendanceBeans.size(); i++) { +// String clientId = attendanceBeans.get(i).getClint_id(); +// if (!StringUtils.isEmpty(clientId)) content += clientId + ","; +// } +// return content.substring(0, content.lastIndexOf(",")); +// } + + +// @RequestMapping(value = "addFace", method = RequestMethod.GET) +// @ApiOperation("注册人脸") +// public String addFace(@RequestParam("imgPath") String imgPath, @RequestParam("group_id") String group_id, +// @RequestParam("user_id") String user_id, @RequestParam("user_info") String user_info) { +// +// return BaiduApiUtiols.getInstance().registerFace(imgPath, group_id, user_id, user_info); +// } +// +// @RequestMapping(value = "searchFace", method = RequestMethod.GET) +// @ApiOperation("搜索人脸") +// public String searchFace(@RequestParam("imgPath") String imgPath, @RequestParam("group_id") String group_id, +// @RequestParam("user_id") String user_id) { +// +// return BaiduApiUtiols.getInstance().searchFace(imgPath, group_id, user_id); +// } @RequestMapping(value = "sendFiles", method = RequestMethod.GET) @ApiOperation("批量下发人脸") diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/WGControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/WGControl.java new file mode 100644 index 0000000..b2f0334 --- /dev/null +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/WGControl.java @@ -0,0 +1,52 @@ +package com.sincere.haikangface.control; + +import com.sincere.haikangface.bean.isc.ISCData; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +@RestController +@Api("温感人脸设备对接接口") +public class WGControl { + + + @Value("${iscurl}") + private String iscurl; + + private RestTemplate restTemplate; + + + @PostMapping(value = "getToken") + @ApiOperation("获取token") + private ISCData getToken() { + + return getResult("", "/api/v1/oauth/token"); + + } + + + private ISCData getResult(String json, String requestUrl) { + + if (null == restTemplate) restTemplate = new RestTemplate(); + + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); + + HttpEntity httpEntity = new HttpEntity<>(json, httpHeaders); + + ResponseEntity responseEntity = restTemplate.postForEntity(iscurl + requestUrl, httpEntity, ISCData.class); + + return responseEntity.getBody(); + } + + +} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/WXControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/WXControl.java index 26225c5..bf4d3c0 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/WXControl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/WXControl.java @@ -13,11 +13,11 @@ import org.springframework.web.bind.annotation.RestController; public class WXControl { - @RequestMapping(value = "checkUrl",method = RequestMethod.GET) - public String checkUrl(@RequestParam("msg_signature")String msg_signature, @RequestParam("timestamp")long timestamp - , @RequestParam("nonce")String nonce,@RequestParam("echostr")String echostr){ + @RequestMapping(value = "checkUrl", method = RequestMethod.GET) + public String checkUrl(@RequestParam("msg_signature") String msg_signature, @RequestParam("timestamp") long timestamp + , @RequestParam("nonce") String nonce, @RequestParam("echostr") String echostr) { -System.out.println("msg_signature:"+msg_signature+" timestamp:"+timestamp+" nonce:"+nonce+" echostr:"+echostr); + System.out.println("msg_signature:" + msg_signature + " timestamp:" + timestamp + " nonce:" + nonce + " echostr:" + echostr); return echostr; } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/YouDaoControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/YouDaoControl.java index d985187..2172d18 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/YouDaoControl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/YouDaoControl.java @@ -42,8 +42,8 @@ public class YouDaoControl { public String getPoints(@RequestParam("file") MultipartFile file) throws IOException { byte[] bytes = file.getBytes(); - File imgFile = new File("./",System.currentTimeMillis()+".png"); - FileOutputStream fileOutputStream = new FileOutputStream(imgFile); + File imgFile = new File("./", System.currentTimeMillis() + ".png"); + FileOutputStream fileOutputStream = new FileOutputStream(imgFile); fileOutputStream.write(bytes); fileOutputStream.close(); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/ZuoYeControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/ZuoYeControl.java index 04f30d2..b1b34e7 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/ZuoYeControl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/ZuoYeControl.java @@ -1,359 +1,381 @@ -package com.sincere.haikangface.control; - -import com.sincere.common.util.AuthService; -import com.sincere.haikangface.admindao.ZuoyeAdminDao; -import com.sincere.haikangface.bean.UserBean; -import com.sincere.haikangface.bean.homework.AddQuestion; -import com.sincere.haikangface.bean.homework.Homework; -import com.sincere.haikangface.bean.homework.HomeworkReceive; -import com.sincere.haikangface.bean.homework.QuestionBean; -import com.sincere.haikangface.dao.UserDao; -import com.sincere.haikangface.dao.ZuoYeDao; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.apache.ibatis.annotations.Param; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.client.RestTemplate; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.*; - -@RestController -@RequestMapping("/zuoye/*") -@Api("作业批改") -public class ZuoYeControl { - - @Autowired - ZuoYeDao zuoYeDao; - - @Autowired - UserDao userDao; - - @Autowired - ZuoyeAdminDao zuoyeAdminDao; - - - @RequestMapping(value = "getHomework", method = RequestMethod.GET) - @ApiImplicitParam(value = "输入作业的全名", name = "papername") - @ApiOperation(value = "获取作业id") - public String sendUsers(@RequestParam("papername") String papername) { - - List homeworks = zuoYeDao.getHomeworks(papername); - for (int i = 0; i < homeworks.size(); i++) { - Homework homework = homeworks.get(i); - UserBean userBean = userDao.getUser(homework.getCreatorUserId()); - homework.setCreatorUserId(userBean.getName()); - } - return homeworks.toString(); - } - - @RequestMapping(value = "getExcel", method = RequestMethod.GET) - @ApiImplicitParam(value = "作业id", name = "workId") - @ApiOperation(value = "生成报告文档", produces = "application/octet-stream") - public ResponseEntity getExcel(@RequestParam("workId") String workId) { - - //第一步,创建一个workbook对应一个excel文件 - HSSFWorkbook workbook = new HSSFWorkbook(); - - //ZY_Homework表取出要统计的作业 - String workName = zuoYeDao.getWorkName(workId); - - //ZY_HomeworkReceive 表获取学生作业答题情况; - List homRecIDs = zuoYeDao.get_HomeworkRec(workId); - - Map stuMap = new HashMap<>(); - String[] names = new String[homRecIDs.size()]; - String[] isCorrect = null; - for (int i = 0; i < homRecIDs.size(); i++) { - HomeworkReceive homeworkReceive = homRecIDs.get(i); - - String studentId = homeworkReceive.getStudentId(); - - String studentName = zuoYeDao.getStudentName(studentId); - - String studnetAnswerIds = homeworkReceive.getStudnetAnswerIds(); -// System.out.println("studnetAnswerIds:"+studnetAnswerIds+" WorkId:"+WorkId + " StudentId:"+studentId); - if (null != studnetAnswerIds) { - names[i] = studentName; - String[] stuIds = studnetAnswerIds.split(","); - isCorrect = new String[stuIds.length]; - String isC = ""; - for (int j = 0; j < stuIds.length; j++) { - String id = stuIds[j]; - System.out.println("IsCorrectId:" + id); - //ZY_StudentAnswer表获取题目是否正确 - int idCorrect = zuoYeDao.getIsCorrect(id); - if (idCorrect == 1) { - isC += "1 "; - isCorrect[j] = "1"; - } else if (idCorrect == 3) { - isC += "0 "; - isCorrect[j] = "0"; - } - } - stuMap.put(studentName, isCorrect); - System.out.println("" + studentName + " " + isC); - } - } - if (names != null && stuMap.size() > 0) - - return ResponseEntity.ok(writeToExcel(workbook, workName, stuMap, names)); - - return null; - - } - - - @RequestMapping(value = "doHomework", method = RequestMethod.GET) - @ApiOperation(value = "做作业") - @ApiImplicitParam(value = "作业id", name = "workId") - public String dohomework(@RequestParam("workId") String workId) { - String[] answers = new String[]{"A", "B", "C", "D", "A", "A"}; - String questionIds = zuoYeDao.getQuestionIds(workId); - String[] quesStirngs = questionIds.split(","); - List homeworkReceiveIds = zuoYeDao.get_HomeworkReceive(workId); - Map> mapRecIDs = new HashMap<>(); - for (int j = 0; j < homeworkReceiveIds.size(); j++) {//接收学生数量 - - for (int i = 0; i < quesStirngs.length; i++) { - String questionId = quesStirngs[i]; - String CorrectAnswer = zuoYeDao.getCorrectAnswer(questionId); - int randow = new Random().nextInt(6); - String answer = null; - String isCorrsct = ""; - if (randow == 0 || randow == 1 || randow == 2 || randow == 3 || randow == 4) { - answer = CorrectAnswer.trim(); - isCorrsct = "1"; - } else { - answer = answers[randow]; - if (answer.equals(CorrectAnswer.trim())) isCorrsct = "1"; - else - isCorrsct = "3"; - } - String answerTime = new Random().nextInt(60) + ""; - //插入一条新的记录 - zuoYeDao.addStudentAnswer(quesStirngs[i], answer.trim(), answerTime, CorrectAnswer.trim(), "1", "", isCorrsct, "", "", workId); - } - List idLists = zuoYeDao.getTopIDs(workId, questionIds.split(",").length); - System.out.println("idLists:" + idLists.toString()); - mapRecIDs.put(j + "", idLists); - - } - - //获取答题学生数量 - for (int i = 0; i < homeworkReceiveIds.size(); i++) { - String homeRecId = homeworkReceiveIds.get(i); - System.out.println("i:" + i); - String ansIds = mapRecIDs.get(i + "").toString().replace("[", ""); - ansIds = ansIds.replace("]", ""); - zuoYeDao.updateHomeworkReceive(ansIds, homeRecId); - } - - zuoYeDao.updateHomework(workId); - return "成功"; - } - /* Questiong questiong = addQuestion.getQuestiong(); - QuestiongData questiongData = questiong.getQuestiongData(); - List questions = questiongData.getQuestiongs(); - for (int i = 0; i < questions.size(); i++) { - Questiongs question = questions.get(i); - String question_text = question.getQuestion_text(); - String answer = question.getAnswer(); - String explanation = question.getExplanation();//解析 - String difficult_index = question.getDifficult_index();//难度系数 - String options = question.getOptions();//答案选项 - String channel_type_name = question.getChannel_type_name();//题目类型 - List t_knowledge = question.getT_knowledgeList(); - String Knowledge = ""; - if (t_knowledge!=null&&t_knowledge.size()>0)Knowledge = t_knowledge.get(0).getName();*/ - - @RequestMapping(value = "addQuestion", method = RequestMethod.POST) - @ApiOperation(value = "添加题目") - public String addQuestion(@RequestBody String content) { -// @RequestBody -// System.out.println("sjon:"+content); - List errQuesList = new ArrayList<>(); - try { - - JSONObject jsonObject = new JSONObject(content); - JSONObject data = jsonObject.optJSONObject("data"); - JSONArray questions = data.optJSONArray("questions"); - for (int i = 0; i < questions.length(); i++) { - JSONObject question = questions.optJSONObject(i); - String question_text = question.optString("question_text"); - String answer = question.optString("answer");//答案 - String explanation = question.optString("explanation");//解析 - String difficult_index = question.optString("difficult_index");//难度系数 - String options = question.optString("options");//答案选项 - String channel_type_name = question.optString("channel_type_name");//题目类型 - JSONArray t_knowledge = question.optJSONArray("t_knowledge"); - String Knowledge = ""; - if (t_knowledge != null && t_knowledge.length() > 0){ - JSONArray t_knowArr = t_knowledge.optJSONArray(0); - if (t_knowArr!=null&&t_knowArr.length()>0) - Knowledge = t_knowArr.optJSONObject(0).optString("name"); - } - - String chapterId = zuoyeAdminDao.getChapterId(jsonObject.optString("chapter")); - String KnowledgeId = zuoyeAdminDao.getKnowledgeId(jsonObject.optString("chapter")); - String gradeId = zuoyeAdminDao.getGradeId(jsonObject.optString("gradeId")); -//

image.png

- explanation = "

\"image.png\"/

"; - answer = getAnswer(answer,1); - System.out.println("answer:" + answer + "KnowledgeId:" + KnowledgeId + " " + jsonObject.optString("chapter")); -// System.out.println("question_text:" + question_text + "\r\noptions:" + options + "\r\nexplanation:" + explanation); -// System.out.println("difficult_index:" + difficult_index + "\r\nchapterId:" + chapterId + "\r\nKnowledgeId:" + KnowledgeId+"\r\ngradeId:"+gradeId); - if (!answer.equals("") && KnowledgeId != null && chapterId != null && gradeId != null) { - List questionBeans = zuoYeDao.getQuestions(question_text);//获取题目 -// System.out.println("questionBeans:"+questionBeans); - if (questionBeans != null && questionBeans.size() > 0) {//更新题库 - for (int j = 0; j < questionBeans.size(); j++) { - QuestionBean questionBean = questionBeans.get(j); - zuoYeDao.updateQuestion(questionBean.getID(), answer, explanation); - } - } else {//新增题库 - String dateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); - String subjectId = getSubjectId(jsonObject.optString("subject")); - if (subjectId == null) return "科目输入错误"; - String createrUserId = jsonObject.optString("createUserId"); - String schoolId = zuoYeDao.getSchoolId(createrUserId); - - zuoYeDao.addQuestionStem(channel_type_name, "1", dateTime); - int stemId = zuoYeDao.getStemId(); - zuoYeDao.addQuestion(question_text, "1", "A,B,C,D", answer, explanation, "1", dateTime, - "1", createrUserId, createrUserId, subjectId, schoolId, difficult_index, - KnowledgeId, chapterId, gradeId, "1", "1", "1", stemId + "", "1", "0", "0"); - } - } else { - System.out.println("答案解析错误"); - errQuesList.add(question.toString()); - } - } - - } catch (JSONException e) { - e.printStackTrace(); - } - return errQuesList.toString(); - } - - private String getSubjectId(String subject) { - - switch (subject) { - case "数学": - return "1"; - case "语文": - return "2"; - case "化学": - return "3"; - case "英语": - return "5"; - case "科学": - return "9"; - } - - return null; - } - - private String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+ AuthService.getAuth(); - - private String getAnswer(String imgUrl, int type) { - RestTemplate restTemplate = new RestTemplate(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - - MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); - if (type==1){ - multiValueMap.add("url", imgUrl); - }else if (type ==2){ -// multiValueMap.add("image", ImageUtils.ImageToBase64ByLocal(imgUrl)); - } - HttpEntity requestEntity = new HttpEntity(multiValueMap, - - headers); - - ResponseEntity result = restTemplate.postForEntity(url, requestEntity, String.class); - - JSONObject jsonObject = null; - try { - jsonObject = new JSONObject(result.getBody()); - } catch (JSONException e) { - e.printStackTrace(); - } -// System.out.println("result:"+result.getBody()); - JSONArray words_result = jsonObject.optJSONArray("words_result"); -// System.out.println("words_result:"+words_result); - StringBuilder stringBuilder = new StringBuilder(); - if (words_result != null) { - for (int i = 0; i < words_result.length(); i++) { - String words = words_result.optJSONObject(i).optString("words"); - stringBuilder.append(words + " "); - } - System.out.println("result:" + stringBuilder.toString()); - } - return stringBuilder.toString().equals("") ? "" : stringBuilder.toString(); - } - - - private File writeToExcel(HSSFWorkbook workbook, String HomeworkTitle, Map correctAns, String[] names) { - //第二部,在workbook中创建一个sheet对应excel中的sheet - HSSFSheet sheet = workbook.createSheet(HomeworkTitle); - //第三部,在sheet表中添加表头第0行,老版本的poi对sheet的行列有限制 - HSSFRow row = sheet.createRow(0); - //第四步,创建单元格,设置表头 - HSSFCell cell = null; - for (int i = 0; i < correctAns.get(names[0]).length; i++) { - cell = row.createCell(i); - cell.setCellValue("第" + (i + 1) + ""); - } - - //第五步,写入数据 - for (int i = 0; i < names.length; i++) { - -// String oneData =correctAns[i];//姓名对应的正确率 - HSSFRow row1 = sheet.createRow(i + 1); - String[] corrects = correctAns.get(names[i]); - System.out.println("names:" + names[i]); - for (int j = 0; j < corrects.length; j++) { - //创建单元格设值 - row1.createCell(j).setCellValue(corrects[j]); - } - row1.createCell(corrects.length).setCellValue(names[i]); - } - - //将文件保存到指定的位置 - try { - File file = new File("./file/"); - if (!file.exists()) file.mkdirs(); - - File file1 = new File(file.getAbsolutePath(),HomeworkTitle + ".xls"); - if (!file1.exists())file1.createNewFile(); - FileOutputStream fos = new FileOutputStream(file1); - workbook.write(fos); - System.out.println("写入成功"); - fos.close(); - return file1; - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } -} +//package com.sincere.haikangface.control; +// +//import com.sincere.common.util.AuthService; +//import com.sincere.haikangface.admindao.ZuoyeAdminDao; +//import com.sincere.haikangface.bean.UserBean; +//import com.sincere.haikangface.bean.homework.AddQuestion; +//import com.sincere.haikangface.bean.homework.Homework; +//import com.sincere.haikangface.bean.homework.HomeworkReceive; +//import com.sincere.haikangface.bean.homework.QuestionBean; +//import com.sincere.haikangface.dao.UserDao; +//import com.sincere.haikangface.dao.ZuoYeDao; +//import com.sincere.haikangface.utils.CompressPic; +//import io.swagger.annotations.Api; +//import io.swagger.annotations.ApiImplicitParam; +//import io.swagger.annotations.ApiOperation; +//import org.apache.ibatis.annotations.Param; +//import org.apache.poi.hssf.usermodel.HSSFCell; +//import org.apache.poi.hssf.usermodel.HSSFRow; +//import org.apache.poi.hssf.usermodel.HSSFSheet; +//import org.apache.poi.hssf.usermodel.HSSFWorkbook; +//import org.json.JSONArray; +//import org.json.JSONException; +//import org.json.JSONObject; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.http.HttpEntity; +//import org.springframework.http.HttpHeaders; +//import org.springframework.http.MediaType; +//import org.springframework.http.ResponseEntity; +//import org.springframework.util.LinkedMultiValueMap; +//import org.springframework.util.MultiValueMap; +//import org.springframework.web.bind.annotation.*; +//import org.springframework.web.client.RestTemplate; +// +//import java.io.File; +//import java.io.FileOutputStream; +//import java.io.IOException; +//import java.text.SimpleDateFormat; +//import java.util.*; +// +//@RestController +//@RequestMapping("/zuoye/*") +//@Api("作业批改") +//public class ZuoYeControl { +// +// @Autowired +// ZuoYeDao zuoYeDao; +// +// @Autowired +// UserDao userDao; +// +// @Autowired +// ZuoyeAdminDao zuoyeAdminDao; +// +// +// @RequestMapping(value = "getHomework", method = RequestMethod.GET) +// @ApiImplicitParam(value = "输入作业的全名", name = "papername") +// @ApiOperation(value = "获取作业id") +// public String sendUsers(@RequestParam("papername") String papername) { +// +// List homeworks = zuoYeDao.getHomeworks(papername); +// for (int i = 0; i < homeworks.size(); i++) { +// Homework homework = homeworks.get(i); +// UserBean userBean = userDao.getUser(homework.getCreatorUserId()); +// homework.setCreatorUserId(userBean.getName()); +// } +// return homeworks.toString(); +// } +// +// @RequestMapping(value = "getExcel", method = RequestMethod.GET) +// @ApiImplicitParam(value = "作业id", name = "workId") +// @ApiOperation(value = "生成报告文档", produces = "application/octet-stream") +// public ResponseEntity getExcel(@RequestParam("workId") String workId) { +// +// //第一步,创建一个workbook对应一个excel文件 +// HSSFWorkbook workbook = new HSSFWorkbook(); +// +// //ZY_Homework表取出要统计的作业 +// String workName = zuoYeDao.getWorkName(workId); +// +// //ZY_HomeworkReceive 表获取学生作业答题情况; +// List homRecIDs = zuoYeDao.get_HomeworkRec(workId); +// +// Map stuMap = new HashMap<>(); +// String[] names = new String[homRecIDs.size()]; +// String[] isCorrect = null; +// for (int i = 0; i < homRecIDs.size(); i++) { +// HomeworkReceive homeworkReceive = homRecIDs.get(i); +// +// String studentId = homeworkReceive.getStudentId(); +// +// String studentName = zuoYeDao.getStudentName(studentId); +// +// String studnetAnswerIds = homeworkReceive.getStudnetAnswerIds(); +//// System.out.println("studnetAnswerIds:"+studnetAnswerIds+" WorkId:"+WorkId + " StudentId:"+studentId); +// if (null != studnetAnswerIds) { +// names[i] = studentName; +// String[] stuIds = studnetAnswerIds.split(","); +// isCorrect = new String[stuIds.length]; +// String isC = ""; +// for (int j = 0; j < stuIds.length; j++) { +// String id = stuIds[j]; +// System.out.println("IsCorrectId:" + id); +// //ZY_StudentAnswer表获取题目是否正确 +// int idCorrect = zuoYeDao.getIsCorrect(id); +// if (idCorrect == 1) { +// isC += "1 "; +// isCorrect[j] = "1"; +// } else if (idCorrect == 3) { +// isC += "0 "; +// isCorrect[j] = "0"; +// } +// } +// stuMap.put(studentName, isCorrect); +// System.out.println("" + studentName + " " + isC); +// } +// } +// if (names != null && stuMap.size() > 0) +// +// return ResponseEntity.ok(writeToExcel(workbook, workName, stuMap, names)); +// +// return null; +// +// } +// +// +// @RequestMapping(value = "doHomework", method = RequestMethod.GET) +// @ApiOperation(value = "做作业") +// @ApiImplicitParam(value = "作业id", name = "workId") +// public String dohomework(@RequestParam("workId") String workId) { +// String[] answers = new String[]{"A", "B", "C", "D", "A", "A"}; +// String questionIds = zuoYeDao.getQuestionIds(workId); +// String[] quesStirngs = questionIds.split(","); +// List homeworkReceiveIds = zuoYeDao.get_HomeworkReceive(workId); +// Map> mapRecIDs = new HashMap<>(); +// for (int j = 0; j < homeworkReceiveIds.size(); j++) {//接收学生数量 +// +// for (int i = 0; i < quesStirngs.length; i++) { +// String questionId = quesStirngs[i]; +// String CorrectAnswer = zuoYeDao.getCorrectAnswer(questionId); +// int randow = new Random().nextInt(6); +// String answer = null; +// String isCorrsct = ""; +// if (randow == 0 || randow == 1 || randow == 2 || randow == 3 || randow == 4) { +// answer = CorrectAnswer.trim(); +// isCorrsct = "1"; +// } else { +// answer = answers[randow]; +// if (answer.equals(CorrectAnswer.trim())) isCorrsct = "1"; +// else +// isCorrsct = "3"; +// } +// String answerTime = new Random().nextInt(60) + ""; +// //插入一条新的记录 +// zuoYeDao.addStudentAnswer(quesStirngs[i], answer.trim(), answerTime, CorrectAnswer.trim(), "1", "", isCorrsct, "", "", workId); +// } +// List idLists = zuoYeDao.getTopIDs(workId, questionIds.split(",").length); +// System.out.println("idLists:" + idLists.toString()); +// mapRecIDs.put(j + "", idLists); +// +// } +// +// //获取答题学生数量 +// for (int i = 0; i < homeworkReceiveIds.size(); i++) { +// String homeRecId = homeworkReceiveIds.get(i); +// System.out.println("i:" + i); +// String ansIds = mapRecIDs.get(i + "").toString().replace("[", ""); +// ansIds = ansIds.replace("]", ""); +// zuoYeDao.updateHomeworkReceive(ansIds, homeRecId); +// } +// +// zuoYeDao.updateHomework(workId); +// return "成功"; +// } +// /* Questiong questiong = addQuestion.getQuestiong(); +// QuestiongData questiongData = questiong.getQuestiongData(); +// List questions = questiongData.getQuestiongs(); +// for (int i = 0; i < questions.size(); i++) { +// Questiongs question = questions.get(i); +// String question_text = question.getQuestion_text(); +// String answer = question.getAnswer(); +// String explanation = question.getExplanation();//解析 +// String difficult_index = question.getDifficult_index();//难度系数 +// String options = question.getOptions();//答案选项 +// String channel_type_name = question.getChannel_type_name();//题目类型 +// List t_knowledge = question.getT_knowledgeList(); +// String Knowledge = ""; +// if (t_knowledge!=null&&t_knowledge.size()>0)Knowledge = t_knowledge.get(0).getName();*/ +// +// @RequestMapping(value = "addQuestion", method = RequestMethod.POST) +// @ApiOperation(value = "添加题目") +// public String addQuestion(@RequestBody String content) { +//// @RequestBody +//// System.out.println("sjon:"+content); +// List errQuesList = new ArrayList<>(); +// try { +// +// JSONObject jsonObject = new JSONObject(content); +// JSONObject data = jsonObject.optJSONObject("data"); +// JSONArray questions = data.optJSONArray("questions"); +// for (int i = 0; i < questions.length(); i++) { +// JSONObject question = questions.optJSONObject(i); +// String question_text = question.optString("question_text"); +// String answer = question.optString("answer");//答案 +// String explanation = question.optString("explanation");//解析 +// String difficult_index = question.optString("difficult_index");//难度系数 +// String options = question.optString("options");//答案选项 +// String channel_type_name = question.optString("channel_type_name");//题目类型 +// JSONArray t_knowledge = question.optJSONArray("t_knowledge"); +// String Knowledge = ""; +// if (t_knowledge != null && t_knowledge.length() > 0){ +// JSONArray t_knowArr = t_knowledge.optJSONArray(0); +// if (t_knowArr!=null&&t_knowArr.length()>0) +// Knowledge = t_knowArr.optJSONObject(0).optString("name"); +// } +// +// String chapterId = zuoyeAdminDao.getChapterId(jsonObject.optString("chapter")); +// String KnowledgeId = zuoyeAdminDao.getKnowledgeId(jsonObject.optString("chapter")); +// String gradeId = zuoyeAdminDao.getGradeId(jsonObject.optString("gradeId")); +////

image.png

+// explanation = "

\"image.png\"/

"; +// answer = getAnswer(answer,1); +// System.out.println("answer:" + answer + "KnowledgeId:" + KnowledgeId + " " + jsonObject.optString("chapter")); +//// System.out.println("question_text:" + question_text + "\r\noptions:" + options + "\r\nexplanation:" + explanation); +//// System.out.println("difficult_index:" + difficult_index + "\r\nchapterId:" + chapterId + "\r\nKnowledgeId:" + KnowledgeId+"\r\ngradeId:"+gradeId); +// if (!answer.equals("") && KnowledgeId != null && chapterId != null && gradeId != null) { +// List questionBeans = zuoYeDao.getQuestions(question_text);//获取题目 +//// System.out.println("questionBeans:"+questionBeans); +// if (questionBeans != null && questionBeans.size() > 0) {//更新题库 +// for (int j = 0; j < questionBeans.size(); j++) { +// QuestionBean questionBean = questionBeans.get(j); +// zuoYeDao.updateQuestion(questionBean.getID(), answer, explanation); +// } +// } else {//新增题库 +// String dateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); +// String subjectId = getSubjectId(jsonObject.optString("subject")); +// if (subjectId == null) return "科目输入错误"; +// String createrUserId = jsonObject.optString("createUserId"); +// String schoolId = zuoYeDao.getSchoolId(createrUserId); +// +// zuoYeDao.addQuestionStem(channel_type_name, "1", dateTime); +// int stemId = zuoYeDao.getStemId(); +// zuoYeDao.addQuestion(question_text, "1", "A,B,C,D", answer, explanation, "1", dateTime, +// "1", createrUserId, createrUserId, subjectId, schoolId, difficult_index, +// KnowledgeId, chapterId, gradeId, "1", "1", "1", stemId + "", "1", "0", "0"); +// } +// } else { +// System.out.println("答案解析错误"); +// errQuesList.add(question.toString()); +// } +// } +// +// } catch (JSONException e) { +// e.printStackTrace(); +// } +// return errQuesList.toString(); +// } +// +// private String getSubjectId(String subject) { +// +// switch (subject) { +// case "数学": +// return "1"; +// case "语文": +// return "2"; +// case "化学": +// return "3"; +// case "英语": +// return "5"; +// case "科学": +// return "9"; +// } +// +// return null; +// } +// +// private String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+ AuthService.getAuth(); +// +// private String getAnswer(String imgUrl, int type) { +// RestTemplate restTemplate = new RestTemplate(); +// +// HttpHeaders headers = new HttpHeaders(); +// headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); +// +// MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); +// if (type==1){ +// multiValueMap.add("url", imgUrl); +// }else if (type ==2){ +//// multiValueMap.add("image", ImageUtils.ImageToBase64ByLocal(imgUrl)); +// } +// HttpEntity requestEntity = new HttpEntity(multiValueMap, +// +// headers); +// +// ResponseEntity result = restTemplate.postForEntity(url, requestEntity, String.class); +// +// JSONObject jsonObject = null; +// try { +// jsonObject = new JSONObject(result.getBody()); +// } catch (JSONException e) { +// e.printStackTrace(); +// } +//// System.out.println("result:"+result.getBody()); +// JSONArray words_result = jsonObject.optJSONArray("words_result"); +//// System.out.println("words_result:"+words_result); +// StringBuilder stringBuilder = new StringBuilder(); +// if (words_result != null) { +// for (int i = 0; i < words_result.length(); i++) { +// String words = words_result.optJSONObject(i).optString("words"); +// stringBuilder.append(words + " "); +// } +// System.out.println("result:" + stringBuilder.toString()); +// } +// return stringBuilder.toString().equals("") ? "" : stringBuilder.toString(); +// } +// +// +// private File writeToExcel(HSSFWorkbook workbook, String HomeworkTitle, Map correctAns, String[] names) { +// //第二部,在workbook中创建一个sheet对应excel中的sheet +// HSSFSheet sheet = workbook.createSheet(HomeworkTitle); +// //第三部,在sheet表中添加表头第0行,老版本的poi对sheet的行列有限制 +// HSSFRow row = sheet.createRow(0); +// //第四步,创建单元格,设置表头 +// HSSFCell cell = null; +// for (int i = 0; i < correctAns.get(names[0]).length; i++) { +// cell = row.createCell(i); +// cell.setCellValue("第" + (i + 1) + ""); +// } +// +// //第五步,写入数据 +// for (int i = 0; i < names.length; i++) { +// +//// String oneData =correctAns[i];//姓名对应的正确率 +// HSSFRow row1 = sheet.createRow(i + 1); +// String[] corrects = correctAns.get(names[i]); +// System.out.println("names:" + names[i]); +// for (int j = 0; j < corrects.length; j++) { +// //创建单元格设值 +// row1.createCell(j).setCellValue(corrects[j]); +// } +// row1.createCell(corrects.length).setCellValue(names[i]); +// } +// +// //将文件保存到指定的位置 +// try { +// File file = new File("./file/"); +// if (!file.exists()) file.mkdirs(); +// +// File file1 = new File(file.getAbsolutePath(),HomeworkTitle + ".xls"); +// if (!file1.exists())file1.createNewFile(); +// FileOutputStream fos = new FileOutputStream(file1); +// workbook.write(fos); +// System.out.println("写入成功"); +// fos.close(); +// return file1; +// } catch (IOException e) { +// e.printStackTrace(); +// } +// return null; +// } +// +// +// @GetMapping("imgComp") +// public void imgComp(@RequestParam("filePath")String filePath){ +// +// String targetPath = "./img/"; +// +// File file = new File(targetPath); +// if (!file.exists())file.mkdirs(); +// File targetFile = new File(file.getAbsolutePath(),"1.jpg"); +// File targetFile1 = new File(file.getAbsolutePath(),"2.jpg"); +// try { +// long time = System.currentTimeMillis(); +// CompressPic.CompressPic(filePath, targetFile.getAbsolutePath()); +//// CompressPic.compressPicForScale(filePath,200, targetFile1.getAbsolutePath()); +// System.out.println("耗时:"+(System.currentTimeMillis()-time)/1000); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// } +//} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java index 4de65ef..c746af4 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java @@ -1,6 +1,7 @@ package com.sincere.haikangface.dao; -import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; +//import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; + import com.sincere.haikangface.bean.AttendanceBean; import com.sincere.haikangface.bean.FaceWaterRecoder; import com.sincere.haikangface.bean.PlaceAttendance; @@ -17,14 +18,14 @@ public interface DeviceDao { @Insert("INSERT INTO SZ_Attendance(clint_id, clint_type, intime, school_id, state,isConnection) values (#{clint_id},#{clint_type}" + ",#{intime},#{school_id},#{state},#{isConnection})") - int addDevide(@Param("clint_id")String clint_id,@Param("clint_type")String clint_type,@Param("intime")String intime,@Param("school_id")String school_id, - @Param("state")String state,@Param("isConnection")String isConnection); + int addDevide(@Param("clint_id") String clint_id, @Param("clint_type") String clint_type, @Param("intime") String intime, @Param("school_id") String school_id, + @Param("state") String state, @Param("isConnection") String isConnection); @Select("select * from SZ_Attendance where clint_id = #{clint_id}") AttendanceBean selectDevice(@Param("clint_id") String clint_id); - @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}") - List getAttensWithIsKaoqin(@Param("IsKaoqin")int IsKaoqin); +// @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}") +// List getAttensWithIsKaoqin(@Param("IsKaoqin")int IsKaoqin); @Update("update SZ_Attendance set isConnection = #{isConnection} where clint_id = #{clint_id}") int updateDeviceStatu(@Param("isConnection") int isConnection, @Param("clint_id") String clint_id); @@ -32,6 +33,7 @@ public interface DeviceDao { /** * 获取活动场地 + * * @param KaoQinAttendance * @return */ @@ -40,8 +42,8 @@ public interface DeviceDao { @Insert("insert into SZ_FaceWaterRecoder values (#{deviceId},#{deviceType},#{minorType},#{content},#{majorType},#{time},#{cardNo},#{systime})") - Integer saveFaceWaterRecoder(@Param("deviceId")String deviceId,@Param("deviceType")String deviceType,@Param("minorType")String minorType, - @Param("content")String content,@Param("majorType")String majorType,@Param("time")String time,@Param("cardNo")String cardNo,@Param("systime")String systime); + Integer saveFaceWaterRecoder(@Param("deviceId") String deviceId, @Param("deviceType") String deviceType, @Param("minorType") String minorType, + @Param("content") String content, @Param("majorType") String majorType, @Param("time") String time, @Param("cardNo") String cardNo, @Param("systime") String systime); @Select("select * from QianDaoManager where schoolid = #{schoolId}") QianDaoManager getQianDaoMnager(@Param("schoolId") String school_id); @@ -50,7 +52,7 @@ public interface DeviceDao { String getSchoolName(@Param("deviceId") String deviceId); @Select("select school_id from SZ_Attendance where clint_id = #{deviceId}") - int getSchoolId(@Param("deviceId")String deviceId); + int getSchoolId(@Param("deviceId") String deviceId); @Select("select * from SZ_Attendance where clint_type = #{clint_type} and school_id = #{school_id}") List selectDeviceWithschool_id(@Param("clint_type") String clint_type, @Param("school_id") String school_id); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java index 67c865f..d177c82 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java @@ -12,6 +12,7 @@ public interface UserDao { /** * 没有记录取最新十条下发 + * * @return */ @Select("select top (10) * from HS_StudentUpdateCard order by AddTime desc") @@ -22,6 +23,7 @@ public interface UserDao { /** * 获取所有的学生 + * * @return */ @Select("select * from HS_StudentUpdateCard where ID > #{id} and StudentType = #{StudentType} order by AddTime desc") @@ -53,7 +55,6 @@ public interface UserDao { UserBean getUser(@Param("user_id") String user_id); - @Select("select Top(1)* from SZ_V_School_Student where student_num = #{card}") StudentBean getStudentWithCard(@Param("card") String card); @@ -68,12 +69,14 @@ public interface UserDao { @Select("select * from HS_ResFiles where UserId = 'zy405704' and id >= 4476 ") List getFIlesReses(); -// + + // @Select("(select Name from HS_ResGrade where SchoolId = 350 and id = #{id})") - String getGradeName(@Param("id")String id); -// + String getGradeName(@Param("id") String id); + + // @Select("select id from HS_ResGrade where SchoolId = 349 and name = #{name}") - String getGradeId(@Param("name")String name); + String getGradeId(@Param("name") String name); @Select("select * from HS_ResGrade where SchoolId = 350") List getGrades(); @@ -81,27 +84,28 @@ public interface UserDao { @Insert("insert into HS_ResGrade values (#{name},#{addTime},#{status},#{userId},#{schoolId},#{shortName},#{schoolYear},#{year},#{remark},#{isFinish})") void addGrade(@Param("name") String name, @Param("addTime") String addTime, @Param("status") int status, @Param("userId") String userId, - @Param("schoolId") int schoolId, @Param("shortName") String shortName, @Param("schoolYear") int schoolYear,@Param("year") int year, @Param("remark") String remark, @Param("isFinish") int isFinish); -// + @Param("schoolId") int schoolId, @Param("shortName") String shortName, @Param("schoolYear") int schoolYear, @Param("year") int year, @Param("remark") String remark, @Param("isFinish") int isFinish); + + // @Select("select * from HS_ResBook where SchoolId = 350") List getHSResBook(); @Insert(" insert into HS_ResBook values (#{name},#{addTime},#{status},#{userId},#{schoolId},#{press},#{pressTimes},#{price})") - void addHSResBook(@Param("name") String name,@Param("addTime") String addTime, @Param("status")String status,@Param("userId") String userId, @Param("schoolId")String schoolId, @Param("press")String press, - @Param("pressTimes") String pressTimes,@Param("price") String price); + void addHSResBook(@Param("name") String name, @Param("addTime") String addTime, @Param("status") String status, @Param("userId") String userId, @Param("schoolId") String schoolId, @Param("press") String press, + @Param("pressTimes") String pressTimes, @Param("price") String price); @Select("select * from SZ_Subject where school_id =350 and Status = 1") List getSubjects(); @Insert("insert into SZ_Subject values(#{school_id},#{subject_name},#{intime},#{subId},#{isElective},#{status},#{typeId},#{maxPerson},#{shortName})") - void addSubjectbean( @Param("school_id") int school_id, @Param("subject_name") String subject_name,@Param("intime") String intime, + void addSubjectbean(@Param("school_id") int school_id, @Param("subject_name") String subject_name, @Param("intime") String intime, @Param("subId") int subId, @Param("isElective") int isElective, @Param("status") int status, @Param("typeId") int typeId, @Param("maxPerson") int maxPerson, @Param("shortName") String shortName); @Select("select Top(1)subject_id from SZ_Subject where subject_name = #{subject_name} and school_id = 349") - String getSubjectId(@Param("subject_name")String subject_name); + String getSubjectId(@Param("subject_name") String subject_name); @Select("select Top(1) subject_name from SZ_Subject where subject_id = #{subject_id} and school_id = 350") - String getSubjectName(@Param("subject_id")int subject_id); + String getSubjectName(@Param("subject_id") int subject_id); @Select("select Top(1) name from HS_ResBook where SchoolId = 350 and id = #{id}") String getBookName(@Param("id") int bookId); @@ -110,22 +114,22 @@ public interface UserDao { int getBookId(@Param("name") String bookName); @Select("select id from HS_ResBookVersion where SchoolId = #{SchoolId}") - List getbookversionId(@Param("SchoolId")String SchoolId); + List getbookversionId(@Param("SchoolId") String SchoolId); @Select("select * from HS_ResChapter where SchoolId = 350") List getChapters(); -// + // @Select(" select * from HS_ResBookVersion where SchoolId = 350") List getResBookVersion(); @Insert("insert into HS_ResBookVersion values(#{bookId},#{gradeId},#{subjectId},#{isUse},#{state},#{intime},#{schoolId})") - void addResBookVersion(@Param("bookId") int bookId, @Param("gradeId")int gradeId,@Param("subjectId") int subjectId,@Param("isUse") int isUse, @Param("state")int state, - @Param("intime")String intime,@Param("schoolId") int schoolId); + void addResBookVersion(@Param("bookId") int bookId, @Param("gradeId") int gradeId, @Param("subjectId") int subjectId, @Param("isUse") int isUse, @Param("state") int state, + @Param("intime") String intime, @Param("schoolId") int schoolId); @Insert("insert into HS_ResChapter values(#{name},#{subjectId},#{gradeId},#{pid},#{jiaoCaiId},#{bookVersionId},#{sort},#{type},#{addTime},#{status},#{userId},#{schoolId})") - void addChapter(@Param("name") String name, @Param("subjectId")int subjectId, @Param("gradeId")int gradeId, @Param("pid")int pid, @Param("jiaoCaiId")int jiaoCaiId, @Param("bookVersionId")int bookVersionId, - @Param("sort")int sort, @Param("type")int type,@Param("addTime") String addTime,@Param("status") int status,@Param("userId") String userId, @Param("schoolId")int schoolId); + void addChapter(@Param("name") String name, @Param("subjectId") int subjectId, @Param("gradeId") int gradeId, @Param("pid") int pid, @Param("jiaoCaiId") int jiaoCaiId, @Param("bookVersionId") int bookVersionId, + @Param("sort") int sort, @Param("type") int type, @Param("addTime") String addTime, @Param("status") int status, @Param("userId") String userId, @Param("schoolId") int schoolId); @Select("Select Top(1)name from HS_ResChapter where id = #{pid} ") String getChapterName(@Param("pid") int pid); @@ -137,31 +141,32 @@ public interface UserDao { void updateChapter(@Param("userId") String userId, @Param("name") String name, @Param("pid") String chapterId); @Select("select id from HS_ResBook where SchoolId = 885 and name =(select name from HS_ResBook where SchoolId = 1021 and Id = #{id})") - String getJiaoCaiId(@Param("id")int id); + String getJiaoCaiId(@Param("id") int id); @Select("select id from HS_ResCatalog where SchoolId = 885 and name = #{name}") - String getResCatalog(@Param("name")String name); + String getResCatalog(@Param("name") String name); @Select("select name from HS_ResCatalog where SchoolId = 1021 and id = #{id}") - String getResCatalogName(@Param("id")String id); + String getResCatalogName(@Param("id") String id); @Select("select id from HS_ResType where SchoolId = 885 and name = #{name}") - String getResType(@Param("name")String name); + String getResType(@Param("name") String name); @Select("select name from HS_ResType where SchoolId = 1021 and id = #{id}") - String getResTypeName(@Param("id")String id); -// + String getResTypeName(@Param("id") String id); + + // @Insert("insert into HS_ResFiles values(#{name},#{catalogId},#{typeId},#{gradeId},#{subjectId},#{jiaoCaiId},#{charpId},#{fileUrl},#{descript},#{keywords}" + ",#{addTime},#{status},#{userId},#{targetUrl},#{clicks},#{userList},#{isShare},#{charpId1},#{knowledgeId})") void addFiles(@Param("name") String name, @Param("catalogId") String catalogId, @Param("typeId") int typeId, @Param("gradeId") int gradeId, - @Param("subjectId") int subjectId, @Param("jiaoCaiId") int jiaoCaiId, @Param("charpId") int charpId, @Param("fileUrl") String fileUrl, + @Param("subjectId") int subjectId, @Param("jiaoCaiId") int jiaoCaiId, @Param("charpId") int charpId, @Param("fileUrl") String fileUrl, @Param("descript") String descript, @Param("keywords") String keywords, @Param("addTime") String addTime, @Param("status") int status, @Param("userId") String userId, @Param("targetUrl") String targetUrl, @Param("clicks") int clicks, @Param("userList") String userList, @Param("isShare") int isShare, @Param("charpId1") int charpId1, @Param("knowledgeId") int knowledgeId); @Select("select *\n" + "from SZ_V_School_Student where name = #{name} and school_id = #{school_id}") - List getAllStudentsWithSchoolId(@Param("school_id") String school_id,@Param("name")String name); + List getAllStudentsWithSchoolId(@Param("school_id") String school_id, @Param("name") String name); @Select("select * from SZ_V_School_Student where school_id = #{school_id} and student_type = 2") List getAllStuWithSchoolId(@Param("school_id") String school_id); @@ -198,19 +203,23 @@ public interface UserDao { List getVirCards(); @Update("update SZ_V_School_Student set student_num =#{student_num} where school_id = 13 and student_type =2 and len(student_num)=0 and user_id = #{user_id}") - void updateStuCards(@Param("student_num") String card,@Param("user_id")String user_id); + void updateStuCards(@Param("student_num") String card, @Param("user_id") String user_id); @Select("select Top(1)*\n" + "from SZ_V_School_Student\n" + "where studentcode = #{studentcode} and school_id = #{schoolId}") - StudentBean getStudentWithstudentcode(@Param("studentcode") String studentcode, @Param("schoolId")String schoolId); + StudentBean getStudentWithstudentcode(@Param("studentcode") String studentcode, @Param("schoolId") String schoolId); @Select("select Top(1)*\n" + "from SZ_V_School_Teacher\n" + "where num = #{num} and school_id = #{schoolId}") - StudentBean getTeacherWithstudentcode(@Param("num") String num,@Param("schoolId")String schoolId); + StudentBean getTeacherWithstudentcode(@Param("num") String num, @Param("schoolId") String schoolId); @Select("select school_id from SZ_Attendance where clint_id = #{devId}") String getSchoolIdWithDevId(@Param("devId") String devId); + + @Insert("insert into CW_StuTemperatureReocrd values (#{UserId},#{StudentId},#{Name},#{ClassId},#{ClassName},#{Temperature},#{Type},#{SchoolId},#{Intime})") + void addWGTem(@Param("UserId") String UserId, @Param("StudentId") String StudentId, @Param("Name") String Name, @Param("ClassId") String ClassId, + @Param("ClassName") String ClassName, @Param("Temperature") String Temperature, @Param("Type") String Type, @Param("SchoolId") String SchoolId, @Param("Intime") String Intime); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/ZuoYeDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/ZuoYeDao.java index 71823c0..f7f2dcb 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/ZuoYeDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/ZuoYeDao.java @@ -16,7 +16,7 @@ public interface ZuoYeDao { @Select("select * from ZY_Homework where title = #{title} order by intime desc") - List getHomeworks(@Param("title")String title); + List getHomeworks(@Param("title") String title); @Select("select QuestionIds from ZY_Homework where ID = #{workId}") String getQuestionIds(@Param("workId") String workId); @@ -26,21 +26,21 @@ public interface ZuoYeDao { //添加学生答题记录 @Insert("insert into ZY_StudentAnswer values (#{QuestionId},#{Answer},#{AnswerTime},#{CorrectAnswer},#{QuestionType},#{Pigai},#{IsCorrect},#{AppachIds},#{TeacherAppachIds},#{WorkID})") - void addStudentAnswer(@Param("QuestionId")String QuestionId,@Param("Answer")String Answer,@Param("AnswerTime")String AnswerTime,@Param("CorrectAnswer")String CorrectAnswer, - @Param("QuestionType")String QuestionType,@Param("Pigai")String Pigai,@Param("IsCorrect")String IsCorrect,@Param("AppachIds")String AppachIds, - @Param("TeacherAppachIds")String TeacherAppachIds,@Param("WorkID")String WorkID); + void addStudentAnswer(@Param("QuestionId") String QuestionId, @Param("Answer") String Answer, @Param("AnswerTime") String AnswerTime, @Param("CorrectAnswer") String CorrectAnswer, + @Param("QuestionType") String QuestionType, @Param("Pigai") String Pigai, @Param("IsCorrect") String IsCorrect, @Param("AppachIds") String AppachIds, + @Param("TeacherAppachIds") String TeacherAppachIds, @Param("WorkID") String WorkID); @Select("select Top(#{top}) ID from ZY_StudentAnswer where WorkID = #{WorkID} order by ID desc") - List getTopIDs(@Param("WorkID")String WorkID,@Param("top")int top); + List getTopIDs(@Param("WorkID") String WorkID, @Param("top") int top); @Select("select ID from ZY_HomeworkReceive where WorkId = #{WorkId} order by ID desc") - List get_HomeworkReceive(@Param("WorkId")String WorkId); + List get_HomeworkReceive(@Param("WorkId") String WorkId); @Update("update ZY_HomeworkReceive set StudnetAnswerIds = #{StudnetAnswerIds},IsFinished = 1,IsPigai = 1 where ID = #{ID}") - void updateHomeworkReceive(@Param("StudnetAnswerIds")String StudnetAnswerIds,@Param("ID")String ID); + void updateHomeworkReceive(@Param("StudnetAnswerIds") String StudnetAnswerIds, @Param("ID") String ID); @Select("select * from ZY_Homework where WorkId = #{WorkId} order by intime desc") - List doHomeworks(@Param("WorkId")String WorkId); + List doHomeworks(@Param("WorkId") String WorkId); @Update("update ZY_Homework set IsPigai =1 where id = #{workId}") @@ -59,7 +59,7 @@ public interface ZuoYeDao { @Select("select * from TK_Question where Question like #{Question}") - List getQuestions(@Param("Question")String Question); + List getQuestions(@Param("Question") String Question); @Update("update TK_Question set CorrectAnswer = #{answer},Analysis = #{explanation} where ID = #{id}") void updateQuestion(@Param("id") String id, @Param("answer") String answer, @Param("explanation") String explanation); @@ -77,7 +77,7 @@ public interface ZuoYeDao { String getWorkName(@Param("ID") String workId); @Select("select * from ZY_HomeworkReceive where WorkId = #{WorkId} order by ID desc") - List get_HomeworkRec(@Param("WorkId")String WorkId); + List get_HomeworkRec(@Param("WorkId") String WorkId); @Select("select name from SZ_V_School_Student where student_id = #{student_id}") String getStudentName(@Param("student_id") String studentId); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/CampusDataSourceConfig.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/CampusDataSourceConfig.java index a62288d..00f77d7 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/CampusDataSourceConfig.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/CampusDataSourceConfig.java @@ -15,17 +15,17 @@ import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @Configuration -@MapperScan(basePackages = "com.sincere.haikangface.dao",sqlSessionFactoryRef = "campusSqlSessionFactory") +@MapperScan(basePackages = "com.sincere.haikangface.dao", sqlSessionFactoryRef = "campusSqlSessionFactory") public class CampusDataSourceConfig { @Primary @Bean(name = "campusDataSource") @ConfigurationProperties("spring.datasource.campus") - public DataSource masterDataSource(){ + public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "campusSqlSessionFactory") - public SqlSessionFactory sqlSessionFactory(@Qualifier("campusDataSource") DataSource dataSource) throws Exception{ + public SqlSessionFactory sqlSessionFactory(@Qualifier("campusDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); @@ -36,7 +36,7 @@ public class CampusDataSourceConfig { } @Bean - public JdbcTemplate campusJdbcTemplate(@Qualifier("campusDataSource") DataSource dataSource){ + public JdbcTemplate campusJdbcTemplate(@Qualifier("campusDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/MyadminDataSourceConfig.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/MyadminDataSourceConfig.java index 76a46d8..8b9a684 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/MyadminDataSourceConfig.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/MyadminDataSourceConfig.java @@ -15,18 +15,18 @@ import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; @Configuration -@MapperScan(basePackages = "com.sincere.haikangface.admindao",sqlSessionFactoryRef = "myadminSqlSessionFactory") +@MapperScan(basePackages = "com.sincere.haikangface.admindao", sqlSessionFactoryRef = "myadminSqlSessionFactory") public class MyadminDataSourceConfig { @Primary @Bean(name = "myadminDataSource") @ConfigurationProperties("spring.datasource.myadmin") - public DataSource masterDataSource(){ + public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "myadminSqlSessionFactory") - public SqlSessionFactory sqlSessionFactory(@Qualifier("myadminDataSource") DataSource dataSource) throws Exception{ + public SqlSessionFactory sqlSessionFactory(@Qualifier("myadminDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/XiaoanDataSourceConfig.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/XiaoanDataSourceConfig.java index 8465e04..5d346c1 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/XiaoanDataSourceConfig.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dbconfig/XiaoanDataSourceConfig.java @@ -14,18 +14,18 @@ import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; @Configuration -@MapperScan(basePackages = "com.sincere.haikangface.xiananDao",sqlSessionFactoryRef = "xiaoanSqlSessionFactory") +@MapperScan(basePackages = "com.sincere.haikangface.xiananDao", sqlSessionFactoryRef = "xiaoanSqlSessionFactory") public class XiaoanDataSourceConfig { @Primary @Bean(name = "xiaoanDataSource") @ConfigurationProperties("spring.datasource.xiaoan") - public DataSource masterDataSource(){ + public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "xiaoanSqlSessionFactory") - public SqlSessionFactory sqlSessionFactory(@Qualifier("xiaoanDataSource") DataSource dataSource) throws Exception{ + public SqlSessionFactory sqlSessionFactory(@Qualifier("xiaoanDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/fegin/HaikangfaceFegin.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/fegin/HaikangfaceFegin.java index 357d163..85747ee 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/fegin/HaikangfaceFegin.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/fegin/HaikangfaceFegin.java @@ -1,6 +1,7 @@ package com.sincere.haikangface.fegin; -import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; +//import com.sincere.common.dto.smartCampus.SZ_AttendanceDto; + import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,10 +13,10 @@ import java.util.List; @FeignClient("smartCampusSearch") public interface HaikangfaceFegin { - @RequestMapping(method = RequestMethod.GET,value = "attendance/selectAttendaceWithId") - SZ_AttendanceDto selectAttendaceWithId(@RequestParam("clint_id") String clint_id); - - @RequestMapping(method = RequestMethod.GET,value = "attendance/getAttensWithIsKaoqin") - List getAttensWithIsKaoqin(@RequestParam("IsKaoqin") int isKaoqin); +// @RequestMapping(method = RequestMethod.GET,value = "attendance/selectAttendaceWithId") +// SZ_AttendanceDto selectAttendaceWithId(@RequestParam("clint_id") String clint_id); +// +// @RequestMapping(method = RequestMethod.GET,value = "attendance/getAttensWithIsKaoqin") +// List getAttensWithIsKaoqin(@RequestParam("IsKaoqin") int isKaoqin); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeAlarm.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeAlarm.java index 129d325..b7b61d4 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeAlarm.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeAlarm.java @@ -10,7 +10,6 @@ */ /** - * * @author Xubinfeng */ @@ -42,8 +41,7 @@ public interface HCEHomeAlarm extends StdCallLibrary { public byte[] byRes = new byte[2]; } - public static class BYTE_ARRAY extends Structure - { + public static class BYTE_ARRAY extends Structure { public byte[] byValue; public BYTE_ARRAY(int iLen) { @@ -69,22 +67,23 @@ public interface HCEHomeAlarm extends StdCallLibrary { public NET_EHOME_IPADDRESS struAddress; public EHomeMsgCallBack fnMsgCb; //报警信息回调函数 public Pointer pUserData; //用户数据 - public byte byProtocolType; //协议类型,0-TCP,1-UDP - public byte byUseCmsPort; //是否复用CMS端口,0-不复用,非0-复用,如果复用cms端口,协议类型字段无效(此时本地监听信息struAddress填本地回环地址) - public byte byUseThreadPool; //0-回调报警时,使用线程池,1-回调报警时,不使用线程池,默认情况下,报警回调的时候,使用线程池 - public byte byRes[]= new byte[29];; + public byte byProtocolType; //协议类型,0-TCP,1-UDP + public byte byUseCmsPort; //是否复用CMS端口,0-不复用,非0-复用,如果复用cms端口,协议类型字段无效(此时本地监听信息struAddress填本地回环地址) + public byte byUseThreadPool; //0-回调报警时,使用线程池,1-回调报警时,不使用线程池,默认情况下,报警回调的时候,使用线程池 + public byte byRes[] = new byte[29]; + ; } //初始化,反初始化 - boolean NET_EALARM_Init(); - boolean NET_EALARM_Fini(); + boolean NET_EALARM_Init(); + + boolean NET_EALARM_Fini(); - NativeLong NET_EALARM_StartListen(NET_EHOME_ALARM_LISTEN_PARAM pAlarmListenParam); + NativeLong NET_EALARM_StartListen(NET_EHOME_ALARM_LISTEN_PARAM pAlarmListenParam); } //windows user32接口,user32.dll in system32 folder, 在设置遮挡区域,移动侦测区域等情况下使用 -interface USER32 extends W32API -{ +interface USER32 extends W32API { USER32 INSTANCE = (USER32) Native.loadLibrary("user32", USER32.class, DEFAULT_OPTIONS); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeCMS.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeCMS.java index 89e24c7..a77836b 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeCMS.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeCMS.java @@ -10,7 +10,6 @@ */ /** - * * @author Xubinfeng */ @@ -33,8 +32,8 @@ public interface HCEHomeCMS extends StdCallLibrary { /***宏定义***/ //常量 - public static final int MAX_NAMELEN = 16; //DVR本地登陆名 - public static final int MAX_RIGHT = 32; //设备支持的权限(1-12表示本地权限,13-32表示远程权限) + public static final int MAX_NAMELEN = 16; //DVR本地登陆名 + public static final int MAX_RIGHT = 32; //设备支持的权限(1-12表示本地权限,13-32表示远程权限) public static final int NAME_LEN = 32; //用户名长度 public static final int PASSWD_LEN = 16; //密码长度 public static final int MAX_DEVICE_ID_LEN = 256; //设备ID长度 @@ -58,18 +57,18 @@ public interface HCEHomeCMS extends StdCallLibrary { public int dwKeepAliveSec; public int dwTimeOutCount; public NET_EHOME_IPADDRESS struTCPAlarmSever = new NET_EHOME_IPADDRESS(); - public NET_EHOME_IPADDRESS struUDPAlarmSever= new NET_EHOME_IPADDRESS(); + public NET_EHOME_IPADDRESS struUDPAlarmSever = new NET_EHOME_IPADDRESS(); public int dwAlarmServerType; - public NET_EHOME_IPADDRESS struNTPSever= new NET_EHOME_IPADDRESS(); + public NET_EHOME_IPADDRESS struNTPSever = new NET_EHOME_IPADDRESS(); public int dwNTPInterval; - public NET_EHOME_IPADDRESS struPictureSever= new NET_EHOME_IPADDRESS(); + public NET_EHOME_IPADDRESS struPictureSever = new NET_EHOME_IPADDRESS(); public int dwPicServerType; - public NET_EHOME_BLACKLIST_SEVER struBlackListServer= new NET_EHOME_BLACKLIST_SEVER(); + public NET_EHOME_BLACKLIST_SEVER struBlackListServer = new NET_EHOME_BLACKLIST_SEVER(); public byte[] byRes = new byte[128]; } public static class NET_EHOME_BLACKLIST_SEVER extends Structure { - public NET_EHOME_IPADDRESS struAdd = new NET_EHOME_IPADDRESS(); + public NET_EHOME_IPADDRESS struAdd = new NET_EHOME_IPADDRESS(); public byte[] byServerName = new byte[32]; public byte[] byUserName = new byte[32]; public byte[] byPassWord = new byte[32]; @@ -77,18 +76,18 @@ public interface HCEHomeCMS extends StdCallLibrary { } public static class NET_EHOME_LOCAL_ACCESS_SECURITY extends Structure { - public int dwSize; - public byte byAccessSecurity; - public byte[] byRes = new byte[127]; - } + public int dwSize; + public byte byAccessSecurity; + public byte[] byRes = new byte[127]; + } public static class NET_EHOME_AMS_ADDRESS extends Structure { - public int dwSize; - public byte byEnable; - public byte[] byRes1 = new byte[3]; - public NET_EHOME_IPADDRESS struAddress = new NET_EHOME_IPADDRESS(); - public byte[] byRes2 = new byte[32]; -} + public int dwSize; + public byte byEnable; + public byte[] byRes1 = new byte[3]; + public NET_EHOME_IPADDRESS struAddress = new NET_EHOME_IPADDRESS(); + public byte[] byRes2 = new byte[32]; + } public static class NET_EHOME_IPADDRESS extends Structure { public byte[] szIP = new byte[128]; @@ -102,7 +101,7 @@ public interface HCEHomeCMS extends StdCallLibrary { public static class NET_EHOME_CMS_LISTEN_PARAM extends Structure { public NET_EHOME_IPADDRESS struAddress; //本地监听信息,IP为0.0.0.0的情况下,默认为本地地址,多个网卡的情况下,默认为从操作系统获取到的第一个 - public DEVICE_REGISTER_CB fnCB; //报警信息回调函数 + public DEVICE_REGISTER_CB fnCB; //报警信息回调函数 public Pointer pUserData; //用户数据 public byte[] byRes = new byte[32]; } @@ -110,12 +109,13 @@ public interface HCEHomeCMS extends StdCallLibrary { public static interface fVoiceDataCallBack extends StdCallCallback { public void invoke(NativeLong iVoiceHandle, byte[] pRecvDataBuffer, int dwBufSize, int dwEncodeType, byte byAudioFlag, Pointer pUser); } + public static class NET_EHOME_VOICETALK_PARA extends Structure { public boolean bNeedCBNoEncData; //需要回调的语音类型:0-编码后语音,1-编码前语音(语音转发时不支持) - public fVoiceDataCallBack cbVoiceDataCallBack; //用于回调音频数据的回调函数 + public fVoiceDataCallBack cbVoiceDataCallBack; //用于回调音频数据的回调函数 public int dwEncodeType; //SDK赋值,SDK的语音编码类型,0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM public Pointer pUser; //用户参数 - public byte byVoiceTalk; //0-语音对讲,1-语音转发 + public byte byVoiceTalk; //0-语音对讲,1-语音转发 public byte byDevAudioEnc; //输出参数,设备的音频编码方式 0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM public byte[] byRes = new byte[62];//Reserved, set as 0. 0 } @@ -135,7 +135,7 @@ public interface HCEHomeCMS extends StdCallLibrary { public NET_EHOME_IPADDRESS struStreamSever; public byte byDelayPreview; public byte[] byRes = new byte[31]; - } + } public static class NET_EHOME_PREVIEWINFO_OUT extends Structure { public NativeLong lSessionID; @@ -183,91 +183,103 @@ public interface HCEHomeCMS extends StdCallLibrary { public byte[] byRes = new byte[24]; } - public static class NET_EHOME_XML_REMOTE_CTRL_PARAM extends Structure - { - public int dwSize; - public Pointer lpInbuffer; - public int dwInBufferSize; - public int dwSendTimeOut; - public int dwRecvTimeOut; + public static class NET_EHOME_XML_REMOTE_CTRL_PARAM extends Structure { + public int dwSize; + public Pointer lpInbuffer; + public int dwInBufferSize; + public int dwSendTimeOut; + public int dwRecvTimeOut; public Pointer lpOutBuffer; //输出缓冲区 public int dwOutBufferSize; //输出缓冲区大小 public Pointer lpStatusBuffer; //状态缓冲区,若不需要可置为NULL public int dwStatusBufferSize; //状态缓冲区大小 public byte[] byRes = new byte[16]; - }; + } + + ; public static class NET_DVR_STRING_POINTER extends Structure { - public byte[] byString = new byte[2*1024]; + public byte[] byString = new byte[2 * 1024]; } - public static class NET_EHOME_CONFIG extends Structure{ + public static class NET_EHOME_CONFIG extends Structure { public Pointer pCondBuf; - public int dwCondSize; + public int dwCondSize; public Pointer pInBuf; - public int dwInSize; + public int dwInSize; public Pointer pOutBuf; - public int dwOutSize; + public int dwOutSize; public byte[] byRes = new byte[40]; } - public static class NET_EHOME_DEVICE_INFO extends Structure{ - public int dwSize; - public int dwChannelNumber; - public int dwChannelAmount; - public int dwDevType; - public int dwDiskNumber; + public static class NET_EHOME_DEVICE_INFO extends Structure { + public int dwSize; + public int dwChannelNumber; + public int dwChannelAmount; + public int dwDevType; + public int dwDiskNumber; public byte[] sSerialNumber = new byte[128]; - public int dwAlarmInPortNum; - public int dwAlarmInAmount; - public int dwAlarmOutPortNum; - public int dwAlarmOutAmount; - public int dwStartChannel; - public int dwAudioChanNum; - public int dwMaxDigitChannelNum; - public int dwAudioEncType; + public int dwAlarmInPortNum; + public int dwAlarmInAmount; + public int dwAlarmOutPortNum; + public int dwAlarmOutAmount; + public int dwStartChannel; + public int dwAudioChanNum; + public int dwMaxDigitChannelNum; + public int dwAudioEncType; public byte[] sSIMCardSN = new byte[128]; - public byte[] sSIMCardPhoneNum = new byte[32]; - public int dwSupportZeroChan; - public int dwStartZeroChan; - public int dwSmartType; + public byte[] sSIMCardPhoneNum = new byte[32]; + public int dwSupportZeroChan; + public int dwStartZeroChan; + public int dwSmartType; public byte[] byRes = new byte[160]; - }; - public static class NET_EHOME_REC_FILE_COND extends Structure{ - public int dwChannel; //通道号 - public int dwRecType;//录像类型:0xff-全部类型,0-定时录像,1-移动报警,2-报警触发,3-报警|动测,4-报警&动测,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警(或者取证录像),10(0x0a)-PIR报警,11(0x0b)-无线报警,12(0x0c)-呼救报警,13(0x0d)-全部报警 + } + + ; + + public static class NET_EHOME_REC_FILE_COND extends Structure { + public int dwChannel; //通道号 + public int dwRecType;//录像类型:0xff-全部类型,0-定时录像,1-移动报警,2-报警触发,3-报警|动测,4-报警&动测,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警(或者取证录像),10(0x0a)-PIR报警,11(0x0b)-无线报警,12(0x0c)-呼救报警,13(0x0d)-全部报警 public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME();//开始时间 public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME();//结束时间 - public int dwStartIndex;//查询起始位置,从0开始 - public int dwMaxFileCountPer;//单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8 + public int dwStartIndex;//查询起始位置,从0开始 + public int dwMaxFileCountPer;//单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8 public byte[] byRes = new byte[64]; - }; - public static class NET_EHOME_REC_FILE extends Structure{ - public int dwSize; - public byte[] sFileName = new byte[100]; - public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME(); - public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME(); - public int dwFileSize; - public int dwFileMainType; - public int dwFileSubType; - public int dwFileIndex; + } + + ; + + public static class NET_EHOME_REC_FILE extends Structure { + public int dwSize; + public byte[] sFileName = new byte[100]; + public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME(); + public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME(); + public int dwFileSize; + public int dwFileMainType; + public int dwFileSubType; + public int dwFileIndex; public byte[] byRes = new byte[128]; - }; - public static class NET_EHOME_TIME extends Structure{ - public short wYear;//年 - public byte byMonth;//月 - public byte byDay;//日 - public byte byHour;//时 - public byte byMinute;//分 - public byte bySecond;//秒 - public byte byRes1;//保留 - public short wMSecond;//毫秒 + } + + ; + + public static class NET_EHOME_TIME extends Structure { + public short wYear;//年 + public byte byMonth;//月 + public byte byDay;//日 + public byte byHour;//时 + public byte byMinute;//分 + public byte bySecond;//秒 + public byte byRes1;//保留 + public short wMSecond;//毫秒 public byte[] byRes2 = new byte[2]; - } + } + //初始化,反初始化 - boolean NET_ECMS_Init(); - boolean NET_ECMS_Fini(); + boolean NET_ECMS_Init(); + + boolean NET_ECMS_Fini(); //获取错误码 int NET_ECMS_GetLastError(); @@ -275,49 +287,68 @@ public interface HCEHomeCMS extends StdCallLibrary { //获取版本号 int NET_ECMS_GetBuildVersion(); - boolean NET_ECMS_SetSDKLocalCfg(int enumType, Pointer lpInBuff); - boolean NET_ECMS_GetSDKLocalCfg(int enumType, Pointer lpOutBuff); + boolean NET_ECMS_SetSDKLocalCfg(int enumType, Pointer lpInBuff); + + boolean NET_ECMS_GetSDKLocalCfg(int enumType, Pointer lpOutBuff); //开启关闭监听 NativeLong NET_ECMS_StartListen(NET_EHOME_CMS_LISTEN_PARAM lpCMSListenPara); + boolean NET_ECMS_StopListen(NativeLong iHandle); + boolean NET_ECMS_GetDevConfig(NativeLong lUserID, int dwCommand, NET_EHOME_CONFIG lpConfig, int dwConfigSize); + //注销设备 boolean NET_ECMS_ForceLogout(NativeLong lUserID) - ; + ; + boolean NET_ECMS_SetLogToFile(int iLogLevel, String strLogDir, boolean bAutoDel); - NativeLong NET_ECMS_StartVoiceTalk(NativeLong lUserID, int dwVoiceChan, NET_EHOME_VOICETALK_PARA pVoiceTalkPara); + + NativeLong NET_ECMS_StartVoiceTalk(NativeLong lUserID, int dwVoiceChan, NET_EHOME_VOICETALK_PARA pVoiceTalkPara); boolean NET_ECMS_StopVoiceTalk(NativeLong iVoiceHandle); + boolean NET_ECMS_StopVoiceTalkWithStmServer(NativeLong lUserID, NativeLong lSessionID); + boolean NET_ECMS_SendVoiceTransData(NativeLong iVoiceHandle, String pSendBuf, int dwBufSize); - boolean NET_ECMS_StartGetRealStream(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); //lUserID由SDK分配的用户ID,由设备注册回调时fDeviceRegisterCallBack返回 - boolean NET_ECMS_StartGetRealStreamV11(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN_V11 pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); - boolean NET_ECMS_StopGetRealStream(NativeLong lUserID, NativeLong lSessionID); + boolean NET_ECMS_StartGetRealStream(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); //lUserID由SDK分配的用户ID,由设备注册回调时fDeviceRegisterCallBack返回 + + boolean NET_ECMS_StartGetRealStreamV11(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN_V11 pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); + + boolean NET_ECMS_StopGetRealStream(NativeLong lUserID, NativeLong lSessionID); + boolean NET_ECMS_StartPushRealStream(NativeLong lUserID, NET_EHOME_PUSHSTREAM_IN pPushInfoIn, NET_EHOME_PUSHSTREAM_OUT pPushInfoOut); + boolean NET_ESTREAM_StopPreview(NativeLong lPreviewHandle); + boolean NET_ESTREAM_StopListenPreview(NativeLong lPreivewListenHandle); //透传 boolean NET_ECMS_GetPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam); + boolean NET_ECMS_PutPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam); + boolean NET_ECMS_PostPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam); + boolean NET_ECMS_DeletePTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam); + boolean NET_ECMS_XMLConfig(NativeLong iUserID, NET_EHOME_XML_CFG pXmlCfg, int dwConfigSize); + boolean NET_ECMS_XMLRemoteControl(NativeLong lUserID, NET_EHOME_XML_REMOTE_CTRL_PARAM lpCtrlParam, int dwCtrlSize); - //获取查下句柄 + //获取查下句柄 NativeLong NET_ECMS_StartFindFile_V11(NativeLong lUserID, int lSearchType, Pointer pFindCond, int dwCondSize); + NativeLong NET_ECMS_FindNextFile_V11(NativeLong lHandle, Pointer pFindData, int dwDataSize); + boolean NET_ECMS_StopFindFile(NativeLong lHandle); //boolean NET_ECMS_StartPlayBack(NativeLong lUserID, NET_EHOME_PLAYBACK_INFO_IN pPlaybackInfoIn, NET_EHOME_PLAYBACK_INFO_OUT pPlaybackInfoOut); //boolean NET_ECMS_StartPushPlayBack(NativeLong lUserID, NET_EHOME_PUSHPLAYBACK_IN struPushPlayBackIn, NET_EHOME_PUSHPLAYBACK_OUT struPushPlayBackOut); } -interface GDI32 extends W32API -{ +interface GDI32 extends W32API { GDI32 INSTANCE = (GDI32) Native.loadLibrary("gdi32", GDI32.class, DEFAULT_OPTIONS); public static final int TRANSPARENT = 1; diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeSS.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeSS.java index 9ca8231..4b72678 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeSS.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/haikanglibs/HCEHomeSS.java @@ -13,253 +13,264 @@ import com.sun.jna.Structure; import com.sun.jna.win32.StdCallLibrary; /** - * * @author gaoaozhi */ public interface HCEHomeSS extends StdCallLibrary { - HCEHomeSS INSTANCE = (HCEHomeSS) Native.loadLibrary("C:\\lib\\HCEHomeSS", HCEHomeSS.class); - /***宏定义***/ - //常量 - - public static final int MAX_URL_LEN_SS = 4096; //图片服务器回调URL长度 - public static final int MAX_KMS_USER_LEN = 512; //KMS用户名最大长度 - public static final int MAX_KMS_PWD_LEN = 512; //KMS密码最大长度 - public static final int MAX_CLOUD_AK_SK_LEN = 64; //EHome5.0存储协议AK SK最大长度 - public static final int MAX_PATH = 260; //设备ID长度 - public static final int NET_EHOME_SERIAL_LEN = 12; //设备序列号长度 - - //NET_EHOME_SS_MSG_TYPE - public static final int NET_EHOME_SS_MSG_TOMCAT = 1;//Tomcat回调函数 - public static final int NET_EHOME_SS_MSG_KMS_USER_PWD = 2;//KMS用户名密码校验 - public static final int NET_EHOME_SS_MSG_CLOUD_AK = 3;//EHome5.0存储协议AK回调 - - //NET_EHOME_SS_CLIENT_TYPE - public static final int NET_EHOME_SS_CLIENT_TYPE_TOMCAT = 1; //Tomcat图片上传客户端 - public static final int NET_EHOME_SS_CLIENT_TYPE_VRB = 2;//VRB图片上传客户端 - public static final int NET_EHOME_SS_CLIENT_TYPE_KMS = 3;//KMS图片上传客户端 - public static final int NET_EHOME_SS_CLIENT_TYPE_CLOUD = 4;//EHome5.0存储协议客户端 - - //NET_EHOME_SS_INIT_CFG_TYPE - public static final int NET_EHOME_SS_INIT_CFG_SDK_PATH = 1;//设置SS组件加载路径(仅Linux版本支持) - public static final int NET_EHOME_SS_INIT_CFG_CLOUD_TIME_DIFF = 2;//设置运存储的请求时间差值,默认15分钟,最小5分钟,最大60分钟 - - public enum NET_EHOME_SS_MSG_TYPE { - NET_EHOME_SS_MSG_TOMCAT, //Tomcat回调函数 - NET_EHOME_SS_MSG_KMS_USER_PWD, //KMS用户名密码校验 - NET_EHOME_SS_MSG_CLOUD_AK //EHome5.0存储协议AK回调 - } - - public enum NET_EHOME_SS_CLIENT_TYPE { - NET_EHOME_SS_CLIENT_TYPE_TOMCAT, //Tomcat图片上传客户端 - NET_EHOME_SS_CLIENT_TYPE_VRB, //VRB图片上传客户端 - NET_EHOME_SS_CLIENT_TYPE_KMS, //KMS图片上传客户端 - NET_EHOME_SS_CLIENT_TYPE_CLOUD //EHome5.0存储协议客户端 - } - - public enum NET_EHOME_SS_INIT_CFG_TYPE { - NET_EHOME_SS_INIT_CFG_SDK_PATH, //设置SS组件加载路径(仅Linux版本支持) - NET_EHOME_SS_INIT_CFG_CLOUD_TIME_DIFF //设置运存储的请求时间差值,默认15分钟,最小5分钟,最大60分钟 - } - - /** - * Tomcat图片服务器回调信息 - */ - public static class NET_EHOME_SS_TOMCAT_MSG extends Structure { - public byte[] szDevUri = new byte[MAX_URL_LEN_SS]; //设备请求的URI - public int dwPicNum; //图片数 - public String pPicURLs; //图片URL,每个URL MAX_URL_LEN_SS长度 - public byte[] byRes = new byte[64]; - } - - /** - * 监听参数 - */ - public static class NET_EHOME_SS_LISTEN_PARAM extends Structure { - public NET_EHOME_IPADDRESS struAddress; //本地监听信息,IP为0.0.0.0的情况下,默认为本地地址,多个网卡的情况下,默认为从操作系统获取到的第一个 - public byte[] szKMS_UserName = new byte[MAX_KMS_USER_LEN]; //KMS用户名 - public byte[] szKMS_Password = new byte[MAX_KMS_PWD_LEN]; //KMS用户名 - public EHomeSSStorageCallBack fnSStorageCb;//图片服务器信息存储回调函数 - public EHomeSSMsgCallBack fnSSMsgCb; //图片服务器信息Tomcat回调函数 - public byte[] szAccessKey = new byte[MAX_CLOUD_AK_SK_LEN]; //EHome5.0存储协议AK - public byte[] szSecretKey = new byte[MAX_CLOUD_AK_SK_LEN]; //EHome5.0存储协议SK - public Pointer pUserData; //用户参数 - public byte byHttps; //是否启用HTTPs - public byte[] byRes1 = new byte[13]; - public EHomeSSRWCallBack fnSSRWCb;//读写回调函数 - public byte[] byRes = new byte[56]; - } - - /** - * IP地址结构体 - */ - public static class NET_EHOME_IPADDRESS extends Structure { - public byte[] szIP = new byte[128]; //IP地址 - public short wPort; //端口号 - public byte[] byRes = new byte[2]; //保留,置为0 - } - - /** - * 监听Https参数 - */ - public static class NET_EHOME_SS_LISTEN_HTTPS_PARAM extends Structure { - public byte byHttps; //0-不启用HTTPS 1-启用HTTPS - public byte byVerifyMode; //0-单向认证(暂只支持单向认证) - public byte byCertificateFileType; //证书类型0-pem, 1-ANS1 - public byte byPrivateKeyFileType; //私钥类型0-pem, 1-ANS1 - public byte[] szUserCertificateFile = new byte[MAX_PATH]; //用户名 - public byte[] szUserPrivateKeyFile = new byte[32]; //密码 - public int dwSSLVersion;//SSL Method版本 - //0 - SSL23, 1 - SSL2, 2 - SSL3, 3 - TLS1.0, 4 - TLS1.1, 5 - TLS1.2 - //SSL23是兼容模式,会协商客户端和服务端使用的最高版本 - public byte[] byRes3 = new byte[360]; - } - - /** - * 图片上传客户端参数 - */ - public static class NET_EHOME_SS_CLIENT_PARAM extends Structure { - public int enumType; //图片上传客户端类型 NET_EHOME_SS_CLIENT_TYPE - public NET_EHOME_IPADDRESS struAddress; //图片服务器地址 - public byte byHttps;//是否启用HTTPs - public byte[] byRes = new byte[63]; - } - - public static class NET_EHOME_SS_LOCAL_SDK_PATH extends Structure { - public byte[] sPath = new byte[MAX_PATH]; - public byte[] byRes = new byte[128]; - } - - //初始化,反初始化 - boolean NET_ESS_Init(); - - boolean NET_ESS_Fini(); - - /** - * 信息回调函数 - */ - public static interface EHomeSSMsgCallBack extends StdCallCallback { - public boolean invoke(NativeLong iHandle, int enumType, Pointer pOutBuffer, int dwOutLen, Pointer pInBuffer, + HCEHomeSS INSTANCE = (HCEHomeSS) Native.loadLibrary("C:\\lib\\HCEHomeSS", HCEHomeSS.class); + /***宏定义***/ + //常量 + + public static final int MAX_URL_LEN_SS = 4096; //图片服务器回调URL长度 + public static final int MAX_KMS_USER_LEN = 512; //KMS用户名最大长度 + public static final int MAX_KMS_PWD_LEN = 512; //KMS密码最大长度 + public static final int MAX_CLOUD_AK_SK_LEN = 64; //EHome5.0存储协议AK SK最大长度 + public static final int MAX_PATH = 260; //设备ID长度 + public static final int NET_EHOME_SERIAL_LEN = 12; //设备序列号长度 + + //NET_EHOME_SS_MSG_TYPE + public static final int NET_EHOME_SS_MSG_TOMCAT = 1;//Tomcat回调函数 + public static final int NET_EHOME_SS_MSG_KMS_USER_PWD = 2;//KMS用户名密码校验 + public static final int NET_EHOME_SS_MSG_CLOUD_AK = 3;//EHome5.0存储协议AK回调 + + //NET_EHOME_SS_CLIENT_TYPE + public static final int NET_EHOME_SS_CLIENT_TYPE_TOMCAT = 1; //Tomcat图片上传客户端 + public static final int NET_EHOME_SS_CLIENT_TYPE_VRB = 2;//VRB图片上传客户端 + public static final int NET_EHOME_SS_CLIENT_TYPE_KMS = 3;//KMS图片上传客户端 + public static final int NET_EHOME_SS_CLIENT_TYPE_CLOUD = 4;//EHome5.0存储协议客户端 + + //NET_EHOME_SS_INIT_CFG_TYPE + public static final int NET_EHOME_SS_INIT_CFG_SDK_PATH = 1;//设置SS组件加载路径(仅Linux版本支持) + public static final int NET_EHOME_SS_INIT_CFG_CLOUD_TIME_DIFF = 2;//设置运存储的请求时间差值,默认15分钟,最小5分钟,最大60分钟 + + public enum NET_EHOME_SS_MSG_TYPE { + NET_EHOME_SS_MSG_TOMCAT, //Tomcat回调函数 + NET_EHOME_SS_MSG_KMS_USER_PWD, //KMS用户名密码校验 + NET_EHOME_SS_MSG_CLOUD_AK //EHome5.0存储协议AK回调 + } + + public enum NET_EHOME_SS_CLIENT_TYPE { + NET_EHOME_SS_CLIENT_TYPE_TOMCAT, //Tomcat图片上传客户端 + NET_EHOME_SS_CLIENT_TYPE_VRB, //VRB图片上传客户端 + NET_EHOME_SS_CLIENT_TYPE_KMS, //KMS图片上传客户端 + NET_EHOME_SS_CLIENT_TYPE_CLOUD //EHome5.0存储协议客户端 + } + + public enum NET_EHOME_SS_INIT_CFG_TYPE { + NET_EHOME_SS_INIT_CFG_SDK_PATH, //设置SS组件加载路径(仅Linux版本支持) + NET_EHOME_SS_INIT_CFG_CLOUD_TIME_DIFF //设置运存储的请求时间差值,默认15分钟,最小5分钟,最大60分钟 + } + + /** + * Tomcat图片服务器回调信息 + */ + public static class NET_EHOME_SS_TOMCAT_MSG extends Structure { + public byte[] szDevUri = new byte[MAX_URL_LEN_SS]; //设备请求的URI + public int dwPicNum; //图片数 + public String pPicURLs; //图片URL,每个URL MAX_URL_LEN_SS长度 + public byte[] byRes = new byte[64]; + } + + /** + * 监听参数 + */ + public static class NET_EHOME_SS_LISTEN_PARAM extends Structure { + public NET_EHOME_IPADDRESS struAddress; //本地监听信息,IP为0.0.0.0的情况下,默认为本地地址,多个网卡的情况下,默认为从操作系统获取到的第一个 + public byte[] szKMS_UserName = new byte[MAX_KMS_USER_LEN]; //KMS用户名 + public byte[] szKMS_Password = new byte[MAX_KMS_PWD_LEN]; //KMS用户名 + public EHomeSSStorageCallBack fnSStorageCb;//图片服务器信息存储回调函数 + public EHomeSSMsgCallBack fnSSMsgCb; //图片服务器信息Tomcat回调函数 + public byte[] szAccessKey = new byte[MAX_CLOUD_AK_SK_LEN]; //EHome5.0存储协议AK + public byte[] szSecretKey = new byte[MAX_CLOUD_AK_SK_LEN]; //EHome5.0存储协议SK + public Pointer pUserData; //用户参数 + public byte byHttps; //是否启用HTTPs + public byte[] byRes1 = new byte[13]; + public EHomeSSRWCallBack fnSSRWCb;//读写回调函数 + public byte[] byRes = new byte[56]; + } + + /** + * IP地址结构体 + */ + public static class NET_EHOME_IPADDRESS extends Structure { + public byte[] szIP = new byte[128]; //IP地址 + public short wPort; //端口号 + public byte[] byRes = new byte[2]; //保留,置为0 + } + + /** + * 监听Https参数 + */ + public static class NET_EHOME_SS_LISTEN_HTTPS_PARAM extends Structure { + public byte byHttps; //0-不启用HTTPS 1-启用HTTPS + public byte byVerifyMode; //0-单向认证(暂只支持单向认证) + public byte byCertificateFileType; //证书类型0-pem, 1-ANS1 + public byte byPrivateKeyFileType; //私钥类型0-pem, 1-ANS1 + public byte[] szUserCertificateFile = new byte[MAX_PATH]; //用户名 + public byte[] szUserPrivateKeyFile = new byte[32]; //密码 + public int dwSSLVersion;//SSL Method版本 + //0 - SSL23, 1 - SSL2, 2 - SSL3, 3 - TLS1.0, 4 - TLS1.1, 5 - TLS1.2 + //SSL23是兼容模式,会协商客户端和服务端使用的最高版本 + public byte[] byRes3 = new byte[360]; + } + + /** + * 图片上传客户端参数 + */ + public static class NET_EHOME_SS_CLIENT_PARAM extends Structure { + public int enumType; //图片上传客户端类型 NET_EHOME_SS_CLIENT_TYPE + public NET_EHOME_IPADDRESS struAddress; //图片服务器地址 + public byte byHttps;//是否启用HTTPs + public byte[] byRes = new byte[63]; + } + + public static class NET_EHOME_SS_LOCAL_SDK_PATH extends Structure { + public byte[] sPath = new byte[MAX_PATH]; + public byte[] byRes = new byte[128]; + } + + //初始化,反初始化 + boolean NET_ESS_Init(); + + boolean NET_ESS_Fini(); + + /** + * 信息回调函数 + */ + public static interface EHomeSSMsgCallBack extends StdCallCallback { + public boolean invoke(NativeLong iHandle, int enumType, Pointer pOutBuffer, int dwOutLen, Pointer pInBuffer, int dwInLen, Pointer pUser); - } + } - /** - * 存储回调函数 - */ - public static interface EHomeSSStorageCallBack extends StdCallCallback { - public boolean invoke(NativeLong iHandle, String pFileName, Pointer pFileBuf, int dwOutLen, Pointer pFilePath, + /** + * 存储回调函数 + */ + public static interface EHomeSSStorageCallBack extends StdCallCallback { + public boolean invoke(NativeLong iHandle, String pFileName, Pointer pFileBuf, int dwOutLen, Pointer pFilePath, Pointer pUser); - } + } - /** - * 读写回调函数 byAct 0-读 1-写 2-删 - */ - public static interface EHomeSSRWCallBack extends StdCallCallback { - public boolean invoke(NativeLong iHandle, byte byAct, String pFileName, Pointer pFileBuf, int dwFileLen, String pFileUrl, + /** + * 读写回调函数 byAct 0-读 1-写 2-删 + */ + public static interface EHomeSSRWCallBack extends StdCallCallback { + public boolean invoke(NativeLong iHandle, byte byAct, String pFileName, Pointer pFileBuf, int dwFileLen, String pFileUrl, Pointer pUser); - } - - /** - * 获取错误码 - */ - int NET_ESS_GetLastError(); - - /** - * 日志 - * @param iLogLevel - * @param strLogDir - * @param bAutoDel - * @return - */ - boolean NET_ESS_SetLogToFile(int iLogLevel, String strLogDir, boolean bAutoDel); - - /** - * 获取版本号 - * @return - */ - int NET_ESS_GetBuildVersion(); - - /** - * 设置HTTP监听的Https参数 - * @param pSSHttpsParam - * @return - */ - boolean NET_ESS_SetListenHttpsParam(NET_EHOME_SS_LISTEN_HTTPS_PARAM pSSHttpsParam); - - /** - * 开启监听 - * @param pSSListenParam - * @return - */ - NativeLong NET_ESS_StartListen(NET_EHOME_SS_LISTEN_PARAM pSSListenParam); - - /** - * 关闭监听 - * @param lListenHandle - * @return - */ - boolean NET_ESS_StopListen(NativeLong lListenHandle); - - /** - * 设置初始化参数 - * @param enumType NET_EHOME_SS_INIT_CFG_TYPE enumType - * @param lpInBuff - * @return - */ - boolean NET_ESS_SetSDKInitCfg(int enumType, Pointer lpInBuff); - - /** - * 创建图片上传/下载客户端 - * @param pClientParam - * @return - */ - NativeLong NET_ESS_CreateClient(NET_EHOME_SS_CLIENT_PARAM pClientParam); - - /** - * 设置图片上传/下载客户端超时时间,单位ms,默认为5s - * @param lHandle - * @param dwSendTimeout - * @param dwRecvTimeout - * @return - */ - boolean NET_ESS_ClientSetTimeout(NativeLong lHandle, int dwSendTimeout, int dwRecvTimeout); - - /** - * 设置图片上传/下载客户端参数 - * @param lHandle - * @param strParamName - * @param strParamVal - * @return - */ - boolean NET_ESS_ClientSetParam(NativeLong lHandle, String strParamName, String strParamVal); - - /** - * 图片上传/下载客户端执行上传 - * @param lHandle - * @param strUrl - * @param dwUrlLen - * @return - */ - boolean NET_ESS_ClientDoUpload(NativeLong lHandle, byte[] strUrl, int dwUrlLen); - - /** - * 图片上传/下载客户端执行下载 - * @param lHandle - * @param strUrl - * @param pFileContent - * @param dwContentLen - * @return - */ - boolean NET_ESS_ClientDoDownload(NativeLong lHandle, byte[] strUrl, Pointer pFileContent, int dwContentLen); - - /** - * 销毁客户端 - * @param lHandle - * @return - */ - boolean NET_ESS_DestroyClient(NativeLong lHandle); - - //计算HMAC-SHA256 - boolean NET_ESS_HAMSHA256(String pSrc, String pSecretKey, String pSingatureOut, int dwSingatureLen); + } + + /** + * 获取错误码 + */ + int NET_ESS_GetLastError(); + + /** + * 日志 + * + * @param iLogLevel + * @param strLogDir + * @param bAutoDel + * @return + */ + boolean NET_ESS_SetLogToFile(int iLogLevel, String strLogDir, boolean bAutoDel); + + /** + * 获取版本号 + * + * @return + */ + int NET_ESS_GetBuildVersion(); + + /** + * 设置HTTP监听的Https参数 + * + * @param pSSHttpsParam + * @return + */ + boolean NET_ESS_SetListenHttpsParam(NET_EHOME_SS_LISTEN_HTTPS_PARAM pSSHttpsParam); + + /** + * 开启监听 + * + * @param pSSListenParam + * @return + */ + NativeLong NET_ESS_StartListen(NET_EHOME_SS_LISTEN_PARAM pSSListenParam); + + /** + * 关闭监听 + * + * @param lListenHandle + * @return + */ + boolean NET_ESS_StopListen(NativeLong lListenHandle); + + /** + * 设置初始化参数 + * + * @param enumType NET_EHOME_SS_INIT_CFG_TYPE enumType + * @param lpInBuff + * @return + */ + boolean NET_ESS_SetSDKInitCfg(int enumType, Pointer lpInBuff); + + /** + * 创建图片上传/下载客户端 + * + * @param pClientParam + * @return + */ + NativeLong NET_ESS_CreateClient(NET_EHOME_SS_CLIENT_PARAM pClientParam); + + /** + * 设置图片上传/下载客户端超时时间,单位ms,默认为5s + * + * @param lHandle + * @param dwSendTimeout + * @param dwRecvTimeout + * @return + */ + boolean NET_ESS_ClientSetTimeout(NativeLong lHandle, int dwSendTimeout, int dwRecvTimeout); + + /** + * 设置图片上传/下载客户端参数 + * + * @param lHandle + * @param strParamName + * @param strParamVal + * @return + */ + boolean NET_ESS_ClientSetParam(NativeLong lHandle, String strParamName, String strParamVal); + + /** + * 图片上传/下载客户端执行上传 + * + * @param lHandle + * @param strUrl + * @param dwUrlLen + * @return + */ + boolean NET_ESS_ClientDoUpload(NativeLong lHandle, byte[] strUrl, int dwUrlLen); + + /** + * 图片上传/下载客户端执行下载 + * + * @param lHandle + * @param strUrl + * @param pFileContent + * @param dwContentLen + * @return + */ + boolean NET_ESS_ClientDoDownload(NativeLong lHandle, byte[] strUrl, Pointer pFileContent, int dwContentLen); + + /** + * 销毁客户端 + * + * @param lHandle + * @return + */ + boolean NET_ESS_DestroyClient(NativeLong lHandle); + + //计算HMAC-SHA256 + boolean NET_ESS_HAMSHA256(String pSrc, String pSecretKey, String pSingatureOut, int dwSingatureLen); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqtUtils.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqtUtils.java index 237504e..f30b52b 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqtUtils.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqtUtils.java @@ -22,7 +22,7 @@ public class MqtUtils { public void sendMsg(String msg) { - mqttManager.sendMq("123456789", 51,msg); + mqttManager.sendMq("123456789", 51, msg); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqttManager.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqttManager.java index a62b69f..7878de4 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqttManager.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqttManager.java @@ -20,7 +20,7 @@ public class MqttManager { private static int qosLevel; - public void init(){ + public void init() { final String brokerUrl = "tcp://post-cn-4590mq2hr03.mqtt.aliyuncs.com:1883"; groupId = "GID_HFJSIURFHAQO110"; topic = "Topic_Quene_Test"; @@ -92,13 +92,13 @@ public class MqttManager { } } - public void sendMq(String deviceId,int cmd,String msg) { - String recvClientId = groupId + "@@@"+deviceId; + public void sendMq(String deviceId, int cmd, String msg) { + String recvClientId = groupId + "@@@" + deviceId; final String p2pSendTopic = topic + "/p2p/" + recvClientId; - String content = "{\"cmd\":\""+cmd+"\",\"clientId\":\"\",\"data\": \""+msg+"\"}"; + String content = "{\"cmd\":\"" + cmd + "\",\"clientId\":\"\",\"data\": \"" + msg + "\"}"; MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(qosLevel); - System.out.println("发送内容:" + p2pSendTopic+" msg:---------"+msg); + System.out.println("发送内容:" + p2pSendTopic + " msg:---------" + msg); if (null != mqttClient) { try { mqttClient.publish(p2pSendTopic, message); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java index 0aac1bf..5c1cae3 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java @@ -37,7 +37,7 @@ public class AlarmUtils { } public interface AlarmCallBack { - void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId); + void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature); } public void deleAlarm(String strXML) { @@ -80,6 +80,14 @@ public class AlarmUtils { picDataUrl = picDataUrl.replace("", ""); + currTemperature = currTemperature.replace("1) { + if (!StringUtils.isEmpty(picDataUrl) && picDataUrl.split("id=").length > 1) { String picDataUrlId = picDataUrl.split("id=")[1]; FileUtils.getInstance().writeLogs("0x4bdeviceID:" + deviceID + " cardNo:" + cardNo + " time:" + time + " picDataUrlId:" + picDataUrlId, FileUtils.faceSuccess); content = "人脸认证通过"; - if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId); + if (null != alarmCallBack) + alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId, currTemperature); } break; case "0x4c"://人脸认证失败 @@ -141,16 +151,26 @@ public class AlarmUtils { content = "真人检测失败"; break; case "0x69"://人证比对通过 - if (!StringUtils.isEmpty(picDataUrl)&&picDataUrl.split("id=").length>1) { + if (!StringUtils.isEmpty(picDataUrl) && picDataUrl.split("id=").length > 1) { String picDataUrlId = picDataUrl.split("id=")[1]; FileUtils.getInstance().writeLogs("0x69deviceID:" + deviceID + " cardNo:" + cardNo + " time:" + time + " picDataUrlId:" + picDataUrlId, FileUtils.faceSuccess); content = "人脸认证通过"; - if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId); + if (null != alarmCallBack) + alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId, currTemperature); } break; case "0x70"://认证比对失败 FileUtils.getInstance().writeLogs("deviceID:" + deviceID + " cardNo:" + cardNo + " time:" + time, FileUtils.faceFail); break; + case "0x6": + if (!StringUtils.isEmpty(picDataUrl) && picDataUrl.split("id=").length > 1) { + String picDataUrlId = picDataUrl.split("id=")[1]; + FileUtils.getInstance().writeLogs("0x69deviceID:" + deviceID + " cardNo:" + cardNo + " time:" + time + " picDataUrlId:" + picDataUrlId, FileUtils.faceSuccess); + content = "人脸认证通过"; + if (null != alarmCallBack) + alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId, currTemperature); + } + break; } saveWater(content, minorType, deviceID, cardNo, time, "0x05"); @@ -237,11 +257,11 @@ public class AlarmUtils { break; case "0x426"://人证设备在线 content = "人证设备在线"; - if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, ""); + if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", ""); break; case "0x427"://人证设备离线 content = "人证设备离线"; - if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, ""); + if (null != alarmCallBack) alarmCallBack.callBack(minorType, deviceID, "", time, "", ""); break; } saveWater(content, minorType, deviceID, "", time, "0x02"); @@ -290,8 +310,8 @@ public class AlarmUtils { faceWaterRecoder.setSystime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); // System.out.println("deviceDao:" + deviceDao); // System.out.println("faceWaterRecoder:" + faceWaterRecoder); - deviceDao.saveFaceWaterRecoder(faceWaterRecoder.getDeviceId(), faceWaterRecoder.getDeviceType() + "", faceWaterRecoder.getMinorType(), - faceWaterRecoder.getContent(), faceWaterRecoder.getMajorType(), faceWaterRecoder.getTime(), faceWaterRecoder.getCardNo(), faceWaterRecoder.getSystime()); + deviceDao.saveFaceWaterRecoder(faceWaterRecoder.getDeviceId(), faceWaterRecoder.getDeviceType() + "", faceWaterRecoder.getMinorType(), + faceWaterRecoder.getContent(), faceWaterRecoder.getMajorType(), faceWaterRecoder.getTime(), faceWaterRecoder.getCardNo(), faceWaterRecoder.getSystime()); } } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiHelper.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiHelper.java index d35089c..1ad008c 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiHelper.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiHelper.java @@ -19,7 +19,7 @@ import java.util.*; public class ApiHelper { - public static String doGet(String url,Map headerParamMap) { + public static String doGet(String url, Map headerParamMap) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; String result = ""; @@ -30,7 +30,7 @@ public class ApiHelper { HttpGet httpGet = new HttpGet(url); // 设置请求头信息, for (Map.Entry entry : headerParamMap.entrySet()) { - httpGet.setHeader(entry.getKey(),entry.getValue()); + httpGet.setHeader(entry.getKey(), entry.getValue()); } // 为httpGet实例设置配置 @@ -66,8 +66,7 @@ public class ApiHelper { } - - public static String doDelete(String url,Map headerParamMap) { + public static String doDelete(String url, Map headerParamMap) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; String result = ""; @@ -78,7 +77,7 @@ public class ApiHelper { HttpDelete httpDelete = new HttpDelete(url); // 设置请求头信息, for (Map.Entry entry : headerParamMap.entrySet()) { - httpDelete.setHeader(entry.getKey(),entry.getValue()); + httpDelete.setHeader(entry.getKey(), entry.getValue()); } // 为httpGet实例设置配置 httpDelete.setConfig(setRequestConfig()); @@ -155,11 +154,13 @@ public class ApiHelper { e.printStackTrace(); } } - result = closeHttpAndResult(httpClient, httpPost,null); + result = closeHttpAndResult(httpClient, httpPost, null); return result; } + /** * post请求,内容体比较灵活,任意字符串格式的内容 + * * @param url * @param headerParamMap * @param jsonParam @@ -175,19 +176,19 @@ public class ApiHelper { // 设置请求头 httpPost.addHeader("Content-Type", "application/json"); for (Map.Entry entry : headerParamMap.entrySet()) { - httpPost.setHeader(entry.getKey(),entry.getValue()); + httpPost.setHeader(entry.getKey(), entry.getValue()); } // 为httpPost实例设置配置 httpPost.setConfig(setRequestConfig()); // try { - StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json","UTF-8")); + StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json", "UTF-8")); // stringEntity.setContentType("application/json"); // stringEntity.setContentEncoding("gzip");//请求头的编码格式 httpPost.setEntity(stringEntity); // }catch (UnsupportedEncodingException e){ // e.printStackTrace(); // } - result = closeHttpAndResult(httpClient,httpPost,null); + result = closeHttpAndResult(httpClient, httpPost, null); return result; } @@ -197,32 +198,32 @@ public class ApiHelper { // 创建httpClient实例 httpClient = HttpClients.createDefault(); // 创建httpPost远程连接实例 - HttpPut httpPut= new HttpPut(url); + HttpPut httpPut = new HttpPut(url); // 设置请求头 httpPut.addHeader("Content-Type", "application/json"); for (Map.Entry entry : headerParamMap.entrySet()) { - httpPut.setHeader(entry.getKey(),entry.getValue()); + httpPut.setHeader(entry.getKey(), entry.getValue()); } // 为httpPut实例设置配置 httpPut.setConfig(setRequestConfig()); - StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json","UTF-8")); + StringEntity stringEntity = new StringEntity(jsonParam, ContentType.create("application/json", "UTF-8")); httpPut.setEntity(stringEntity); - result = closeHttpAndResult(httpClient,null,httpPut); + result = closeHttpAndResult(httpClient, null, httpPut); return result; } - private static String closeHttpAndResult(CloseableHttpClient httpClient,HttpPost httpPost,HttpPut httpPut){ + private static String closeHttpAndResult(CloseableHttpClient httpClient, HttpPost httpPost, HttpPut httpPut) { CloseableHttpResponse httpResponse = null; String result = null; try { // httpClient对象执行post或者是put请求,并返回响应参数对象 - if(httpPost != null) { + if (httpPost != null) { httpResponse = httpClient.execute(httpPost); - }else { + } else { httpResponse = httpClient.execute(httpPut); } // 从响应对象中获取响应内容 @@ -256,15 +257,16 @@ public class ApiHelper { /** * 设置配置请求参数 + * * @return */ - private static RequestConfig setRequestConfig(){ + private static RequestConfig setRequestConfig() { RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间 .setConnectionRequestTimeout(35000)// 请求超时时间 .setSocketTimeout(60000)// 数据读取超时时间 .build(); - return requestConfig; + return requestConfig; } } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiUtil.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiUtil.java index 91084ff..8ed8dfc 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiUtil.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ApiUtil.java @@ -31,12 +31,12 @@ public class ApiUtil { private static ApiUtil apiUtil; - public static ApiUtil getInstance(){ + public static ApiUtil getInstance() { - if (null==apiUtil){ - synchronized (ApiUtil.class){ + if (null == apiUtil) { + synchronized (ApiUtil.class) { - if (null==apiUtil) apiUtil = new ApiUtil(); + if (null == apiUtil) apiUtil = new ApiUtil(); } } @@ -69,8 +69,8 @@ public class ApiUtil { try { JSONObject jsonObject = new JSONObject(responseEntity.getBody()); - JSONObject Result= jsonObject.optJSONObject("Result"); - regions = Result.optJSONArray("regions"); + JSONObject Result = jsonObject.optJSONObject("Result"); + regions = Result.optJSONArray("regions"); } catch (JSONException e) { e.printStackTrace(); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/BaiduApiUtiols.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/BaiduApiUtiols.java index 9316495..ce517d1 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/BaiduApiUtiols.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/BaiduApiUtiols.java @@ -1,86 +1,86 @@ -package com.sincere.haikangface.utils; - -import com.sincere.common.util.AuthService; -import com.sincere.common.util.Base64Util; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; - -public class BaiduApiUtiols { - - public static BaiduApiUtiols baiduApiUtiols; - - public static BaiduApiUtiols getInstance() { - - if (null == baiduApiUtiols) { - synchronized (BaiduApiUtiols.class) { - baiduApiUtiols = new BaiduApiUtiols(); - } - } - return baiduApiUtiols; - } - - - /** - * @param imgPath 图片路径 - * @param group_id 学校id - * @param user_id 用户id - * @param user_info 用户名字 - * @return - */ - public String registerFace(String imgPath, String group_id, String user_id, String user_info) { - - String registUrl = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=" + AuthService.getFaceAuthToken(); - long time = System.currentTimeMillis(); - System.out.println("starttime:"+time); - RestTemplate restTemplate = new RestTemplate(); - MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); - multiValueMap.add("image", Base64Util.imageencode(imgPath)); - multiValueMap.add("image_type", "BASE64"); - multiValueMap.add("group_id", group_id); - multiValueMap.add("user_id", user_id); - multiValueMap.add("user_info", user_info); -// multiValueMap.add("quality_control", "NORMAL"); - System.out.println("multiValueMap:" + multiValueMap.toString()); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity requestEntity = new HttpEntity(multiValueMap, - headers); - System.out.println("midddle:"+(System.currentTimeMillis()-time)); - time = System.currentTimeMillis(); - ResponseEntity result = restTemplate.postForEntity(registUrl, requestEntity, String.class); - System.out.println("end:"+(System.currentTimeMillis()-time)); - System.out.println("result:" + result.getBody()); - return result.getBody(); - - } - - public String searchFace(String imgPath,String group_id, String user_id){ - String searchFace = "https://aip.baidubce.com/rest/2.0/face/v3/search?access_token="+AuthService.getFaceAuthToken(); - long time = System.currentTimeMillis(); - RestTemplate restTemplate = new RestTemplate(); - MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); - multiValueMap.add("image", Base64Util.imageencode(imgPath)); - multiValueMap.add("image_type", "BASE64"); - multiValueMap.add("group_id_list", group_id);//从指定的group中进行查找 用逗号分隔,上限10个 - multiValueMap.add("user_id", user_id);//当需要对特定用户进行比对时,指定user_id进行比对。即人脸认证功能。 -// multiValueMap.add("quality_control", "NORMAL"); - System.out.println("multiValueMap:" + multiValueMap.toString()); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity requestEntity = new HttpEntity(multiValueMap, - headers); - System.out.println("midddle:"+(System.currentTimeMillis()-time)); - time = System.currentTimeMillis(); - ResponseEntity result = restTemplate.postForEntity(searchFace, requestEntity, String.class); - System.out.println("end:"+(System.currentTimeMillis()-time)); - System.out.println("result:" + result.getBody()); - return result.getBody(); - - } - -} +//package com.sincere.haikangface.utils; +// +//import com.sincere.common.util.AuthService; +//import com.sincere.common.util.Base64Util; +//import org.springframework.http.HttpEntity; +//import org.springframework.http.HttpHeaders; +//import org.springframework.http.MediaType; +//import org.springframework.http.ResponseEntity; +//import org.springframework.util.LinkedMultiValueMap; +//import org.springframework.util.MultiValueMap; +//import org.springframework.web.client.RestTemplate; +// +//public class BaiduApiUtiols { +// +// public static BaiduApiUtiols baiduApiUtiols; +// +// public static BaiduApiUtiols getInstance() { +// +// if (null == baiduApiUtiols) { +// synchronized (BaiduApiUtiols.class) { +// baiduApiUtiols = new BaiduApiUtiols(); +// } +// } +// return baiduApiUtiols; +// } +// +// +// /** +// * @param imgPath 图片路径 +// * @param group_id 学校id +// * @param user_id 用户id +// * @param user_info 用户名字 +// * @return +// */ +// public String registerFace(String imgPath, String group_id, String user_id, String user_info) { +// +// String registUrl = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=" + AuthService.getFaceAuthToken(); +// long time = System.currentTimeMillis(); +// System.out.println("starttime:"+time); +// RestTemplate restTemplate = new RestTemplate(); +// MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); +// multiValueMap.add("image", Base64Util.imageencode(imgPath)); +// multiValueMap.add("image_type", "BASE64"); +// multiValueMap.add("group_id", group_id); +// multiValueMap.add("user_id", user_id); +// multiValueMap.add("user_info", user_info); +//// multiValueMap.add("quality_control", "NORMAL"); +// System.out.println("multiValueMap:" + multiValueMap.toString()); +// HttpHeaders headers = new HttpHeaders(); +// headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); +// HttpEntity requestEntity = new HttpEntity(multiValueMap, +// headers); +// System.out.println("midddle:"+(System.currentTimeMillis()-time)); +// time = System.currentTimeMillis(); +// ResponseEntity result = restTemplate.postForEntity(registUrl, requestEntity, String.class); +// System.out.println("end:"+(System.currentTimeMillis()-time)); +// System.out.println("result:" + result.getBody()); +// return result.getBody(); +// +// } +// +// public String searchFace(String imgPath,String group_id, String user_id){ +// String searchFace = "https://aip.baidubce.com/rest/2.0/face/v3/search?access_token="+AuthService.getFaceAuthToken(); +// long time = System.currentTimeMillis(); +// RestTemplate restTemplate = new RestTemplate(); +// MultiValueMap multiValueMap = new LinkedMultiValueMap<>(); +// multiValueMap.add("image", Base64Util.imageencode(imgPath)); +// multiValueMap.add("image_type", "BASE64"); +// multiValueMap.add("group_id_list", group_id);//从指定的group中进行查找 用逗号分隔,上限10个 +// multiValueMap.add("user_id", user_id);//当需要对特定用户进行比对时,指定user_id进行比对。即人脸认证功能。 +//// multiValueMap.add("quality_control", "NORMAL"); +// System.out.println("multiValueMap:" + multiValueMap.toString()); +// HttpHeaders headers = new HttpHeaders(); +// headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); +// HttpEntity requestEntity = new HttpEntity(multiValueMap, +// headers); +// System.out.println("midddle:"+(System.currentTimeMillis()-time)); +// time = System.currentTimeMillis(); +// ResponseEntity result = restTemplate.postForEntity(searchFace, requestEntity, String.class); +// System.out.println("end:"+(System.currentTimeMillis()-time)); +// System.out.println("result:" + result.getBody()); +// return result.getBody(); +// +// } +// +//} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java index 1bc9539..9da78cd 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java @@ -1,14 +1,13 @@ package com.sincere.haikangface.utils; +import com.sun.image.codec.jpeg.JPEGCodec; +import com.sun.image.codec.jpeg.JPEGImageEncoder; import org.apache.tomcat.util.http.fileupload.IOUtils; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; +import java.io.*; /** * 图片压缩工具 @@ -16,19 +15,20 @@ import java.io.InputStream; public class CompressPic { public static String CompressPic(String srcPath, String targetPath) throws Exception { - double cutPercent = 0.2; + double cutPercent = 0.1; File file = new File(srcPath.trim()); FileInputStream fileInputStreamSrc = new FileInputStream(file); BufferedImage bufferedImage = ImageIO.read(fileInputStreamSrc); int width = bufferedImage.getWidth(null); int height = bufferedImage.getHeight(null); long fileLength = file.length(); - System.out.println("fileLength:"+fileLength); + System.out.println("fileLength:" + fileLength); + System.out.println("原始宽高:" + "width:" + width + "--height:" + height); if ((fileLength / 1024) < 200) { + System.out.println("小于200k压缩:" + "width:" + width + "--height:" + height); writeImgToFile(bufferedImage, width, height, targetPath); - } else{ + } else { while ((fileLength / 1024) >= 200) { - System.out.println("fileLength:"+fileLength); width = (int) (width * (1 - cutPercent)); height = (int) (height * (1 - cutPercent)); @@ -40,6 +40,8 @@ public class CompressPic { width = bufferedImage1.getWidth(null); height = bufferedImage1.getHeight(null); fileLength = file1.length(); + System.out.println("最终宽高:" + "width:" + width + "--height:" + height); + System.out.println("fileLength1:" + fileLength); fileInputStream.close(); } } @@ -51,13 +53,13 @@ public class CompressPic { private static void writeImgToFile(BufferedImage bufferedImage, int width, int height, String targetPath) { try { File targetFile = new File(targetPath); - if (!targetFile.exists())targetFile.createNewFile(); - BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); + if (!targetFile.exists()) targetFile.createNewFile(); + BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(bufferedImage, 0, 0, width, height, null); // 绘制缩小后的图 FileOutputStream deskImage = new FileOutputStream(targetPath); // 输出到文件流 -// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(deskImage); -// encoder.encode(tag); // 近JPEG编码 - boolean write = ImageIO.write(tag, "jpg", deskImage); + JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(deskImage); + encoder.encode(tag); // 近JPEG编码 +// boolean write = ImageIO.write(tag, "jpg", deskImage); /*if (write) { int angle = ImageUtils.getImgRotateAngle(targetPath); System.out.println("angle:" + angle); @@ -103,4 +105,5 @@ public class CompressPic { return outPath; } + } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/FileUtils.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/FileUtils.java index 7a88fd3..0ceca72 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/FileUtils.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/FileUtils.java @@ -12,7 +12,7 @@ import java.util.Date; public class FileUtils { - public static String studentcode="studentcode.txt"; + public static String studentcode = "studentcode.txt"; private static FileUtils fileUtils; private String filePath = "./log/";//日志记录目录 @@ -61,10 +61,10 @@ public class FileUtils { if (!filePa.exists()) filePa.mkdirs(); File picPath = new File(this.picPath); - if (!picPath.exists())picPath.mkdirs(); + if (!picPath.exists()) picPath.mkdirs(); File picPathComp = new File(this.picPathComp); - if (!picPathComp.exists())picPathComp.mkdirs(); + if (!picPathComp.exists()) picPathComp.mkdirs(); } @@ -77,11 +77,11 @@ public class FileUtils { String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); - File path = new File(filePath+datePath+"/"); - if (!path.exists())path.mkdirs(); + File path = new File(filePath + datePath + "/"); + if (!path.exists()) path.mkdirs(); String time = new SimpleDateFormat("HH").format(new Date()); - File logPath = new File(path, time+"_"+fileName); + File logPath = new File(path, time + "_" + fileName); try { // System.out.println("logPath:" + logPath.getAbsolutePath()); @@ -113,13 +113,12 @@ public class FileUtils { /** - * - * @param file 文件 - * @param path 文件存放路径 + * @param file 文件 + * @param path 文件存放路径 * @param fileName 源文件名 * @return */ - public static String upload(MultipartFile file, String path, String fileName){ + public static String upload(MultipartFile file, String path, String fileName) { // 生成新的文件名 //String realPath = path + "/" + FileNameUtils.getFileName(fileName); @@ -130,7 +129,7 @@ public class FileUtils { File dest = new File(realPath); //判断文件父目录是否存在 - if(!dest.getParentFile().exists()){ + if (!dest.getParentFile().exists()) { dest.getParentFile().mkdir(); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HKXmlUtils.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HKXmlUtils.java index 577fa65..8a8ac97 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HKXmlUtils.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HKXmlUtils.java @@ -8,17 +8,17 @@ public class HKXmlUtils { private static HKXmlUtils hkXmlUtils; - public static HKXmlUtils getInstance(){ + public static HKXmlUtils getInstance() { - if (null==hkXmlUtils){ - synchronized (HKXmlUtils.class){ - if(null==hkXmlUtils)hkXmlUtils=new HKXmlUtils(); + if (null == hkXmlUtils) { + synchronized (HKXmlUtils.class) { + if (null == hkXmlUtils) hkXmlUtils = new HKXmlUtils(); } } return hkXmlUtils; } - public String xMLCard(String cardNo,String valid,String startTime,String endTime){ + public String xMLCard(String cardNo, String valid, String startTime, String endTime) { String strConfigXMLCard = "\n" + "SetCardCfg\n" + "" + cardNo + "\n" + @@ -43,17 +43,17 @@ public class HKXmlUtils { } - public String nameAfter(){ - return "\n" + + public String nameAfter() { + return "\n" + "\n" + "\n" + ""; } /** - * 设置卡模板 + * 设置卡权限计划模板 */ - public String SetCardTemplate(){ + public String SetCardTemplate() { return "\n" + "SetCardTemplate\n" + "1\n" + @@ -73,12 +73,13 @@ public class HKXmlUtils { /** * 设置卡权限 + * * @return */ - public String SetCardRightCfg(String card){ + public String SetCardRightCfg(String card) { return "\n" + "SetCardRightCfg\n" + - ""+card+"\n" + + "" + card + "\n" + "1\n" + "\n" + "\n" + @@ -95,9 +96,10 @@ public class HKXmlUtils { /** * 卡权限周计划 + * * @return */ - public String SetCardWeekPlan(){ + public String SetCardWeekPlan() { return "\n" + "SetCardWeekPlan\n" + "1\n" + @@ -112,16 +114,16 @@ public class HKXmlUtils { /** * 设置卡权限周计划时间 */ - public String SetCardWeekPlanTime(String startTime,String endTime,String weekDay){ + public String SetCardWeekPlanTime(String startTime, String endTime, String weekDay) { return "\n" + "SetCardWeekPlanTime\n" + "1\n" + - ""+weekDay+"\n" + + "" + weekDay + "\n" + "\n" + "\n" + "\n" + - ""+startTime+"\n" + - ""+endTime+"\n" + + "" + startTime + "\n" + + "" + endTime + "\n" + "\n" + "\n" + "\n" + diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java index 210a2b8..b779453 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java @@ -87,10 +87,10 @@ public class HttpUtil { return result; } - public static boolean uploadImgs(String filePath, String card , String name, String deviceId, String startTime, - String endTime, int validTimeEnabled, String userType){ + public static boolean uploadImgs(String filePath, String card, String name, String deviceId, String startTime, + String endTime, int validTimeEnabled, String userType) { - if (!new File(filePath).exists()){ + if (!new File(filePath).exists()) { System.out.println("图片不存在"); return false; } @@ -105,31 +105,31 @@ public class HttpUtil { headers.setContentType(mediaType); - MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); + MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); FileSystemResource fileSystemResource = new FileSystemResource(filePath); - multivaluedMap.add("file",fileSystemResource); - multivaluedMap.add("deviceId",deviceId); - multivaluedMap.add("card",card); - multivaluedMap.add("name",name); - multivaluedMap.add("startTime",startTime); - multivaluedMap.add("endTime",endTime); - multivaluedMap.add("validTimeEnabled",validTimeEnabled); - multivaluedMap.add("userType",userType); + multivaluedMap.add("file", fileSystemResource); + multivaluedMap.add("deviceId", deviceId); + multivaluedMap.add("card", card); + multivaluedMap.add("name", name); + multivaluedMap.add("startTime", startTime); + multivaluedMap.add("endTime", endTime); + multivaluedMap.add("validTimeEnabled", validTimeEnabled); + multivaluedMap.add("userType", userType); - HttpEntity> httpEntity = new HttpEntity<>(multivaluedMap,headers); + HttpEntity> httpEntity = new HttpEntity<>(multivaluedMap, headers); - ResponseEntity responseEntity = restTemplate.postForEntity(url,httpEntity, String.class); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); - System.out.println("responseEntity:"+responseEntity.getBody()); + System.out.println("responseEntity:" + responseEntity.getBody()); return responseEntity.getBody().equals("1"); } - public static boolean IsDeviceOnline(String deviceId){ + public static boolean IsDeviceOnline(String deviceId) { - String url = "http://120.26.116.253:8089/file/IsDeviceOnline?deviceId="+deviceId; + String url = "http://120.26.116.253:8089/file/IsDeviceOnline?deviceId=" + deviceId; RestTemplate restTemplate = new RestTemplate(); @@ -137,29 +137,29 @@ public class HttpUtil { // map.put("deviceId",deviceId); - String res = restTemplate.getForObject(url,String.class); + String res = restTemplate.getForObject(url, String.class); return res.equals("1"); } - public static boolean deleteCard(String deviceId, String card){ + public static boolean deleteCard(String deviceId, String card) { - String url = "http://120.26.116.253:8089/file/DeleteCard?deviceId="+deviceId+"&card="+card; + String url = "http://120.26.116.253:8089/file/DeleteCard?deviceId=" + deviceId + "&card=" + card; RestTemplate restTemplate = new RestTemplate(); - String res = restTemplate.getForObject(url,String.class); + String res = restTemplate.getForObject(url, String.class); return res.equals("1"); } - public static boolean getCard(String deviceId, String card){ + public static boolean getCard(String deviceId, String card) { - String url = "http://120.26.116.253:8089/file/getCard?deviceId="+deviceId+"&card="+card; + String url = "http://120.26.116.253:8089/file/getCard?deviceId=" + deviceId + "&card=" + card; RestTemplate restTemplate = new RestTemplate(); // String res = restTemplate.getForObject(url,String.class,map); - return restTemplate.getForObject(url,String.class).equals("1"); + return restTemplate.getForObject(url, String.class).equals("1"); } } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ImageUtils.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ImageUtils.java index 5b2cea8..316a6ce 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ImageUtils.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/ImageUtils.java @@ -16,7 +16,7 @@ import java.util.Iterator; public class ImageUtils { - /* *//** + /* *//** * 获取图片正确显示需要旋转的角度(顺时针) * @return *//* @@ -57,37 +57,38 @@ public class ImageUtils { /** * 获得图片调整角度 * make by dongxh 2017年11月1日下午3:40:20 + * * @param imgFile * @return */ - public static Integer getImgRotateAngle(String imgFile){ + public static Integer getImgRotateAngle(String imgFile) { Integer angel = 0; Metadata metadata = null; - try{ - if(StringUtils.isBlank(imgFile))return angel; + try { + if (StringUtils.isBlank(imgFile)) return angel; File _img_file_ = new File(imgFile); - if(!_img_file_.exists())return angel; + if (!_img_file_.exists()) return angel; metadata = JpegMetadataReader.readMetadata(_img_file_); Directory directory = metadata.getDirectory(ExifDirectory.class); - Iterator iterator =directory.getTagIterator(); - while (iterator.hasNext()){ - System.out.println("directory:"+iterator.next().toString()); + Iterator iterator = directory.getTagIterator(); + while (iterator.hasNext()) { + System.out.println("directory:" + iterator.next().toString()); } - if(directory != null && directory.containsTag(ExifDirectory.TAG_ORIENTATION)){ + if (directory != null && directory.containsTag(ExifDirectory.TAG_ORIENTATION)) { int orientation = directory.getInt(ExifDirectory.TAG_ORIENTATION); // 原图片的方向信息 - if(6 == orientation ){ + if (6 == orientation) { //6旋转90 angel = 90; - }else if( 3 == orientation){ + } else if (3 == orientation) { //3旋转180 angel = 180; - }else if( 8 == orientation){ + } else if (8 == orientation) { //8旋转90 angel = 270; } } - }catch(Exception e){ + } catch (Exception e) { e.printStackTrace(); } return angel; @@ -95,9 +96,10 @@ public class ImageUtils { /** * 旋转照片 + * * @return */ - public static String rotatePhonePhoto(String fullPath, int angel){ + public static String rotatePhonePhoto(String fullPath, int angel) { BufferedImage src; try { @@ -105,17 +107,17 @@ public class ImageUtils { int src_width = src.getWidth(null); int src_height = src.getHeight(null); - int swidth=src_width; - int sheight=src_height; + int swidth = src_width; + int sheight = src_height; - if(angel==90||angel==270){ + if (angel == 90 || angel == 270) { swidth = src_height; - sheight= src_width; + sheight = src_width; } - Rectangle rect_des = new Rectangle(new Dimension(swidth,sheight)); + Rectangle rect_des = new Rectangle(new Dimension(swidth, sheight)); - BufferedImage res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB); + BufferedImage res = new BufferedImage(rect_des.width, rect_des.height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = res.createGraphics(); g2.translate((rect_des.width - src_width) / 2, diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/SendRecoderUtils.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/SendRecoderUtils.java index f7f9758..36de560 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/SendRecoderUtils.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/SendRecoderUtils.java @@ -62,9 +62,9 @@ public class SendRecoderUtils { sendRecordDao.addFaceSuccess(customerId, deviceId, resultCard, studentBean.getName(), time, schoolName, faceUrl, studentBean.getSchool_id(), Integer.parseInt(userType), 18); } else { - sendRecordDao.updateFaceSuccess(deviceId, resultCard, time, faceUrl,studentBean.getName(),customerId); + sendRecordDao.updateFaceSuccess(deviceId, resultCard, time, faceUrl, studentBean.getName(), customerId); } - FileUtils.getInstance().writeLogs(studentBean.toString()+"\r\n"+resultCard,"下发成功记录"); + FileUtils.getInstance().writeLogs(studentBean.toString() + "\r\n" + resultCard, "下发成功记录"); //删除下发失败表中的数据 sendRecordDao.deleteFaceFail(resultCard, deviceId); } else { diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java index 1ef5ecd..6e0bce2 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java @@ -34,7 +34,6 @@ public interface SendRecordDao { List getSenSuccesss(@Param("deviceID") String clint_id, @Param("schoolId") String schoolId); - @Insert("insert into Face_SendFail values(#{deviceID},#{customerid},#{num},#{name},#{time},#{schoolName},#{imgPath},#{schoolId},#{failContent},#{failType},#{userType},#{deviceType})") void addFaceFail(@Param("customerid") String customerid, @Param("deviceID") String deviceID, @Param("num") String num, @Param("name") String name, @Param("time") String time, @Param("schoolName") String schoolName, @Param("imgPath") String imgPath, @Param("schoolId") int schoolId, @Param("failContent") String failContent, @@ -42,7 +41,7 @@ public interface SendRecordDao { @Select("select * from Face_SendFail where schoolId = #{schoolId} and usertype = #{usertype}") - List getSenFail(@Param("schoolId")String schoolId,@Param("usertype")int usertype); + List getSenFail(@Param("schoolId") String schoolId, @Param("usertype") int usertype); @Select("select a.customerID from [dbo].[WG_SendFail] a inner join DBlan137.smartcampus.dbo.SZ_AttendanceDto b on a.deviceID=b.clint_id and b.isConnection=1 order by createTime desc") @@ -68,19 +67,19 @@ public interface SendRecordDao { List getSuccessIsExitStu(@Param("deviceID") String deviceId, @Param("Num") String card); @Update("update Face_SendSuccess set time = #{time},imgPath= #{faceUrl},Name = #{Name},customerid = #{customerid} where deviceID = #{deviceID} and Num = #{Num}") - void updateFaceSuccess(@Param("deviceID") String deviceId, @Param("Num") String card, @Param("time") String time,@Param("faceUrl")String faceUrl,@Param("Name")String name,@Param("customerid")String customerid); + void updateFaceSuccess(@Param("deviceID") String deviceId, @Param("Num") String card, @Param("time") String time, @Param("faceUrl") String faceUrl, @Param("Name") String name, @Param("customerid") String customerid); @Update("update Face_SendFail set time = #{time},failContent = #{content} where deviceID = #{deviceID} and Num =#{Num}") - void updateFaceFail(@Param("deviceID") String deviceId, @Param("Num") String card, @Param("time") String time,@Param("content")String content); + void updateFaceFail(@Param("deviceID") String deviceId, @Param("Num") String card, @Param("time") String time, @Param("content") String content); //获取成功表和失败人脸表中都存在的数据 @Select("select a.deviceID,a.Num,a.Name from Face_SendFail a inner join Face_SendSuccess b on a.deviceID = b.deviceID where a.schoolId = 1030 and a.num = b.Num") List getSuccessAndFail(); - @Insert("insert into Face_Recoder values(#{deviceId},#{user_id},#{name},#{imgurl},#{inOrOut},#{time},#{cardNum})") - void addFaceRecoder(@Param("deviceId") String deviceId, @Param("user_id")String user_id, @Param("name")String name, - @Param("imgurl")String imgurl, @Param("inOrOut")int inOrOut, @Param("time")String time, - @Param("cardNum")String cardNum); + @Insert("insert into Face_Recoder values(#{deviceId},#{user_id},#{name},#{imgurl},#{inOrOut},#{time},#{cardNum},#{temp})") + void addFaceRecoder(@Param("deviceId") String deviceId, @Param("user_id") String user_id, @Param("name") String name, + @Param("imgurl") String imgurl, @Param("inOrOut") int inOrOut, @Param("time") String time, + @Param("cardNum") String cardNum, @Param("temp") String currTemperature); @Select("select *\n" + "from SZ_CreditCardRecordsSS201911\n" + @@ -94,7 +93,7 @@ public interface SendRecordDao { "where school_id = 479\n" + " and intime > '2019-11-21 20:19'\n" + " and intime < '2019-11-21 22:41' and customerId = #{customerId}") - List getARecords(@Param("customerId")String customerId); + List getARecords(@Param("customerId") String customerId); @Select("select DISTINCT customerId\n" + "from SZ_AttendanceRecordsSS201911\n" + @@ -107,11 +106,16 @@ public interface SendRecordDao { @Insert("insert into SZ_AttendanceRecordsSS201911 values(#{user_id},#{school_id},#{customerId},#{usertype},#{card_num},#{card_type},#{outof},#{intime},#{cid}," + "#{func_no},#{head_image},#{classId},#{s},#{attendance_id},#{name},#{mobile},#{class_name},#{sex},#{student_type},#{systime})") int addAttenRecodrds(@Param("user_id") String user_id, @Param("school_id") String school_id, @Param("customerId") String customerId, - @Param("usertype") String usertype, @Param("card_num") String card_num, @Param("card_type") String card_type, - @Param("outof") String outof, @Param("intime") String intime, @Param("cid") String cid, @Param("func_no") String func_no, - @Param("head_image") String head_image, @Param("classId") String classId, @Param("s") String s, @Param("attendance_id") String attendance_id, - @Param("name") String name,@Param("mobile")String mobile, @Param("class_name") String class_name, @Param("sex") String sex, @Param("student_type") String student_type, @Param("systime") String systime); + @Param("usertype") String usertype, @Param("card_num") String card_num, @Param("card_type") String card_type, + @Param("outof") String outof, @Param("intime") String intime, @Param("cid") String cid, @Param("func_no") String func_no, + @Param("head_image") String head_image, @Param("classId") String classId, @Param("s") String s, @Param("attendance_id") String attendance_id, + @Param("name") String name, @Param("mobile") String mobile, @Param("class_name") String class_name, @Param("sex") String sex, @Param("student_type") String student_type, @Param("systime") String systime); @Delete("delete SZ_AttendanceRecordsSS201911 where customerId = #{customerId} and systime = #{systime}") void deleteARecords(@Param("customerId") String customerId, @Param("systime") String systime); + + + @Select("select * from Face_SendSuccess where schoolId = 4 and time < '2020-05-06'") + List getFaceSendSucess(); + } diff --git a/cloud/haikangface/src/main/resources/adminmapper/adminmapper.xml b/cloud/haikangface/src/main/resources/adminmapper/adminmapper.xml index 29c8e0c..4e29214 100644 --- a/cloud/haikangface/src/main/resources/adminmapper/adminmapper.xml +++ b/cloud/haikangface/src/main/resources/adminmapper/adminmapper.xml @@ -3,10 +3,10 @@ - - - - + + + + diff --git a/cloud/haikangface/src/main/resources/application.yaml b/cloud/haikangface/src/main/resources/application.yaml index bf9ab9a..14d4e04 100644 --- a/cloud/haikangface/src/main/resources/application.yaml +++ b/cloud/haikangface/src/main/resources/application.yaml @@ -10,10 +10,10 @@ spring: password: RQminVCJota3H1u8bBYH jdbc-url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver -# username: SZJXTUSER -# password: xst200919 -# jdbc-url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ -# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + # username: SZJXTUSER + # password: xst200919 + # jdbc-url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ + # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver xiaoan: jdbc-url: jdbc:sqlserver://116.62.241.27:33419;database=xiaoanhxy username: szjxtuser @@ -57,6 +57,7 @@ ip: localhost attendanceHost: http://campus.myjxt.com/ +iscurl: https://60.12.93.221:443 #服务器上的映射文件夹 diff --git a/cloud/haikangface/src/main/resources/mapper/devicemapper.xml b/cloud/haikangface/src/main/resources/mapper/devicemapper.xml index 635473a..28a8312 100644 --- a/cloud/haikangface/src/main/resources/mapper/devicemapper.xml +++ b/cloud/haikangface/src/main/resources/mapper/devicemapper.xml @@ -2,11 +2,11 @@ - + - - - - + + + + diff --git a/cloud/haikangface/src/main/resources/mapper/usermapper.xml b/cloud/haikangface/src/main/resources/mapper/usermapper.xml index 8558e7c..b154482 100644 --- a/cloud/haikangface/src/main/resources/mapper/usermapper.xml +++ b/cloud/haikangface/src/main/resources/mapper/usermapper.xml @@ -3,10 +3,10 @@ - - - - + + + + diff --git a/cloud/haikangface/src/main/resources/mybatis-config.xml b/cloud/haikangface/src/main/resources/mybatis-config.xml index 595ed53..55dfbbc 100644 --- a/cloud/haikangface/src/main/resources/mybatis-config.xml +++ b/cloud/haikangface/src/main/resources/mybatis-config.xml @@ -4,25 +4,25 @@ "http://mybatis.org/dtd/mybatis-3-config.dtd"> - - + + - + - + - + - + - + - + - + diff --git a/cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml b/cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml index 8d10d26..b93634e 100644 --- a/cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml +++ b/cloud/haikangface/src/main/resources/xiaoanmapper/usermapper.xml @@ -3,10 +3,10 @@ - - - - + + + + diff --git a/cloud/haikangface/src/test/java/com/sincere/haikangface/HaikangfaceApplicationTests.java b/cloud/haikangface/src/test/java/com/sincere/haikangface/HaikangfaceApplicationTests.java index 5ae5a3b..9c130dd 100644 --- a/cloud/haikangface/src/test/java/com/sincere/haikangface/HaikangfaceApplicationTests.java +++ b/cloud/haikangface/src/test/java/com/sincere/haikangface/HaikangfaceApplicationTests.java @@ -57,6 +57,37 @@ public class HaikangfaceApplicationTests { @Test public void contextLoads() { + /*List sendRecordBeans = sendRecordDao.getFaceSendSucess(); + RestTemplate restTemplate = new RestTemplate(); + String baseUrl = "http://114.55.30.100:8089/facereco/sendFaceToDevices"; + System.out.println("下发人数:"+sendRecordBeans.size()); + for (int i = 0; i < sendRecordBeans.size(); i++) { + SendRecordBean sendRecordBean = sendRecordBeans.get(i); + + int userType = sendRecordBean.getUserType(); +// System.out.println("sendRecordBean:"+sendRecordBean.toString()); + if (userType==1){ + StudentBean studentBean = userDao.getTeacherWithCard(sendRecordBeans.get(i).getNum()); + if (null!=studentBean&&!StringUtils.isEmpty(studentBean.getFace())&&!sendRecordBean.getDeviceID().equals("szzjzx025604")){ + String file = studentBean.getFace().replace("http://campus.myjxt.com","E://wwwhtdocs//SmartCampus"); + String url = String.format(baseUrl+"?card=%s&deviceIds=%s&file=%s&name=%s&userType=%s",studentBean.getTeacher_num(), + sendRecordBeans.get(i).getDeviceID(),file,studentBean.getName(),userType+""); + ResponseEntity responseEntity = restTemplate.getForEntity(url,String.class); + System.out.println(responseEntity.getBody()); + } + }else if (userType ==2){ + StudentBean studentBean = userDao.getStudentWithCard(sendRecordBeans.get(i).getNum()); + if (null!=studentBean&&!StringUtils.isEmpty(studentBean.getPhoto())&&!sendRecordBean.getDeviceID().equals("szzjzx025604")){ + String file = studentBean.getPhoto().replace("http://campus.myjxt.com","E://wwwhtdocs//SmartCampus"); + String url = String.format(baseUrl+"?card=%s&deviceIds=%s&file=%s&name=%s&userType=%s",studentBean.getStudent_num(), + sendRecordBeans.get(i).getDeviceID(),file,studentBean.getName(),userType+""); + ResponseEntity responseEntity = restTemplate.getForEntity(url,String.class); + System.out.println(responseEntity.getBody()); + } + } + + }*/ + } @@ -73,7 +104,6 @@ public class HaikangfaceApplicationTests { public void send() { - // List virCards = userDao.getVirCards(); // List userIds = userDao.getUserids(); // for (int i = 0; i < virCards.size(); i++) { @@ -264,7 +294,7 @@ public class HaikangfaceApplicationTests { @Test public void fileRes() { - File filebianhao = new File("C:\\Users\\Administrator\\Desktop\\中专照片汇总200204\\bianhao.txt"); + /*File filebianhao = new File("C:\\Users\\Administrator\\Desktop\\中专照片汇总200204\\bianhao.txt"); File filecard = new File("C:\\Users\\Administrator\\Desktop\\中专照片汇总200204\\card.txt"); try { @@ -337,7 +367,7 @@ public class HaikangfaceApplicationTests { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); - } + }*/ } diff --git a/cloud/independence/src/main/java/com/sincere/independence/Swagger2.java b/cloud/independence/src/main/java/com/sincere/independence/Swagger2.java index d87d7c9..1f9111c 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/Swagger2.java +++ b/cloud/independence/src/main/java/com/sincere/independence/Swagger2.java @@ -16,7 +16,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; public class Swagger2 { @Bean - public Docket createRestApi() { + public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enableUrlTemplating(true) @@ -27,12 +27,13 @@ public class Swagger2 { .build(); } - private ApiInfo apiInfo() { + + private ApiInfo apiInfo() { return new ApiInfoBuilder() - .title("Spring Boot中使用Swagger2构建RESTful APIs") - .description("接口文档") - .termsOfServiceUrl("") + .title("Spring Boot中使用Swagger2构建RESTful APIs") + .description("接口文档") + .termsOfServiceUrl("") .version("1.0") - .build(); - } + .build(); + } } diff --git a/cloud/independence/src/main/java/com/sincere/independence/controller/LearnController.java b/cloud/independence/src/main/java/com/sincere/independence/controller/LearnController.java index f3ae6ca..80f0cdd 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/controller/LearnController.java +++ b/cloud/independence/src/main/java/com/sincere/independence/controller/LearnController.java @@ -38,24 +38,24 @@ public class LearnController { @ApiOperation("获取列表") @RequestMapping(value = "getList", method = RequestMethod.POST) - public List getList(){ - return independenceFeign.getList(new AnalyseDto()); + public List getList() { + return independenceFeign.getList(new AnalyseDto()); } @ApiOperation("获取详情,微信入口") @RequestMapping(value = "getDetail", method = RequestMethod.GET) - public List getAnalyseId(String grade , String schoolName){ + public List getAnalyseId(String grade, String schoolName) { List result = new ArrayList<>(); AnalyseDto search = new AnalyseDto(); String[] msg = grade.split(","); - for(String gradeMsg : msg){ - search.setGrade(initGrade(gradeMsg,schoolName)); + for (String gradeMsg : msg) { + search.setGrade(initGrade(gradeMsg, schoolName)); List analyseList = independenceFeign.getList(search); - if(analyseList != null && analyseList.size() > 0){ - for(AnalyseDto analyse :analyseList){ + if (analyseList != null && analyseList.size() > 0) { + for (AnalyseDto analyse : analyseList) { List leagues = independenceFeign.getLeagueByAnalyse(analyse.getId()); - for(LeagueDto league : leagues){ - if(league.getSchoolName() != null && league.getSchoolName().equals(schoolName)){ + for (LeagueDto league : leagues) { + if (league.getSchoolName() != null && league.getSchoolName().equals(schoolName)) { result.add(analyse); break; } @@ -63,68 +63,68 @@ public class LearnController { } } } - if(result.size() == 0){ + if (result.size() == 0) { AnalyseDto searchAnalyse = new AnalyseDto(); searchAnalyse.setExamName("顺治中学模拟考试"); List analyseList = independenceFeign.getList(searchAnalyse); - if(analyseList != null && analyseList.size() > 0){ + if (analyseList != null && analyseList.size() > 0) { result.add(analyseList.get(0)); } } - return result ; + return result; } - private String initGrade(String grade , String schoolName){ - String result = null ; - if(schoolName.equals("绍兴市越城区皋埠中学")){ - if(grade.equals("2019级初中一年级")){ - result = "七年级" ; + private String initGrade(String grade, String schoolName) { + String result = null; + if (schoolName.equals("绍兴市越城区皋埠中学")) { + if (grade.equals("2019级初中一年级")) { + result = "七年级"; } - if(grade.equals("2017级初中三年级")){ - result = "九年级" ; + if (grade.equals("2017级初中三年级")) { + result = "九年级"; } } - if(schoolName.equals("绍兴市建功中学")){ - if(grade.equals("2019级初中一年级")){ - result = "七年级" ; + if (schoolName.equals("绍兴市建功中学")) { + if (grade.equals("2019级初中一年级")) { + result = "七年级"; } - if(grade.equals("2017级初中三年级")){ - result = "九年级" ; + if (grade.equals("2017级初中三年级")) { + result = "九年级"; } } - if(schoolName.equals("绍兴长城中学")){ - if(grade.equals("2019级初中一年级")){ - result = "七年级" ; + if (schoolName.equals("绍兴长城中学")) { + if (grade.equals("2019级初中一年级")) { + result = "七年级"; } - if(grade.equals("2017级初中三年级")){ - result = "九年级" ; + if (grade.equals("2017级初中三年级")) { + result = "九年级"; } } - if(schoolName.equals("绍兴市文澜中学")){ - if(grade.equals("2019级初中一年级")){ - result = "七年级" ; + if (schoolName.equals("绍兴市文澜中学")) { + if (grade.equals("2019级初中一年级")) { + result = "七年级"; } - if(grade.equals("2017级初中三年级")){ - result = "九年级" ; + if (grade.equals("2017级初中三年级")) { + result = "九年级"; } } - if(schoolName.equals("绍兴文理学院附属中学(慧)")){ - if(grade.equals("2019级初中一年级")){ - result = "七年级" ; + if (schoolName.equals("绍兴文理学院附属中学(慧)")) { + if (grade.equals("2019级初中一年级")) { + result = "七年级"; } - if(grade.equals("2017级初中三年级")){ - result = "九年级" ; + if (grade.equals("2017级初中三年级")) { + result = "九年级"; } } - if(result == null){ - result = grade ; + if (result == null) { + result = grade; } - return result ; + return result; } @ApiOperation("创建考试") @RequestMapping(value = "createExam", method = RequestMethod.POST) - public BaseVo createExam(@RequestBody CreateExamReqVo createExamReqVo){ + public BaseVo createExam(@RequestBody CreateExamReqVo createExamReqVo) { AnalyseDto analyse = new AnalyseDto(); analyse.setCourseName(createExamReqVo.getCourseName()); analyse.setExamName(createExamReqVo.getExamName()); @@ -136,10 +136,10 @@ public class LearnController { @ApiOperation("更新考试信息") @RequestMapping(value = "updateExam", method = RequestMethod.POST) - public BaseVo updateExam(@RequestBody UpdateExamReqVo updateExamReqVo){ + public BaseVo updateExam(@RequestBody UpdateExamReqVo updateExamReqVo) { BaseVo baseVo = new BaseVo(); AnalyseDto analyse = independenceFeign.selectById(updateExamReqVo.getAnalyseId()); - if(analyse == null){ + if (analyse == null) { baseVo.setMessage("考试不存在"); baseVo.setSuccess(false); return baseVo; @@ -153,22 +153,22 @@ public class LearnController { @ApiOperation("试卷信息导入") @RequestMapping(value = "initAnalyse", method = RequestMethod.POST) - public BaseVo initAnalyse(@RequestBody InitAnalyseReqVo initAnalyseReqVo){ + public BaseVo initAnalyse(@RequestBody InitAnalyseReqVo initAnalyseReqVo) { BaseVo baseVo = new BaseVo(); AnalyseDto analyse = independenceFeign.selectById(initAnalyseReqVo.getAnalyseId()); List analyseDetails = independenceFeign.isImportExam(analyse.getId()); - if(analyseDetails != null & analyseDetails.size() > 0){ + if (analyseDetails != null & analyseDetails.size() > 0) { baseVo.setMessage("已经导入"); baseVo.setSuccess(false); - }else { + } else { RedisUtils.flushAll(); analysisExcel(initAnalyseReqVo); } return baseVo; } - private void analysisExcel(InitAnalyseReqVo initAnalyseReqVo){ - try{ + private void analysisExcel(InitAnalyseReqVo initAnalyseReqVo) { + try { List analyseDetails = new ArrayList<>(); List analyseDimensionals = new ArrayList<>(); Float maxScore = 0f; @@ -177,9 +177,9 @@ public class LearnController { // 获得工作簿 String file = excelFile.getName(); Workbook workbook = null; - InputStream inputStream = new FileInputStream(excelFile) ; + InputStream inputStream = new FileInputStream(excelFile); //InputStream inputStream = HttpClientUtils.GetFileInputStream(initAnalyseReqVo.getUrl()); - if(inputStream == null){ + if (inputStream == null) { return; } if (file.endsWith("xls")) { @@ -197,18 +197,18 @@ public class LearnController { if (i == 0) { //获取标题 String title = sheetRow.getCell(0).getStringCellValue().trim(); - }else if(i == 1){ + } else if (i == 1) { //获取表头 } else { ExamExcelVo examExcelVo = new ExamExcelVo(sheetRow); - if(examExcelVo.getScore() != null){ + if (examExcelVo.getScore() != null) { maxScore = maxScore + new Float(examExcelVo.getScore()); AnalyseDetailDto analyseDetail = new AnalyseDetailDto(); - String questionNumber = null ; - if(StringUtils.isNotBlank(examExcelVo.getQuestionSmallNumber())){ - questionNumber = examExcelVo.getQuestionNumber()+"("+examExcelVo.getQuestionSmallNumber()+")"; - }else { - questionNumber = examExcelVo.getQuestionNumber() ; + String questionNumber = null; + if (StringUtils.isNotBlank(examExcelVo.getQuestionSmallNumber())) { + questionNumber = examExcelVo.getQuestionNumber() + "(" + examExcelVo.getQuestionSmallNumber() + ")"; + } else { + questionNumber = examExcelVo.getQuestionNumber(); } analyseDetail.setQuestionNumber(questionNumber); analyseDetail.setAnalyseId(analyse.getId()); @@ -217,10 +217,10 @@ public class LearnController { analyseDetail.setScore(new Double(examExcelVo.getScore())); analyseDetail.setCreateTime(date); analyseDetails.add(analyseDetail); - initAnalyseDimensional(analyse,questionNumber,examExcelVo.getScore(),examExcelVo.getKnowledge(), DimensionalEnums.knowledge.getDimensionalType(),analyseDimensionals); - initAnalyseDimensional(analyse,questionNumber,examExcelVo.getScore(),examExcelVo.getAbility(),DimensionalEnums.ability.getDimensionalType(),analyseDimensionals); - initAnalyseDimensional(analyse,questionNumber,examExcelVo.getScore(),examExcelVo.getSkill(),DimensionalEnums.skill.getDimensionalType(),analyseDimensionals); - initAnalyseDimensional(analyse,questionNumber,examExcelVo.getScore(),examExcelVo.getThink(),DimensionalEnums.think.getDimensionalType(),analyseDimensionals); + initAnalyseDimensional(analyse, questionNumber, examExcelVo.getScore(), examExcelVo.getKnowledge(), DimensionalEnums.knowledge.getDimensionalType(), analyseDimensionals); + initAnalyseDimensional(analyse, questionNumber, examExcelVo.getScore(), examExcelVo.getAbility(), DimensionalEnums.ability.getDimensionalType(), analyseDimensionals); + initAnalyseDimensional(analyse, questionNumber, examExcelVo.getScore(), examExcelVo.getSkill(), DimensionalEnums.skill.getDimensionalType(), analyseDimensionals); + initAnalyseDimensional(analyse, questionNumber, examExcelVo.getScore(), examExcelVo.getThink(), DimensionalEnums.think.getDimensionalType(), analyseDimensionals); } } } @@ -228,18 +228,18 @@ public class LearnController { independenceFeign.insertBatchAnalyseDimensional(analyseDimensionals); analyse.setMaxScore(new Double(maxScore)); independenceFeign.updateAnalyse(analyse); - }catch (Exception e){ - e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); } } - private void initAnalyseDimensional(AnalyseDto analyse ,String questionNumber , String score , String dimensionalMessage , int dimensionalType , List analyseDimensionals){ - if(StringUtils.isNotBlank(dimensionalMessage)){ - String[] message =dimensionalMessage.split("、"); - for (int j = 0; j < message.length ; j++) { - if(StringUtils.isNotBlank(message[j])){ + private void initAnalyseDimensional(AnalyseDto analyse, String questionNumber, String score, String dimensionalMessage, int dimensionalType, List analyseDimensionals) { + if (StringUtils.isNotBlank(dimensionalMessage)) { + String[] message = dimensionalMessage.split("、"); + for (int j = 0; j < message.length; j++) { + if (StringUtils.isNotBlank(message[j])) { //查数据库是否已存在该四维诊断 不存在则导入 - int dimensionalId = independenceFeign.selectDimensional(dimensionalType,message[j]); + int dimensionalId = independenceFeign.selectDimensional(dimensionalType, message[j]); AnalyseDimensionalDto analyseDimensional = new AnalyseDimensionalDto(); analyseDimensional.setAnalyseId(analyse.getId()); analyseDimensional.setDimensionalId(dimensionalId); @@ -254,32 +254,32 @@ public class LearnController { @ApiOperation("考生成绩导入") @RequestMapping(value = "initScore", method = RequestMethod.POST) - public BaseVo initScore(@RequestBody InitScoreReqVo initScoreReqVo){ + public BaseVo initScore(@RequestBody InitScoreReqVo initScoreReqVo) { BaseVo baseVo = new BaseVo(); boolean success = analysisScoreExcel(initScoreReqVo); - if(!success){ + if (!success) { baseVo.setSuccess(false); baseVo.setMessage("一个学校不能在两个联盟下"); } return baseVo; } - private boolean analysisScoreExcel(InitScoreReqVo initScoreReqVo){ - try{ + private boolean analysisScoreExcel(InitScoreReqVo initScoreReqVo) { + try { AnalyseDto analyse = independenceFeign.selectById(initScoreReqVo.getAnalyseId()); List analyseDetails = independenceFeign.isImportExam(analyse.getId()); - Map scoreMap = new HashMap<>(); - for(AnalyseDetailDto analyseDetail : analyseDetails){ - scoreMap.put(analyseDetail.getQuestionNumber(),analyseDetail.getScore()); + Map scoreMap = new HashMap<>(); + for (AnalyseDetailDto analyseDetail : analyseDetails) { + scoreMap.put(analyseDetail.getQuestionNumber(), analyseDetail.getScore()); } File excelFile = new File(initScoreReqVo.getUrl()); // 获得工作簿 String file = excelFile.getName(); Workbook workbook = null; - InputStream inputStream = new FileInputStream(excelFile) ; + InputStream inputStream = new FileInputStream(excelFile); //InputStream inputStream = HttpClientUtils.GetFileInputStream(initScoreReqVo.getUrl()); - if(inputStream == null){ - return false ; + if (inputStream == null) { + return false; } if (file.endsWith("xls")) { workbook = new HSSFWorkbook(inputStream); @@ -287,107 +287,107 @@ public class LearnController { workbook = new XSSFWorkbook(inputStream); } // 获得工作表 - for(int number = 0 ; number < workbook.getNumberOfSheets() ; number++){ + for (int number = 0; number < workbook.getNumberOfSheets(); number++) { Sheet sheet = workbook.getSheetAt(number); List studentDetails = new ArrayList<>(); List students = new ArrayList<>(); Date date = new Date(); int rows = sheet.getPhysicalNumberOfRows(); - Map map = new HashMap<>(); - int column = 0 ; + Map map = new HashMap<>(); + int column = 0; for (int i = 0; i < rows; i++) { // 获取第i行数据 Row sheetRow = sheet.getRow(i); if (i == 0) { //获取标题 - }else if(i == 1){ + } else if (i == 1) { //获取表头 - int j = 7 ; - while (sheetRow.getCell(j) != null){ + int j = 7; + while (sheetRow.getCell(j) != null) { Cell cell = sheetRow.getCell(j); cell.setCellType(CellType.STRING); - map.put(j,cell.getStringCellValue().trim().replace("(","(").replace(")",")")); + map.put(j, cell.getStringCellValue().trim().replace("(", "(").replace(")", ")")); j++; } - column = j ; + column = j; } else { ScoreExcelVo scoreExcelVo = new ScoreExcelVo(sheetRow); - if(StringUtils.isNotBlank(scoreExcelVo.getStudentName())){ - StudentDto student = initStudent(scoreExcelVo); - student.setAnalyseId(analyse.getId()); - student.setCreateTime(date); - students.add(student); - for(int j = 7 ; j < column ; j++){ - Cell cell = sheetRow.getCell(j); - StudentDetailDto studentDetail = initStudentDetail(scoreExcelVo); - studentDetail.setAnalyseId(analyse.getId()); - studentDetail.setExamNumber(map.get(j)); - studentDetail.setScore(new Double(cell.getNumericCellValue())); - Double score = scoreMap.get((map.get(j))) ; - Double studentScore = studentDetail.getScore() ; - if(Double.doubleToLongBits(score) == Double.doubleToLongBits(studentScore) ){ - studentDetail.setCorrect(1); - }else { - studentDetail.setCorrect(0); - } - studentDetail.setCreateTime(date); - studentDetails.add(studentDetail); - } - } + if (StringUtils.isNotBlank(scoreExcelVo.getStudentName())) { + StudentDto student = initStudent(scoreExcelVo); + student.setAnalyseId(analyse.getId()); + student.setCreateTime(date); + students.add(student); + for (int j = 7; j < column; j++) { + Cell cell = sheetRow.getCell(j); + StudentDetailDto studentDetail = initStudentDetail(scoreExcelVo); + studentDetail.setAnalyseId(analyse.getId()); + studentDetail.setExamNumber(map.get(j)); + studentDetail.setScore(new Double(cell.getNumericCellValue())); + Double score = scoreMap.get((map.get(j))); + Double studentScore = studentDetail.getScore(); + if (Double.doubleToLongBits(score) == Double.doubleToLongBits(studentScore)) { + studentDetail.setCorrect(1); + } else { + studentDetail.setCorrect(0); + } + studentDetail.setCreateTime(date); + studentDetails.add(studentDetail); + } + } } } - boolean flag = independenceFeign.initLeagueSchool(initScoreReqVo.getLeagueId(),students.get(0).getSchoolName()); - if(flag){ + boolean flag = independenceFeign.initLeagueSchool(initScoreReqVo.getLeagueId(), students.get(0).getSchoolName()); + if (flag) { independenceFeign.insertBatchStudent(students); independenceFeign.insertBatchStudentDetail(studentDetails); - return true ; - }else { - return false ; + return true; + } else { + return false; } } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); System.out.println(e.toString()); } - return false ; + return false; } - private StudentDto initStudent(ScoreExcelVo scoreExcelVo){ + private StudentDto initStudent(ScoreExcelVo scoreExcelVo) { StudentDto studentDto = new StudentDto(); studentDto.setSchoolName(scoreExcelVo.getSchoolName()); studentDto.setClassName(scoreExcelVo.getClassName()); studentDto.setStudentName(scoreExcelVo.getStudentName()); studentDto.setStudentNumber(scoreExcelVo.getStudentNumber()); studentDto.setScore(new Double(scoreExcelVo.getScore())); - return studentDto; + return studentDto; } - private StudentDetailDto initStudentDetail(ScoreExcelVo scoreExcelVo){ + private StudentDetailDto initStudentDetail(ScoreExcelVo scoreExcelVo) { StudentDetailDto studentDetailDto = new StudentDetailDto(); studentDetailDto.setSchoolName(scoreExcelVo.getSchoolName()); studentDetailDto.setClassName(scoreExcelVo.getClassName()); studentDetailDto.setStudentName(scoreExcelVo.getStudentName()); studentDetailDto.setStudentNumber(scoreExcelVo.getStudentNumber()); - return studentDetailDto ; + return studentDetailDto; } @ApiOperation("获取该次考试联盟学校信息") @RequestMapping(value = "getLeague", method = RequestMethod.GET) - public GetLeagueRepVo getLeague(int analyseId){ + public GetLeagueRepVo getLeague(int analyseId) { GetLeagueRepVo getLeagueRepVo = new GetLeagueRepVo(); List leagues = independenceFeign.getLeagueByAnalyse(analyseId); List getLeagues = new ArrayList<>(); - for(LeagueDto league : leagues){ - boolean isExist = false ; - for(GetLeague getLeague : getLeagues){ - if(getLeague.getLeagueName().equals(league.getLeague())){ - isExist = true ; + for (LeagueDto league : leagues) { + boolean isExist = false; + for (GetLeague getLeague : getLeagues) { + if (getLeague.getLeagueName().equals(league.getLeague())) { + isExist = true; List list = getLeague.getLeagues(); list.add(league); getLeague.setLeagues(list); } } - if(!isExist){ + if (!isExist) { GetLeague getLeague = new GetLeague(); getLeague.setLeagueName(league.getLeague()); List list = new ArrayList<>(); @@ -402,20 +402,20 @@ public class LearnController { @ApiOperation("创建联盟") @RequestMapping(value = "createLeague", method = RequestMethod.POST) - public BaseVo createLeague(@RequestBody CreateLeagueReqVo createLeagueReqVo){ + public BaseVo createLeague(@RequestBody CreateLeagueReqVo createLeagueReqVo) { BaseVo baseVo = new BaseVo(); LeagueDto league = new LeagueDto(); AnalyseDto analyse = independenceFeign.selectById(createLeagueReqVo.getAnalyseId()); league.setAnalyseId(analyse.getId()); league.setLeague(createLeagueReqVo.getLeague()); int id = independenceFeign.insertLeague(league); - baseVo.setMessage(id +""); + baseVo.setMessage(id + ""); return baseVo; } @ApiOperation("基础信息输入") @RequestMapping(value = "createChapter", method = RequestMethod.POST) - public BaseVo createChapter(@RequestBody ChapterReqVo chapterReqVo){ + public BaseVo createChapter(@RequestBody ChapterReqVo chapterReqVo) { BaseVo baseVo = new BaseVo(); AnalyseDto analyseDto = new AnalyseDto(); analyseDto.setId(chapterReqVo.getAnalyseId()); @@ -423,7 +423,7 @@ public class LearnController { analyseDto.setExamScope(chapterReqVo.getExamScope()); independenceFeign.updateAnalyse(analyseDto); List list = new ArrayList<>(); - for(ChapterReq chapterReq :chapterReqVo.getList()){ + for (ChapterReq chapterReq : chapterReqVo.getList()) { ChapterDto chapter = new ChapterDto(); chapter.setAnalyseId(chapterReqVo.getAnalyseId()); chapter.setChapterNumber(chapterReq.getChapterNumber()); @@ -437,7 +437,7 @@ public class LearnController { @ApiOperation("获取导入的学校列表") @RequestMapping(value = "getSchoolName", method = RequestMethod.GET) - public List getSchoolName(int analyseId){ + public List getSchoolName(int analyseId) { return independenceFeign.getSchoolName(analyseId); } } diff --git a/cloud/independence/src/main/java/com/sincere/independence/controller/LearnStatController.java b/cloud/independence/src/main/java/com/sincere/independence/controller/LearnStatController.java index 1cc256b..1854ded 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/controller/LearnStatController.java +++ b/cloud/independence/src/main/java/com/sincere/independence/controller/LearnStatController.java @@ -29,104 +29,104 @@ public class LearnStatController { @ApiOperation("getForm1_1") @RequestMapping(value = "getForm1_1", method = RequestMethod.POST) - public Form7RepVO getForm1_1(@RequestBody GetLearnDto getLearnDto){ + public Form7RepVO getForm1_1(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm1_1(getLearnDto); } @ApiOperation("getForm2_1_1") @RequestMapping(value = "getForm2_1_1", method = RequestMethod.POST) - public Form1RepVO getForm2_1_1(@RequestBody GetLearnDto getLearnDto){ + public Form1RepVO getForm2_1_1(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm2_1_1(getLearnDto); } @ApiOperation("getForm2_1_2") @RequestMapping(value = "getForm2_1_2", method = RequestMethod.POST) - public Form2RepVO getForm2_1_2(@RequestBody GetLearnDto getLearnDto){ + public Form2RepVO getForm2_1_2(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm2_1_2(getLearnDto); } @ApiOperation("getForm2_1_3_2") @RequestMapping(value = "getForm2_1_3_2", method = RequestMethod.POST) - public Form2RepVO getForm2_1_3_2(@RequestBody GetLearnDto getLearnDto){ + public Form2RepVO getForm2_1_3_2(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm2_1_3_2(getLearnDto); } @ApiOperation("getForm2_1_3") @RequestMapping(value = "getForm2_1_3", method = RequestMethod.POST) - public List getForm2_1_3(@RequestBody GetLearnDto getLearnDto){ + public List getForm2_1_3(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm2_1_3(getLearnDto); } @ApiOperation("getForm2_2_1") @RequestMapping(value = "getForm2_2_1", method = RequestMethod.POST) - public Form3RepVO getForm2_2_1(@RequestBody GetLearnDto getLearnDto){ - return independenceFeign.getForm2_2_1(getLearnDto); + public Form3RepVO getForm2_2_1(@RequestBody GetLearnDto getLearnDto) { + return independenceFeign.getForm2_2_1(getLearnDto); } @ApiOperation("getForm2_2_2") @RequestMapping(value = "getForm2_2_2", method = RequestMethod.POST) - public Form4RepVO getForm2_2_2(@RequestBody GetLearnDto getLearnDto){ + public Form4RepVO getForm2_2_2(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm2_2_2(getLearnDto); } @ApiOperation("getForm2_2_3") @RequestMapping(value = "getForm2_2_3", method = RequestMethod.POST) - public Form5RepVO getForm2_2_3(@RequestBody GetLearnDto getLearnDto){ + public Form5RepVO getForm2_2_3(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm2_2_3(getLearnDto); } @ApiOperation("getForm2_2_4") @RequestMapping(value = "getForm2_2_4", method = RequestMethod.POST) - public Form8RepVO getForm2_2_4(@RequestBody GetLearnDto getLearnDto){ + public Form8RepVO getForm2_2_4(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm2_2_4(getLearnDto); } @ApiOperation("getForm2_2_5") @RequestMapping(value = "getForm2_2_5", method = RequestMethod.POST) - public Map getForm2_2_5(@RequestBody GetLearnDto getLearnDto){ + public Map getForm2_2_5(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm2_2_5(getLearnDto); } @ApiOperation("getForm3_1") @RequestMapping(value = "getForm3_1", method = RequestMethod.POST) - public Form6RepVO getForm3_1(@RequestBody GetLearnDto getLearnDto){ + public Form6RepVO getForm3_1(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm3_1(getLearnDto); } @ApiOperation("getForm3_1_1") @RequestMapping(value = "getForm3_1_1", method = RequestMethod.POST) - public Table2RepVO getForm3_1_1(@RequestBody GetLearnDto getLearnDto){ + public Table2RepVO getForm3_1_1(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm3_1_1(getLearnDto); } @ApiOperation("getForm3_2") @RequestMapping(value = "getForm3_2", method = RequestMethod.POST) - public Form6RepVO getForm3_2(@RequestBody GetLearnDto getLearnDto){ + public Form6RepVO getForm3_2(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm3_2(getLearnDto); } @ApiOperation("getForm3_3") @RequestMapping(value = "getForm3_3", method = RequestMethod.POST) - public Form6RepVO getForm3_3(@RequestBody GetLearnDto getLearnDto){ + public Form6RepVO getForm3_3(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm3_3(getLearnDto); } @ApiOperation("getForm3_4") @RequestMapping(value = "getForm3_4", method = RequestMethod.POST) - public Form6RepVO getForm3_4(@RequestBody GetLearnDto getLearnDto){ + public Form6RepVO getForm3_4(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getForm3_4(getLearnDto); } @ApiOperation("获取教学改进建议") @RequestMapping(value = "getSuggest", method = RequestMethod.POST) - public String getSuggest(@RequestBody GetLearnDto getLearnDto){ + public String getSuggest(@RequestBody GetLearnDto getLearnDto) { return independenceFeign.getSuggest(getLearnDto); } @ApiOperation("获取教学改进建议") @RequestMapping(value = "getSuggest2", method = RequestMethod.POST) - public String getSuggest2(@RequestBody GetLearnDto getLearnDto){ - return independenceFeign.getSuggest2(getLearnDto); + public String getSuggest2(@RequestBody GetLearnDto getLearnDto) { + return independenceFeign.getSuggest2(getLearnDto); } } diff --git a/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleController.java b/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleController.java index 5d48fdc..2f44ac9 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleController.java +++ b/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleController.java @@ -22,49 +22,49 @@ public class ScheduleController { @ApiOperation("作息安排") @RequestMapping(value = "firstChoose", method = RequestMethod.POST) - public BaseVo firstChoose(@RequestBody FirstReqVo firstReqVo){ + public BaseVo firstChoose(@RequestBody FirstReqVo firstReqVo) { return independenceFeign.firstChoose(firstReqVo); } @ApiOperation("设置公共资源课,主课,副课") @RequestMapping(value = "setCourseType", method = RequestMethod.POST) - public BaseVo setCourseType(@RequestBody SetTypeReqVo setTypeReqVo){ + public BaseVo setCourseType(@RequestBody SetTypeReqVo setTypeReqVo) { return independenceFeign.setCourseType(setTypeReqVo); } @ApiOperation("合班") @RequestMapping(value = "joinClass", method = RequestMethod.POST) - public BaseVo joinClass(@RequestBody JoinClassReqVo joinClassReqVo){ + public BaseVo joinClass(@RequestBody JoinClassReqVo joinClassReqVo) { return independenceFeign.joinClass(joinClassReqVo); } @ApiOperation("删除某个合班信息") @RequestMapping(value = "deleteJoinClass", method = RequestMethod.POST) - public BaseVo deleteJoinClass(@RequestBody CourseGroupReqVo courseGroupReqVo){ + public BaseVo deleteJoinClass(@RequestBody CourseGroupReqVo courseGroupReqVo) { return independenceFeign.deleteJoinClass(courseGroupReqVo); } @ApiOperation("不排课") @RequestMapping(value = "noSchedule", method = RequestMethod.POST) - public BaseVo noSchedule(@RequestBody NoScheduleReqVo noScheduleReqVo){ + public BaseVo noSchedule(@RequestBody NoScheduleReqVo noScheduleReqVo) { return independenceFeign.noSchedule(noScheduleReqVo); } @ApiOperation("选择拟排科目类型,设置优先区间 提示") @RequestMapping(value = "secondChooseBefore", method = RequestMethod.POST) - public BaseVo secondChooseBefore(@RequestBody ParallelClassReqVo parallelClassReqVo){ + public BaseVo secondChooseBefore(@RequestBody ParallelClassReqVo parallelClassReqVo) { return independenceFeign.secondChooseBefore(parallelClassReqVo); } @ApiOperation("选择拟排科目类型,设置优先区间") @RequestMapping(value = "secondChoose", method = RequestMethod.POST) public BaseVo secondChoose(@RequestBody ParallelClassReqVo parallelClassReqVo) { - return independenceFeign.secondChoose(parallelClassReqVo); + return independenceFeign.secondChoose(parallelClassReqVo); } @ApiOperation("排课撤回") @RequestMapping(value = "recall", method = RequestMethod.POST) - public BaseVo recall(@RequestBody RecallReqVo recallReqVo){ + public BaseVo recall(@RequestBody RecallReqVo recallReqVo) { return independenceFeign.recall(recallReqVo); } } diff --git a/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java b/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java index 4b6be3c..f398c82 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java +++ b/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java @@ -19,21 +19,21 @@ import javax.servlet.http.HttpServletRequest; public class ScheduleInitController { @Autowired - IndependenceFeign independenceFeign ; + IndependenceFeign independenceFeign; @ApiOperation("创建排课计划 ") @RequestMapping(value = "createSchedule", method = RequestMethod.POST) - public ScheduleRepVo createSchedule(HttpServletRequest request){ + public ScheduleRepVo createSchedule(HttpServletRequest request) { ScheduleRepVo baseVo = new ScheduleRepVo(); String team = request.getParameter("team"); String scheduleName = request.getParameter("scheduleName"); int schoolId = Integer.valueOf(request.getParameter("schoolId")); - int id = independenceFeign.createSchedule(team,scheduleName,schoolId); - if(id > 0){ + int id = independenceFeign.createSchedule(team, scheduleName, schoolId); + if (id > 0) { baseVo.setScheduleId(id); baseVo.setSuccess(true); - }else { + } else { baseVo.setSuccess(false); } return baseVo; @@ -41,23 +41,23 @@ public class ScheduleInitController { @ApiOperation("更新计划") @RequestMapping(value = "updateSchedule", method = RequestMethod.POST) - public BaseVo updateSchedule(@RequestBody UpdateScheduleReqVo updateScheduleReqVo){ + public BaseVo updateSchedule(@RequestBody UpdateScheduleReqVo updateScheduleReqVo) { BaseVo baseVo = new BaseVo(); - boolean success = independenceFeign.updateSchedule(updateScheduleReqVo.getScheduleId(),updateScheduleReqVo.getScheduleName(),updateScheduleReqVo.getTeam()); + boolean success = independenceFeign.updateSchedule(updateScheduleReqVo.getScheduleId(), updateScheduleReqVo.getScheduleName(), updateScheduleReqVo.getTeam()); baseVo.setSuccess(success); return baseVo; } @ApiOperation("复制") @RequestMapping(value = "copySchedule", method = RequestMethod.POST) - public BaseVo copySchedule(@RequestBody UpdateScheduleReqVo updateScheduleReqVo){ - BaseVo baseVo = independenceFeign.copySchedule(updateScheduleReqVo.getScheduleId(),updateScheduleReqVo.getScheduleName(),updateScheduleReqVo.getTeam()); + public BaseVo copySchedule(@RequestBody UpdateScheduleReqVo updateScheduleReqVo) { + BaseVo baseVo = independenceFeign.copySchedule(updateScheduleReqVo.getScheduleId(), updateScheduleReqVo.getScheduleName(), updateScheduleReqVo.getTeam()); return baseVo; } @ApiOperation("删除排课计划") @RequestMapping(value = "deleteSchedule", method = RequestMethod.POST) - public BaseVo deleteSchedule(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ + public BaseVo deleteSchedule(@RequestBody ScheduleIdReqVo scheduleIdReqVo) { BaseVo baseVo = new BaseVo(); baseVo.setSuccess(independenceFeign.deleteSchedule(scheduleIdReqVo.getScheduleId())); return baseVo; @@ -65,7 +65,7 @@ public class ScheduleInitController { @ApiOperation("获取基础信息") @RequestMapping(value = "getInitMessage", method = RequestMethod.POST) - public InitRepVo getInitMessage(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ + public InitRepVo getInitMessage(@RequestBody ScheduleIdReqVo scheduleIdReqVo) { InitRepVo initRepVo = independenceFeign.getInitMessage(scheduleIdReqVo.getScheduleId()); return initRepVo; } diff --git a/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java b/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java index 92bb082..28f1c20 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java +++ b/cloud/independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java @@ -36,80 +36,80 @@ public class ScheduleMessageController { @ApiOperation("获取学校排课计划") @RequestMapping(value = "getScheduleList", method = RequestMethod.POST) - public ScheduleListRepVo getScheduleList(@RequestBody SchoolIdReqVo schoolIdReqVo){ + public ScheduleListRepVo getScheduleList(@RequestBody SchoolIdReqVo schoolIdReqVo) { return independenceFeign.getScheduleList(schoolIdReqVo.getSchoolId()); } @ApiOperation("获取学校下所有班级信息") @RequestMapping(value = "getClassList", method = RequestMethod.POST) - public ClassRepVo getClassList(@RequestBody SchoolIdReqVo schoolIdReqVo){ + public ClassRepVo getClassList(@RequestBody SchoolIdReqVo schoolIdReqVo) { return independenceFeign.getClassList(schoolIdReqVo.getSchoolId()); } @ApiOperation("获取学校课程") @RequestMapping(value = "getCourseList", method = RequestMethod.POST) - public CourseRepVo getCourseList(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ + public CourseRepVo getCourseList(@RequestBody ScheduleIdReqVo scheduleIdReqVo) { return independenceFeign.getCourseList(scheduleIdReqVo.getScheduleId()); } @ApiOperation("获取要学习某个学科的班级集合") @RequestMapping(value = "getCourseClassList", method = RequestMethod.POST) - public List getCourseClassList(@RequestBody CourseClassReqVo courseClassReqVo){ - return independenceFeign.getCourseClassList(courseClassReqVo.getScheduleId(),courseClassReqVo.getCourseId()); + public List getCourseClassList(@RequestBody CourseClassReqVo courseClassReqVo) { + return independenceFeign.getCourseClassList(courseClassReqVo.getScheduleId(), courseClassReqVo.getCourseId()); } @ApiOperation("获取班级排课课程") @RequestMapping(value = "getClassCourseList", method = RequestMethod.POST) - public ClassCourseRepVo getClassCourseList(@RequestBody GetClassCourseReqVo getClassCourseReqVo){ - return independenceFeign.getClassCourseList(getClassCourseReqVo.getScheduleId(),getClassCourseReqVo.getClassId()); + public ClassCourseRepVo getClassCourseList(@RequestBody GetClassCourseReqVo getClassCourseReqVo) { + return independenceFeign.getClassCourseList(getClassCourseReqVo.getScheduleId(), getClassCourseReqVo.getClassId()); } @ApiOperation("获取合班信息") @RequestMapping(value = "getJoinList", method = RequestMethod.POST) - public JoinRepVo getJoinList(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ + public JoinRepVo getJoinList(@RequestBody ScheduleIdReqVo scheduleIdReqVo) { return independenceFeign.getJoinList(scheduleIdReqVo.getScheduleId()); } @ApiOperation("获取导入任课信息") @RequestMapping(value = "getTeacherClassList", method = RequestMethod.POST) - public TeacherCourseRepVo getTeacherClassList(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ + public TeacherCourseRepVo getTeacherClassList(@RequestBody ScheduleIdReqVo scheduleIdReqVo) { return independenceFeign.getTeacherClassList(scheduleIdReqVo.getScheduleId()); } @ApiOperation("获取主课,副科,公共课列表") @RequestMapping(value = "getCourseTypeList", method = RequestMethod.POST) - public GetCourseTypeListRepVo getCourseTypeList(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ + public GetCourseTypeListRepVo getCourseTypeList(@RequestBody ScheduleIdReqVo scheduleIdReqVo) { return independenceFeign.getCourseTypeList(scheduleIdReqVo.getScheduleId()); } @ApiOperation("获取未设置学科类型的科目") @RequestMapping(value = "getUnCourseList", method = RequestMethod.POST) - public CourseRepVo getUnCourseList(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ + public CourseRepVo getUnCourseList(@RequestBody ScheduleIdReqVo scheduleIdReqVo) { return independenceFeign.getUnCourseList(scheduleIdReqVo.getScheduleId()); } @ApiOperation("删除设置的 主课 副科 公共课") @RequestMapping(value = "deleteCourseType", method = RequestMethod.POST) - public BaseVo deleteCourseType(@RequestBody CourseClassReqVo courseClassReqVo){ - return independenceFeign.deleteCourseType(courseClassReqVo.getScheduleId(),courseClassReqVo.getCourseId()); + public BaseVo deleteCourseType(@RequestBody CourseClassReqVo courseClassReqVo) { + return independenceFeign.deleteCourseType(courseClassReqVo.getScheduleId(), courseClassReqVo.getCourseId()); } @ApiOperation("获取设置的作息 获取排课计划详情") @RequestMapping(value = "getSchedule", method = RequestMethod.POST) - public ScheduleDto getSchedule(@RequestBody ScheduleIdReqVo scheduleIdReqVo){ + public ScheduleDto getSchedule(@RequestBody ScheduleIdReqVo scheduleIdReqVo) { return independenceFeign.getSchedule(scheduleIdReqVo.getScheduleId()); } @ApiOperation("导出模板") @RequestMapping(value = "export", method = RequestMethod.GET) - public void export(int scheduleId , HttpServletRequest request, HttpServletResponse response){ + public void export(int scheduleId, HttpServletRequest request, HttpServletResponse response) { ExcelUtils excelUtils = new ExcelUtils(); ScheduleDto schedule = independenceFeign.getSchedule(scheduleId); List headList = new ArrayList<>(); headList.add("年级"); headList.add("班级"); List courses = independenceFeign.getCourseBySchoolId(schedule.getSchoolId()); - for(CourseDto course : courses){ + for (CourseDto course : courses) { headList.add(course.getCourseName()); headList.add("任课老师"); @@ -117,20 +117,20 @@ public class ScheduleMessageController { List heardKey = new ArrayList<>(); heardKey.add("grade"); heardKey.add("class"); - List> data = new ArrayList<>(); + List> data = new ArrayList<>(); List list = independenceFeign.getClassModelBySchoolId(schedule.getSchoolId()); - for(ClassModelDto classModel : list){ - Map map = new HashMap<>(); - map.put("grade",classModel.getGrade()); - map.put("class",classModel.getClassName()); + for (ClassModelDto classModel : list) { + Map map = new HashMap<>(); + map.put("grade", classModel.getGrade()); + map.put("class", classModel.getClassName()); data.add(map); } excelUtils.setHeardList(headList); excelUtils.setHeardKey(heardKey); excelUtils.setData(data); - try{ - excelUtils.exportExport(request,response); - }catch (Exception e){ + try { + excelUtils.exportExport(request, response); + } catch (Exception e) { } } diff --git a/cloud/independence/src/main/java/com/sincere/independence/feign/IndependenceFeign.java b/cloud/independence/src/main/java/com/sincere/independence/feign/IndependenceFeign.java index e6e263c..d0b3e3e 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/feign/IndependenceFeign.java +++ b/cloud/independence/src/main/java/com/sincere/independence/feign/IndependenceFeign.java @@ -31,7 +31,7 @@ public interface IndependenceFeign { BaseVo updateAnalyse(@RequestBody AnalyseDto analyseDto); @RequestMapping(value = "/learn/init/selectById", method = RequestMethod.GET) - AnalyseDto selectById(@RequestParam("analyseId") int analyseId) ; + AnalyseDto selectById(@RequestParam("analyseId") int analyseId); @RequestMapping(value = "/learn/init/getLeagueByAnalyse", method = RequestMethod.GET) List getLeagueByAnalyse(@RequestParam("analyseId") int analyseId); @@ -56,19 +56,18 @@ public interface IndependenceFeign { boolean insertBatchStudentDetail(@RequestBody List studentDetailDtos); @RequestMapping(value = "/learn/init/initLeagueSchool", method = RequestMethod.GET) - boolean initLeagueSchool(@RequestParam("leagueId")int leagueId , @RequestParam("schoolName")String schoolName); + boolean initLeagueSchool(@RequestParam("leagueId") int leagueId, @RequestParam("schoolName") String schoolName); @RequestMapping(value = "/learn/init/insertLeague", method = RequestMethod.POST) int insertLeague(@RequestBody LeagueDto leagueDto); @RequestMapping(value = "/learn/init/getSchoolName", method = RequestMethod.GET) - List getSchoolName(@RequestParam("analyseId")int analyseId); + List getSchoolName(@RequestParam("analyseId") int analyseId); @RequestMapping(value = "/learn/init/initChapter", method = RequestMethod.POST) boolean initChapter(@RequestBody List chapterDtos); - @RequestMapping(value = "learn/getLearn/getForm1_1", method = RequestMethod.POST) Form7RepVO getForm1_1(@RequestBody GetLearnDto getLearnDto); @@ -97,7 +96,7 @@ public interface IndependenceFeign { Form8RepVO getForm2_2_4(@RequestBody GetLearnDto GetLearnDto); @RequestMapping(value = "learn/getLearn/getForm2_2_5", method = RequestMethod.POST) - Map getForm2_2_5(@RequestBody GetLearnDto GetLearnDto); + Map getForm2_2_5(@RequestBody GetLearnDto GetLearnDto); @RequestMapping(value = "learn/getLearn/getForm3_1", method = RequestMethod.POST) Form6RepVO getForm3_1(@RequestBody GetLearnDto GetLearnDto); @@ -121,7 +120,6 @@ public interface IndependenceFeign { String getSuggest2(@RequestBody GetLearnDto GetLearnDto); - //排课 @RequestMapping(value = "/message/getScheduleList", method = RequestMethod.GET) ScheduleListRepVo getScheduleList(@RequestParam("schoolId") int schoolId); @@ -133,11 +131,11 @@ public interface IndependenceFeign { CourseRepVo getCourseList(@RequestParam("scheduleId") int scheduleId); @RequestMapping(value = "/message/getCourseClassList", method = RequestMethod.GET) - List getCourseClassList(@RequestParam("scheduleId") int scheduleId , @RequestParam("courseId") int courseId); + List getCourseClassList(@RequestParam("scheduleId") int scheduleId, @RequestParam("courseId") int courseId); @ApiOperation("获取班级排课课程") @RequestMapping(value = "/message/getClassCourseList", method = RequestMethod.GET) - ClassCourseRepVo getClassCourseList(@RequestParam("scheduleId") int scheduleId , @RequestParam("classId") int classId); + ClassCourseRepVo getClassCourseList(@RequestParam("scheduleId") int scheduleId, @RequestParam("classId") int classId); @ApiOperation("获取合班信息") @RequestMapping(value = "/message/getJoinList", method = RequestMethod.GET) @@ -157,7 +155,7 @@ public interface IndependenceFeign { @ApiOperation("删除设置的 主课 副科 公共课") @RequestMapping(value = "/message/deleteCourseType", method = RequestMethod.GET) - BaseVo deleteCourseType(@RequestParam("scheduleId") int scheduleId , @RequestParam("courseId") int courseId); + BaseVo deleteCourseType(@RequestParam("scheduleId") int scheduleId, @RequestParam("courseId") int courseId); @RequestMapping(value = "/message/getSchedule", method = RequestMethod.GET) ScheduleDto getSchedule(@RequestParam("scheduleId") int scheduleId); @@ -195,16 +193,16 @@ public interface IndependenceFeign { @RequestMapping(value = "/init/createSchedule", method = RequestMethod.GET) - int createSchedule(@RequestParam("team")String team , @RequestParam("scheduleName") String scheduleName , - @RequestParam("schoolId") int schoolId); + int createSchedule(@RequestParam("team") String team, @RequestParam("scheduleName") String scheduleName, + @RequestParam("schoolId") int schoolId); @RequestMapping(value = "/init/updateSchedule", method = RequestMethod.GET) - boolean updateSchedule(@RequestParam("scheduleId") int scheduleId , @RequestParam("scheduleName")String scheduleName, - @RequestParam("team")String team); + boolean updateSchedule(@RequestParam("scheduleId") int scheduleId, @RequestParam("scheduleName") String scheduleName, + @RequestParam("team") String team); @RequestMapping(value = "/init/copySchedule", method = RequestMethod.GET) - BaseVo copySchedule(@RequestParam("scheduleId") int scheduleId , @RequestParam("scheduleName")String scheduleName, - @RequestParam("team")String team); + BaseVo copySchedule(@RequestParam("scheduleId") int scheduleId, @RequestParam("scheduleName") String scheduleName, + @RequestParam("team") String team); @RequestMapping(value = "/init/deleteSchedule", method = RequestMethod.GET) boolean deleteSchedule(@RequestParam("scheduleId") int scheduleId); diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReq.java b/cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReq.java index 23dc58e..a17c890 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReq.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReq.java @@ -12,11 +12,11 @@ import io.swagger.annotations.ApiModelProperty; public class ChapterReq { @ApiModelProperty(value = "考试章节") - private int chapterNumber ; + private int chapterNumber; @ApiModelProperty(value = "章节名称") - private String chapterName ; + private String chapterName; @ApiModelProperty(value = "章节 分值") - private Double score ; + private Double score; public int getChapterNumber() { return chapterNumber; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReqVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReqVo.java index f143bf3..36600f9 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReqVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/ChapterReqVo.java @@ -13,15 +13,15 @@ import java.util.List; @ApiModel public class ChapterReqVo { - private int analyseId ; + private int analyseId; @ApiModelProperty(value = "考试时长") - private String examTime ; + private String examTime; @ApiModelProperty(value = "考试范围 七年级上册") - private String examScope ; + private String examScope; @ApiModelProperty(value = "满分") - private Double maxScore ; + private Double maxScore; @ApiModelProperty(value = "考试内容") - private List list ; + private List list; public int getAnalyseId() { return analyseId; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/CreateExamReqVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/CreateExamReqVo.java index aa18073..c85775e 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/CreateExamReqVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/CreateExamReqVo.java @@ -10,14 +10,14 @@ import io.swagger.annotations.ApiModelProperty; */ @ApiModel public class CreateExamReqVo { - @ApiModelProperty(value="考试名称") - private String examName ; - @ApiModelProperty(value="学科") - private String courseName ; - @ApiModelProperty(value="考试时间") - private String examTime ; - @ApiModelProperty(value="年级") - private String grade ; + @ApiModelProperty(value = "考试名称") + private String examName; + @ApiModelProperty(value = "学科") + private String courseName; + @ApiModelProperty(value = "考试时间") + private String examTime; + @ApiModelProperty(value = "年级") + private String grade; public String getExamName() { return examName; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/CreateLeagueReqVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/CreateLeagueReqVo.java index 6c40bf7..4414585 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/CreateLeagueReqVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/CreateLeagueReqVo.java @@ -7,8 +7,8 @@ package com.sincere.independence.vo; */ public class CreateLeagueReqVo { - private int analyseId ; - private String league ; + private int analyseId; + private String league; public int getAnalyseId() { return analyseId; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/GetLeague.java b/cloud/independence/src/main/java/com/sincere/independence/vo/GetLeague.java index 115c540..fd29a7b 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/GetLeague.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/GetLeague.java @@ -11,8 +11,8 @@ import java.util.List; */ public class GetLeague { - private String leagueName ; - private List leagues ; + private String leagueName; + private List leagues; public String getLeagueName() { return leagueName; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/GetLeagueRepVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/GetLeagueRepVo.java index 2c005b9..179cccd 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/GetLeagueRepVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/GetLeagueRepVo.java @@ -11,7 +11,7 @@ import java.util.List; */ public class GetLeagueRepVo extends BaseVo { - private List data ; + private List data; public List getData() { return data; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/InitAnalyseReqVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/InitAnalyseReqVo.java index 2d741d6..0b1153a 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/InitAnalyseReqVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/InitAnalyseReqVo.java @@ -7,8 +7,8 @@ package com.sincere.independence.vo; */ public class InitAnalyseReqVo { - private int analyseId ; - private String url ; + private int analyseId; + private String url; public int getAnalyseId() { return analyseId; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/InitScoreReqVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/InitScoreReqVo.java index 3af2e37..0b1a641 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/InitScoreReqVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/InitScoreReqVo.java @@ -7,7 +7,7 @@ package com.sincere.independence.vo; */ public class InitScoreReqVo extends InitAnalyseReqVo { - private int leagueId ; + private int leagueId; public int getLeagueId() { return leagueId; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/UpdateExamReqVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/UpdateExamReqVo.java index 469fdef..31520ab 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/UpdateExamReqVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/UpdateExamReqVo.java @@ -9,10 +9,10 @@ import io.swagger.annotations.ApiModelProperty; * @date 2019/10/18 0018 14:53 */ @ApiModel -public class UpdateExamReqVo extends CreateExamReqVo{ +public class UpdateExamReqVo extends CreateExamReqVo { - @ApiModelProperty(value="主键") - private int analyseId ; + @ApiModelProperty(value = "主键") + private int analyseId; public int getAnalyseId() { return analyseId; diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/excel/ExamExcelVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/excel/ExamExcelVo.java index 98e7653..206265c 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/excel/ExamExcelVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/excel/ExamExcelVo.java @@ -11,15 +11,15 @@ import org.apache.poi.ss.usermodel.Row; */ public class ExamExcelVo extends ExcelVo { - private String questionNumber ; - private String questionSmallNumber ; - private String questionType ; - private String difficult ; - private String score ; - private String knowledge ; - private String ability ; - private String skill ; - private String think ; + private String questionNumber; + private String questionSmallNumber; + private String questionType; + private String difficult; + private String score; + private String knowledge; + private String ability; + private String skill; + private String think; public String getQuestionNumber() { return questionNumber; @@ -96,73 +96,73 @@ public class ExamExcelVo extends ExcelVo { public ExamExcelVo(Row sheetRow) { super(sheetRow); Cell cell1 = sheetRow.getCell(0); - if(cell1 != null){ + if (cell1 != null) { cell1.setCellType(CellType.STRING); this.questionNumber = cell1.getStringCellValue().trim(); } Cell cell2 = sheetRow.getCell(1); - if(cell2 != null){ + if (cell2 != null) { cell2.setCellType(CellType.STRING); this.questionSmallNumber = cell2.getStringCellValue().trim(); - }else { - this.questionSmallNumber = null ; + } else { + this.questionSmallNumber = null; } Cell cell3 = sheetRow.getCell(2); - if(cell3 != null){ + if (cell3 != null) { cell3.setCellType(CellType.STRING); this.questionType = cell3.getStringCellValue().trim(); - }else { - this.questionType = null ; + } else { + this.questionType = null; } Cell cell4 = sheetRow.getCell(3); - if(cell4 != null){ + if (cell4 != null) { cell4.setCellType(CellType.STRING); this.difficult = cell4.getStringCellValue().trim(); - }else { - this.difficult = null ; + } else { + this.difficult = null; } Cell cell5 = sheetRow.getCell(4); - if(cell5 != null){ + if (cell5 != null) { cell5.setCellType(CellType.STRING); this.score = cell5.getStringCellValue().trim(); - }else { - this.score = null ; + } else { + this.score = null; } Cell cell6 = sheetRow.getCell(5); - if(cell6 != null){ + if (cell6 != null) { cell6.setCellType(CellType.STRING); this.knowledge = cell6.getStringCellValue().trim(); - }else { - this.knowledge = null ; + } else { + this.knowledge = null; } Cell cell7 = sheetRow.getCell(6); - if(cell7 != null){ + if (cell7 != null) { cell7.setCellType(CellType.STRING); this.ability = cell7.getStringCellValue().trim(); - }else { - this.ability = null ; + } else { + this.ability = null; } Cell cell8 = sheetRow.getCell(7); - if(cell8 != null){ + if (cell8 != null) { cell8.setCellType(CellType.STRING); this.skill = cell8.getStringCellValue().trim(); - }else { - this.skill = null ; + } else { + this.skill = null; } Cell cell9 = sheetRow.getCell(8); - if(cell9 != null){ + if (cell9 != null) { cell9.setCellType(CellType.STRING); this.think = cell9.getStringCellValue().trim(); - }else { - this.think = null ; + } else { + this.think = null; } } } diff --git a/cloud/independence/src/main/java/com/sincere/independence/vo/excel/ScoreExcelVo.java b/cloud/independence/src/main/java/com/sincere/independence/vo/excel/ScoreExcelVo.java index e42431b..84cb74c 100644 --- a/cloud/independence/src/main/java/com/sincere/independence/vo/excel/ScoreExcelVo.java +++ b/cloud/independence/src/main/java/com/sincere/independence/vo/excel/ScoreExcelVo.java @@ -11,12 +11,12 @@ import org.apache.poi.ss.usermodel.Row; */ public class ScoreExcelVo extends ExcelVo { - private String schoolName ; - private String className ; - private String studentNumber ; - private String studentName ; - private String courseName ; - private String score ; + private String schoolName; + private String className; + private String studentNumber; + private String studentName; + private String courseName; + private String score; public String getSchoolName() { return schoolName; @@ -69,32 +69,32 @@ public class ScoreExcelVo extends ExcelVo { public ScoreExcelVo(Row sheetRow) { super(sheetRow); Cell cell1 = sheetRow.getCell(1); - if(cell1 != null){ + if (cell1 != null) { cell1.setCellType(CellType.STRING); this.schoolName = cell1.getStringCellValue().trim(); } Cell cell2 = sheetRow.getCell(2); - if(cell2 != null){ + if (cell2 != null) { cell2.setCellType(CellType.STRING); this.className = cell2.getStringCellValue().trim(); } Cell cell3 = sheetRow.getCell(3); - if(cell3 != null){ + if (cell3 != null) { cell3.setCellType(CellType.STRING); this.studentNumber = cell3.getStringCellValue().trim(); } Cell cell4 = sheetRow.getCell(4); - if(cell4 != null){ + if (cell4 != null) { cell4.setCellType(CellType.STRING); this.studentName = cell4.getStringCellValue().trim(); } Cell cell5 = sheetRow.getCell(5); - if(cell5 != null){ + if (cell5 != null) { cell5.setCellType(CellType.STRING); this.courseName = cell5.getStringCellValue().trim(); } Cell cell6 = sheetRow.getCell(6); - if(cell6 != null){ + if (cell6 != null) { cell6.setCellType(CellType.STRING); this.score = cell6.getStringCellValue().trim(); } diff --git a/cloud/independence/src/main/resources/logback.xml b/cloud/independence/src/main/resources/logback.xml index 99a47cd..dfd1d38 100644 --- a/cloud/independence/src/main/resources/logback.xml +++ b/cloud/independence/src/main/resources/logback.xml @@ -1,61 +1,96 @@     -     +     +     - +     -     -         -         -             -             [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n) -             UTF-8 -         -     +     + +         +         + +             +             + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n) +             + UTF-8 +         + +     +     -     -         -         -             -             ${LOG_HOME}/${PROJECT_NAME}.system-dev.%d{yyyy-MM-dd HH}.%i.log -             -             30 -             -             100MB -         - -         -             -             [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n -             UTF-8 -         -     -     -        -    - -    -    -    -    -    -    -    - - -    -    -    -    -    -    -        -        -    +     + +         +         + +             +             + ${LOG_HOME}/${PROJECT_NAME}.system-dev.%d{yyyy-MM-dd HH}.%i.log +             +             + 30 +             +             + 100MB +         + + +         + +             +             + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n +             + UTF-8 +         + +     + +     + +         + +     + + +     +     + +     + +     + +     + +     + +     + + + +     + +     + +     + +     + +     +     + +         + +         + +     + diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/Swagger2.java b/cloud/lapi/src/main/java/com/sincere/lapi/Swagger2.java index 04cf594..0b028f7 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/Swagger2.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/Swagger2.java @@ -21,7 +21,7 @@ import java.util.List; public class Swagger2 { @Bean - public Docket createRestApi() { + public Docket createRestApi() { ParameterBuilder ticketPar = new ParameterBuilder(); return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) @@ -33,12 +33,13 @@ public class Swagger2 { .build(); } - private ApiInfo apiInfo() { + + private ApiInfo apiInfo() { return new ApiInfoBuilder() - .title("Spring Boot中使用Swagger2构建RESTful APIs") - .description("接口文档") - .termsOfServiceUrl("") + .title("Spring Boot中使用Swagger2构建RESTful APIs") + .description("接口文档") + .termsOfServiceUrl("") .version("1.0") - .build(); - } + .build(); + } } diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/Utils/FileUtils.java b/cloud/lapi/src/main/java/com/sincere/lapi/Utils/FileUtils.java index cc734d3..fb6ce05 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/Utils/FileUtils.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/Utils/FileUtils.java @@ -12,16 +12,16 @@ import java.net.URLConnection; public class FileUtils { - public static String img_url = "c:\\\\lapi\\" ; - public static String zip_url = "c:\\\\lapi\\zip\\" ; + public static String img_url = "c:\\\\lapi\\"; + public static String zip_url = "c:\\\\lapi\\zip\\"; - public static byte[] getBytes(String filePath){ - try{ + public static byte[] getBytes(String filePath) { + try { String dir = download(filePath); String fName = dir.trim(); String temp[] = fName.split("\\\\"); - String fileName = temp[temp.length-1]; - String zipUrl = CompressPic(dir,zip_url+fileName); + String fileName = temp[temp.length - 1]; + String zipUrl = CompressPic(dir, zip_url + fileName); File file = new File(zipUrl); long fileSize = file.length(); if (fileSize > Integer.MAX_VALUE) { @@ -30,30 +30,30 @@ public class FileUtils { } byte[] buffer = null; FileInputStream fi = new FileInputStream(file); - buffer = new byte[(int) fileSize]; - int offset = 0; - int numRead = 0; - while (offset < buffer.length - && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) { - offset += numRead; - } - // 确保所有数据均被读取 - if (offset != buffer.length) { - throw new IOException("Could not completely read file " - + file.getName()); - } + buffer = new byte[(int) fileSize]; + int offset = 0; + int numRead = 0; + while (offset < buffer.length + && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) { + offset += numRead; + } + // 确保所有数据均被读取 + if (offset != buffer.length) { + throw new IOException("Could not completely read file " + + file.getName()); + } return buffer; - }catch (Exception e){ + } catch (Exception e) { } - return null ; + return null; } - public static String download(String urlPath){ + public static String download(String urlPath) { File file = null; String fName = urlPath.trim(); String temp[] = fName.split("\\/"); - String fileName = temp[temp.length-1]; + String fileName = temp[temp.length - 1]; try { // 统一资源 URL url = new URL(urlPath); @@ -62,7 +62,7 @@ public class FileUtils { // http的连接类 HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; //设置超时 - httpURLConnection.setConnectTimeout(1000*5); + httpURLConnection.setConnectTimeout(1000 * 5); //设置请求方式,默认是GET httpURLConnection.setRequestMethod("GET"); // 设置字符编码 @@ -87,7 +87,7 @@ public class FileUtils { } catch (IOException e) { e.printStackTrace(); } - return null ; + return null; } public static String CompressPic(String srcPath, String targetPath) throws Exception { diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/Utils/SpringContextHolder.java b/cloud/lapi/src/main/java/com/sincere/lapi/Utils/SpringContextHolder.java index eb33b83..dca1113 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/Utils/SpringContextHolder.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/Utils/SpringContextHolder.java @@ -22,11 +22,11 @@ public class SpringContextHolder implements ApplicationContextAware { SpringContextHolder.applicationContext = applicationContext; } - public static TerminalHttpCall getTerminalHttpCall(){ + public static TerminalHttpCall getTerminalHttpCall() { return (TerminalHttpCall) applicationContext.getBean("terminalHttpCall"); } - public static AttendanceService getAttendanceService(){ + public static AttendanceService getAttendanceService() { return (AttendanceService) applicationContext.getBean("attendanceService"); } } diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/controller/LapiController.java b/cloud/lapi/src/main/java/com/sincere/lapi/controller/LapiController.java index 07d76fc..bd94c94 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/controller/LapiController.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/controller/LapiController.java @@ -30,18 +30,20 @@ import java.util.*; public class LapiController { @Autowired - ScFeign scFeign ; + ScFeign scFeign; @Autowired - XaFeign xaFeign ; + XaFeign xaFeign; @Autowired TerminalHttpCall terminalHttpCall = new TerminalHttpCall(); private static final Logger Log_operate = LoggerUtils.Logger(LogName.operate); + /** * 下发整个学校 - * @param deviceIds 多个设备用,隔开 + * + * @param deviceIds 多个设备用,隔开 * @param schoolId * @param userType 1 老师 2 学生 */ @@ -49,19 +51,19 @@ public class LapiController { @ApiOperation(value = "下发学校下所有人脸给指定设备", notes = "下发所有人脸给指定设备") public boolean sendFaces(@RequestParam("deviceIds") String deviceIds, @RequestParam("schoolId") String schoolId, @RequestParam("userType") String userType) { String[] deviceList = deviceIds.split(","); - if(userType.equals("1")){ - List list = scFeign.selectTeacherBySchoolId(schoolId) ; + if (userType.equals("1")) { + List list = scFeign.selectTeacherBySchoolId(schoolId); list = removeDuplicateCase(list); - for(String deviceId :deviceList){ - sendTeacherBatch(list,deviceId); + for (String deviceId : deviceList) { + sendTeacherBatch(list, deviceId); } - }else if( userType.equals("2")){ - List list = scFeign.selectStudentBySchoolId(schoolId) ; - for(String deviceId :deviceList){ - sendStudentBatch(list,deviceId); + } else if (userType.equals("2")) { + List list = scFeign.selectStudentBySchoolId(schoolId); + for (String deviceId : deviceList) { + sendStudentBatch(list, deviceId); } } - return false ; + return false; } private List removeDuplicateCase(List cases) { @@ -76,48 +78,47 @@ public class LapiController { } - //下发单张人脸到设备 @RequestMapping(value = "sendStuCardAndImg", method = RequestMethod.GET) @ApiOperation("下发人脸给设备") - public boolean sendCardAndImg( @RequestParam("deviceId") String deviceId, @RequestParam("customerId") int customerId, @RequestParam("userType") String userType){ - if(userType.equals("1")){ - SzVSchoolTeacher teacher = scFeign.selectByTeacherId(customerId) ; - sendTeacher(teacher,deviceId); - }else if( userType.equals("2")){ - SzVSchoolStudent student = scFeign.selectByStudentId(customerId) ; - sendStudent(student,deviceId); + public boolean sendCardAndImg(@RequestParam("deviceId") String deviceId, @RequestParam("customerId") int customerId, @RequestParam("userType") String userType) { + if (userType.equals("1")) { + SzVSchoolTeacher teacher = scFeign.selectByTeacherId(customerId); + sendTeacher(teacher, deviceId); + } else if (userType.equals("2")) { + SzVSchoolStudent student = scFeign.selectByStudentId(customerId); + sendStudent(student, deviceId); } return true; } - private void sendStudentBatch( List list , String deviceId){ - for(SzVSchoolStudent student : list){ - if(StringUtils.isNotBlank(student.getPhoto())){ - sendStudent(student,deviceId); + private void sendStudentBatch(List list, String deviceId) { + for (SzVSchoolStudent student : list) { + if (StringUtils.isNotBlank(student.getPhoto())) { + sendStudent(student, deviceId); } } } - private void sendStudent(SzVSchoolStudent student , String deviceId){ - sendImg(Long.valueOf(student.getStudentId()),student.getName(),student.getStudentNum(),student.getPhoto(),deviceId,2); + private void sendStudent(SzVSchoolStudent student, String deviceId) { + sendImg(Long.valueOf(student.getStudentId()), student.getName(), student.getStudentNum(), student.getPhoto(), deviceId, 2); } - private void sendTeacherBatch( List list , String deviceId){ - for(SzVSchoolTeacher teacher : list){ - if(StringUtils.isNotBlank(teacher.getFace())){ - sendTeacher(teacher,deviceId); + private void sendTeacherBatch(List list, String deviceId) { + for (SzVSchoolTeacher teacher : list) { + if (StringUtils.isNotBlank(teacher.getFace())) { + sendTeacher(teacher, deviceId); } } } - private void sendTeacher(SzVSchoolTeacher teacher , String deviceId){ - sendImg(Long.valueOf(teacher.getTeacherId()),teacher.getName(),teacher.getTeacherNum(),teacher.getFace(),deviceId,1); + private void sendTeacher(SzVSchoolTeacher teacher, String deviceId) { + sendImg(Long.valueOf(teacher.getTeacherId()), teacher.getName(), teacher.getTeacherNum(), teacher.getFace(), deviceId, 1); } - private void sendImg(long personId , String name , String code , String fileUrl , String deviceId , int userType){ - Log_operate.info("开始下发人脸----设备号:"+deviceId+"---姓名:"+name+"--fileUrl:"+fileUrl); + private void sendImg(long personId, String name, String code, String fileUrl, String deviceId, int userType) { + Log_operate.info("开始下发人脸----设备号:" + deviceId + "---姓名:" + name + "--fileUrl:" + fileUrl); PersonInfoList personInfoList = new PersonInfoList(); List list1 = new ArrayList(); personInfoList.setPersonInfoList(list1); @@ -139,13 +140,13 @@ public class LapiController { List list = new ArrayList(); IdentificationInfo identificationInfo = new IdentificationInfo(); list.add(identificationInfo); - identificationInfo.setNumber(Long.parseLong(getCard(code), 16)+""); + identificationInfo.setNumber(Long.parseLong(getCard(code), 16) + ""); identificationInfo.setType(1); personInfo.setIdentificationList(list); personInfo.setIdentificationNum(list.size()); List imageList = new ArrayList(); - try{ + try { PersonImageInfo personImageInfo = new PersonImageInfo(); String picture = new BASE64Encoder().encode(FileUtils.getBytes(fileUrl)); picture = picture.replaceAll("\n", "").replaceAll("\r", ""); @@ -157,16 +158,16 @@ public class LapiController { personInfo.setImageList(imageList); personInfo.setImageNum(imageList.size()); terminalHttpCall.addPerson(deviceId, personInfoList); - } catch(Exception e) { + } catch (Exception e) { System.out.println(e.getMessage()); } } private String getCard(String card) { - if(StringUtils.isBlank(card)){ - return "0" ; - }else { + if (StringUtils.isBlank(card)) { + return "0"; + } else { if (card.length() == 8) { int length = card.length(); String result = card.substring(length - 2, length) + card.substring(length - 4, length - 2) + card.substring(length - 6, length - 4) @@ -179,4 +180,4 @@ public class LapiController { } } - } +} diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/feign/ScFeign.java b/cloud/lapi/src/main/java/com/sincere/lapi/feign/ScFeign.java index 985f9b9..ca654d8 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/feign/ScFeign.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/feign/ScFeign.java @@ -20,7 +20,7 @@ import java.util.List; @FeignClient("smartCampusSearch") public interface ScFeign { - @RequestMapping(value = "/sm/user/insertTemperature",method = RequestMethod.POST) + @RequestMapping(value = "/sm/user/insertTemperature", method = RequestMethod.POST) int insertTemperature(@RequestBody CwStutemperaturereocrd record); @RequestMapping(value = "/attendance/addAttendance", method = RequestMethod.POST) @@ -29,15 +29,15 @@ public interface ScFeign { @RequestMapping(method = RequestMethod.GET, value = "/attendance/selectAttendaceWithId") SZ_AttendanceDto selectAttendaceWithId(@RequestParam("clint_id") String clint_id); - @RequestMapping(value = "/sm/user/selectTeacherBySchoolId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/user/selectTeacherBySchoolId", method = RequestMethod.GET) List selectTeacherBySchoolId(@RequestParam("schoolId") String schoolId); - @RequestMapping(value = "/sm/user/selectStudentBySchoolId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/user/selectStudentBySchoolId", method = RequestMethod.GET) List selectStudentBySchoolId(@RequestParam("schoolId") String schoolId); - @RequestMapping(value = "/sm/user/selectByTeacherId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/user/selectByTeacherId", method = RequestMethod.GET) SzVSchoolTeacher selectByTeacherId(@RequestParam("teacherId") int teacherId); - @RequestMapping(value = "/sm/user/selectByStudentId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/user/selectByStudentId", method = RequestMethod.GET) SzVSchoolStudent selectByStudentId(@RequestParam("studentId") int studentId); } diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/feign/XaFeign.java b/cloud/lapi/src/main/java/com/sincere/lapi/feign/XaFeign.java index 1580903..9ec5260 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/feign/XaFeign.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/feign/XaFeign.java @@ -11,12 +11,12 @@ import org.springframework.web.bind.annotation.RequestMethod; @FeignClient("xiaoanSearch") public interface XaFeign { - @RequestMapping(value = "/xa/face/success",method = RequestMethod.POST) + @RequestMapping(value = "/xa/face/success", method = RequestMethod.POST) void insertFaceSuccess(@RequestBody FaceSendsuccess faceSendsuccess); - @RequestMapping(value = "/xa/face/fail",method = RequestMethod.POST) + @RequestMapping(value = "/xa/face/fail", method = RequestMethod.POST) void insertFaceFail(@RequestBody FaceSendfail faceSendfail); - @RequestMapping(value = "/xa/face/insertRecode",method = RequestMethod.POST) + @RequestMapping(value = "/xa/face/insertRecode", method = RequestMethod.POST) void insertRecode(@RequestBody FaceRecoder faceRecoder); } diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/pojo/HeartInfo.java b/cloud/lapi/src/main/java/com/sincere/lapi/pojo/HeartInfo.java index 2285d36..413d571 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/pojo/HeartInfo.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/pojo/HeartInfo.java @@ -8,15 +8,15 @@ import java.io.Serializable; public class HeartInfo implements Serializable { @JSONField(name = "RefId", ordinal = 1) - private String refId ; + private String refId; @JSONField(name = "Time", ordinal = 2) - private String time ; + private String time; @JSONField(name = "NextTime", ordinal = 3) - private String nextTime ; + private String nextTime; @JSONField(name = "DeviceCode", ordinal = 4) - private String deviceCode ; + private String deviceCode; @JSONField(name = "DeviceType", ordinal = 5) - private int deviceType ; + private int deviceType; public String getRefId() { return refId; diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/pojo/LAPI.java b/cloud/lapi/src/main/java/com/sincere/lapi/pojo/LAPI.java index 807144c..f79fb63 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/pojo/LAPI.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/pojo/LAPI.java @@ -5,7 +5,7 @@ import com.alibaba.fastjson.annotation.JSONField; public class LAPI { @JSONField(name = "Response", ordinal = 1) - private LAPIResponse response ; + private LAPIResponse response; public LAPIResponse getResponse() { return response; diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/server/ServerRun.java b/cloud/lapi/src/main/java/com/sincere/lapi/server/ServerRun.java index 8fc7734..632b503 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/server/ServerRun.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/server/ServerRun.java @@ -4,9 +4,9 @@ import com.sincere.lapi.server.thread.ServerThread; public class ServerRun { - public void start(int port){ + public void start(int port) { try { - Thread runthread = new Thread(new ServerThread(port),"LapiServer"); + Thread runthread = new Thread(new ServerThread(port), "LapiServer"); runthread.start(); } catch (Exception e) { System.out.println("Fail to create loop for:" + e); diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/server/UrlParam.java b/cloud/lapi/src/main/java/com/sincere/lapi/server/UrlParam.java index 0063ff3..ca210b0 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/server/UrlParam.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/server/UrlParam.java @@ -3,10 +3,10 @@ package com.sincere.lapi.server; public class UrlParam { //远程开门 - public static String remote_open = "/LAPI/V1.0/PACS/Controller/RemoteOpened" ; + public static String remote_open = "/LAPI/V1.0/PACS/Controller/RemoteOpened"; //默认员工库 添加员工 默认员工库id=3 - public static String person_add = "/LAPI/V1.0/PeopleLibraries/3/People" ; + public static String person_add = "/LAPI/V1.0/PeopleLibraries/3/People"; //设备在线 - public static String keep_alive = "/LAPI/V1.0/System/KeepAlive" ; + public static String keep_alive = "/LAPI/V1.0/System/KeepAlive"; } diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/server/handler/HttpClientHandler.java b/cloud/lapi/src/main/java/com/sincere/lapi/server/handler/HttpClientHandler.java index 373168b..1817a10 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/server/handler/HttpClientHandler.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/server/handler/HttpClientHandler.java @@ -42,68 +42,68 @@ public class HttpClientHandler extends ChannelInboundHandlerAdapter { Log_report.info(content); //心跳 更新设备 if (content.contains("/LAPI/V1.0/PACS/Controller/HeartReportInfo")) { - HeartInfo heartInfo = JSONObject.parseObject(getJson(content),HeartInfo.class); - call.addChannel(heartInfo.getDeviceCode(),ctx); + HeartInfo heartInfo = JSONObject.parseObject(getJson(content), HeartInfo.class); + call.addChannel(heartInfo.getDeviceCode(), ctx); attendanceService.addAttendance(heartInfo.getDeviceCode()); - }else if (content.contains("Response")) { - try{ + } else if (content.contains("Response")) { + try { LAPIResponse lapiResponse = JSONObject.parseObject(content.substring(content.indexOf("{")), LAPI.class).getResponse(); - if(lapiResponse.getResponseUrl().equals(UrlParam.person_add)){ - attendanceService.insertSend(lapiResponse,call.getDeviceCodeByChannel(ctx)); + if (lapiResponse.getResponseUrl().equals(UrlParam.person_add)) { + attendanceService.insertSend(lapiResponse, call.getDeviceCodeByChannel(ctx)); } - }catch (Exception e){ + } catch (Exception e) { } - }else { + } else { String deviceCode = call.getDeviceCodeByChannel(ctx); - if(content.contains("Content-Type")){ + if (content.contains("Content-Type")) { //第一个包-- 则对之前数据进行处理 StringBuffer data = call.getDeviceDataMap(deviceCode); - handleData(attendanceService,deviceCode,data.toString()); + handleData(attendanceService, deviceCode, data.toString()); //数据放入map中 data = new StringBuffer(); data.append(content); - call.setDeviceDataMap(deviceCode,data); - }else { + call.setDeviceDataMap(deviceCode, data); + } else { //分包数据 连接 StringBuffer data = call.getDeviceDataMap(deviceCode); data.append(content); - call.setDeviceDataMap(deviceCode,data); + call.setDeviceDataMap(deviceCode, data); } } ctx.flush(); } public void handleData(AttendanceService attendanceService, - String deviceCode , String data){ + String deviceCode, String data) { if (data.contains("/LAPI/V1.0/System/Event/Notification/PersonVerification")) { - try{ + try { data = data.substring(data.indexOf("{")); JSONObject object = JSONObject.parseObject(data); int timestamp = (Integer) object.get("Timestamp"); JSONArray faceInfoList = (JSONArray) object.get("FaceInfoList"); JSONObject faceInfo = faceInfoList.getJSONObject(0); BigDecimal temperature = (BigDecimal) faceInfo.get("Temperature"); - JSONArray libMatInfoList = (JSONArray)object.get("LibMatInfoList"); + JSONArray libMatInfoList = (JSONArray) object.get("LibMatInfoList"); JSONObject person = libMatInfoList.getJSONObject(0); - int personId = (Integer) person.get("MatchPersonID") ; + int personId = (Integer) person.get("MatchPersonID"); int userType = (Integer) person.get("MatchFaceID"); - attendanceService.insertRecode(personId+"",deviceCode,timestamp+"000",temperature,userType); - }catch (Exception e){ + attendanceService.insertRecode(personId + "", deviceCode, timestamp + "000", temperature, userType); + } catch (Exception e) { e.printStackTrace(); } } } - public String getJson(String context){ - String msg = context.substring(context.indexOf("{"),context.indexOf("}")+1); - return msg ; + public String getJson(String context) { + String msg = context.substring(context.indexOf("{"), context.indexOf("}") + 1); + return msg; } //心跳回包 @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { super.channelActive(ctx); - HeartBack heartBack =new HeartBack(); + HeartBack heartBack = new HeartBack(); heartBack.setCode(0); heartBack.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis()))); ByteBuf myContent = copiedBuffer(heartBack.toString(), CharsetUtil.UTF_8); @@ -116,15 +116,15 @@ public class HttpClientHandler extends ChannelInboundHandlerAdapter { response.headers().set("X-Frame-Options", "SAMEORIGIN"); //ChannelFuture future = ctx.writeAndFlush(response); - // System.out.println(future.isSuccess()); + // System.out.println(future.isSuccess()); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { //super.exceptionCaught(ctx, cause); Channel incoming = ctx.channel(); - System.out.println("SimpleChatClient:" + incoming.remoteAddress()+"异常 : "+ cause); + System.out.println("SimpleChatClient:" + incoming.remoteAddress() + "异常 : " + cause); //异常出现就关闭连接 - if(incoming.isActive())ctx.close(); + if (incoming.isActive()) ctx.close(); } } diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/server/init/NettyFactory.java b/cloud/lapi/src/main/java/com/sincere/lapi/server/init/NettyFactory.java index ad97ad9..0aa3ef1 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/server/init/NettyFactory.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/server/init/NettyFactory.java @@ -26,7 +26,7 @@ public class NettyFactory { b.childHandler(new LapiServerInitializer()); //等待处理的队列大小 b.option(ChannelOption.SO_BACKLOG, 128); - // b.option(ChannelOption.SO_RCVBUF,1024*1024*10); + // b.option(ChannelOption.SO_RCVBUF,1024*1024*10); //是否启用心跳保活机制。在双方TCP套接字建立连接后(即都进入ESTABLISHED状态)并且在两个小时左右上层没有任何数据传输的情况下,这套机制才会被激活。 //childOption是用来给父级ServerChannel之下的Channels设置参数的 b.childOption(ChannelOption.SO_KEEPALIVE, true); diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/server/pojo/HeartBack.java b/cloud/lapi/src/main/java/com/sincere/lapi/server/pojo/HeartBack.java index 658feb9..12a8bff 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/server/pojo/HeartBack.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/server/pojo/HeartBack.java @@ -12,16 +12,16 @@ public class HeartBack { private String time; //private class Data{ - // @JSONField(name = "Time", ordinal = 1) - //private String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())); + // @JSONField(name = "Time", ordinal = 1) + //private String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())); - public String getTime() { - return time; - } + public String getTime() { + return time; + } - public void setTime(String time) { - this.time = time; - } + public void setTime(String time) { + this.time = time; + } //} public String getResponseURL() { @@ -41,11 +41,11 @@ public class HeartBack { } //public Data getData() { - //return data; + //return data; //} //public void setData(Data data) { - //this.data = data; + //this.data = data; //} @Override @@ -54,7 +54,7 @@ public class HeartBack { "\"ResponseURL\": \"/LAPI/V1.0/PACS/Controller/HeartReportInfo\", \n" + "\"Code\": 0, \n" + "\"Data\": {\n" + - " \"Time\": \"" + time + "\"\n" + + " \"Time\": \"" + time + "\"\n" + "}\n" + "}\n"; } diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/service/request/AttendanceService.java b/cloud/lapi/src/main/java/com/sincere/lapi/service/request/AttendanceService.java index be332b7..e4fe953 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/service/request/AttendanceService.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/service/request/AttendanceService.java @@ -30,46 +30,46 @@ public class AttendanceService { private static final Logger Log_operate = LoggerUtils.Logger(LogName.operate); @Autowired - ScFeign scFeign ; + ScFeign scFeign; @Autowired - XaFeign xaFeign ; + XaFeign xaFeign; - private static Map resultCodeMap = new HashMap<>(); + private static Map resultCodeMap = new HashMap<>(); static { - resultCodeMap.put(1,"通用执行失败"); - resultCodeMap.put(2,"初始化检测失败"); - resultCodeMap.put(3,"人脸检测失败"); - resultCodeMap.put(4,"图片未检测到人脸"); - resultCodeMap.put(5,"jpeg 照片解码失败"); - resultCodeMap.put(6,"人脸图片质量分数不满足"); - resultCodeMap.put(7,"图片缩放失败"); - resultCodeMap.put(8,"未启用智能"); - resultCodeMap.put(9,"图片不存在或过大/过小"); + resultCodeMap.put(1, "通用执行失败"); + resultCodeMap.put(2, "初始化检测失败"); + resultCodeMap.put(3, "人脸检测失败"); + resultCodeMap.put(4, "图片未检测到人脸"); + resultCodeMap.put(5, "jpeg 照片解码失败"); + resultCodeMap.put(6, "人脸图片质量分数不满足"); + resultCodeMap.put(7, "图片缩放失败"); + resultCodeMap.put(8, "未启用智能"); + resultCodeMap.put(9, "图片不存在或过大/过小"); } - public void addAttendance(String clientId){ + public void addAttendance(String clientId) { SZ_AttendanceDto dto = new SZ_AttendanceDto(); dto.setClint_id(clientId); dto.setClint_type("25"); scFeign.addAttendance(dto); } - public void insertRecode(String customerId , String deviceCode , String time , BigDecimal temperature ,int userType){ + public void insertRecode(String customerId, String deviceCode, String time, BigDecimal temperature, int userType) { //1 老师 2 学生 SZ_AttendanceDto attendanceDto = scFeign.selectAttendaceWithId(deviceCode); FaceRecoder faceRecoder = new FaceRecoder(); faceRecoder.setDeviceid(deviceCode); faceRecoder.setInorout(attendanceDto.getOutOrIn()); faceRecoder.setTime(DateUtils.getByLong(time)); - if(userType == 1){ + if (userType == 1) { SzVSchoolTeacher teacher = scFeign.selectByTeacherId(Integer.valueOf(customerId)); faceRecoder.setCardnum(teacher.getTeacherNum()); faceRecoder.setUserId(customerId); faceRecoder.setImgurl(teacher.getFace()); faceRecoder.setName(teacher.getName()); - }else { + } else { SzVSchoolStudent student = scFeign.selectByStudentId(Integer.valueOf(customerId)); faceRecoder.setName(student.getName()); faceRecoder.setImgurl(student.getPhoto()); @@ -86,57 +86,57 @@ public class AttendanceService { record.setSchoolid(student.getSchoolId()); scFeign.insertTemperature(record); } - Log_operate.info("刷脸成功-----设备号:"+deviceCode+"---------"+"name:"+faceRecoder.getName()); + Log_operate.info("刷脸成功-----设备号:" + deviceCode + "---------" + "name:" + faceRecoder.getName()); xaFeign.insertRecode(faceRecoder); } - public void insertSend(LAPIResponse response , String deviceCode){ - try{ - if(response.getStatusString().equals("Succeed")){ + public void insertSend(LAPIResponse response, String deviceCode) { + try { + if (response.getStatusString().equals("Succeed")) { JSONObject data = JSONObject.parseObject(response.getData()); - JSONArray personList = (JSONArray)data.get("PersonList") ; - JSONObject person = (JSONObject)personList.get(0) ; + JSONArray personList = (JSONArray) data.get("PersonList"); + JSONObject person = (JSONObject) personList.get(0); int personId = (Integer) person.get("PersonID"); JSONArray faceList = (JSONArray) person.get("FaceList"); JSONObject face = (JSONObject) faceList.get(0); - int code = (Integer) face.get("ResultCode") ; - int userType = (Integer)face.get("FaceID"); - String num , photo , name ; - int schoolId ; - if(userType == 1){ + int code = (Integer) face.get("ResultCode"); + int userType = (Integer) face.get("FaceID"); + String num, photo, name; + int schoolId; + if (userType == 1) { SzVSchoolTeacher teacher = scFeign.selectByTeacherId(personId); num = teacher.getTeacherNum(); photo = teacher.getFace(); name = teacher.getName(); schoolId = teacher.getSchoolId(); - }else { + } else { SzVSchoolStudent student = scFeign.selectByStudentId(personId); num = student.getStudentNum(); - photo = student.getPhoto() ; + photo = student.getPhoto(); name = student.getName(); schoolId = student.getSchoolId(); } - if(code == 0){ - Log_operate.info("下发成功-----设备号:"+deviceCode+"---------"+"name:"+name); - insertSuccess(deviceCode,personId,num,name,photo,schoolId,userType); - }else { - Log_operate.info("下发失败-----设备号:"+deviceCode+"---------"+"name:"+name); - insertFail(deviceCode,personId,num,name,photo,schoolId,userType,code,resultCodeMap.get(code)); + if (code == 0) { + Log_operate.info("下发成功-----设备号:" + deviceCode + "---------" + "name:" + name); + insertSuccess(deviceCode, personId, num, name, photo, schoolId, userType); + } else { + Log_operate.info("下发失败-----设备号:" + deviceCode + "---------" + "name:" + name); + insertFail(deviceCode, personId, num, name, photo, schoolId, userType, code, resultCodeMap.get(code)); } - }else { - // insertFail(deviceCode,teacher.getTeacherId(),teacher.getTeacherNum(),teacher.getName(),teacher.getFace(),teacher.getSchoolId(),1,response.getStatusCode(),response.getStatusString()); + } else { + // insertFail(deviceCode,teacher.getTeacherId(),teacher.getTeacherNum(),teacher.getName(),teacher.getFace(),teacher.getSchoolId(),1,response.getStatusCode(),response.getStatusString()); } - }catch (Exception e){ + } catch (Exception e) { } } - private void insertSuccess(String deviceId , int customerId , String num , String name , String imgPath , int schoolId ,int userType){ + private void insertSuccess(String deviceId, int customerId, String num, String name, String imgPath, int schoolId, int userType) { FaceSendsuccess send = new FaceSendsuccess(); send.setDeviceid(deviceId); - send.setCustomerid(customerId+""); + send.setCustomerid(customerId + ""); send.setDevicetype(25); send.setImgpath(imgPath); send.setSchoolid(schoolId); @@ -146,10 +146,10 @@ public class AttendanceService { xaFeign.insertFaceSuccess(send); } - private void insertFail(String deviceId , int customerId , String num , String name , String imgPath , int schoolId ,int userType , int failType ,String failContent){ + private void insertFail(String deviceId, int customerId, String num, String name, String imgPath, int schoolId, int userType, int failType, String failContent) { FaceSendfail send = new FaceSendfail(); send.setDeviceid(deviceId); - send.setCustomerid(customerId+""); + send.setCustomerid(customerId + ""); send.setDevicetype(25); send.setImgpath(imgPath); send.setSchoolid(schoolId); diff --git a/cloud/lapi/src/main/java/com/sincere/lapi/service/request/TerminalHttpCall.java b/cloud/lapi/src/main/java/com/sincere/lapi/service/request/TerminalHttpCall.java index 58a066d..0f8bce8 100644 --- a/cloud/lapi/src/main/java/com/sincere/lapi/service/request/TerminalHttpCall.java +++ b/cloud/lapi/src/main/java/com/sincere/lapi/service/request/TerminalHttpCall.java @@ -24,26 +24,26 @@ public class TerminalHttpCall { //设备号 对应 通道 private Map channelMap = new ConcurrentHashMap(); //通道 对应 设备 - private Map channelCodeMap = new ConcurrentHashMap(); + private Map channelCodeMap = new ConcurrentHashMap(); //设备--上报数据 - private Map deviceDataMap = new ConcurrentHashMap<>(); + private Map deviceDataMap = new ConcurrentHashMap<>(); - public void setDeviceDataMap(String deviceCode , StringBuffer data){ - deviceDataMap.put(deviceCode,data); + public void setDeviceDataMap(String deviceCode, StringBuffer data) { + deviceDataMap.put(deviceCode, data); } - public StringBuffer getDeviceDataMap(String deviceCode){ + public StringBuffer getDeviceDataMap(String deviceCode) { StringBuffer data = deviceDataMap.get(deviceCode); - if(data == null){ + if (data == null) { data = new StringBuffer(); } - return data ; + return data; } - public void addChannel(String deviceCode , ChannelHandlerContext channelHandlerContext){ + public void addChannel(String deviceCode, ChannelHandlerContext channelHandlerContext) { channelMap.put(deviceCode, channelHandlerContext); - channelCodeMap.put(channelHandlerContext,deviceCode); + channelCodeMap.put(channelHandlerContext, deviceCode); } public ChannelHandlerContext getChannel(String deviceCode) { @@ -54,15 +54,15 @@ public class TerminalHttpCall { return null; } - public String getDeviceCodeByChannel(ChannelHandlerContext channelHandlerContext){ + public String getDeviceCodeByChannel(ChannelHandlerContext channelHandlerContext) { return channelCodeMap.get(channelHandlerContext); } - public boolean addPerson(String deviceCode , PersonInfoList personInfoList){ - return add(deviceCode, UrlParam.person_add,personInfoList); + public boolean addPerson(String deviceCode, PersonInfoList personInfoList) { + return add(deviceCode, UrlParam.person_add, personInfoList); } - private boolean put(String deviceCode , String prefixUrl) { + private boolean put(String deviceCode, String prefixUrl) { try { URI url = new URI(prefixUrl); //配置HttpRequest的请求数据和一些配置信息 @@ -72,18 +72,18 @@ public class TerminalHttpCall { .set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON) .set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); ChannelHandlerContext ctx = this.getChannel(deviceCode); - if(ctx == null){ + if (ctx == null) { return false; } ctx.writeAndFlush(request); - }catch (Exception e){ - System.out.println( e); + } catch (Exception e) { + System.out.println(e); return false; } return true; } - private boolean get(String deviceCode , String prefixUrl) { + private boolean get(String deviceCode, String prefixUrl) { try { URI url = new URI(prefixUrl); //配置HttpRequest的请求数据和一些配置信息 @@ -93,18 +93,18 @@ public class TerminalHttpCall { .set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON) .set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); ChannelHandlerContext ctx = this.getChannel(deviceCode); - if(ctx == null){ + if (ctx == null) { return false; } ctx.writeAndFlush(request); - }catch (Exception e){ - System.out.println( e); + } catch (Exception e) { + System.out.println(e); return false; } return true; } - private boolean add(String deviceCode , String prefixUrl , E e) { + private boolean add(String deviceCode, String prefixUrl, E e) { try { URI url = new URI(prefixUrl); //配置HttpRequest的请求数据和一些配置信息 @@ -117,12 +117,12 @@ public class TerminalHttpCall { //设置传递请求内容的长度 .set(HttpHeaderNames.CONTENT_LENGTH, request.content().readableBytes()); ChannelHandlerContext ctx = this.getChannel(deviceCode); - if(ctx == null){ + if (ctx == null) { return false; } ctx.writeAndFlush(request); return true; - }catch (Exception exc){ + } catch (Exception exc) { System.out.println(exc); } return false; diff --git a/cloud/lapi/src/main/resources/logback.xml b/cloud/lapi/src/main/resources/logback.xml index fa9bb17..8258de3 100644 --- a/cloud/lapi/src/main/resources/logback.xml +++ b/cloud/lapi/src/main/resources/logback.xml @@ -1,7 +1,7 @@ - + @@ -19,7 +19,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -32,7 +33,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -51,8 +53,9 @@ -        - +         + + \ No newline at end of file diff --git a/cloud/mypulsar/pom.xml b/cloud/mypulsar/pom.xml index 27d642f..09f516e 100644 --- a/cloud/mypulsar/pom.xml +++ b/cloud/mypulsar/pom.xml @@ -24,8 +24,8 @@ - - + + @@ -60,11 +60,17 @@ - - - - - + + org.slf4j + slf4j-log4j12 + 2.0.0-alpha1 + + + + + + + com.alibaba @@ -109,9 +115,9 @@ - - - + + + @@ -134,8 +140,8 @@ spring-boot-maven-plugin true - ZIP - + ZIP + nothing diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/MyRunnerableInt.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/MyRunnerableInt.java index 9b49738..608a9e4 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/MyRunnerableInt.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/MyRunnerableInt.java @@ -148,7 +148,7 @@ public class MyRunnerableInt implements ApplicationRunner { // String clintId = deviceDao.selectAttendance(devId); // if (clintId.equals(devId)) { - deviceDao.updateStatus(devId, isConnection,new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + deviceDao.updateStatus(devId, isConnection, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); // } else { // deviceDao.insert(devId, "-2", isConnection); // } @@ -192,15 +192,15 @@ public class MyRunnerableInt implements ApplicationRunner { String value = statue.getValue(); deviceBean.setValue(value); - System.out.println(devId+"-插入数据:" +value); +// System.out.println(devId+"-插入数据:" +value); switch (code) { case "va_temperature"://温度 - deviceBean.setValue(Integer.parseInt(value)/100+""); + deviceBean.setValue(Integer.parseInt(value) / 100 + ""); calOpenOrCloseDevWithtemper(deviceBean);//计算开启或关闭设备 log("温度:" + value); break; case "va_humidity"://湿度 - deviceBean.setValue(Integer.parseInt(value)/100+""); + deviceBean.setValue(Integer.parseInt(value) / 100 + ""); log("湿度:" + value); break; case "temper_alarm"://防拆报警 @@ -292,7 +292,7 @@ public class MyRunnerableInt implements ApplicationRunner { private void calOpenOrCloseDevWithPir(DeviceBean deviceBean) { List calDevContrls = deviceDao.getCalDevContrlWidthDevId(deviceBean.getDevId()); - System.out.println("calOpenOrCloseDevWithPir:"+calDevContrls.toString()); +// System.out.println("calOpenOrCloseDevWithPir:"+calDevContrls.toString()); if (null != calDevContrls && calDevContrls.size() > 0) { if (deviceBean.getValue().equals("有人")) deviceBean.setValue("1"); else deviceBean.setValue("0"); diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/MypulsarApplication.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/MypulsarApplication.java index 4a06fe7..6fc2997 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/MypulsarApplication.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/MypulsarApplication.java @@ -1,8 +1,12 @@ package com.example.mypulsar; import org.mybatis.spring.annotation.MapperScan; +import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration; import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @@ -11,6 +15,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.scheduling.annotation.EnableScheduling; +@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class}) @SpringBootApplication @MapperScan("com.example.mypulsar.dao") @EnableDiscoveryClient diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/Test.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/Test.java index 517e3bb..841bc21 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/Test.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/Test.java @@ -25,8 +25,6 @@ public class Test extends SpringBootServletInitializer { public static void main(String[] args) { - - } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/CalDevContrl.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/CalDevContrl.java index 8c754f1..69b5057 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/CalDevContrl.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/CalDevContrl.java @@ -20,7 +20,7 @@ public class CalDevContrl implements Serializable { private String InUserTime; - private int Status ; + private int Status; private String DevBeId;//控制的设备id diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/ClassRoom.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/ClassRoom.java new file mode 100644 index 0000000..790db9f --- /dev/null +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/ClassRoom.java @@ -0,0 +1,35 @@ +package com.example.mypulsar.bean; + +/** + * 教室对象 + */ +public class ClassRoom { + + private Long ID; + + private String RoomName; + + public Long getID() { + return ID; + } + + public void setID(Long ID) { + this.ID = ID; + } + + public String getRoomName() { + return RoomName; + } + + public void setRoomName(String roomName) { + RoomName = roomName; + } + + @Override + public String toString() { + return "ClassRoom{" + + "ID=" + ID + + ", RoomName='" + RoomName + '\'' + + '}'; + } +} diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Command.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Command.java index 8ee7e63..bea770c 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Command.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Command.java @@ -1,25 +1,25 @@ package com.example.mypulsar.bean; -public class Command{ - private String code; +public class Command { + private String code; - public String getCode() { - return code; - } + public String getCode() { + return code; + } - public void setCode(String code) { - this.code = code; - } + public void setCode(String code) { + this.code = code; + } - public String getValue() { - return value; - } + public String getValue() { + return value; + } - public void setValue(String value) { - this.value = value; - } + public void setValue(String value) { + this.value = value; + } - private String value; + private String value; @Override public String toString() { diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTime.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTime.java index 4e2b49e..6c696b0 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTime.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTime.java @@ -4,7 +4,7 @@ import java.io.Serializable; public class InUserTime implements Serializable { -// [{"Week":"5","StartTime":"14:02","EndTime":"14:06"}] + // [{"Week":"5","StartTime":"14:02","EndTime":"14:06"}] private String Week; private String StartTime; diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTimeList.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTimeList.java index eb7e1b4..90faf7b 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTimeList.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/InUserTimeList.java @@ -5,7 +5,7 @@ import java.util.List; public class InUserTimeList implements Serializable { -private List inUserTimes; + private List inUserTimes; public List getInUserTimes() { return inUserTimes; diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Wl_LinkModeBean.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Wl_LinkModeBean.java new file mode 100644 index 0000000..34c3e05 --- /dev/null +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Wl_LinkModeBean.java @@ -0,0 +1,44 @@ +package com.example.mypulsar.bean; + +public class Wl_LinkModeBean { + + private String ModeName; + + private String WeekTime; + + private String Field; + + + public String getModeName() { + return ModeName; + } + + public void setModeName(String modeName) { + ModeName = modeName; + } + + public String getWeekTime() { + return WeekTime; + } + + public void setWeekTime(String weekTime) { + WeekTime = weekTime; + } + + public String getField() { + return Field; + } + + public void setField(String field) { + Field = field; + } + + @Override + public String toString() { + return "Wl_LinkModeBean{" + + "ModeName='" + ModeName + '\'' + + ", WeekTime='" + WeekTime + '\'' + + ", Field='" + Field + '\'' + + '}'; + } +} diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/campusDao/CampusDao.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/campusDao/CampusDao.java new file mode 100644 index 0000000..ae5a992 --- /dev/null +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/campusDao/CampusDao.java @@ -0,0 +1,18 @@ +package com.example.mypulsar.campusDao; + +import com.example.mypulsar.bean.ClassRoom; +import org.apache.ibatis.annotations.Param; +import org.mapstruct.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface CampusDao { + + + List selectClassRoom(@Param("SchoolId") String SchoolId); + + +} diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/control/UserControl.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/control/UserControl.java index dd5bc4c..956619f 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/control/UserControl.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/control/UserControl.java @@ -25,8 +25,8 @@ public class UserControl { // } - @RequestMapping(value = "getDevice",method = RequestMethod.GET) - public List getDevice(@RequestParam("devId")String devId){ + @RequestMapping(value = "getDevice", method = RequestMethod.GET) + public List getDevice(@RequestParam("devId") String devId) { return deviceDao.getDevice(devId); diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/dao/DeviceDao.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/dao/DeviceDao.java index d8b8008..c5feb61 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/dao/DeviceDao.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/dao/DeviceDao.java @@ -1,5 +1,6 @@ package com.example.mypulsar.dao; +import com.example.mypulsar.bean.Wl_LinkModeBean; import com.example.mypulsar.bean.CalDevBeContrl; import com.example.mypulsar.bean.CalDevContrl; import com.example.mypulsar.bean.DeviceBean; @@ -16,22 +17,21 @@ public interface DeviceDao { //插入记录 @Insert("insert into Iot_Device values (#{dataId},#{devId},#{productKey},#{code},#{value},#{bizCode},#{time},#{name},#{dpId},#{uid},#{dev_status},#{dev_type})") - int addDevice(@Param("dataId")String dataId,@Param("devId")String devId,@Param("productKey")String productKey, - @Param("code")String code,@Param("value")String value,@Param("bizCode")String bizCode,@Param("time")String time, - @Param("name")String name,@Param("dpId")String dpId,@Param("uid")String uid,@Param("dev_status")int dev_status,@Param("dev_type")int dev_type); + int addDevice(@Param("dataId") String dataId, @Param("devId") String devId, @Param("productKey") String productKey, + @Param("code") String code, @Param("value") String value, @Param("bizCode") String bizCode, @Param("time") String time, + @Param("name") String name, @Param("dpId") String dpId, @Param("uid") String uid, @Param("dev_status") int dev_status, @Param("dev_type") int dev_type); @Insert("insert into WL_Attendance (clint_id,clint_type,school_id,isConnection) values (#{clint_id},#{school_id},#{isConnection})") - int insert(@Param("clint_id")String clint_id,@Param("school_id")String school_id, - @Param("isConnection")String isConnection); + int insert(@Param("clint_id") String clint_id, @Param("school_id") String school_id, + @Param("isConnection") String isConnection); @Update("update WL_Attendance set isConnection = #{isConnection},OnlineTime = #{OnlineTime} where clint_id = #{clint_id}") - int updateStatus(@Param("clint_id")String clint_id,@Param("isConnection")String isConnection,@Param("OnlineTime")String OnlineTime); - + int updateStatus(@Param("clint_id") String clint_id, @Param("isConnection") String isConnection, @Param("OnlineTime") String OnlineTime); @Select("select clint_id from WL_Attendance where clint_id = #{clint_id}") - String selectAttendance(@Param("clint_id")String clint_id); + String selectAttendance(@Param("clint_id") String clint_id); @Select("select * from Iot_Device where devId = #{devId}") List getDevice(@Param("devId") String devId); @@ -50,16 +50,12 @@ public interface DeviceDao { @Select("select * from CalDevContrl where Devid = #{Devid} and Status = 1 and ModelType = 9") List getTempCalWitdDevid(@Param("Devid") String devId); - - @Update("update WL_LinkageMode set Field = #{Field} where id = #{id}") - void updateWL_LinkageModeWithId(@Param("id")int id,@Param("Field")String Field); - @Select("select clint_id\n" + "from WL_Attendance where school_id = 1085 and clint_type = 12 and state = 1") List getHWDEvices(int i); @Select("select TOP(1) ConValue from CalDevBeContrl where State = 1 and ConDevId = #{ConDevId}") - String getConBeValue(@Param("ConDevId")String ConDevId); + String getConBeValue(@Param("ConDevId") String ConDevId); @Select("select Top(1) InUserTime from CalDevContrl where Status = 1") @@ -74,6 +70,12 @@ public interface DeviceDao { @Select("select Top(1)name from WL_Attendance where State = 1 and school_id = 1085 and clint_type = 12 and clint_id =#{clint_id} order by intime desc") - String getWLName(@Param("clint_id")String clint_id); + String getWLName(@Param("clint_id") String clint_id); + + List getHWAttsWithRoomId(@Param("belongAreaId") String belongAreaId); + + long insertCalDevBeControl(CalDevBeContrl calDevBeContrl); + + List getWL_LinkMode(@Param("SchoolId") String SchoolId); } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/CampusDataSourceConfig.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/CampusDataSourceConfig.java new file mode 100644 index 0000000..30035ed --- /dev/null +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/CampusDataSourceConfig.java @@ -0,0 +1,43 @@ +package com.example.mypulsar.dbconfig; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.core.JdbcTemplate; + +import javax.sql.DataSource; + +@Configuration +@MapperScan(basePackages = "com.example.mypulsar.campusDao", sqlSessionFactoryRef = "campusSqlSessionFactory") +public class CampusDataSourceConfig { + @Primary + @Bean(name = "campusDataSource") + @ConfigurationProperties("spring.datasource.campus") + public DataSource masterDataSource() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "campusSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("campusDataSource") DataSource dataSource) throws Exception { + + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/*.xml")); + return sessionFactoryBean.getObject(); + + } + + @Bean + public JdbcTemplate campusJdbcTemplate(@Qualifier("campusDataSource") DataSource dataSource) { + return new JdbcTemplate(dataSource); + } + +} diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/IotplatDataSourceConfig.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/IotplatDataSourceConfig.java new file mode 100644 index 0000000..0125188 --- /dev/null +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/dbconfig/IotplatDataSourceConfig.java @@ -0,0 +1,38 @@ +package com.example.mypulsar.dbconfig; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; + +import javax.sql.DataSource; + +@Configuration +@MapperScan(basePackages = "com.example.mypulsar.dao", sqlSessionFactoryRef = "iotplatSqlSessionFactory") +public class IotplatDataSourceConfig { + + @Primary + @Bean(name = "iotplatDataSource") + @ConfigurationProperties("spring.datasource.iotplat") + public DataSource masterDataSource() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "iotplatSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("iotplatDataSource") DataSource dataSource) throws Exception { + + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:iotmapper/*.xml")); + return sessionFactoryBean.getObject(); + + } + +} diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/message/MessageDataVO.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/message/MessageDataVO.java index f9c1978..ef6271b 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/message/MessageDataVO.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/message/MessageDataVO.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; /** + * */ public class MessageDataVO implements Serializable { diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/AESBase64Utils.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/AESBase64Utils.java index 3b761ba..3207736 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/AESBase64Utils.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/AESBase64Utils.java @@ -11,13 +11,13 @@ import org.apache.pulsar.shade.org.apache.commons.codec.binary.StringUtils; public class AESBase64Utils { - private static final String AES = "AES"; + private static final String AES = "AES"; // 加密算法 - private String ALGO; + private String ALGO; // 16位的加密密钥 - private byte[] keyValue; + private byte[] keyValue; /** * 用来进行加密的操作 diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MessageHandlerTask.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MessageHandlerTask.java index e527c43..9a7d04f 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MessageHandlerTask.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MessageHandlerTask.java @@ -9,6 +9,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** + * */ public class MessageHandlerTask implements Runnable { diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthentication.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthentication.java index e819235..42edf98 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthentication.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthentication.java @@ -9,34 +9,34 @@ import org.apache.pulsar.client.api.PulsarClientException; public class MqAuthentication implements Authentication { - private String accessId; + private String accessId; - private String accessKey; + private String accessKey; - public MqAuthentication(String accessId, String accessKey) { - this.accessId = accessId; - this.accessKey = accessKey; - } + public MqAuthentication(String accessId, String accessKey) { + this.accessId = accessId; + this.accessKey = accessKey; + } - @Override - public String getAuthMethodName() { - return "auth1"; - } + @Override + public String getAuthMethodName() { + return "auth1"; + } - @Override - public org.apache.pulsar.client.api.AuthenticationDataProvider getAuthData() throws PulsarClientException { - return new MqAuthenticationDataProvider(this.accessId, this.accessKey); - } + @Override + public org.apache.pulsar.client.api.AuthenticationDataProvider getAuthData() throws PulsarClientException { + return new MqAuthenticationDataProvider(this.accessId, this.accessKey); + } - @Override - public void configure(Map map) { - } + @Override + public void configure(Map map) { + } - @Override - public void start() throws PulsarClientException { - } + @Override + public void start() throws PulsarClientException { + } - @Override - public void close() throws IOException { - } + @Override + public void close() throws IOException { + } } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthenticationDataProvider.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthenticationDataProvider.java index c50b4d8..8dc4a10 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthenticationDataProvider.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqAuthenticationDataProvider.java @@ -6,26 +6,26 @@ import org.apache.pulsar.shade.org.apache.commons.codec.digest.DigestUtils; public class MqAuthenticationDataProvider implements AuthenticationDataProvider { - private String commandData; - - public MqAuthenticationDataProvider(String accessId, String accessKey) { - this.commandData = String.format("{\"username\":\"%s\",\"password\":\"%s\"}", accessId, - DigestUtils.md5Hex(accessId + DigestUtils.md5Hex(accessKey)).substring(8, 24)); - } - - @Override - public String getCommandData() { - return commandData; - } - - @Override - public boolean hasDataForHttp() { - return false; - } - - @Override - public boolean hasDataFromCommand() { - return true; - } + private String commandData; + + public MqAuthenticationDataProvider(String accessId, String accessKey) { + this.commandData = String.format("{\"username\":\"%s\",\"password\":\"%s\"}", accessId, + DigestUtils.md5Hex(accessId + DigestUtils.md5Hex(accessKey)).substring(8, 24)); + } + + @Override + public String getCommandData() { + return commandData; + } + + @Override + public boolean hasDataForHttp() { + return false; + } + + @Override + public boolean hasDataFromCommand() { + return true; + } } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConfigs.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConfigs.java index b757123..12c53af 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConfigs.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConfigs.java @@ -11,5 +11,5 @@ public class MqConfigs { public final static String accessKey = "tqcuypeytayths9pudcn937wfupugc3t"; public final static Integer MAX_REDELIVER_COUNT = 3; - public final static Integer CONSUMER_NUM= 3; + public final static Integer CONSUMER_NUM = 3; } \ No newline at end of file diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConstants.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConstants.java index 8ac53e5..824d4bf 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConstants.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConstants.java @@ -3,7 +3,7 @@ package com.example.mypulsar.mq; public class MqConstants { - public final static String ENV_PROD = "prod"; + public final static String ENV_PROD = "prod"; - public final static String ENV_TEST = "test"; + public final static String ENV_TEST = "test"; } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConsumer.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConsumer.java index 1b8e14a..cc03923 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConsumer.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqConsumer.java @@ -11,93 +11,93 @@ import org.slf4j.LoggerFactory; public class MqConsumer { - private static final Logger logger = LoggerFactory.getLogger(MqConsumer.class); - - private String serviceUrl; - - private String accessId; - - private String accessKey; - - private MqEnv env = MqEnv.PROD; - - private int maxRedeliverCount = 3; - - private IMessageListener messageListener; - - public static MqConsumer build() { - return new MqConsumer(); - } - - public MqConsumer serviceUrl(String serviceUrl) { - this.serviceUrl = serviceUrl; - return this; - } - - public MqConsumer accessId(String accessId) { - this.accessId = accessId; - return this; - } - - public MqConsumer accessKey(String accessKey) { - this.accessKey = accessKey; - return this; - } - - public MqConsumer env(MqEnv env) { - this.env = env; - return this; - } - - public MqConsumer maxRedeliverCount(int maxRedeliverCount) { - this.maxRedeliverCount = maxRedeliverCount; - return this; - } - - public MqConsumer messageListener(IMessageListener messageListener) { - this.messageListener = messageListener; - return this; - } - - /** - * Start consumer - * - * @throws Exception - */ - public void start() throws Exception { - if (serviceUrl == null || serviceUrl.trim().length() == 0) { - throw new IllegalStateException("serviceUrl must be initialized"); - } - if (accessId == null || accessId.trim().length() == 0) { - throw new IllegalStateException("accessId must be initialized"); - } - if (accessKey == null || accessKey.trim().length() == 0) { - throw new IllegalStateException("accessKey must be initialized"); - } - if (messageListener == null) { - throw new IllegalStateException("messageListener must be initialized"); - } - PulsarClient client = PulsarClient.builder().serviceUrl(serviceUrl).allowTlsInsecureConnection(true) - .authentication(new MqAuthentication(accessId, accessKey)).build(); - Consumer consumer = client.newConsumer().topic(String.format("%s/out/%s", accessId, env.getValue())) - .subscriptionName(String.format("%s-sub", accessId)).subscriptionType(SubscriptionType.Failover) - .deadLetterPolicy(DeadLetterPolicy.builder().maxRedeliverCount(maxRedeliverCount).build()).subscribe(); + private static final Logger logger = LoggerFactory.getLogger(MqConsumer.class); + + private String serviceUrl; + + private String accessId; + + private String accessKey; + + private MqEnv env = MqEnv.PROD; + + private int maxRedeliverCount = 3; + + private IMessageListener messageListener; + + public static MqConsumer build() { + return new MqConsumer(); + } + + public MqConsumer serviceUrl(String serviceUrl) { + this.serviceUrl = serviceUrl; + return this; + } + + public MqConsumer accessId(String accessId) { + this.accessId = accessId; + return this; + } + + public MqConsumer accessKey(String accessKey) { + this.accessKey = accessKey; + return this; + } + + public MqConsumer env(MqEnv env) { + this.env = env; + return this; + } + + public MqConsumer maxRedeliverCount(int maxRedeliverCount) { + this.maxRedeliverCount = maxRedeliverCount; + return this; + } + + public MqConsumer messageListener(IMessageListener messageListener) { + this.messageListener = messageListener; + return this; + } + + /** + * Start consumer + * + * @throws Exception + */ + public void start() throws Exception { + if (serviceUrl == null || serviceUrl.trim().length() == 0) { + throw new IllegalStateException("serviceUrl must be initialized"); + } + if (accessId == null || accessId.trim().length() == 0) { + throw new IllegalStateException("accessId must be initialized"); + } + if (accessKey == null || accessKey.trim().length() == 0) { + throw new IllegalStateException("accessKey must be initialized"); + } + if (messageListener == null) { + throw new IllegalStateException("messageListener must be initialized"); + } + PulsarClient client = PulsarClient.builder().serviceUrl(serviceUrl).allowTlsInsecureConnection(true) + .authentication(new MqAuthentication(accessId, accessKey)).build(); + Consumer consumer = client.newConsumer().topic(String.format("%s/out/%s", accessId, env.getValue())) + .subscriptionName(String.format("%s-sub", accessId)).subscriptionType(SubscriptionType.Failover) + .deadLetterPolicy(DeadLetterPolicy.builder().maxRedeliverCount(maxRedeliverCount).build()).subscribe(); // System.out.println("------------------:"+String.format("%s/out/%s", accessId, env.getValue())); - do { - try { - Message message = consumer.receive(); - messageListener.onMessageArrived(message); - consumer.acknowledge(message); - } catch (Throwable t) { + do { + try { + Message message = consumer.receive(); + messageListener.onMessageArrived(message); + consumer.acknowledge(message); + } catch (Throwable t) { // System.out.println("------------------:"+t.toString()); - logger.error("throwable---------------", t); - } - } while (true); - } + logger.error("throwable---------------", t); + } + } while (true); + } - public interface IMessageListener { + public interface IMessageListener { - void onMessageArrived(Message message) throws Exception; - } + void onMessageArrived(Message message) throws Exception; + } } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqEnv.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqEnv.java index 58eacbd..2027517 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqEnv.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/mq/MqEnv.java @@ -2,30 +2,30 @@ package com.example.mypulsar.mq; public enum MqEnv { - PROD("prod", "event", "online environment"), - TEST("test", "event-test", "test environment"); + PROD("prod", "event", "online environment"), + TEST("test", "event-test", "test environment"); - private String key; + private String key; - private String value; + private String value; - private String description; + private String description; - MqEnv(String key, String value, String description) { - this.key = key; - this.value = value; - this.description = description; - } + MqEnv(String key, String value, String description) { + this.key = key; + this.value = value; + this.description = description; + } - public String getKey() { - return key; - } + public String getKey() { + return key; + } - public String getValue() { - return value; - } + public String getValue() { + return value; + } - public String getDescription() { - return description; - } + public String getDescription() { + return description; + } } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSer.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSer.java index 54818b7..669deca 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSer.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSer.java @@ -3,5 +3,4 @@ package com.example.mypulsar.service; public interface ReceiverDataSer { - } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSerImp.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSerImp.java index a767ff5..c7947cb 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSerImp.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/service/ReceiverDataSerImp.java @@ -5,7 +5,7 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @Service -public class ReceiverDataSerImp implements ReceiverDataSer { +public class ReceiverDataSerImp implements ReceiverDataSer { @Autowired JdbcTemplate jdbcTemplate; diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/task/SchduledTasks.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/task/SchduledTasks.java index 3ba2717..2715ccd 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/task/SchduledTasks.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/task/SchduledTasks.java @@ -1,14 +1,17 @@ package com.example.mypulsar.task; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.example.mypulsar.bean.Wl_Attendace; +import com.example.mypulsar.bean.Wl_LinkModeBean; +import com.example.mypulsar.campusDao.CampusDao; import com.example.mypulsar.dao.DeviceDao; import com.example.mypulsar.utils.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.configurationprocessor.json.JSONArray; +import org.springframework.boot.configurationprocessor.json.JSONException; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -23,6 +26,9 @@ public class SchduledTasks { @Autowired DeviceDao deviceDao; + @Autowired + CampusDao campusDao; + private Logger logger = LoggerFactory.getLogger(SchduledTasks.class); public static Map conDevMap = new HashMap<>();//存储被控制的设备 @@ -36,11 +42,12 @@ public class SchduledTasks { boolean isClose = false; - @Scheduled(fixedRate = 15000) + @Scheduled(fixedRate = 60000) public void closeAttend() { logger.error("定时任务执行中......" + conDevMap.size()); + //遍历已经开启的空调设备 Iterator iterator = conDevMap.entrySet().iterator(); while (iterator.hasNext()) { @@ -57,7 +64,7 @@ public class SchduledTasks { String conValue = getRemoteId(deviceDao.getConBeValue(conBeDeviceId)); String name = deviceDao.getWLName(conBeDeviceId); - HttpUtil.addAirCode(String.format(closeModel, conValue), conBeDeviceId,name); + HttpUtil.addAirCode(String.format(closeModel, conValue), conBeDeviceId, name); conDevMap.remove(conBeDeviceId); } @@ -65,6 +72,13 @@ public class SchduledTasks { int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); + if (!isClose && hour < 23 && hour > 5) + initWlMode(); + + + + /* int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); + System.out.println("关闭设备:" + hour); @@ -111,24 +125,122 @@ public class SchduledTasks { if (indexTime < entTime && indexTime >= starTime) { isClose = false; - } + }*/ } - private void closeAllDevice() { + /** + * 根据物联模板判断是否关闭 + */ + private void initWlMode() { + + try { + + + isClose = true; + + //获取有效的模板 + List wl_linkModes = deviceDao.getWL_LinkMode("1085"); + + if (null != wl_linkModes) { + + for (int i = 0; i < wl_linkModes.size(); i++) { + + Wl_LinkModeBean wl_linkModeBean = wl_linkModes.get(i); + + String field = wl_linkModeBean.getField();//场地id + + String[] fields = field.split(",");//所有场地 + + String weekTime = wl_linkModeBean.getWeekTime();//时间 + try { + JSONArray jsonArray = new JSONArray(weekTime); + + if (null != jsonArray) { + for (int j = 0; j < jsonArray.length(); j++) { + org.springframework.boot.configurationprocessor.json.JSONObject jsonObject = jsonArray.getJSONObject(j); + + String weekStr = jsonObject.getString("Week"); + String[] weeks = weekStr.split(","); + + String startTime = jsonObject.getString("StartTime"); + + String endTime = jsonObject.getString("EndTime"); - isClose = true; - List deviceIds = deviceDao.getHWIds(); - System.out.println("关闭设备" + deviceIds.toString()); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("HH:mm:ss"); + + int indexWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1; + + for (int k = 0; k < weeks.length; k++) { + int week = Integer.parseInt(weeks[k]); + + if (week == indexWeek) { + Date startDate = null; + try { + startDate = simpleDateFormat.parse(startTime); + Date endDate = simpleDateFormat.parse(endTime); + Date date = simpleDateFormat1.parse(new Date().getHours() + ":" + new Date().getMinutes() + ":" + new Date().getSeconds()); + + long starTime = startDate.getTime(); + long indexTime = date.getTime(); + long entTime = endDate.getTime(); + + if (indexTime < starTime || indexTime > entTime) {//在时间之外 + + //关闭所有设备 + for (int l = 0; l < fields.length; l++) { + + String fieldId = fields[l]; + //获取红外遥控器 + List clintIds = deviceDao.getHWAttsWithRoomId(fieldId); + closeAllDevice(clintIds); + } + + } + + } catch (ParseException e) { + e.printStackTrace(); + } + } + + } + + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + } + } else { + //获取红外遥控器 + List clintIds = deviceDao.getHWIds(); + closeAllDevice(clintIds); + } + } catch (Exception e) { + e.printStackTrace(); + logger.error(e.toString()); + } + isClose = false;//保证条件一直在执行 + + } + + private void closeAllDevice(List deviceIds) { + +// isClose = true; +// System.out.println("关闭设备" + deviceIds.toString()); for (int i = 0; i < deviceIds.size(); i++) { String deviceId = deviceIds.get(i).getClint_id(); String conValue = getRemoteId(deviceDao.getConBeValue(deviceId)); String devName = deviceIds.get(i).getName(); - HttpUtil.addAirCode(String.format(closeModel, conValue), deviceId,devName); + HttpUtil.addAirCode(String.format(closeModel, conValue), deviceId, devName); } + } /** @@ -139,9 +251,9 @@ public class SchduledTasks { private String getRemoteId(String conValue) { try { - System.out.println("conValue:"+conValue); +// System.out.println("conValue:" + conValue); JSONObject jsonObject = JSON.parseObject(conValue); - if (null==jsonObject)return ""; + if (null == jsonObject) return ""; String remote_id = jsonObject.getString("remote_id"); return remote_id; } catch (Exception e) { @@ -151,5 +263,4 @@ public class SchduledTasks { } - } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ControlUtils.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ControlUtils.java index 52930a3..958994a 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ControlUtils.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ControlUtils.java @@ -49,8 +49,8 @@ public class ControlUtils { * @param deviceBean 温度传感器对象 */ public void conTemper(List calDevContrls, DeviceBean deviceBean) { - System.out.println("传感器感应设备:deviceBean:" + deviceBean.toString()); - FileUtils.getInstance().writeLogs(deviceBean.toString()+"\r\n"+calDevContrls.toString(),FileUtils.mypulsar); +// System.out.println("传感器感应设备:deviceBean:" + deviceBean.toString()); + FileUtils.getInstance().writeLogs(deviceBean.toString() + "\r\n" + calDevContrls.toString(), FileUtils.mypulsar); for (CalDevContrl cal : calDevContrls) { @@ -60,7 +60,7 @@ public class ControlUtils { // System.out.println("inUseTime:"+inUseTime); try { JSONArray jsonArray = new JSONArray(inUseTime); - FileUtils.getInstance().writeLogs(jsonArray.toString(),FileUtils.mypulsar); + FileUtils.getInstance().writeLogs(jsonArray.toString(), FileUtils.mypulsar); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); @@ -74,8 +74,8 @@ public class ControlUtils { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("HH:mm:ss"); - int indexWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK)-1; - FileUtils.getInstance().writeLogs(weekStr.toString()+"当前周:"+indexWeek,FileUtils.mypulsar); + int indexWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1; + FileUtils.getInstance().writeLogs(weekStr.toString() + "当前周:" + indexWeek, FileUtils.mypulsar); for (int j = 0; j < weeks.length; j++) { int week = Integer.parseInt(weeks[j]); if (week == indexWeek) { @@ -87,8 +87,8 @@ public class ControlUtils { long starTime = startDate.getTime(); long indexTime = date.getTime(); long entTime = endDate.getTime(); - System.out.println("时间比对:starTime:" + starTime + "-----indexTime:" + indexTime + "----entTime:" + entTime); - FileUtils.getInstance().writeLogs("开始时间:"+(indexTime < entTime)+"结束时间:"+(indexTime > starTime),FileUtils.mypulsar); +// System.out.println("时间比对:starTime:" + starTime + "-----indexTime:" + indexTime + "----entTime:" + entTime); + FileUtils.getInstance().writeLogs("开始时间:" + (indexTime < entTime) + "结束时间:" + (indexTime > starTime), FileUtils.mypulsar); if (indexTime < entTime && indexTime > starTime) { //比较器类型 int compreType = cal.getCompreType(); @@ -127,7 +127,7 @@ public class ControlUtils { int thrsoldValue = 0; - FileUtils.getInstance().writeLogs(cal.toString(),"caldevCntrol.txt"); + FileUtils.getInstance().writeLogs(cal.toString(), "caldevCntrol.txt"); if (cal.getModelType() == 10) {//人体感应 if (cal.getThreValue().equals("有人")) thrsoldValue = 1; @@ -183,11 +183,11 @@ public class ControlUtils { private synchronized boolean calTemp(String assDevice) { if (!StringUtils.isEmpty(assDevice)) { String[] devices = assDevice.split(","); - FileUtils.getInstance().writeLogs(assDevice+"设备数量:"+devices.length,"tempisOk.txt"); + FileUtils.getInstance().writeLogs(assDevice + "设备数量:" + devices.length, "tempisOk.txt"); for (int i = 0; i < devices.length; i++) { String device = devices[i]; - FileUtils.getInstance().writeLogs(device,"tempisOk.txt"); + FileUtils.getInstance().writeLogs(device, "tempisOk.txt"); List calDevContrls = deviceDao.getTempCalWitdDevid(device); @@ -198,11 +198,11 @@ public class ControlUtils { int tempear = tempDevices.get(tempDevId); boolean temp = tempIsOk(tempear, calDevContrls.get(j)); - if (temp)return true; + if (temp) return true; - } else {//沒有記錄溫度按照20度 - boolean temp = tempIsOk(20, calDevContrls.get(j)); - if (temp)return true; + } else {//沒有記錄溫度按照30度 + boolean temp = tempIsOk(28, calDevContrls.get(j)); + if (temp) return true; } } @@ -215,32 +215,32 @@ public class ControlUtils { return false; } - private boolean tempIsOk(int tempear, CalDevContrl calDevContrl) { + private boolean tempIsOk(int tempear, CalDevContrl calDevContrl) { - FileUtils.getInstance().writeLogs(calDevContrl.toString(),"tempisOk.txt"); - if (calDevContrl.getComPre() != 2) { - System.out.println("溫度比較:" + tempear + " 比較的值:" + calDevContrl.getThreValue() + " 比较方式:" + calDevContrl.getComPre()); + FileUtils.getInstance().writeLogs(calDevContrl.toString(), "tempisOk.txt"); + if (calDevContrl.getComPre() != 2) { + System.out.println("溫度比較:" + tempear + " 比較的值:" + calDevContrl.getThreValue() + " 比较方式:" + calDevContrl.getComPre()); - switch (calDevContrl.getComPre()) { - case 1://小于 + switch (calDevContrl.getComPre()) { + case 1://小于 - if (tempear <= Integer.parseInt(calDevContrl.getThreValue())) { - return true; - } - - break; - case 3://大于 + if (tempear <= Integer.parseInt(calDevContrl.getThreValue())) { + return true; + } - if (tempear >= Integer.parseInt(calDevContrl.getThreValue())) { - return true; - } + break; + case 3://大于 - break; + if (tempear >= Integer.parseInt(calDevContrl.getThreValue())) { + return true; + } - } + break; } + } + return false; } @@ -317,7 +317,7 @@ public class ControlUtils { SchduledTasks.conDevMap.put(conDevId, new Date()); System.out.println("开启设备"); String name = deviceDao.getWLName(conDevId); - HttpUtil.addAirCode(conValue, conDevId,name); + HttpUtil.addAirCode(conValue, conDevId, name); } break; } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/FileUtils.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/FileUtils.java index c4e065d..dbc78fa 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/FileUtils.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/FileUtils.java @@ -12,7 +12,7 @@ import java.util.Date; public class FileUtils { - public static String studentcode="studentcode.txt"; + public static String studentcode = "studentcode.txt"; public static String addAirCode = "addAirCode.txt"; private static FileUtils fileUtils; @@ -62,10 +62,10 @@ public class FileUtils { if (!filePa.exists()) filePa.mkdirs(); File picPath = new File(this.picPath); - if (!picPath.exists())picPath.mkdirs(); + if (!picPath.exists()) picPath.mkdirs(); File picPathComp = new File(this.picPathComp); - if (!picPathComp.exists())picPathComp.mkdirs(); + if (!picPathComp.exists()) picPathComp.mkdirs(); } @@ -78,11 +78,11 @@ public class FileUtils { String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); - File path = new File(filePath+datePath+"/"); - if (!path.exists())path.mkdirs(); + File path = new File(filePath + datePath + "/"); + if (!path.exists()) path.mkdirs(); String time = new SimpleDateFormat("HH").format(new Date()); - File logPath = new File(path, time+"_"+fileName); + File logPath = new File(path, time + "_" + fileName); try { // System.out.println("logPath:" + logPath.getAbsolutePath()); @@ -114,13 +114,12 @@ public class FileUtils { /** - * - * @param file 文件 - * @param path 文件存放路径 + * @param file 文件 + * @param path 文件存放路径 * @param fileName 源文件名 * @return */ - public static String upload(MultipartFile file, String path, String fileName){ + public static String upload(MultipartFile file, String path, String fileName) { // 生成新的文件名 //String realPath = path + "/" + FileNameUtils.getFileName(fileName); @@ -131,7 +130,7 @@ public class FileUtils { File dest = new File(realPath); //判断文件父目录是否存在 - if(!dest.getParentFile().exists()){ + if (!dest.getParentFile().exists()) { dest.getParentFile().mkdir(); } diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/HttpUtil.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/HttpUtil.java index 43ae238..ee18a5d 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/HttpUtil.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/HttpUtil.java @@ -142,9 +142,9 @@ public class HttpUtil { * @return */ public static String addAirCode(String conValue, String conDevId, String conDevName) { +// System.out.println("url-------------------------------conValue:" + conValue); - - String url = String.format("http://120.26.116.253:5555/TuYa/%s/addAirCode", conDevId); + String url = String.format("http://120.26.116.253:5555/TuYa/%s/addAirCode1", conDevId); RestTemplate restTemplate = new RestTemplate(); TuYaAirCondition tuYaAirCondition = new TuYaAirCondition(); @@ -167,7 +167,7 @@ public class HttpUtil { System.out.println("url-------------------------------:" + url + " conValue:" + tuYaAirCondition.toString()); String response = restTemplate.postForObject(url, tuYaAirCondition, String.class); - FileUtils.getInstance().writeLogs(String.format("%s设备%s--控制%s",power.equals("1")?"成功":"失败",conDevName+"-"+conDevId,response),FileUtils.addAirCode); + FileUtils.getInstance().writeLogs(String.format("%s设备%s--控制%s", power.equals("1") ? "成功" : "失败", conDevName + "-" + conDevId, response), FileUtils.addAirCode); System.out.println("response----------------------------------:" + response); return response; diff --git a/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ThreadPoolFactory.java b/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ThreadPoolFactory.java index e4112bf..fbc389e 100644 --- a/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ThreadPoolFactory.java +++ b/cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ThreadPoolFactory.java @@ -15,7 +15,6 @@ public class ThreadPoolFactory { * 工作队列容量 5000 * 核心线程数 10 * 最大线程数 30 - * */ public static class CustomThreadPoolExecutorHolder { /** diff --git a/cloud/mypulsar/src/main/resources/application.yaml b/cloud/mypulsar/src/main/resources/application.yaml index 414bd0c..78e1cae 100644 --- a/cloud/mypulsar/src/main/resources/application.yaml +++ b/cloud/mypulsar/src/main/resources/application.yaml @@ -5,17 +5,24 @@ spring: application: name: mypulsar datasource: - username: szjxtuser - password: RQminVCJota3H1u8bBYH - url: jdbc:sqlserver://116.62.155.137:33419;database=IotPlatform -# username: szjxtuser -# password: RQminVCJota3H1u8bBYH -# url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus - driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + iotplat: + username: szjxtuser + password: RQminVCJota3H1u8bBYH + jdbc-url: jdbc:sqlserver://116.62.155.137:33419;database=IotPlatform + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + campus: + username: szjxtuser + password: RQminVCJota3H1u8bBYH + jdbc-url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver mybatis: - type-aliases-package: com.example.mypulsar.dao - mapper-locations: classpath:mapper/*.xml + campus: + type-aliases-package: com.example.mypulsar.campusDao + mapper-locations: classpath:mapper/*.xml + iotplat: + type-aliases-package: com.example.mypulsar.dao + mapper-locations: classpath:iotmapper/*.xml config-location: classpath:mybatis-config.xml @@ -29,3 +36,4 @@ eureka: service-url: # defaultZone: http://localhost:8761/eureka/ defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/ + diff --git a/cloud/mypulsar/src/main/resources/iotmapper/iotmapper.xml b/cloud/mypulsar/src/main/resources/iotmapper/iotmapper.xml new file mode 100644 index 0000000..615ef9f --- /dev/null +++ b/cloud/mypulsar/src/main/resources/iotmapper/iotmapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + insert into CalDevBeContrl values + (${ConDevId},${ConCode},${ConValue},${CreateTime},${CreateUserId},${State},${ModeId}) + + + + + + + + + + + + + \ No newline at end of file diff --git a/cloud/mypulsar/src/main/resources/mapper/usermapper.xml b/cloud/mypulsar/src/main/resources/mapper/usermapper.xml index ee6f7e1..3f85f63 100644 --- a/cloud/mypulsar/src/main/resources/mapper/usermapper.xml +++ b/cloud/mypulsar/src/main/resources/mapper/usermapper.xml @@ -1,16 +1,12 @@ - - - + + + + \ No newline at end of file diff --git a/cloud/mypulsar/src/main/resources/mybatis-config.xml b/cloud/mypulsar/src/main/resources/mybatis-config.xml index 595ed53..55dfbbc 100644 --- a/cloud/mypulsar/src/main/resources/mybatis-config.xml +++ b/cloud/mypulsar/src/main/resources/mybatis-config.xml @@ -4,25 +4,25 @@ "http://mybatis.org/dtd/mybatis-3-config.dtd"> - - + + - + - + - + - + - + - + - + diff --git a/cloud/mypulsar/src/test/java/com/example/mypulsar/MypulsarApplicationTests.java b/cloud/mypulsar/src/test/java/com/example/mypulsar/MypulsarApplicationTests.java index 89822e7..e86a863 100644 --- a/cloud/mypulsar/src/test/java/com/example/mypulsar/MypulsarApplicationTests.java +++ b/cloud/mypulsar/src/test/java/com/example/mypulsar/MypulsarApplicationTests.java @@ -1,18 +1,22 @@ package com.example.mypulsar; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.example.mypulsar.bean.ClassRoom; +import com.example.mypulsar.bean.Wl_Attendace; +import com.example.mypulsar.bean.Wl_LinkModeBean; +import com.example.mypulsar.campusDao.CampusDao; import com.example.mypulsar.dao.DeviceDao; import com.example.mypulsar.utils.HttpUtil; import org.junit.Test; import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; + +import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest @@ -21,14 +25,98 @@ public class MypulsarApplicationTests { @Autowired DeviceDao deviceDao; + Logger logger = LoggerFactory.getLogger(MypulsarApplicationTests.class); + + @Autowired + CampusDao campusDao; + + @Test + public void CalCon() { + + List classRooms = campusDao.selectClassRoom("1085"); + + List wl_attendaces = deviceDao.getWL_AttendanceIds(); + + List wl_linkModes = deviceDao.getWL_LinkMode("1085"); + logger.error("stringList:{}", wl_linkModes.toString()); + +// for (int i = 0; i < wl_attendaces.size(); i++) { +// Wl_Attendace wl_attendace = wl_attendaces.get(i); +// logger.error("wl_attendace:{}",wl_attendace.toString()); +// +// } + + + } + + @Test public void contextLoads() { -// deviceDao.updateStaus("aaaa","24","-2","1"); + /*List stringList = deviceDao.getWL_AttendanceIds(); + + RestTemplate restTemplate = new RestTemplate(); + StringBuffer stringBufferOnline = new StringBuffer(); + StringBuffer stringBufferOffLine = new StringBuffer(); + + + for (int i = 0; i < stringList.size(); i++) { + + String clint_id = stringList.get(i).getClint_id(); + String clint_name = stringList.get(i).getName(); + String url = String.format("http://120.26.116.253:5555/TuYa/getDeviceInfoByDeviceID?deviceId=%s",clint_id); + ResponseEntity result = restTemplate.getForEntity(url, Result.class); + if (null!=result.getBody().getData()){ + logger.error("result.getBody().getData():{},{}",result.getBody().getData(),clint_id); + if (result.getBody().getData().isOnline()){ + stringBufferOnline.append(clint_name+"\r\n"); + }else { +// stringBufferOffLine.append(clint_id+","+clint_name+"\r\n"); + stringBufferOffLine.append(clint_name+"\r\n"); + } + } +// JSONObject jsonObject = JSON.parseObject(result.getBody().toString()); +// logger.error("jsonObject:"+jsonObject.toJSONString()); + } + + logger.error("在线设备:{}"+stringBufferOnline.toString()); + logger.error("离线设备:{}"+stringBufferOffLine.toString());*/ + closeAllDevice(); + + } + + private String closeModel = "{\"mode\":\"0\",\"power\":\"0\",\"remote_id\":\"%s\",\"remote_index\":\"11272\",\"temp\":\"26\",\"wind\":\"0\"}"; + + + private void closeAllDevice() { + + List deviceIds = deviceDao.getHWIds(); + System.out.println("关闭设备---------------------------------------------------" + deviceIds.toString()); + for (int i = 0; i < deviceIds.size(); i++) { + String deviceId = deviceIds.get(i).getClint_id(); + String conValue = getRemoteId(deviceDao.getConBeValue(deviceId)); + String devName = deviceIds.get(i).getName(); +// System.out.println("closeModel:" + closeModel); + String con = String.format(closeModel, conValue); +// System.out.println("con:" + con); + + HttpUtil.addAirCode(con, deviceId, devName); + } + + + } -// deviceDao.addDevice("aaaaaaa","sswwdwa","waffwaf","sfsfwewaf","dwdw","dwd","sfsf","sfdsf", -// "safwa","sfwf",1,1); + private String getRemoteId(String conValue) { + try { + JSONObject jsonObject = JSON.parseObject(conValue); + if (null == jsonObject) return ""; + String remote_id = jsonObject.getString("remote_id"); + return remote_id; + } catch (Exception e) { + e.printStackTrace(); + } + return ""; } } diff --git a/cloud/pom.xml b/cloud/pom.xml index 4406dbf..78a9ab5 100644 --- a/cloud/pom.xml +++ b/cloud/pom.xml @@ -31,17 +31,17 @@ common getaway haikang - - - - - - - - - - - + + + + + + + + + + + user_search fIle-center RibbonConsume @@ -190,20 +190,20 @@ - + diff --git a/cloud/quartz/pom.xml b/cloud/quartz/pom.xml index 32bbcc5..26725d6 100644 --- a/cloud/quartz/pom.xml +++ b/cloud/quartz/pom.xml @@ -12,13 +12,13 @@ quartz - - - - - - - + + + + + + + com.sincere common diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/QuartzApplication.java b/cloud/quartz/src/main/java/com/sincere/quartz/QuartzApplication.java index c4e5e37..bb541d6 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/QuartzApplication.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/QuartzApplication.java @@ -16,7 +16,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; * @date 2019/11/27 0027 14:24 */ @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) -@EnableTransactionManagement(order = 2) //设置事务执行顺序(需要在切换数据源之后,否则只走主库) +@EnableTransactionManagement(order = 2) //设置事务执行顺序(需要在切换数据源之后,否则只走主库) @EnableCaching @EnableScheduling @EnableFeignClients(basePackages = "com.sincere.quartz.feign") diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceAspect.java b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceAspect.java index 87293f2..2c3431a 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceAspect.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceAspect.java @@ -14,30 +14,31 @@ import java.lang.reflect.Method; * AOP根据注解给上下文赋值 */ @Aspect -@Order(1) //设置AOP执行顺序(需要在事务之前,否则事务只发生在默认库中) +@Order(1) //设置AOP执行顺序(需要在事务之前,否则事务只发生在默认库中) @Component public class DataSourceAspect { - //切点 - @Pointcut("execution(* com.sincere.quartz.service..*.*(..)))") - public void aspect() { } - - @Before("aspect()") - private void before(JoinPoint point) { - Object target = point.getTarget(); - String method = point.getSignature().getName(); - Class classz = target.getClass(); + //切点 + @Pointcut("execution(* com.sincere.quartz.service..*.*(..)))") + public void aspect() { + } + + @Before("aspect()") + private void before(JoinPoint point) { + Object target = point.getTarget(); + String method = point.getSignature().getName(); + Class classz = target.getClass(); Class[] parameterTypes = ((MethodSignature) point.getSignature()) - .getMethod().getParameterTypes(); - try { - Method m = classz.getMethod(method, parameterTypes); - if (m != null && m.isAnnotationPresent(MyDataSource.class)) { - MyDataSource data = m.getAnnotation(MyDataSource.class); - JdbcContextHolder.putDataSource(data.value().getName()); + .getMethod().getParameterTypes(); + try { + Method m = classz.getMethod(method, parameterTypes); + if (m != null && m.isAnnotationPresent(MyDataSource.class)) { + MyDataSource data = m.getAnnotation(MyDataSource.class); + JdbcContextHolder.putDataSource(data.value().getName()); } - } catch (Exception e) { - e.printStackTrace(); - } - - } + } catch (Exception e) { + e.printStackTrace(); + } + + } } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceConfig.java b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceConfig.java index 670bbcf..be8a995 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceConfig.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceConfig.java @@ -12,46 +12,45 @@ import java.util.Map; /** * 数据源配置 - * */ @Configuration public class DataSourceConfig { - @Bean(name = "master") - @ConfigurationProperties(prefix = "datasource.master") - public DataSource dataSource1() { - return DataSourceBuilder.create().build(); - } - - @Bean(name = "slave") - @ConfigurationProperties(prefix = "datasource.slave") - public DataSource dataSource2() { - return DataSourceBuilder.create().build(); - } - - @Bean(name = "yxy") - @ConfigurationProperties(prefix = "datasource.yxy") - public DataSource dataSource3() { - return DataSourceBuilder.create().build(); - } - - - @Bean(name="dynamicDataSource") - @Primary //优先使用,多数据源 - public DataSource dataSource() { - DynamicDataSource dynamicDataSource = new DynamicDataSource(); - DataSource master = dataSource1(); - DataSource slave = dataSource2(); - DataSource yxy = dataSource3(); - //设置默认数据源 - dynamicDataSource.setDefaultTargetDataSource(master); - //配置多数据源 - Map map = new HashMap<>(); - map.put(DataSourceType.Master.getName(), master); //key需要跟ThreadLocal中的值对应 - map.put(DataSourceType.Slave.getName(), slave); - map.put(DataSourceType.Yxy.getName(), yxy); - dynamicDataSource.setTargetDataSources(map); - return dynamicDataSource; - } - + @Bean(name = "master") + @ConfigurationProperties(prefix = "datasource.master") + public DataSource dataSource1() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "slave") + @ConfigurationProperties(prefix = "datasource.slave") + public DataSource dataSource2() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "yxy") + @ConfigurationProperties(prefix = "datasource.yxy") + public DataSource dataSource3() { + return DataSourceBuilder.create().build(); + } + + + @Bean(name = "dynamicDataSource") + @Primary //优先使用,多数据源 + public DataSource dataSource() { + DynamicDataSource dynamicDataSource = new DynamicDataSource(); + DataSource master = dataSource1(); + DataSource slave = dataSource2(); + DataSource yxy = dataSource3(); + //设置默认数据源 + dynamicDataSource.setDefaultTargetDataSource(master); + //配置多数据源 + Map map = new HashMap<>(); + map.put(DataSourceType.Master.getName(), master); //key需要跟ThreadLocal中的值对应 + map.put(DataSourceType.Slave.getName(), slave); + map.put(DataSourceType.Yxy.getName(), yxy); + dynamicDataSource.setTargetDataSources(map); + return dynamicDataSource; + } + } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceType.java b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceType.java index e5e0d3c..4e415fa 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceType.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DataSourceType.java @@ -2,24 +2,24 @@ package com.sincere.quartz.datasource; public enum DataSourceType { - Master("master"), + Master("master"), - Slave("slave"), + Slave("slave"), - Yxy("yxy"); + Yxy("yxy"); - private String name; + private String name; - private DataSourceType(String name) { - this.name = name; - } + private DataSourceType(String name) { + this.name = name; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DynamicDataSource.java b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DynamicDataSource.java index 91a38a0..7a6cce8 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DynamicDataSource.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/DynamicDataSource.java @@ -7,9 +7,9 @@ import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; */ public class DynamicDataSource extends AbstractRoutingDataSource { - @Override - protected Object determineCurrentLookupKey() { - return JdbcContextHolder.getDataSource(); - } - + @Override + protected Object determineCurrentLookupKey() { + return JdbcContextHolder.getDataSource(); + } + } \ No newline at end of file diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/JdbcContextHolder.java b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/JdbcContextHolder.java index 8106878..15d25f1 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/JdbcContextHolder.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/JdbcContextHolder.java @@ -1,16 +1,18 @@ package com.sincere.quartz.datasource; + /** + * */ public class JdbcContextHolder { - - private final static ThreadLocal local = new ThreadLocal<>(); - - public static void putDataSource(String name) { - local.set(name); - } - - public static String getDataSource() { - return local.get(); - } - + + private final static ThreadLocal local = new ThreadLocal<>(); + + public static void putDataSource(String name) { + local.set(name); + } + + public static String getDataSource() { + return local.get(); + } + } \ No newline at end of file diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/MyDataSource.java b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/MyDataSource.java index c30cb39..1a682a0 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/datasource/MyDataSource.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/datasource/MyDataSource.java @@ -8,10 +8,10 @@ import java.lang.annotation.Target; /** * 数据源选择--自定义注解 */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) public @interface MyDataSource { - DataSourceType value() default DataSourceType.Master; //默认主表 - + DataSourceType value() default DataSourceType.Master; //默认主表 + } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/feign/ScFeign.java b/cloud/quartz/src/main/java/com/sincere/quartz/feign/ScFeign.java index ca83465..b04a7f1 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/feign/ScFeign.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/feign/ScFeign.java @@ -17,7 +17,7 @@ import java.util.List; @FeignClient("smartCampusSearch") public interface ScFeign { - @RequestMapping(value = "/sm/wg/selectSchoolBySchoolId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/wg/selectSchoolBySchoolId", method = RequestMethod.GET) SchoolDto selectSchoolBySchoolId(@RequestParam("schoolId") int schoolId); //考勤设备 @@ -31,73 +31,73 @@ public interface ScFeign { String selectByDeviceNo(@RequestParam("deviceNo") String deviceNo); //考勤推送 - @RequestMapping(value = "/sm/kq/getAllTemplate",method = RequestMethod.GET) + @RequestMapping(value = "/sm/kq/getAllTemplate", method = RequestMethod.GET) List getAllTemplate(); - @RequestMapping(value = "/sm/kq/getAllTemplateAlarm",method = RequestMethod.GET) + @RequestMapping(value = "/sm/kq/getAllTemplateAlarm", method = RequestMethod.GET) List getAllTemplateAlarm(); - @RequestMapping(value = "/sm/kq/getTeacherList",method = RequestMethod.GET) - List getTeacherList(@RequestParam("schoolId")int schoolId); + @RequestMapping(value = "/sm/kq/getTeacherList", method = RequestMethod.GET) + List getTeacherList(@RequestParam("schoolId") int schoolId); - @RequestMapping(value = "/sm/kq/selectChamberTeacher",method = RequestMethod.GET) - List selectChamberTeacher(@RequestParam("schoolId")int schoolId); + @RequestMapping(value = "/sm/kq/selectChamberTeacher", method = RequestMethod.GET) + List selectChamberTeacher(@RequestParam("schoolId") int schoolId); - @RequestMapping(value = "/sm/kq/getApp",method = RequestMethod.GET) - AppDto getApp(@RequestParam("schoolId")int schoolId , @RequestParam("type") int type); + @RequestMapping(value = "/sm/kq/getApp", method = RequestMethod.GET) + AppDto getApp(@RequestParam("schoolId") int schoolId, @RequestParam("type") int type); - @RequestMapping(value = "/sm/kq/getThirdId",method = RequestMethod.GET) - String getThirdId(@RequestParam("userId")String userId , @RequestParam("type") int type); + @RequestMapping(value = "/sm/kq/getThirdId", method = RequestMethod.GET) + String getThirdId(@RequestParam("userId") String userId, @RequestParam("type") int type); - @RequestMapping(value = "/sm/kq/selectClassBySchoolId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/kq/selectClassBySchoolId", method = RequestMethod.GET) List selectClassBySchoolId(@RequestParam("schoolId") int schoolId); //关注绑定推送 - @RequestMapping(value = "/sm/rp/selectBindPushSchool",method = RequestMethod.GET) + @RequestMapping(value = "/sm/rp/selectBindPushSchool", method = RequestMethod.GET) List selectBindPushSchool(); - @RequestMapping(value = "/sm/rp/selectNotFollow",method = RequestMethod.GET) + @RequestMapping(value = "/sm/rp/selectNotFollow", method = RequestMethod.GET) List selectNotFollow(@RequestParam("schoolId") int schoolId); - @RequestMapping(value = "/sm/rp/selectNotBind",method = RequestMethod.GET) - List selectNotBind(@RequestParam("schoolId") int schoolId , @RequestParam("type") int type); + @RequestMapping(value = "/sm/rp/selectNotBind", method = RequestMethod.GET) + List selectNotBind(@RequestParam("schoolId") int schoolId, @RequestParam("type") int type); //同步通讯录 - @RequestMapping(value = "sm/sync/selectSyncSchool",method = RequestMethod.GET) + @RequestMapping(value = "sm/sync/selectSyncSchool", method = RequestMethod.GET) List selectSyncSchool(); - @RequestMapping(value = "sm/sync/selectSubject",method = RequestMethod.GET) + @RequestMapping(value = "sm/sync/selectSubject", method = RequestMethod.GET) List selectSubject(@RequestParam("schoolId") int schoolId); - @RequestMapping(value = "sm/sync/selectDept",method = RequestMethod.GET) - List selectDept(@RequestParam("schoolId") int schoolId) ; + @RequestMapping(value = "sm/sync/selectDept", method = RequestMethod.GET) + List selectDept(@RequestParam("schoolId") int schoolId); - @RequestMapping(value = "sm/sync/selectDeptByGradeId",method = RequestMethod.GET) + @RequestMapping(value = "sm/sync/selectDeptByGradeId", method = RequestMethod.GET) SyncDeptDto selectDeptByGradeId(@RequestParam("gradeId") int gradeId); - @RequestMapping(value = "sm/sync/selectUser",method = RequestMethod.GET) + @RequestMapping(value = "sm/sync/selectUser", method = RequestMethod.GET) List selectUser(@RequestParam("schoolId") int schoolId); - @RequestMapping(value = "sm/sync/updateSchool",method = RequestMethod.GET) + @RequestMapping(value = "sm/sync/updateSchool", method = RequestMethod.GET) void updateSchool(@RequestParam("schoolId") int schoolId); - @RequestMapping(value = "sm/sync/updateDept",method = RequestMethod.GET) + @RequestMapping(value = "sm/sync/updateDept", method = RequestMethod.GET) void updateDept(@RequestParam("id") int id); - @RequestMapping(value = "sm/sync/updateUser",method = RequestMethod.GET) - void updateUser(@RequestParam("id")int id); + @RequestMapping(value = "sm/sync/updateUser", method = RequestMethod.GET) + void updateUser(@RequestParam("id") int id); - @RequestMapping(value = "sm/sync/updateDeptRelation",method = RequestMethod.POST) + @RequestMapping(value = "sm/sync/updateDeptRelation", method = RequestMethod.POST) void updateDeptRelation(@RequestBody DeptRelationDto deptRelationDto); - @RequestMapping(value = "sm/sync/selectYxyIdByHxyId",method = RequestMethod.GET) + @RequestMapping(value = "sm/sync/selectYxyIdByHxyId", method = RequestMethod.GET) String selectYxyIdByHxyId(@RequestParam("hxyId") int hxyId); - @RequestMapping(value = "sm/sync/updateUserRelation",method = RequestMethod.POST) + @RequestMapping(value = "sm/sync/updateUserRelation", method = RequestMethod.POST) void updateUserRelation(@RequestBody UserRelationDto userRelationDto); - @RequestMapping(value = "sm/sync/selectUserYxyIdByHxyId",method = RequestMethod.GET) + @RequestMapping(value = "sm/sync/selectUserYxyIdByHxyId", method = RequestMethod.GET) String selectUserYxyIdByHxyId(@RequestParam("hxyCustomerId") String hxyCustomerId); diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/job/BindPushJob.java b/cloud/quartz/src/main/java/com/sincere/quartz/job/BindPushJob.java index 941360b..42ccc66 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/job/BindPushJob.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/job/BindPushJob.java @@ -21,6 +21,7 @@ import java.util.Map; /** * 用户注册激活提醒 + * * @author chen * @version 1.0 * @date 2019/12/10 0010 8:31 @@ -37,67 +38,67 @@ public class BindPushJob { @Autowired SmsService smsService; - private static Map intervalDaysMap = new HashMap<>(); //redis 持久化 替换 可避免重启导致间隔的错误 + private static Map intervalDaysMap = new HashMap<>(); //redis 持久化 替换 可避免重启导致间隔的错误 @Scheduled(cron = "0 0-59 * * * ? ") - public void bindPush(){ + public void bindPush() { Date nowDate = new Date(); List schoolList = scFeign.selectBindPushSchool(); - for(BindPushDto school : schoolList){ - if(school.getBeginDate().compareTo(nowDate) <= 0 && school.getEndDate().compareTo(nowDate) >= 0){ - String lastDate = intervalDaysMap.get(school.getSchoolId()+"_"+school.getType()); - if(StringUtils.isBlank(lastDate)){ + for (BindPushDto school : schoolList) { + if (school.getBeginDate().compareTo(nowDate) <= 0 && school.getEndDate().compareTo(nowDate) >= 0) { + String lastDate = intervalDaysMap.get(school.getSchoolId() + "_" + school.getType()); + if (StringUtils.isBlank(lastDate)) { //下发推送 - bindPush(school,nowDate); - }else { - int day = DateUtils.getDateDifference(nowDate,DateUtils.string2Date(lastDate,DateUtils.format1),"day") ; - if(day == school.getIntervalDays() + 1) { - //下发推送 - bindPush(school,nowDate); - } + bindPush(school, nowDate); + } else { + int day = DateUtils.getDateDifference(nowDate, DateUtils.string2Date(lastDate, DateUtils.format1), "day"); + if (day == school.getIntervalDays() + 1) { + //下发推送 + bindPush(school, nowDate); + } } } } } - private void bindPush(BindPushDto bindPushDto , Date nowDate){ - if(bindPushDto.getPushTime().equals(DateUtils.date2String(nowDate,DateUtils.format4))){ - intervalDaysMap.put(bindPushDto.getSchoolId()+"_"+bindPushDto.getType(),DateUtils.date2String(nowDate,DateUtils.format1)); + private void bindPush(BindPushDto bindPushDto, Date nowDate) { + if (bindPushDto.getPushTime().equals(DateUtils.date2String(nowDate, DateUtils.format4))) { + intervalDaysMap.put(bindPushDto.getSchoolId() + "_" + bindPushDto.getType(), DateUtils.date2String(nowDate, DateUtils.format1)); //未关注 List unFollowList = scFeign.selectNotFollow(bindPushDto.getSchoolId()); - logger.info(bindPushDto.getSchoolName()+"未关注人数"+unFollowList.size()); - for(ParentDto parentDto : unFollowList){ - sendMessage(parentDto,bindPushDto.getMsg()); + logger.info(bindPushDto.getSchoolName() + "未关注人数" + unFollowList.size()); + for (ParentDto parentDto : unFollowList) { + sendMessage(parentDto, bindPushDto.getMsg()); } //未绑定 - List unBindList =scFeign.selectNotBind(bindPushDto.getSchoolId(),getThirdType(bindPushDto.getType())); - logger.info(bindPushDto.getSchoolName()+"未绑定人数"+unBindList.size()); - for(ParentDto parentDto : unBindList){ - sendMessage(parentDto,bindPushDto.getMsg()); + List unBindList = scFeign.selectNotBind(bindPushDto.getSchoolId(), getThirdType(bindPushDto.getType())); + logger.info(bindPushDto.getSchoolName() + "未绑定人数" + unBindList.size()); + for (ParentDto parentDto : unBindList) { + sendMessage(parentDto, bindPushDto.getMsg()); } } } - private void sendMessage(ParentDto parentDto , String message){ + private void sendMessage(ParentDto parentDto, String message) { //手机号为空 - if(StringUtils.isNotBlank(parentDto.getMobile())){ + if (StringUtils.isNotBlank(parentDto.getMobile())) { String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format); ShortMsg shortMsg = new ShortMsg(); - shortMsg.setTableName("smsNew"+tableSuffix); + shortMsg.setTableName("smsNew" + tableSuffix); shortMsg.setSchoolId(parentDto.getSchoolId()); shortMsg.setMobile(parentDto.getMobile()); shortMsg.setMsg(message); smsService.insertSMS(shortMsg); - logger.info("----学校Id---"+parentDto.getSchoolId() + "----手机号----"+parentDto.getMobile()+"---"+message); + logger.info("----学校Id---" + parentDto.getSchoolId() + "----手机号----" + parentDto.getMobile() + "---" + message); } } // 0是企业号,1是钉钉 - private int getThirdType(int type){ - if(type == 0){ - return PushTypeEnums.QIYEHAO.getType() ; - }else { - return PushTypeEnums.DING.getType() ; + private int getThirdType(int type) { + if (type == 0) { + return PushTypeEnums.QIYEHAO.getType(); + } else { + return PushTypeEnums.DING.getType(); } } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/job/KQJob.java b/cloud/quartz/src/main/java/com/sincere/quartz/job/KQJob.java index c9bc173..3feefa1 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/job/KQJob.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/job/KQJob.java @@ -27,6 +27,7 @@ import java.util.*; /** * 考勤任务推送调用 * 主要推送盯盯以及企业号 + * * @author chen * @version 1.0 * @date 2019/11/27 0027 17:05 @@ -37,119 +38,119 @@ public class KQJob { private Logger logger = LoggerFactory.getLogger(KQJob.class); @Autowired - ScFeign scFeign ; + ScFeign scFeign; @Autowired SmsService smsService; @Autowired - ManagerService managerService ; + ManagerService managerService; private static String iotUrl = "http://60.190.202.57:8035"; - private static String date ; - private static Map map = new HashMap<>(); //学校 考勤推送map + private static String date; + private static Map map = new HashMap<>(); //学校 考勤推送map - private static String alarmDate ; - private static Map alarmMap = new HashMap<>(); //考勤告警推送map - private static Map templateMap = new HashMap<>(); // 考勤比例 + private static String alarmDate; + private static Map alarmMap = new HashMap<>(); //考勤告警推送map + private static Map templateMap = new HashMap<>(); // 考勤比例 - private static List opexList ; - private static String integration ; + private static List opexList; + private static String integration; - static{ + static { opexList = new ArrayList<>(); opexList.add("15857566147"); //王汉栋 opexList.add("13858485977"); //王楠彬 - integration = "18767117554" ; //林炜 + integration = "18767117554"; //林炜 } @Scheduled(cron = "0 0-59 * * * ? ") public void kaoQing() { - String now = DateUtils.date2String(new Date(),DateUtils.format1) ; - if(StringUtils.isBlank(date)){ + String now = DateUtils.date2String(new Date(), DateUtils.format1); + if (StringUtils.isBlank(date)) { initMap(); - date = now ; + date = now; } - if(!DateUtils.date2String(new Date(),DateUtils.format1).equals(date)){ + if (!DateUtils.date2String(new Date(), DateUtils.format1).equals(date)) { initMap(); - date = DateUtils.date2String(new Date(),DateUtils.format1) ; + date = DateUtils.date2String(new Date(), DateUtils.format1); } //开始过滤数据 推送 List keyList = new ArrayList<>(); - for(Map.Entry entity : map.entrySet()){ + for (Map.Entry entity : map.entrySet()) { String endTime = entity.getValue().split("_")[1]; - if(DateUtils.getDateDifference(new Date(),DateUtils.string2Date(now+" "+endTime+":00",DateUtils.format2),"m")>=2 - && DateUtils.getDateDifference(new Date(),DateUtils.string2Date(now+" "+endTime+":00",DateUtils.format2),"m")<5){ + if (DateUtils.getDateDifference(new Date(), DateUtils.string2Date(now + " " + endTime + ":00", DateUtils.format2), "m") >= 2 + && DateUtils.getDateDifference(new Date(), DateUtils.string2Date(now + " " + endTime + ":00", DateUtils.format2), "m") < 5) { String key = entity.getKey(); String[] messageArray = key.split("_"); - if(messageArray[2].contains(PushTypeEnums.QIYEHAO.getType()+"")){ + if (messageArray[2].contains(PushTypeEnums.QIYEHAO.getType() + "")) { logger.info("企业号推送:" + messageArray[0] + "__" + messageArray[1]); - weChatBatchPush(messageArray[0],Integer.valueOf(messageArray[1]),entity.getValue()); + weChatBatchPush(messageArray[0], Integer.valueOf(messageArray[1]), entity.getValue()); } - if(messageArray[2].contains(PushTypeEnums.DING.getType()+"")){ + if (messageArray[2].contains(PushTypeEnums.DING.getType() + "")) { logger.info(("盯盯推送:" + messageArray[0] + "__" + messageArray[1])); - dingBatchPush(messageArray[0],Integer.valueOf(messageArray[1]),entity.getValue()); + dingBatchPush(messageArray[0], Integer.valueOf(messageArray[1]), entity.getValue()); } keyList.add(key); } } - for(String key : keyList){ + for (String key : keyList) { map.remove(key); } } @Scheduled(cron = "0 0-59 * * * ? ") public void alarmKaoQing() { - String now = DateUtils.date2String(new Date(),DateUtils.format1) ; - if(StringUtils.isBlank(alarmDate)){ + String now = DateUtils.date2String(new Date(), DateUtils.format1); + if (StringUtils.isBlank(alarmDate)) { initAlarmMap(); - alarmDate = now ; + alarmDate = now; } - if(!DateUtils.date2String(new Date(),DateUtils.format1).equals(alarmDate)){ + if (!DateUtils.date2String(new Date(), DateUtils.format1).equals(alarmDate)) { initAlarmMap(); - alarmDate = DateUtils.date2String(new Date(),DateUtils.format1) ; + alarmDate = DateUtils.date2String(new Date(), DateUtils.format1); } //开始过滤数据 推送 List keyList = new ArrayList<>(); - for(Map.Entry entity : alarmMap.entrySet()){ + for (Map.Entry entity : alarmMap.entrySet()) { String endTime = entity.getValue().split("_")[1]; - if(DateUtils.getDateDifference(new Date(),DateUtils.string2Date(now+" "+endTime+":00",DateUtils.format2),"m")>=2 - ){ + if (DateUtils.getDateDifference(new Date(), DateUtils.string2Date(now + " " + endTime + ":00", DateUtils.format2), "m") >= 2 + ) { String key = entity.getKey(); keyList.add(key); //alarm(entity); //告警 //insertIOT(entity); //iot } } - for(String key : keyList){ + for (String key : keyList) { map.remove(key); } } - private void initAlarmMap(){ + private void initAlarmMap() { alarmMap = new HashMap<>(); List list = scFeign.getAllTemplateAlarm(); logger.info(("------考勤告警模板------")); - for(TemplateDto templateDto : list){ + for (TemplateDto templateDto : list) { String config = templateDto.getConfig(); String[] array = config.split(" entry){ - String templateId = entry.getKey().split("_")[0] ; - String schoolId = entry.getKey().split("_")[1] ; + private void alarm(Map.Entry entry) { + String templateId = entry.getKey().split("_")[0]; + String schoolId = entry.getKey().split("_")[1]; String id = entry.getValue().split("_")[3]; - String type = entry.getValue().split("_")[2] ; + String type = entry.getValue().split("_")[2]; - if(DateUtils.getWeek() == 2 || DateUtils.getWeek() == 5){ + if (DateUtils.getWeek() == 2 || DateUtils.getWeek() == 5) { //可以相差40% - BigDecimal percent = getAlarmCensus(Integer.valueOf(id),templateId,Integer.valueOf(schoolId),Integer.valueOf(type)); - if(templateMap.get(templateId) != null){ - if(percent.subtract(templateMap.get(templateId)).compareTo(new BigDecimal(0.4)) > 0 - || templateMap.get(templateId).subtract(percent).compareTo(new BigDecimal(0.4)) > 0) { + BigDecimal percent = getAlarmCensus(Integer.valueOf(id), templateId, Integer.valueOf(schoolId), Integer.valueOf(type)); + if (templateMap.get(templateId) != null) { + if (percent.subtract(templateMap.get(templateId)).compareTo(new BigDecimal(0.4)) > 0 + || templateMap.get(templateId).subtract(percent).compareTo(new BigDecimal(0.4)) > 0) { alarmPush(Integer.valueOf(schoolId)); } } - templateMap.put(templateId,percent); - }else { + templateMap.put(templateId, percent); + } else { //相差30% - BigDecimal percent = getAlarmCensus(Integer.valueOf(id),templateId,Integer.valueOf(schoolId),Integer.valueOf(type)); - if(templateMap.get(templateId) != null){ - if(percent.subtract(templateMap.get(templateId)).compareTo(new BigDecimal(0.3)) > 0 + BigDecimal percent = getAlarmCensus(Integer.valueOf(id), templateId, Integer.valueOf(schoolId), Integer.valueOf(type)); + if (templateMap.get(templateId) != null) { + if (percent.subtract(templateMap.get(templateId)).compareTo(new BigDecimal(0.3)) > 0 || templateMap.get(templateId).subtract(percent).compareTo(new BigDecimal(0.3)) > 0) { alarmPush(Integer.valueOf(schoolId)); } } - templateMap.put(templateId,percent); + templateMap.put(templateId, percent); } } - private void insertIOT(Map.Entry entry){ - String templateId = entry.getKey().split("_")[0] ; - String schoolId = entry.getKey().split("_")[1] ; - String title = entry.getKey().split("_")[2] ; + private void insertIOT(Map.Entry entry) { + String templateId = entry.getKey().split("_")[0]; + String schoolId = entry.getKey().split("_")[1]; + String title = entry.getKey().split("_")[2]; String id = entry.getValue().split("_")[3]; - String type = entry.getValue().split("_")[2] ; - String beginTime = entry.getValue().split("_")[0] ; - String endTime = entry.getValue().split("_")[1] ; + String type = entry.getValue().split("_")[2]; + String beginTime = entry.getValue().split("_")[0]; + String endTime = entry.getValue().split("_")[1]; - List list = getIOTCensus(Integer.valueOf(id),templateId,Integer.valueOf(schoolId),Integer.valueOf(type)) ; + List list = getIOTCensus(Integer.valueOf(id), templateId, Integer.valueOf(schoolId), Integer.valueOf(type)); JSONObject object = new JSONObject(); - object.put("strTime",beginTime); - object.put("endTime",endTime); - object.put("inTime",DateUtils.date2String(new Date(),DateUtils.format1)); - object.put("noAttendanceCount",list.get(1)); - object.put("attendanceCount",list.get(0)); - object.put("leaveCount",list.get(2)); - object.put("templateName",title); - object.put("qianDaoIdId",id); - object.put("schoolId",schoolId); - object.put("templateId",templateId); - HttpClientUtils.httpPostJson(iotUrl+"/api/Association/addIntelligenceAttendance",object.toJSONString()); + object.put("strTime", beginTime); + object.put("endTime", endTime); + object.put("inTime", DateUtils.date2String(new Date(), DateUtils.format1)); + object.put("noAttendanceCount", list.get(1)); + object.put("attendanceCount", list.get(0)); + object.put("leaveCount", list.get(2)); + object.put("templateName", title); + object.put("qianDaoIdId", id); + object.put("schoolId", schoolId); + object.put("templateId", templateId); + HttpClientUtils.httpPostJson(iotUrl + "/api/Association/addIntelligenceAttendance", object.toJSONString()); } //初始化要推送的模板 - private void initMap(){ + private void initMap() { map = new HashMap<>(); List list = scFeign.getAllTemplate(); logger.info(("------需要推送的考勤模板------")); - for(TemplateDto templateDto : list){ + for (TemplateDto templateDto : list) { String config = templateDto.getConfig(); String[] array = config.split(" list = scFeign.getTeacherList(schoolId); - for(KqTeacherDto teacher : list){ - dingSchoolPush(templateId,teacher,key,appDto,0); + for (KqTeacherDto teacher : list) { + dingSchoolPush(templateId, teacher, key, appDto, 0); } - }else { + } else { //出入寝 推班主任 List list = scFeign.getTeacherList(schoolId); - for(KqTeacherDto teacher : list){ - dingSchoolPush(templateId,teacher, key, appDto,1); + for (KqTeacherDto teacher : list) { + dingSchoolPush(templateId, teacher, key, appDto, 1); } //推宿管 List chamberList = scFeign.selectChamberTeacher(schoolId); - for(KqTeacherDto teacher : chamberList){ - dingChamberPush(templateId,teacher, key, appDto); + for (KqTeacherDto teacher : chamberList) { + dingChamberPush(templateId, teacher, key, appDto); } } } //企业号批量推送 - private void weChatBatchPush(String templateId , int schoolId , String key){ + private void weChatBatchPush(String templateId, int schoolId, String key) { String[] times = key.split("_"); AppDto appDto = scFeign.getApp(schoolId, 0); - if(Integer.valueOf(times[2]) < 7) { + if (Integer.valueOf(times[2]) < 7) { //出入校 推班主任 List list = scFeign.getTeacherList(schoolId); for (KqTeacherDto teacher : list) { - weChatSchoolPush(templateId,teacher, key, appDto,0); + weChatSchoolPush(templateId, teacher, key, appDto, 0); } - }else { + } else { //出入寝 推班主任 List list = scFeign.getTeacherList(schoolId); for (KqTeacherDto teacher : list) { - weChatSchoolPush(templateId,teacher, key, appDto,1); + weChatSchoolPush(templateId, teacher, key, appDto, 1); } //推宿管 List chamberList = scFeign.selectChamberTeacher(schoolId); - for(KqTeacherDto teacher : chamberList){ - weChatChamberPush(templateId,teacher, key, appDto); + for (KqTeacherDto teacher : chamberList) { + weChatChamberPush(templateId, teacher, key, appDto); } } } //盯盯推送班主任 - private void dingSchoolPush(String templateId ,KqTeacherDto teacher , String key , AppDto appDto , int type){ + private void dingSchoolPush(String templateId, KqTeacherDto teacher, String key, AppDto appDto, int type) { String[] times = key.split("_"); String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format); - String thirdOpenId = scFeign.getThirdId(teacher.getUserId(),0); - if(StringUtils.isNotBlank(thirdOpenId)){ - List censusKqDtos = getCensus(Integer.valueOf(times[3]),templateId,teacher.getSchoolId(),teacher.getUserId(),type); - if(censusKqDtos != null &&censusKqDtos.size() > 0){ + String thirdOpenId = scFeign.getThirdId(teacher.getUserId(), 0); + if (StringUtils.isNotBlank(thirdOpenId)) { + List censusKqDtos = getCensus(Integer.valueOf(times[3]), templateId, teacher.getSchoolId(), teacher.getUserId(), type); + if (censusKqDtos != null && censusKqDtos.size() > 0) { String message = ""; - for(CensusKqDto censusKqDto : censusKqDtos){ - message += "[" + censusKqDto.getTargetName() + "]未考勤" + censusKqDto.getNotAttendCount() + "人,请假"+censusKqDto.getLeaveCount()+"人;"; + for (CensusKqDto censusKqDto : censusKqDtos) { + message += "[" + censusKqDto.getTargetName() + "]未考勤" + censusKqDto.getNotAttendCount() + "人,请假" + censusKqDto.getLeaveCount() + "人;"; } DingSms dingSms = new DingSms(); dingSms.setName(teacher.getName()); - dingSms.setTableName("DingSmsNew"+tableSuffix); - dingSms.setMsg("报告类型:"+KqTypeEnums.getName(Integer.valueOf(times[2])) + "出勤报告 \n - "+ - "签到日期:"+DateUtils.date2String(new Date(),DateUtils.format1)+ "("+DateUtils.getWeekName()+") \n - "+ - "签到时间:"+times[0]+"-"+ times[1] +" \n - "+ + dingSms.setTableName("DingSmsNew" + tableSuffix); + dingSms.setMsg("报告类型:" + KqTypeEnums.getName(Integer.valueOf(times[2])) + "出勤报告 \n - " + + "签到日期:" + DateUtils.date2String(new Date(), DateUtils.format1) + "(" + DateUtils.getWeekName() + ") \n - " + + "签到时间:" + times[0] + "-" + times[1] + " \n - " + "整体数据:" + message); String wapUrl = "http://campus.myjxt.com/studentRecord/znxwwebapp/index.html?" + - "schoolid="+teacher.getSchoolId()+"&userId="+teacher.getUserId()+"&name="+teacher.getName()+ "&TemplateId=" + templateId+ - "&data="+thirdOpenId+"&type=1&stype=4&mobile="+teacher.getMobile()+"&pass="+teacher.getPass()+ - "&face=&sourcetype=16&soutype=3×tamp="+ DateUtils.getDate()+"&time="+DateUtils.date2String(new Date(),DateUtils.format1) ; + "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() + "&TemplateId=" + templateId + + "&data=" + thirdOpenId + "&type=1&stype=4&mobile=" + teacher.getMobile() + "&pass=" + teacher.getPass() + + "&face=&sourcetype=16&soutype=3×tamp=" + DateUtils.getDate() + "&time=" + DateUtils.date2String(new Date(), DateUtils.format1); dingSms.setSchoolId(teacher.getSchoolId()); dingSms.setDingUserId(thirdOpenId); dingSms.setAgentId(appDto.getAgentId()); @@ -323,27 +324,27 @@ public class KQJob { } //盯盯推送宿管 - private void dingChamberPush(String templateId, KqTeacherDto teacher , String key , AppDto appDto){ + private void dingChamberPush(String templateId, KqTeacherDto teacher, String key, AppDto appDto) { String[] times = key.split("_"); String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format); - String thirdOpenId = scFeign.getThirdId(teacher.getUserId(),0); - if(StringUtils.isNotBlank(thirdOpenId)){ - List censusKqDtos = getCensus(Integer.valueOf(times[3]),templateId,teacher.getSchoolId(),teacher.getUserId(),1); - if(censusKqDtos != null &&censusKqDtos.size() > 0){ + String thirdOpenId = scFeign.getThirdId(teacher.getUserId(), 0); + if (StringUtils.isNotBlank(thirdOpenId)) { + List censusKqDtos = getCensus(Integer.valueOf(times[3]), templateId, teacher.getSchoolId(), teacher.getUserId(), 1); + if (censusKqDtos != null && censusKqDtos.size() > 0) { String message = ""; - for(CensusKqDto censusKqDto : censusKqDtos){ - message += "[" + censusKqDto.getTargetName() + "]未考勤" + censusKqDto.getNotAttendCount() + "人,请假"+censusKqDto.getLeaveCount()+"人;"; + for (CensusKqDto censusKqDto : censusKqDtos) { + message += "[" + censusKqDto.getTargetName() + "]未考勤" + censusKqDto.getNotAttendCount() + "人,请假" + censusKqDto.getLeaveCount() + "人;"; } DingSms dingSms = new DingSms(); dingSms.setName(teacher.getName()); - dingSms.setTableName("DingSmsNew"+tableSuffix); - dingSms.setMsg("报告类型:"+KqTypeEnums.getName(Integer.valueOf(times[2])) + "出勤报告 \n - "+ - "签到日期:"+DateUtils.date2String(new Date(),DateUtils.format1)+ "("+DateUtils.getWeekName()+") \n - "+ - "签到时间:"+times[0]+"-"+ times[1] +" \n - "+ + dingSms.setTableName("DingSmsNew" + tableSuffix); + dingSms.setMsg("报告类型:" + KqTypeEnums.getName(Integer.valueOf(times[2])) + "出勤报告 \n - " + + "签到日期:" + DateUtils.date2String(new Date(), DateUtils.format1) + "(" + DateUtils.getWeekName() + ") \n - " + + "签到时间:" + times[0] + "-" + times[1] + " \n - " + "整体数据:" + message); String msgUrl = "http://campus.myjxt.com/studentRecord/znxwwebapp/index.html?" + - "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() +"&TemplateId=" + templateId+ - "&pass=" + teacher.getPass() + "&type=4&soutype=3&time="+DateUtils.date2String(new Date(),DateUtils.format1); + "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() + "&TemplateId=" + templateId + + "&pass=" + teacher.getPass() + "&type=4&soutype=3&time=" + DateUtils.date2String(new Date(), DateUtils.format1); dingSms.setSchoolId(teacher.getSchoolId()); dingSms.setDingUserId(thirdOpenId); dingSms.setAgentId(appDto.getAgentId()); @@ -357,16 +358,16 @@ public class KQJob { } //企业号推送班主任 - private void weChatSchoolPush(String templateId, KqTeacherDto teacher , String key , AppDto appDto , int type){ + private void weChatSchoolPush(String templateId, KqTeacherDto teacher, String key, AppDto appDto, int type) { String[] times = key.split("_"); String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format); - String thirdOpenId = scFeign.getThirdId(teacher.getUserId(),1); + String thirdOpenId = scFeign.getThirdId(teacher.getUserId(), 1); if (StringUtils.isNotBlank(thirdOpenId)) { - List censusKqDtos = getCensus(Integer.valueOf(times[3]),templateId,teacher.getSchoolId(),teacher.getUserId(),type); + List censusKqDtos = getCensus(Integer.valueOf(times[3]), templateId, teacher.getSchoolId(), teacher.getUserId(), type); if (censusKqDtos != null && censusKqDtos.size() > 0) { String message = ""; for (CensusKqDto censusKqDto : censusKqDtos) { - message += "[" + censusKqDto.getTargetName() + "]未考勤" + censusKqDto.getNotAttendCount() + "人,请假"+censusKqDto.getLeaveCount()+"人;"; + message += "[" + censusKqDto.getTargetName() + "]未考勤" + censusKqDto.getNotAttendCount() + "人,请假" + censusKqDto.getLeaveCount() + "人;"; } WeChatSms weChatSms = new WeChatSms(); weChatSms.setTableName("qyhSmsNew" + tableSuffix); @@ -381,9 +382,9 @@ public class KQJob { weChatSms.setAppId(appDto.getAgentId()); weChatSms.setSecret(appDto.getAgentSecret()); String msgUrl = "http://campus.myjxt.com/studentRecord/znxwwebapp/index.html?" + - "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() +"&TemplateId=" + templateId+ + "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() + "&TemplateId=" + templateId + "&data=" + thirdOpenId + "&type=1&stype=3&mobile=" + teacher.getMobile() + "&pass=" + teacher.getPass() + - "&face=" + teacher.getFace() + "&sourcetype=16&soutype=2×tamp=" + DateUtils.getDate()+"&time="+DateUtils.date2String(new Date(),DateUtils.format1)+"&"; + "&face=" + teacher.getFace() + "&sourcetype=16&soutype=2×tamp=" + DateUtils.getDate() + "&time=" + DateUtils.date2String(new Date(), DateUtils.format1) + "&"; weChatSms.setMsgUrl(msgUrl); weChatSms.setTdType(TypeEnums.kaoqing.getType()); this.insertQYH(weChatSms); @@ -393,16 +394,16 @@ public class KQJob { } //企业号推送宿管 - private void weChatChamberPush(String templateId, KqTeacherDto teacher , String key , AppDto appDto){ + private void weChatChamberPush(String templateId, KqTeacherDto teacher, String key, AppDto appDto) { String[] times = key.split("_"); String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format); - String thirdOpenId = scFeign.getThirdId(teacher.getUserId(),1); + String thirdOpenId = scFeign.getThirdId(teacher.getUserId(), 1); if (StringUtils.isNotBlank(thirdOpenId)) { - List censusKqDtos = getCensus(Integer.valueOf(times[3]),templateId,teacher.getSchoolId(),teacher.getUserId(),1); + List censusKqDtos = getCensus(Integer.valueOf(times[3]), templateId, teacher.getSchoolId(), teacher.getUserId(), 1); if (censusKqDtos != null && censusKqDtos.size() > 0) { String message = ""; for (CensusKqDto censusKqDto : censusKqDtos) { - message += "[" + censusKqDto.getTargetName() + "]未考勤" + censusKqDto.getNotAttendCount() + "人,请假"+censusKqDto.getLeaveCount()+"人;"; + message += "[" + censusKqDto.getTargetName() + "]未考勤" + censusKqDto.getNotAttendCount() + "人,请假" + censusKqDto.getLeaveCount() + "人;"; } WeChatSms weChatSms = new WeChatSms(); weChatSms.setTableName("qyhSmsNew" + tableSuffix); @@ -417,8 +418,8 @@ public class KQJob { weChatSms.setAppId(appDto.getAgentId()); weChatSms.setSecret(appDto.getAgentSecret()); String msgUrl = "http://campus.myjxt.com/studentRecord/znxwwebapp/index.html?" + - "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() +"&TemplateId=" + templateId+ - "&pass=" + teacher.getPass() + "&type=4&soutype=2&time="+DateUtils.date2String(new Date(),DateUtils.format1)+"&"; + "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() + "&TemplateId=" + templateId + + "&pass=" + teacher.getPass() + "&type=4&soutype=2&time=" + DateUtils.date2String(new Date(), DateUtils.format1) + "&"; weChatSms.setMsgUrl(msgUrl); weChatSms.setTdType(TypeEnums.kaoqing.getType()); this.insertQYH(weChatSms); @@ -428,121 +429,120 @@ public class KQJob { } //type 0 出入校 1 出入寝 - private List getCensus(int id , String templateId ,int schoolId , String userId ,int type){ + private List getCensus(int id, String templateId, int schoolId, String userId, int type) { List list = new ArrayList<>(); - String url = "http://campus.myjxt.com/api/EasyN/GeAttendDetailNew?schoolId="+schoolId+ - "&id="+id+"&templateID="+templateId+"&type="+type+"&userId="+userId+"&time=" + DateUtils.date2String(new Date(),DateUtils.format1); + String url = "http://campus.myjxt.com/api/EasyN/GeAttendDetailNew?schoolId=" + schoolId + + "&id=" + id + "&templateID=" + templateId + "&type=" + type + "&userId=" + userId + "&time=" + DateUtils.date2String(new Date(), DateUtils.format1); JSONObject jsonObject = HttpClientUtils.httpGet(url); - try{ - JSONArray data = (JSONArray)jsonObject.get("data"); - for(int i = 0 ; i < data.size() ; i++){ + try { + JSONArray data = (JSONArray) jsonObject.get("data"); + for (int i = 0; i < data.size(); i++) { CensusKqDto censusKqDto = new CensusKqDto(); JSONObject object = data.getJSONObject(i); censusKqDto.setLeaveCount((Integer) object.get("leaveCount")); censusKqDto.setNotAttendCount((Integer) object.get("noAttendCount")); - censusKqDto.setTargetName((String)object.get("name")); + censusKqDto.setTargetName((String) object.get("name")); list.add(censusKqDto); } - }catch (Exception e){ + } catch (Exception e) { } - return list ; + return list; } - private BigDecimal getAlarmCensus(int id , String templateId ,int schoolId , int type){ - int allNumber = 0 , attendNumber = 0 ; + private BigDecimal getAlarmCensus(int id, String templateId, int schoolId, int type) { + int allNumber = 0, attendNumber = 0; List list = scFeign.selectClassBySchoolId(schoolId); - for(Integer classId : list){ - String url = "http://campus.myjxt.com/api/EasyN/GeAttendDetail?classId="+classId+ - "&id="+id+"&templateID="+templateId+"&type="+type+"&time=" + DateUtils.date2String(new Date(),DateUtils.format1); + for (Integer classId : list) { + String url = "http://campus.myjxt.com/api/EasyN/GeAttendDetail?classId=" + classId + + "&id=" + id + "&templateID=" + templateId + "&type=" + type + "&time=" + DateUtils.date2String(new Date(), DateUtils.format1); JSONObject jsonObject = HttpClientUtils.httpGet(url); - try{ + try { JSONObject data = (JSONObject) jsonObject.get("data"); attendNumber = attendNumber + (Integer) data.get("stuAttendCount"); allNumber = allNumber + (Integer) data.get("stuCount"); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } - if(allNumber != 0){ - BigDecimal pecrent = new BigDecimal(attendNumber).divide(new BigDecimal(allNumber),10, BigDecimal.ROUND_HALF_DOWN) ; - return pecrent ; - }else { - return BigDecimal.ZERO ; + if (allNumber != 0) { + BigDecimal pecrent = new BigDecimal(attendNumber).divide(new BigDecimal(allNumber), 10, BigDecimal.ROUND_HALF_DOWN); + return pecrent; + } else { + return BigDecimal.ZERO; } } /** - * * @param id * @param templateId * @param schoolId * @param type * @return list(0) 出勤 list(1) 未出勤 List(2) 请假 */ - private List getIOTCensus(int id , String templateId ,int schoolId , int type){ + private List getIOTCensus(int id, String templateId, int schoolId, int type) { List result = new ArrayList<>(); - int attend = 0 , unattend = 0 , leave = 0; + int attend = 0, unattend = 0, leave = 0; List list = scFeign.selectClassBySchoolId(schoolId); - for(Integer classId : list){ - String url = "http://campus.myjxt.com/api/EasyN/GeAttendDetail?classId="+classId+ - "&id="+id+"&templateID="+templateId+"&type="+type+"&time=" + DateUtils.date2String(new Date(),DateUtils.format1); + for (Integer classId : list) { + String url = "http://campus.myjxt.com/api/EasyN/GeAttendDetail?classId=" + classId + + "&id=" + id + "&templateID=" + templateId + "&type=" + type + "&time=" + DateUtils.date2String(new Date(), DateUtils.format1); JSONObject jsonObject = HttpClientUtils.httpGet(url); - try{ + try { JSONObject data = (JSONObject) jsonObject.get("data"); attend = attend + (Integer) data.get("stuAttendCount"); unattend = unattend + (Integer) data.get("noAttendCount"); leave = leave + (Integer) data.get("leaveCount"); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } result.add(attend); result.add(unattend); result.add(leave); - return result ; + return result; } - private void insertDing(DingSms dingSms){ - try{ + private void insertDing(DingSms dingSms) { + try { smsService.insertDing(dingSms); - }catch (Exception e){ + } catch (Exception e) { logger.info(e.toString()); } } - private void insertQYH(WeChatSms weChatSms){ - try{ + private void insertQYH(WeChatSms weChatSms) { + try { smsService.insertWeChat(weChatSms); - }catch (Exception e){ + } catch (Exception e) { logger.info(e.toString()); } } - private void alarmPush(int schoolId){ - String msg = "【考勤异动】" ; - try{ + private void alarmPush(int schoolId) { + String msg = "【考勤异动】"; + try { SchoolDto schoolDto = scFeign.selectSchoolBySchoolId(schoolId); - msg += schoolDto.getSchoolName() + "考勤有异动,请关注!" ; - sendMessage(schoolDto.getSchoolId(),opexList.get(0),msg); - sendMessage(schoolDto.getSchoolId(),opexList.get(1),msg); - sendMessage(schoolDto.getSchoolId(),integration,msg); - String managerPhone = managerService.selectManagerById(schoolDto.getManagerUserId()) ; - if(StringUtils.isNotBlank(managerPhone)){ - sendMessage(schoolDto.getSchoolId(),managerPhone,msg); + msg += schoolDto.getSchoolName() + "考勤有异动,请关注!"; + sendMessage(schoolDto.getSchoolId(), opexList.get(0), msg); + sendMessage(schoolDto.getSchoolId(), opexList.get(1), msg); + sendMessage(schoolDto.getSchoolId(), integration, msg); + String managerPhone = managerService.selectManagerById(schoolDto.getManagerUserId()); + if (StringUtils.isNotBlank(managerPhone)) { + sendMessage(schoolDto.getSchoolId(), managerPhone, msg); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } - private void sendMessage(int schoolId , String mobile , String msg){ + private void sendMessage(int schoolId, String mobile, String msg) { String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format); ShortMsg shortMsg = new ShortMsg(); - shortMsg.setTableName("smsNew"+tableSuffix); + shortMsg.setTableName("smsNew" + tableSuffix); shortMsg.setSchoolId(schoolId); shortMsg.setMobile(mobile); shortMsg.setMsg(msg); diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/job/SyncJob.java b/cloud/quartz/src/main/java/com/sincere/quartz/job/SyncJob.java index 9b46fa0..1066ce8 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/job/SyncJob.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/job/SyncJob.java @@ -15,13 +15,13 @@ import org.springframework.stereotype.Service; public class SyncJob { @Autowired - YXYWriteService yxyWriteService ; + YXYWriteService yxyWriteService; @Autowired - YXYReadService yxyReadService ; + YXYReadService yxyReadService; @Scheduled(cron = "30 10 22 * * ? ") - public void Sync(){ + public void Sync() { //翼校通的同步 之后还有钉钉的同步等等 yxyReadService.sync(); yxyWriteService.sync(); diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/mapper/YxyMapper.java b/cloud/quartz/src/main/java/com/sincere/quartz/mapper/YxyMapper.java index b74c005..0ff1ee6 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/mapper/YxyMapper.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/mapper/YxyMapper.java @@ -6,15 +6,15 @@ import com.sincere.quartz.model.YxyTeacher; public interface YxyMapper { - int updateAgency() ; + int updateAgency(); - int updateTeacher() ; + int updateTeacher(); - int updateStudent() ; + int updateStudent(); - int insertAgency(YxyAgency agency) ; + int insertAgency(YxyAgency agency); - int insertTeacher(YxyTeacher teacher) ; + int insertTeacher(YxyTeacher teacher); - int insertStudent(YxyStudent student) ; + int insertStudent(YxyStudent student); } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyAgency.java b/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyAgency.java index dfd64fb..068373d 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyAgency.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyAgency.java @@ -2,9 +2,9 @@ package com.sincere.quartz.model; public class YxyAgency { - private String deptId ; - private String deptName ; - private String superDeptId ; + private String deptId; + private String deptName; + private String superDeptId; public String getDeptId() { return deptId; diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyStudent.java b/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyStudent.java index 280fe3e..575eb04 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyStudent.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyStudent.java @@ -2,13 +2,13 @@ package com.sincere.quartz.model; public class YxyStudent { - private String userId ; - private String classId ; - private String name ; - private String account ; - private String cardID ; + private String userId; + private String classId; + private String name; + private String account; + private String cardID; private String cardID2; - private String cardID3 ; + private String cardID3; public String getCardID() { return cardID; diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyTeacher.java b/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyTeacher.java index b75a37a..e76b2df 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyTeacher.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/model/YxyTeacher.java @@ -2,10 +2,10 @@ package com.sincere.quartz.model; public class YxyTeacher { - private String userId ; - private String account ; - private String name ; - private String deptId ; + private String userId; + private String account; + private String name; + private String deptId; public String getUserId() { return userId; diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/service/YxyService.java b/cloud/quartz/src/main/java/com/sincere/quartz/service/YxyService.java index 44bd998..7a92c18 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/service/YxyService.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/service/YxyService.java @@ -6,15 +6,15 @@ import com.sincere.quartz.model.YxyTeacher; public interface YxyService { - int updateAgency() ; + int updateAgency(); - int updateTeacher() ; + int updateTeacher(); - int updateStudent() ; + int updateStudent(); - int insertAgency(YxyAgency agency) ; + int insertAgency(YxyAgency agency); - int insertTeacher(YxyTeacher teacher) ; + int insertTeacher(YxyTeacher teacher); - int insertStudent(YxyStudent student) ; + int insertStudent(YxyStudent student); } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/service/impl/ManagerServiceImpl.java b/cloud/quartz/src/main/java/com/sincere/quartz/service/impl/ManagerServiceImpl.java index c51922d..42ff2ba 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/service/impl/ManagerServiceImpl.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/service/impl/ManagerServiceImpl.java @@ -11,7 +11,7 @@ import org.springframework.stereotype.Service; public class ManagerServiceImpl implements ManagerService { @Autowired - ManagerMapper managerMapper ; + ManagerMapper managerMapper; @Override @MyDataSource(DataSourceType.Master) diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/service/impl/YxyServiceImpl.java b/cloud/quartz/src/main/java/com/sincere/quartz/service/impl/YxyServiceImpl.java index bede705..e9fc7c0 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/service/impl/YxyServiceImpl.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/service/impl/YxyServiceImpl.java @@ -14,7 +14,7 @@ import org.springframework.stereotype.Service; public class YxyServiceImpl implements YxyService { @Autowired - YxyMapper yxyMapper ; + YxyMapper yxyMapper; @Override @MyDataSource(DataSourceType.Yxy) diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/third/qiyehao/QYHUtils.java b/cloud/quartz/src/main/java/com/sincere/quartz/third/qiyehao/QYHUtils.java index bdc63f2..7d50a16 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/third/qiyehao/QYHUtils.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/third/qiyehao/QYHUtils.java @@ -10,23 +10,23 @@ import com.sincere.common.util.HttpClientUtils; */ public class QYHUtils { - public static void main(String[] args){ - getToken("wx51b3acc9a06f0bb0","pb5P1feSHnWYYLPAfN4QBMk-nPFaF4RGW5Lq1ceyfhk"); + public static void main(String[] args) { + getToken("wx51b3acc9a06f0bb0", "pb5P1feSHnWYYLPAfN4QBMk-nPFaF4RGW5Lq1ceyfhk"); } - public static String getToken(String id , String secret){ - String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+id+"&corpsecret="+secret ; - JSONObject json = HttpClientUtils.httpGet(url) ; - return json.get("access_token").toString() ; + public static String getToken(String id, String secret) { + String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + id + "&corpsecret=" + secret; + JSONObject json = HttpClientUtils.httpGet(url); + return json.get("access_token").toString(); } - public static void getDept(String accessToken){ - String url = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token="+accessToken; - JSONObject json = HttpClientUtils.httpGet(url) ; + public static void getDept(String accessToken) { + String url = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=" + accessToken; + JSONObject json = HttpClientUtils.httpGet(url); } - public static void getUser(String accessToken){ - String url = "https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token="+accessToken+"&department_id="+1+"&fetch_child=1&status=0"; - JSONObject json = HttpClientUtils.httpGet(url) ; + public static void getUser(String accessToken) { + String url = "https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=" + accessToken + "&department_id=" + 1 + "&fetch_child=1&status=0"; + JSONObject json = HttpClientUtils.httpGet(url); } } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYReadService.java b/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYReadService.java index 61ec7ed..3606c5d 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYReadService.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYReadService.java @@ -27,75 +27,75 @@ import java.util.concurrent.TimeUnit; @Service public class YXYReadService { - private static String SI = "SZ" ; - private static int SI_CODE = 12345678 ; + private static String SI = "SZ"; + private static int SI_CODE = 12345678; - private static String nameSpace = "http://service.pubinfo.com.cn" ; + private static String nameSpace = "http://service.pubinfo.com.cn"; private static String getAllTeacher = "http://122.229.30.149:8282/DataSynService/GetTeacherInfo"; - private static String getAllTeacher_method = "getTeacherInfo" ; - private static String getAddTeacher = "http://122.229.30.149:8282/DataSynService/GetIncrementTeacherInfo" ; - private static String getAddTeacher_method = "getIncrementTeacherInfo" ; + private static String getAllTeacher_method = "getTeacherInfo"; + private static String getAddTeacher = "http://122.229.30.149:8282/DataSynService/GetIncrementTeacherInfo"; + private static String getAddTeacher_method = "getIncrementTeacherInfo"; - private static String getAllStudent = "http://122.229.30.149:8282/DataSynService/GetStudentInfo" ; + private static String getAllStudent = "http://122.229.30.149:8282/DataSynService/GetStudentInfo"; private static String getALlStudent_method = "getStudentInfo"; - private static String getAddStudent = "http://122.229.30.149:8282/DataSynService/GetIncrementStudentInfo" ; - private static String getAddStudent_method = "getIncrementStudentInfo" ; - private static String getAllDept = "http://122.229.30.149:8282/DataSynService/GetDeptInfo" ; + private static String getAddStudent = "http://122.229.30.149:8282/DataSynService/GetIncrementStudentInfo"; + private static String getAddStudent_method = "getIncrementStudentInfo"; + private static String getAllDept = "http://122.229.30.149:8282/DataSynService/GetDeptInfo"; private static String getALlDept_method = "getDeptInfo"; @Autowired - YxyService yxyService ; + YxyService yxyService; private Logger logger = LoggerFactory.getLogger(YXYReadService.class); - public void sync(){ + public void sync() { ExecutorService pool = ThreadUtils.newFixedThreadPool(8); yxyService.updateAgency(); yxyService.updateStudent(); yxyService.updateTeacher(); List areaCodeList = new ArrayList<>(); - areaCodeList.add("0571") ; - areaCodeList.add("0572") ; - areaCodeList.add("0573") ; - areaCodeList.add("0574") ; - areaCodeList.add("0575") ; - areaCodeList.add("0576") ; - areaCodeList.add("0577") ; - areaCodeList.add("0578") ; - areaCodeList.add("0579") ; + areaCodeList.add("0571"); + areaCodeList.add("0572"); + areaCodeList.add("0573"); + areaCodeList.add("0574"); + areaCodeList.add("0575"); + areaCodeList.add("0576"); + areaCodeList.add("0577"); + areaCodeList.add("0578"); + areaCodeList.add("0579"); List schoolList = new ArrayList<>(); - for(String areaCode : areaCodeList){ - try{ + for (String areaCode : areaCodeList) { + try { // 先获取学校,部门,年级 班级 // 再根据学校 获取老师 学生 List list = new ArrayList(); list.add(SI); list.add(getPassword(SI_CODE)); list.add(areaCode); - String wsdl =getAllDept ; + String wsdl = getAllDept; String ns = nameSpace; String method = getALlDept_method; JSONArray jsonArray = getMessage(wsdl, ns, method, list); - if(jsonArray != null){ + if (jsonArray != null) { logger.info("市编码:" + areaCode); - for(int i = 0 ; i < jsonArray.size() ; i++){ - JSONObject object = (JSONObject) jsonArray.get(i) ; - YxyAgency agency = new YxyAgency() ; + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject object = (JSONObject) jsonArray.get(i); + YxyAgency agency = new YxyAgency(); agency.setDeptId(object.get("deptID").toString()); agency.setDeptName(object.get("deptName").toString()); agency.setSuperDeptId(object.get("superDeptID").toString()); - if(areaCode.equals(object.get("superDeptID").toString())){ - logger.info("学校:" + object.get("deptName").toString() +";编码"+object.get("deptID").toString()); - schoolList.add(object.get("deptID").toString()) ; + if (areaCode.equals(object.get("superDeptID").toString())) { + logger.info("学校:" + object.get("deptName").toString() + ";编码" + object.get("deptID").toString()); + schoolList.add(object.get("deptID").toString()); } yxyService.insertAgency(agency); } } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } - for(String schoolId : schoolList){ + for (String schoolId : schoolList) { pool.execute(initSchool(schoolId)); } pool.shutdown(); @@ -106,93 +106,93 @@ public class YXYReadService { } - private Runnable initSchool(String schoolId){ + private Runnable initSchool(String schoolId) { Runnable runnable = () -> { syncStudent(schoolId); syncTeacher(schoolId); }; - return runnable ; + return runnable; } - public void syncStudent(String schoolId){ + public void syncStudent(String schoolId) { List list = new ArrayList(); list.add(SI); list.add(getPassword(SI_CODE)); list.add(schoolId); - String wsdl =getAllStudent ; + String wsdl = getAllStudent; String ns = nameSpace; String method = getALlStudent_method; JSONArray jsonArray = getMessage(wsdl, ns, method, list); - try{ - logger.info("学校ID为:"+schoolId + "共有学生" + jsonArray.size() +"人"); - if(jsonArray != null){ - for(int i = 0 ; i < jsonArray.size() ; i++){ - JSONObject object = (JSONObject) jsonArray.get(i) ; + try { + logger.info("学校ID为:" + schoolId + "共有学生" + jsonArray.size() + "人"); + if (jsonArray != null) { + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject object = (JSONObject) jsonArray.get(i); YxyStudent student = new YxyStudent(); - try{ + try { student.setClassId(object.get("classID").toString()); student.setAccount(object.get("account").toString()); student.setName(object.get("name").toString()); student.setUserId(object.get("userID").toString()); - }catch (Exception e){ + } catch (Exception e) { } - try{ + try { student.setCardID(object.get("cardID").toString()); - }catch (Exception e){ + } catch (Exception e) { } - try{ + try { student.setCardID2(object.get("cardID2").toString()); - }catch (Exception e){ + } catch (Exception e) { } - try{ + try { student.setCardID3(object.get("cardID3").toString()); - }catch (Exception e){ + } catch (Exception e) { } yxyService.insertStudent(student); } } - }catch (Exception e){ + } catch (Exception e) { logger.info(e.toString()); - logger.info("学校ID为:"+schoolId + "学生数据没返回"); + logger.info("学校ID为:" + schoolId + "学生数据没返回"); } } - public void syncTeacher(String schoolId){ + public void syncTeacher(String schoolId) { List list = new ArrayList(); list.add(SI); list.add(getPassword(SI_CODE)); list.add(schoolId); - String wsdl =getAllTeacher ; + String wsdl = getAllTeacher; String ns = nameSpace; String method = getAllTeacher_method; JSONArray jsonArray = getMessage(wsdl, ns, method, list); - try{ - logger.info("学校ID为:"+schoolId + "共有老师" + jsonArray.size() +"人"); - if(jsonArray != null){ - for(int i = 0 ; i < jsonArray.size() ; i++){ - JSONObject object = (JSONObject) jsonArray.get(i) ; + try { + logger.info("学校ID为:" + schoolId + "共有老师" + jsonArray.size() + "人"); + if (jsonArray != null) { + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject object = (JSONObject) jsonArray.get(i); YxyTeacher teacher = new YxyTeacher(); try { teacher.setDeptId(object.get("classID").toString()); teacher.setAccount(object.get("account").toString()); teacher.setName(object.get("name").toString()); teacher.setUserId(object.get("userID").toString()); - }catch (Exception e){ + } catch (Exception e) { } yxyService.insertTeacher(teacher); } } - }catch (Exception e){ + } catch (Exception e) { logger.info(e.toString()); - logger.info("学校ID为:"+schoolId + "老师数据没返回"); + logger.info("学校ID为:" + schoolId + "老师数据没返回"); } } - private JSONArray getMessage(String wsdl, String ns, String method, List list){ - String resultXml = HttpClientUtils.invoiceWebService(wsdl,ns,method,list); + private JSONArray getMessage(String wsdl, String ns, String method, List list) { + String resultXml = HttpClientUtils.invoiceWebService(wsdl, ns, method, list); try { if (StringUtils.isNotBlank(resultXml)) { resultXml = resultXml.replaceAll("<", "<"); @@ -205,17 +205,17 @@ public class YXYReadService { return (JSONArray) json.get("resultInfo"); } } - }catch (Exception e){ - logger.info("获取信息报错"+e.getMessage()); + } catch (Exception e) { + logger.info("获取信息报错" + e.getMessage()); } - return null ; + return null; } - private String getPassword(int si){ - int date = Integer.valueOf(DateUtils.date2String(new Date(),DateUtils.format5)); - String pwd = String.valueOf(si&date) ; - while (pwd.length() < 6){ - pwd = "0" + pwd ; + private String getPassword(int si) { + int date = Integer.valueOf(DateUtils.date2String(new Date(), DateUtils.format5)); + String pwd = String.valueOf(si & date); + while (pwd.length() < 6) { + pwd = "0" + pwd; } pwd = pwd.substring(pwd.length() - 6); return EncodeByMD5(pwd); @@ -237,9 +237,9 @@ public class YXYReadService { } } - private String fillMD5(String md5){ + private String fillMD5(String md5) { //如果不够32位则回调自身补零,最后返回32位长度的签名 - return md5.length()==32?md5:fillMD5("0"+md5); + return md5.length() == 32 ? md5 : fillMD5("0" + md5); } } \ No newline at end of file diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResult.java b/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResult.java index 6570050..ebc4ef3 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResult.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResult.java @@ -10,14 +10,14 @@ import java.util.List; */ public class YXYResult implements Serializable { - private int code ; - private String message ; - private int total ; - private int pass ; - private List data ; + private int code; + private String message; + private int total; + private int pass; + private List data; public YXYResult() { - this.code = -1 ; + this.code = -1; } public int getCode() { diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResultDetail.java b/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResultDetail.java index f09dc0d..b1865fe 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResultDetail.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYResultDetail.java @@ -9,15 +9,15 @@ import java.io.Serializable; */ public class YXYResultDetail implements Serializable { - private String id ; - private String schoolid ; - private String name ; - private String err ; - private String classname ; - private String gradeid ; - private String classid ; - private String userid ; - private String stuname ; + private String id; + private String schoolid; + private String name; + private String err; + private String classname; + private String gradeid; + private String classid; + private String userid; + private String stuname; public String getSchoolid() { return schoolid; diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYWriteService.java b/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYWriteService.java index b7190c6..b3c2a63 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYWriteService.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/third/yixueyun/YXYWriteService.java @@ -25,53 +25,53 @@ public class YXYWriteService { private Logger logger = LoggerFactory.getLogger(YXYWriteService.class); - private String TOKEN="" ; + private String TOKEN = ""; private static String key = "SZKJ"; - private static String secret = "87dyNIZReZNl6LXGsihfyX3unYgwukSk" ; + private static String secret = "87dyNIZReZNl6LXGsihfyX3unYgwukSk"; private static String prefix_url = "http://115.239.135.60"; - private static String suffix_org_add = "/szkjapi/toyxybatch/addTeacherOrg" ; //部门添加 - private static String suffix_grade_add = "/szkjapi/toyxybatch/addGrade" ; //部门添加 - private static String suffix_class_add = "/szkjapi/toyxybatch/addClass" ; //班级添加 - private static String suffix_student_add = "/szkjapi/toyxybatch/addStudent" ; //学生添加 - private static String suffix_teacher_add = "/szkjapi/toyxybatch/addTeacher" ; //老师添加 + private static String suffix_org_add = "/szkjapi/toyxybatch/addTeacherOrg"; //部门添加 + private static String suffix_grade_add = "/szkjapi/toyxybatch/addGrade"; //部门添加 + private static String suffix_class_add = "/szkjapi/toyxybatch/addClass"; //班级添加 + private static String suffix_student_add = "/szkjapi/toyxybatch/addStudent"; //学生添加 + private static String suffix_teacher_add = "/szkjapi/toyxybatch/addTeacher"; //老师添加 - private static String suffix_org_update = "/szkjapi/toyxybatch/modifyOrg" ; //部门 班级修改 - private static String suffix_student_update = "/szkjapi/toyxybatch/modifyStudent" ; //学生修改 - private static String suffix_teacher_update = "/szkjapi/toyxybatch/modifyTeacher" ; //老师修改 + private static String suffix_org_update = "/szkjapi/toyxybatch/modifyOrg"; //部门 班级修改 + private static String suffix_student_update = "/szkjapi/toyxybatch/modifyStudent"; //学生修改 + private static String suffix_teacher_update = "/szkjapi/toyxybatch/modifyTeacher"; //老师修改 - private static String suffix_org_delete = "/szkjapi/toyxybatch/deleteOrg" ; //部门 班级 删除 - private static String suffix_user_delete = "/szkjapi/toyxybatch/deleteUser" ; //老师学生 删除 + private static String suffix_org_delete = "/szkjapi/toyxybatch/deleteOrg"; //部门 班级 删除 + private static String suffix_user_delete = "/szkjapi/toyxybatch/deleteUser"; //老师学生 删除 - private static String suffix_subject_add = "/szkjapi/toyxybatch/addSubject" ; + private static String suffix_subject_add = "/szkjapi/toyxybatch/addSubject"; @Autowired - ScFeign scFeign ; + ScFeign scFeign; - public void sync(){ - try{ + public void sync() { + try { //查出要同步的学校 logger.info("开始同步翼学云数据==========="); List schoolList = scFeign.selectSyncSchool(); - for(SyncSchoolDto school : schoolList){ - logger.info("学校"+school.getSchoolName()); - if(school.getPush() == 0){ + for (SyncSchoolDto school : schoolList) { + logger.info("学校" + school.getSchoolName()); + if (school.getPush() == 0) { //同步课程 syncSubject(school); } List deptList = scFeign.selectDept(school.getSchoolId()); - syncDept(school,deptList); + syncDept(school, deptList); List userList = scFeign.selectUser(school.getSchoolId()); - syncUser(school,userList); + syncUser(school, userList); } - }catch (Exception e){ + } catch (Exception e) { } } - private void syncUser(SyncSchoolDto school , List userList){ + private void syncUser(SyncSchoolDto school, List userList) { List addStudentList = new ArrayList<>(); List updateStudentList = new ArrayList<>(); List deleteStudentList = new ArrayList<>(); @@ -80,50 +80,50 @@ public class YXYWriteService { List updateTeacherList = new ArrayList<>(); List deleteTeacherList = new ArrayList<>(); - for(SyncUserDto user : userList){ - if(user.getUserType() == 2){ //学生 - if(user.getUpdateType() == 1){ + for (SyncUserDto user : userList) { + if (user.getUserType() == 2) { //学生 + if (user.getUpdateType() == 1) { addStudentList.add(user); - }else if(user.getUpdateType() == 3){ + } else if (user.getUpdateType() == 3) { updateStudentList.add(user); - }else if(user.getUpdateType() == 5){ + } else if (user.getUpdateType() == 5) { deleteStudentList.add(user); } - }else if(user.getUserType() == 1){ //老师 - if(user.getUpdateType() == 1){ + } else if (user.getUserType() == 1) { //老师 + if (user.getUpdateType() == 1) { addTeacherList.add(user); - }else if(user.getUpdateType() == 3){ + } else if (user.getUpdateType() == 3) { updateTeacherList.add(user); - }else if(user.getUpdateType() == 5){ + } else if (user.getUpdateType() == 5) { deleteTeacherList.add(user); } } } - syncStudentHxy(school,addStudentList,updateStudentList,deleteStudentList); - syncTeacherHxy(school,addTeacherList,updateTeacherList,deleteTeacherList); + syncStudentHxy(school, addStudentList, updateStudentList, deleteStudentList); + syncTeacherHxy(school, addTeacherList, updateTeacherList, deleteTeacherList); } - private void syncSubject(SyncSchoolDto school){ + private void syncSubject(SyncSchoolDto school) { List subjectList = scFeign.selectSubject(school.getSchoolId()); JSONArray array = new JSONArray(); JSONObject object = new JSONObject(); - object.put("schoolid",school.getYxtId()); + object.put("schoolid", school.getYxtId()); StringBuffer subjects = new StringBuffer(); - for(String subject : subjectList){ + for (String subject : subjectList) { subjects.append(subject).append(","); } - try{ - object.put("subjects",subjects.toString().substring(0,subjects.toString().length()-1)); + try { + object.put("subjects", subjects.toString().substring(0, subjects.toString().length() - 1)); array.add(object); - YXYResult result = getResult(prefix_url+suffix_subject_add,array.toJSONString()) ; + YXYResult result = getResult(prefix_url + suffix_subject_add, array.toJSONString()); scFeign.updateSchool(school.getSchoolId()); - }catch (Exception e){ + } catch (Exception e) { } } - private void syncDept(SyncSchoolDto school , List deptList){ + private void syncDept(SyncSchoolDto school, List deptList) { List addDept = new ArrayList<>(); List updateDept = new ArrayList<>(); List deleteDept = new ArrayList<>(); @@ -135,51 +135,51 @@ public class YXYWriteService { List addClass = new ArrayList<>(); List updateClass = new ArrayList<>(); List deleteClass = new ArrayList<>(); - for(SyncDeptDto dept : deptList){ - if(dept.getUserType() == 1){ //组织架构 - if(dept.getUpdateType() == 1){ //增 + for (SyncDeptDto dept : deptList) { + if (dept.getUserType() == 1) { //组织架构 + if (dept.getUpdateType() == 1) { //增 addDept.add(dept); - }else if(dept.getUpdateType() == 2){ //改 + } else if (dept.getUpdateType() == 2) { //改 updateDept.add(dept); - }else { //删 + } else { //删 deleteDept.add(dept); } } - if(dept.getUserType() == 2){ //年级 - if(dept.getUpdateType() == 1){ //增 + if (dept.getUserType() == 2) { //年级 + if (dept.getUpdateType() == 1) { //增 addGrade.add(dept); - }else if(dept.getUpdateType() == 2){ //改 + } else if (dept.getUpdateType() == 2) { //改 updateGrade.add(dept); - }else { //删 + } else { //删 deleteGrade.add(dept); } } - if(dept.getUserType() == 3){ //班级 - if(dept.getUpdateType() == 1){ //增 + if (dept.getUserType() == 3) { //班级 + if (dept.getUpdateType() == 1) { //增 addClass.add(dept); - }else if(dept.getUpdateType() == 2){ //改 + } else if (dept.getUpdateType() == 2) { //改 updateClass.add(dept); - }else { //删 + } else { //删 deleteClass.add(dept); } } } - syncGroupHxy(school,addDept,updateDept,deleteDept); - syncGradeHxy(school,addGrade,updateGrade,deleteGrade); - syncClassHxy(school,addClass,updateClass,deleteClass); + syncGroupHxy(school, addDept, updateDept, deleteDept); + syncGradeHxy(school, addGrade, updateGrade, deleteGrade); + syncClassHxy(school, addClass, updateClass, deleteClass); } - private void syncGroupHxy(SyncSchoolDto school , List addDept , List updateDept ,List deleteDept ){ - if(addDept.size() > 0){ - JSONArray array = initAddJson(addDept,school.getYxtId()); - YXYResult result = getResult(prefix_url+suffix_org_add,array.toJSONString()); - if(result.getCode() == 0 || result.getCode() == -3){ - logger.info("同步组织架构:total:" + result.getTotal() + ";pass:"+result.getPass()); - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getId())){ + private void syncGroupHxy(SyncSchoolDto school, List addDept, List updateDept, List deleteDept) { + if (addDept.size() > 0) { + JSONArray array = initAddJson(addDept, school.getYxtId()); + YXYResult result = getResult(prefix_url + suffix_org_add, array.toJSONString()); + if (result.getCode() == 0 || result.getCode() == -3) { + logger.info("同步组织架构:total:" + result.getTotal() + ";pass:" + result.getPass()); + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getId())) { //成功 DeptRelationDto deptRelationDto = new DeptRelationDto(); - SyncDeptDto syncDeptDto = getDept(addDept,detail.getName()) ; + SyncDeptDto syncDeptDto = getDept(addDept, detail.getName()); deptRelationDto.setHxyDeptId(syncDeptDto.getDeptId()); deptRelationDto.setYxyDeptId(detail.getId()); deptRelationDto.setSqlStatus(1); @@ -187,30 +187,30 @@ public class YXYWriteService { deptRelationDto.setState(1); scFeign.updateDeptRelation(deptRelationDto); scFeign.updateDept(syncDeptDto.getId()); - }else { + } else { } } - }else { + } else { errorOut(result); } } - if(updateDept.size() > 0){ + if (updateDept.size() > 0) { JSONArray array = initUpdateJson(updateDept); - YXYResult result = getResult(prefix_url+suffix_org_update,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_org_update, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getId())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getId())) { errorList.add(detail.getName()); System.out.println(detail.getName() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncDeptDto deptDto : updateDept){ - if(!errorList.contains(deptDto.getDeptName())){ + for (SyncDeptDto deptDto : updateDept) { + if (!errorList.contains(deptDto.getDeptName())) { DeptRelationDto deptRelationDto = new DeptRelationDto(); deptRelationDto.setHxyDeptId(deptDto.getDeptId()); deptRelationDto.setSqlStatus(2); @@ -221,22 +221,22 @@ public class YXYWriteService { } } } - if(deleteDept.size() > 0){ + if (deleteDept.size() > 0) { JSONArray array = initDeleteJson(deleteDept); - YXYResult result = getResult(prefix_url+suffix_org_delete,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_org_delete, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getId())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getId())) { errorList.add(detail.getName()); System.out.println(detail.getName() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncDeptDto deptDto : deleteDept){ - if(!errorList.contains(deptDto.getDeptName())){ + for (SyncDeptDto deptDto : deleteDept) { + if (!errorList.contains(deptDto.getDeptName())) { DeptRelationDto deptRelationDto = new DeptRelationDto(); deptRelationDto.setHxyDeptId(deptDto.getDeptId()); deptRelationDto.setSqlStatus(2); @@ -249,17 +249,17 @@ public class YXYWriteService { } } - private void syncGradeHxy(SyncSchoolDto school , List addGrade , List updateGrade ,List deleteGrade ){ - if(addGrade.size() > 0){ - JSONArray array = initAddJson(addGrade,school.getYxtId()); - YXYResult result = getResult(prefix_url+suffix_grade_add,array.toJSONString()); - if(result.getCode() == 0 || result.getCode() == -3){ - logger.info("同步年级:total:" + result.getTotal() + ";pass:"+result.getPass()); - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getId())){ + private void syncGradeHxy(SyncSchoolDto school, List addGrade, List updateGrade, List deleteGrade) { + if (addGrade.size() > 0) { + JSONArray array = initAddJson(addGrade, school.getYxtId()); + YXYResult result = getResult(prefix_url + suffix_grade_add, array.toJSONString()); + if (result.getCode() == 0 || result.getCode() == -3) { + logger.info("同步年级:total:" + result.getTotal() + ";pass:" + result.getPass()); + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getId())) { //成功 DeptRelationDto deptRelationDto = new DeptRelationDto(); - SyncDeptDto syncDeptDto = getDept(addGrade,detail.getName()) ; + SyncDeptDto syncDeptDto = getDept(addGrade, detail.getName()); deptRelationDto.setHxyDeptId(syncDeptDto.getDeptId()); deptRelationDto.setYxyDeptId(detail.getId()); deptRelationDto.setSqlStatus(1); @@ -269,26 +269,26 @@ public class YXYWriteService { scFeign.updateDept(syncDeptDto.getId()); } } - }else { + } else { errorOut(result); } } - if(updateGrade.size() > 0){ + if (updateGrade.size() > 0) { JSONArray array = initUpdateJson(updateGrade); - YXYResult result = getResult(prefix_url+suffix_org_update,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_org_update, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getId())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getId())) { errorList.add(detail.getName()); System.out.println(detail.getName() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncDeptDto deptDto : updateGrade){ - if(!errorList.contains(deptDto.getDeptName())){ + for (SyncDeptDto deptDto : updateGrade) { + if (!errorList.contains(deptDto.getDeptName())) { DeptRelationDto deptRelationDto = new DeptRelationDto(); deptRelationDto.setHxyDeptId(deptDto.getDeptId()); deptRelationDto.setSqlStatus(2); @@ -299,22 +299,22 @@ public class YXYWriteService { } } } - if(deleteGrade.size() > 0){ + if (deleteGrade.size() > 0) { JSONArray array = initDeleteJson(deleteGrade); - YXYResult result = getResult(prefix_url+suffix_org_delete,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_org_delete, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getId())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getId())) { errorList.add(detail.getName()); System.out.println(detail.getName() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncDeptDto deptDto : deleteGrade){ - if(!errorList.contains(deptDto.getDeptName())){ + for (SyncDeptDto deptDto : deleteGrade) { + if (!errorList.contains(deptDto.getDeptName())) { DeptRelationDto deptRelationDto = new DeptRelationDto(); deptRelationDto.setHxyDeptId(deptDto.getDeptId()); deptRelationDto.setSqlStatus(2); @@ -327,17 +327,17 @@ public class YXYWriteService { } } - private void syncClassHxy(SyncSchoolDto school , List addClass , List updateClass ,List deleteClass ){ - if(addClass.size() > 0){ + private void syncClassHxy(SyncSchoolDto school, List addClass, List updateClass, List deleteClass) { + if (addClass.size() > 0) { JSONArray array = initClassAddJson(addClass); - YXYResult result = getResult(prefix_url+suffix_class_add,array.toJSONString()); - if(result.getCode() == 0 || result.getCode() == -3){ - logger.info("同步班级:total:" + result.getTotal() + ";pass:"+result.getPass()); - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getClassid())){ + YXYResult result = getResult(prefix_url + suffix_class_add, array.toJSONString()); + if (result.getCode() == 0 || result.getCode() == -3) { + logger.info("同步班级:total:" + result.getTotal() + ";pass:" + result.getPass()); + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getClassid())) { //成功 DeptRelationDto deptRelationDto = new DeptRelationDto(); - SyncDeptDto syncDeptDto = getDept(addClass,detail.getClassname()) ; + SyncDeptDto syncDeptDto = getDept(addClass, detail.getClassname()); deptRelationDto.setHxyDeptId(syncDeptDto.getDeptId()); deptRelationDto.setYxyDeptId(detail.getClassid()); deptRelationDto.setSqlStatus(1); @@ -347,26 +347,26 @@ public class YXYWriteService { scFeign.updateDept(syncDeptDto.getId()); } } - }else { + } else { errorOut(result); } } - if(updateClass.size() > 0){ + if (updateClass.size() > 0) { JSONArray array = initUpdateJson(updateClass); - YXYResult result = getResult(prefix_url+suffix_org_update,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_org_update, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getId())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getId())) { errorList.add(detail.getName()); System.out.println(detail.getName() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncDeptDto deptDto : updateClass){ - if(!errorList.contains(deptDto.getDeptName())){ + for (SyncDeptDto deptDto : updateClass) { + if (!errorList.contains(deptDto.getDeptName())) { DeptRelationDto deptRelationDto = new DeptRelationDto(); deptRelationDto.setHxyDeptId(deptDto.getDeptId()); deptRelationDto.setSqlStatus(2); @@ -377,22 +377,22 @@ public class YXYWriteService { } } } - if(deleteClass.size() > 0){ + if (deleteClass.size() > 0) { JSONArray array = initDeleteJson(deleteClass); - YXYResult result = getResult(prefix_url+suffix_org_delete,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_org_delete, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getId())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getId())) { errorList.add(detail.getName()); System.out.println(detail.getName() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncDeptDto deptDto : deleteClass){ - if(!errorList.contains(deptDto.getDeptName())){ + for (SyncDeptDto deptDto : deleteClass) { + if (!errorList.contains(deptDto.getDeptName())) { DeptRelationDto deptRelationDto = new DeptRelationDto(); deptRelationDto.setHxyDeptId(deptDto.getDeptId()); deptRelationDto.setSqlStatus(2); @@ -405,17 +405,17 @@ public class YXYWriteService { } } - private void syncStudentHxy(SyncSchoolDto school , List addStudentList , List updateStudentList ,List deleteStudentList ){ - if(addStudentList.size() > 0){ + private void syncStudentHxy(SyncSchoolDto school, List addStudentList, List updateStudentList, List deleteStudentList) { + if (addStudentList.size() > 0) { JSONArray array = initAddJson(addStudentList); - YXYResult result = getResult(prefix_url+suffix_student_add,array.toJSONString()); - if(result.getCode() == 0 || result.getCode() == -3){ - logger.info("同步学生:total:" + result.getTotal() + ";pass:"+result.getPass()); - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getUserid())){ + YXYResult result = getResult(prefix_url + suffix_student_add, array.toJSONString()); + if (result.getCode() == 0 || result.getCode() == -3) { + logger.info("同步学生:total:" + result.getTotal() + ";pass:" + result.getPass()); + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getUserid())) { //成功 UserRelationDto userRelationDto = new UserRelationDto(); - SyncUserDto syncUserDto = getUser(addStudentList,detail.getStuname()) ; + SyncUserDto syncUserDto = getUser(addStudentList, detail.getStuname()); userRelationDto.setHxyCustomerId(syncUserDto.getCustomerId()); userRelationDto.setYxyUserId(detail.getUserid()); userRelationDto.setSqlstate(1); @@ -425,26 +425,26 @@ public class YXYWriteService { scFeign.updateUser(syncUserDto.getId()); } } - }else { + } else { errorOut(result); } } - if(updateStudentList.size() > 0){ + if (updateStudentList.size() > 0) { JSONArray array = initUserUpdateJson(updateStudentList); - YXYResult result = getResult(prefix_url+suffix_student_update,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_student_update, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getUserid())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getUserid())) { errorList.add(detail.getUserid()); System.out.println(detail.getStuname() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncUserDto user : updateStudentList){ - if(!errorList.contains(user.getYxyUserId())){ + for (SyncUserDto user : updateStudentList) { + if (!errorList.contains(user.getYxyUserId())) { UserRelationDto userRelationDto = new UserRelationDto(); userRelationDto.setHxyCustomerId(user.getCustomerId()); userRelationDto.setSqlstate(2); @@ -455,22 +455,22 @@ public class YXYWriteService { } } } - if(deleteStudentList.size() > 0){ + if (deleteStudentList.size() > 0) { JSONArray array = initUserDeleteJson(deleteStudentList); - YXYResult result = getResult(prefix_url+suffix_user_delete,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_user_delete, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getUserid())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getUserid())) { errorList.add(detail.getUserid()); System.out.println(detail.getStuname() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncUserDto user : deleteStudentList){ - if(!errorList.contains(user.getYxyUserId())){ + for (SyncUserDto user : deleteStudentList) { + if (!errorList.contains(user.getYxyUserId())) { UserRelationDto userRelationDto = new UserRelationDto(); userRelationDto.setHxyCustomerId(user.getCustomerId()); userRelationDto.setSqlstate(2); @@ -483,17 +483,17 @@ public class YXYWriteService { } } - private void syncTeacherHxy(SyncSchoolDto school , List addTeacherList , List updateTeacherList ,List deleteTeacherList ){ - if(addTeacherList.size() > 0){ - JSONArray array = initTeacherAddJson(school,addTeacherList); - YXYResult result = getResult(prefix_url+suffix_teacher_add,array.toJSONString()); - if(result.getCode() == 0 || result.getCode() == -3){ - logger.info("同步老师:total:" + result.getTotal() + ";pass:"+result.getPass()); - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getUserid())){ + private void syncTeacherHxy(SyncSchoolDto school, List addTeacherList, List updateTeacherList, List deleteTeacherList) { + if (addTeacherList.size() > 0) { + JSONArray array = initTeacherAddJson(school, addTeacherList); + YXYResult result = getResult(prefix_url + suffix_teacher_add, array.toJSONString()); + if (result.getCode() == 0 || result.getCode() == -3) { + logger.info("同步老师:total:" + result.getTotal() + ";pass:" + result.getPass()); + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getUserid())) { //成功 UserRelationDto userRelationDto = new UserRelationDto(); - SyncUserDto syncUserDto = getUser(addTeacherList,detail.getName()) ; + SyncUserDto syncUserDto = getUser(addTeacherList, detail.getName()); userRelationDto.setHxyCustomerId(syncUserDto.getCustomerId()); userRelationDto.setYxyUserId(detail.getUserid()); userRelationDto.setSqlstate(1); @@ -503,26 +503,26 @@ public class YXYWriteService { scFeign.updateUser(syncUserDto.getId()); } } - }else { + } else { errorOut(result); } } - if(updateTeacherList.size() > 0){ - JSONArray array = initTeacherUpdateJson(school,updateTeacherList); - YXYResult result = getResult(prefix_url+suffix_teacher_update,array.toJSONString()); + if (updateTeacherList.size() > 0) { + JSONArray array = initTeacherUpdateJson(school, updateTeacherList); + YXYResult result = getResult(prefix_url + suffix_teacher_update, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getUserid())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getUserid())) { errorList.add(detail.getUserid()); System.out.println(detail.getStuname() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncUserDto user : updateTeacherList){ - if(!errorList.contains(user.getYxyUserId())){ + for (SyncUserDto user : updateTeacherList) { + if (!errorList.contains(user.getYxyUserId())) { UserRelationDto userRelationDto = new UserRelationDto(); userRelationDto.setHxyCustomerId(user.getCustomerId()); userRelationDto.setSqlstate(2); @@ -533,22 +533,22 @@ public class YXYWriteService { } } } - if(deleteTeacherList.size() > 0){ + if (deleteTeacherList.size() > 0) { JSONArray array = initUserDeleteJson(deleteTeacherList); - YXYResult result = getResult(prefix_url+suffix_user_delete,array.toJSONString()); + YXYResult result = getResult(prefix_url + suffix_user_delete, array.toJSONString()); List errorList = new ArrayList<>(); - if(result.getCode() == 0 || result.getCode() == -3){ - for(YXYResultDetail detail : result.getData()){ - if(StringUtils.isNotBlank(detail.getUserid())){ + if (result.getCode() == 0 || result.getCode() == -3) { + for (YXYResultDetail detail : result.getData()) { + if (StringUtils.isNotBlank(detail.getUserid())) { errorList.add(detail.getUserid()); System.out.println(detail.getStuname() + "----" + detail.getErr()); } } - }else { + } else { errorOut(result); } - for(SyncUserDto user : deleteTeacherList){ - if(!errorList.contains(user.getYxyUserId())){ + for (SyncUserDto user : deleteTeacherList) { + if (!errorList.contains(user.getYxyUserId())) { UserRelationDto userRelationDto = new UserRelationDto(); userRelationDto.setHxyCustomerId(user.getCustomerId()); userRelationDto.setSqlstate(2); @@ -563,192 +563,192 @@ public class YXYWriteService { //封装组织架构对象 - private JSONArray initAddJson(List list , String yxtId){ + private JSONArray initAddJson(List list, String yxtId) { JSONArray array = new JSONArray(); - for(SyncDeptDto deptDto : list){ + for (SyncDeptDto deptDto : list) { JSONObject object = new JSONObject(); - object.put("schoolid",yxtId); - object.put("name",deptDto.getDeptName()); - if(deptDto.getGradeId() != 0){ - object.put("groupname",scFeign.selectDeptByGradeId(deptDto.getGradeId()).getDeptName()); + object.put("schoolid", yxtId); + object.put("name", deptDto.getDeptName()); + if (deptDto.getGradeId() != 0) { + object.put("groupname", scFeign.selectDeptByGradeId(deptDto.getGradeId()).getDeptName()); } array.add(object); } - return array ; + return array; } - private JSONArray initClassAddJson(List list){ + private JSONArray initClassAddJson(List list) { JSONArray array = new JSONArray(); - for(SyncDeptDto deptDto : list){ + for (SyncDeptDto deptDto : list) { JSONObject object = new JSONObject(); - object.put("gradeid",scFeign.selectYxyIdByHxyId(deptDto.getGradeId())); - object.put("classname",deptDto.getDeptName()); + object.put("gradeid", scFeign.selectYxyIdByHxyId(deptDto.getGradeId())); + object.put("classname", deptDto.getDeptName()); array.add(object); } - return array ; + return array; } - private JSONArray initUpdateJson(List list){ + private JSONArray initUpdateJson(List list) { JSONArray array = new JSONArray(); - for(SyncDeptDto deptDto : list){ + for (SyncDeptDto deptDto : list) { JSONObject object = new JSONObject(); - object.put("name",deptDto.getDeptName()); - object.put("id",scFeign.selectYxyIdByHxyId(deptDto.getDeptId())); + object.put("name", deptDto.getDeptName()); + object.put("id", scFeign.selectYxyIdByHxyId(deptDto.getDeptId())); array.add(object); } - return array ; + return array; } - private JSONArray initDeleteJson(List list){ + private JSONArray initDeleteJson(List list) { JSONArray array = new JSONArray(); - for(SyncDeptDto deptDto : list){ + for (SyncDeptDto deptDto : list) { JSONObject object = new JSONObject(); - object.put("id",scFeign.selectYxyIdByHxyId(deptDto.getDeptId())); + object.put("id", scFeign.selectYxyIdByHxyId(deptDto.getDeptId())); array.add(object); } - return array ; + return array; } - private JSONArray initAddJson(List list){ + private JSONArray initAddJson(List list) { JSONArray array = new JSONArray(); - for(SyncUserDto user : list){ + for (SyncUserDto user : list) { JSONObject object = new JSONObject(); - object.put("classid",scFeign.selectYxyIdByHxyId(user.getClassId())); - object.put("stuname",user.getName()); - object.put("mobile",user.getMobile()); - object.put("sex",user.getSex()); + object.put("classid", scFeign.selectYxyIdByHxyId(user.getClassId())); + object.put("stuname", user.getName()); + object.put("mobile", user.getMobile()); + object.put("sex", user.getSex()); array.add(object); } - return array ; + return array; } - private JSONArray initTeacherAddJson(SyncSchoolDto school , List list){ + private JSONArray initTeacherAddJson(SyncSchoolDto school, List list) { JSONArray array = new JSONArray(); - for(SyncUserDto user : list){ + for (SyncUserDto user : list) { JSONObject object = new JSONObject(); - object.put("schoolid",school.getYxtId()); - object.put("name",user.getName()); - object.put("mobile",user.getMobile()); - object.put("sex",user.getSex()); + object.put("schoolid", school.getYxtId()); + object.put("name", user.getName()); + object.put("mobile", user.getMobile()); + object.put("sex", user.getSex()); //添加教师 任职任课关系 JSONArray orgs = new JSONArray(); - object.put("userOrgs",orgs); + object.put("userOrgs", orgs); array.add(object); } - return array ; + return array; } - private JSONArray initTeacherUpdateJson(SyncSchoolDto school , List list){ + private JSONArray initTeacherUpdateJson(SyncSchoolDto school, List list) { JSONArray array = new JSONArray(); - for(SyncUserDto user : list){ + for (SyncUserDto user : list) { JSONObject object = new JSONObject(); - object.put("userid",user.getYxyUserId()); - object.put("name",user.getName()); - object.put("mobile",user.getMobile()); - object.put("sex",user.getSex()); + object.put("userid", user.getYxyUserId()); + object.put("name", user.getName()); + object.put("mobile", user.getMobile()); + object.put("sex", user.getSex()); array.add(object); } - return array ; + return array; } - private JSONArray initUserUpdateJson(List list){ + private JSONArray initUserUpdateJson(List list) { JSONArray array = new JSONArray(); - for(SyncUserDto user : list){ + for (SyncUserDto user : list) { JSONObject object = new JSONObject(); - object.put("userid",user.getYxyUserId()); - object.put("classid",scFeign.selectYxyIdByHxyId(user.getClassId())); - object.put("stuname",user.getName()); - object.put("mobile",user.getMobile()); - object.put("sex",user.getSex()); + object.put("userid", user.getYxyUserId()); + object.put("classid", scFeign.selectYxyIdByHxyId(user.getClassId())); + object.put("stuname", user.getName()); + object.put("mobile", user.getMobile()); + object.put("sex", user.getSex()); array.add(object); } - return array ; + return array; } - private JSONArray initUserDeleteJson(List list){ + private JSONArray initUserDeleteJson(List list) { JSONArray array = new JSONArray(); - for(SyncUserDto user : list){ + for (SyncUserDto user : list) { JSONObject object = new JSONObject(); - object.put("userid",user.getYxyUserId()); + object.put("userid", user.getYxyUserId()); array.add(object); } - return array ; + return array; } //返回父部门,或者年级 - private SyncDeptDto getDept(List deptList , int pId){ - for(SyncDeptDto dept : deptList){ - if(dept.getDeptId() == pId){ - return dept ; + private SyncDeptDto getDept(List deptList, int pId) { + for (SyncDeptDto dept : deptList) { + if (dept.getDeptId() == pId) { + return dept; } } - return null ; + return null; } //返回对应的dept - private SyncDeptDto getDept(List deptList , String name){ - for(SyncDeptDto dept : deptList){ - if(dept.getDeptName().equals(name)){ - return dept ; + private SyncDeptDto getDept(List deptList, String name) { + for (SyncDeptDto dept : deptList) { + if (dept.getDeptName().equals(name)) { + return dept; } } - return null ; + return null; } - private SyncUserDto getUser(List deptList , String name){ - for(SyncUserDto user : deptList){ - if(user.getName().equals(name)){ - return user ; + private SyncUserDto getUser(List deptList, String name) { + for (SyncUserDto user : deptList) { + if (user.getName().equals(name)) { + return user; } } - return null ; + return null; } - private YXYResult getResult(String url , String json){ - YXYResult result = invokeApi(url,TOKEN,json); - if(result == null){ + private YXYResult getResult(String url, String json) { + YXYResult result = invokeApi(url, TOKEN, json); + if (result == null) { TOKEN = getToken(); - result = invokeApi(url,TOKEN,json); - }else { + result = invokeApi(url, TOKEN, json); + } else { if (result.getCode() == 2) { TOKEN = getToken(); result = invokeApi(url, TOKEN, json); } } - if(result == null){ + if (result == null) { result = new YXYResult(); } - return result ; + return result; } - private String getToken(){ - String url = prefix_url+"/token/yxt" ; - String json = "key="+key+"&secret="+secret ; - JSONObject jsonObject = HttpClientUtils.httpPost(url,json); - return (String)jsonObject.get("token") ; + private String getToken() { + String url = prefix_url + "/token/yxt"; + String json = "key=" + key + "&secret=" + secret; + JSONObject jsonObject = HttpClientUtils.httpPost(url, json); + return (String) jsonObject.get("token"); } - private YXYResult invokeApi(String url , String token , String json){ - try{ - JSONObject jsonObject = HttpClientUtils.httpPostJson(url+"?token="+token,json); - return JSON.toJavaObject(jsonObject,YXYResult.class); - }catch (Exception e){ + private YXYResult invokeApi(String url, String token, String json) { + try { + JSONObject jsonObject = HttpClientUtils.httpPostJson(url + "?token=" + token, json); + return JSON.toJavaObject(jsonObject, YXYResult.class); + } catch (Exception e) { e.printStackTrace(); - return new YXYResult(); + return new YXYResult(); } } - private void errorOut(YXYResult result){ - try{ - for(YXYResultDetail detail : result.getData()){ + private void errorOut(YXYResult result) { + try { + for (YXYResultDetail detail : result.getData()) { logger.info(detail.getErr()); } - }catch (Exception e){ + } catch (Exception e) { } } diff --git a/cloud/quartz/src/main/java/com/sincere/quartz/utils/ThreadUtils.java b/cloud/quartz/src/main/java/com/sincere/quartz/utils/ThreadUtils.java index c2da96a..aa4762f 100644 --- a/cloud/quartz/src/main/java/com/sincere/quartz/utils/ThreadUtils.java +++ b/cloud/quartz/src/main/java/com/sincere/quartz/utils/ThreadUtils.java @@ -9,11 +9,11 @@ import java.util.concurrent.TimeUnit; public class ThreadUtils { public static ExecutorService newFixedThreadPool(int nThreads) { - ThreadPoolExecutor pool = new ThreadPoolExecutor(nThreads, 2*nThreads, + ThreadPoolExecutor pool = new ThreadPoolExecutor(nThreads, 2 * nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), new ThreadFactoryBuilder().setNameFormat("pool-%d").build(), new ThreadPoolExecutor.AbortPolicy()); - return pool ; + return pool; } } diff --git a/cloud/quartz/src/main/resources/application.yaml b/cloud/quartz/src/main/resources/application.yaml index bcfc2ba..f84e43b 100644 --- a/cloud/quartz/src/main/resources/application.yaml +++ b/cloud/quartz/src/main/resources/application.yaml @@ -20,9 +20,9 @@ datasource: username: szyxt password: QWer123$%^ jdbcUrl: jdbc:sqlserver://47.110.50.251:33419;database=SZYXT -# username: SZJXTUSER -# password: xst200919 -# jdbcUrl: jdbc:sqlserver://60.190.202.57:14333;database=SZYXT + # username: SZJXTUSER + # password: xst200919 + # jdbcUrl: jdbc:sqlserver://60.190.202.57:14333;database=SZYXT driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver ##mybatis mybatis: diff --git a/cloud/quartz/src/main/resources/mapper/ManagerMapper.xml b/cloud/quartz/src/main/resources/mapper/ManagerMapper.xml index 0ffb54f..f606563 100644 --- a/cloud/quartz/src/main/resources/mapper/ManagerMapper.xml +++ b/cloud/quartz/src/main/resources/mapper/ManagerMapper.xml @@ -2,7 +2,7 @@ - select phone from SZ_Manager where ID = #{id} diff --git a/cloud/quartz/src/main/resources/mapper/SmsMapper.xml b/cloud/quartz/src/main/resources/mapper/SmsMapper.xml index 023032f..d3eda67 100644 --- a/cloud/quartz/src/main/resources/mapper/SmsMapper.xml +++ b/cloud/quartz/src/main/resources/mapper/SmsMapper.xml @@ -4,16 +4,16 @@ insert into ${tableName} (Msg, MsgID, SchoolID, Type, Status, intime, sendtime, DingUserId, WapUrl, agentid, - tdtype, ReceiveUserID, Remark,Title) + tdtype, ReceiveUserID, Remark,Title) values (#{msg}, -1, #{schoolId}, 1, 0, GETDATE(), GETDATE(), #{dingUserId}, #{wapUrl}, #{agentId}, #{tdType}, - #{receiveUserId}, #{name},'考勤通知') + #{receiveUserId}, #{name},'考勤通知') insert into ${tableName} (SchoolID, MsgID, Guid, WapUrl, Status, intime, sendTime, SendUserName, ReceiveUserID, - QiYeHaoUserId, AppID, Secret, tdtype, Remark,Title) + QiYeHaoUserId, AppID, Secret, tdtype, Remark,Title) values (#{schoolId}, -1, #{msg}, #{msgUrl}, 0, GETDATE(), GETDATE(), '智能校卫', #{receiveUserId}, #{qiYeHaoUserId}, - #{appId}, #{secret}, #{tdType}, #{name},'考勤通知') + #{appId}, #{secret}, #{tdType}, #{name},'考勤通知') diff --git a/cloud/quartz/src/main/resources/mapper/YxyMapper.xml b/cloud/quartz/src/main/resources/mapper/YxyMapper.xml index e1ab6e7..76c0266 100644 --- a/cloud/quartz/src/main/resources/mapper/YxyMapper.xml +++ b/cloud/quartz/src/main/resources/mapper/YxyMapper.xml @@ -2,31 +2,32 @@ - + update Agency set state = 0 where state = 1 - + - update Teacher set state = 0 where state = 1 + update Teacher set state = 0 where state = 1 - update Student set state = 0 where state = 1 + update Student set state = 0 where state = 1 - + insert into Agency(deptID , deptName , superDeptID , intime , state) - values (#{deptId} , #{deptName} , #{superDeptId} , GETDATE() , 1) + values (#{deptId} , #{deptName} , #{superDeptId} , GETDATE() , 1) - + insert into Teacher(userID , account , name , deptID , intime , state) - values (#{userId} , #{account} , #{name} , #{deptId} , GETDATE() , 1) + values (#{userId} , #{account} , #{name} , #{deptId} , GETDATE() , 1) - - insert into Student(userID , account , name , classID , intime , state , isCard , isEquipment , card_crafts,cardID,cardid2,cardid3) - values (#{userId} , #{account} , #{name} , #{classId} , GETDATE() , 1 ,0,0,2,#{cardID},#{cardID2},#{cardID3}) + + insert into Student(userID , account , name , classID , intime , state , isCard , isEquipment , + card_crafts,cardID,cardid2,cardid3) + values (#{userId} , #{account} , #{name} , #{classId} , GETDATE() , 1 ,0,0,2,#{cardID},#{cardID2},#{cardID3}) diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnController.java b/cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnController.java index fe304d7..3f888b3 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnController.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnController.java @@ -48,17 +48,17 @@ public class LearnController { KnowledgeService knowledgeService; @RequestMapping(value = "getList", method = RequestMethod.POST) - public List getList(@RequestBody AnalyseDto analyseDto){ + public List getList(@RequestBody AnalyseDto analyseDto) { List list = analyseService.select(new Analyse(analyseDto)); List analyseDtos = new ArrayList<>(); - for(Analyse analyse : list){ + for (Analyse analyse : list) { AnalyseDto temp = initAnalyseDto(analyse); analyseDtos.add(temp); } - return analyseDtos; + return analyseDtos; } - private AnalyseDto initAnalyseDto(Analyse analyse){ + private AnalyseDto initAnalyseDto(Analyse analyse) { AnalyseDto analyseDto = new AnalyseDto(); analyseDto.setCourseName(analyse.getCourseName()); analyseDto.setCreateTime(analyse.getCreateTime()); @@ -72,16 +72,16 @@ public class LearnController { } @RequestMapping(value = "insertAnalyse", method = RequestMethod.POST) - public BaseVo insertAnalyse(@RequestBody AnalyseDto analyseDto){ + public BaseVo insertAnalyse(@RequestBody AnalyseDto analyseDto) { BaseVo baseVo = new BaseVo(); Analyse analyse = new Analyse(analyseDto); analyseService.insert(analyse); - baseVo.setMessage(analyse.getId()+""); + baseVo.setMessage(analyse.getId() + ""); return baseVo; } @RequestMapping(value = "updateAnalyse", method = RequestMethod.POST) - public BaseVo updateAnalyse(@RequestBody AnalyseDto analyseDto){ + public BaseVo updateAnalyse(@RequestBody AnalyseDto analyseDto) { BaseVo baseVo = new BaseVo(); Analyse analyse = new Analyse(analyseDto); analyseService.update(analyse); @@ -95,16 +95,16 @@ public class LearnController { } @RequestMapping(value = "getLeagueByAnalyse", method = RequestMethod.GET) - public List getLeagueByAnalyse(@RequestParam("analyseId") int analyseId){ + public List getLeagueByAnalyse(@RequestParam("analyseId") int analyseId) { List leagues = leagueService.selectByAnalyseId(analyseId); List leagueDtos = new ArrayList<>(); - for(League league : leagues){ + for (League league : leagues) { leagueDtos.add(initLeagueDto(league)); } - return leagueDtos ; + return leagueDtos; } - private LeagueDto initLeagueDto(League league){ + private LeagueDto initLeagueDto(League league) { LeagueDto leagueDto = new LeagueDto(); leagueDto.setAnalyseId(league.getAnalyseId()); leagueDto.setId(league.getId()); @@ -114,18 +114,18 @@ public class LearnController { } @RequestMapping(value = "isImportExam", method = RequestMethod.GET) - public List isImportExam(@RequestParam("analyseId") int analyseId){ + public List isImportExam(@RequestParam("analyseId") int analyseId) { List analyseDetails = analyseDetailService.selectByAnalyseId(analyseId); List analyseDetailDtos = new ArrayList<>(); - if(analyseDetails != null & analyseDetails.size() > 0){ - for(AnalyseDetail analyseDetail : analyseDetails){ + if (analyseDetails != null & analyseDetails.size() > 0) { + for (AnalyseDetail analyseDetail : analyseDetails) { analyseDetailDtos.add(initAnalyseDetail(analyseDetail)); } } - return analyseDetailDtos ; + return analyseDetailDtos; } - private AnalyseDetailDto initAnalyseDetail(AnalyseDetail analyseDetail){ + private AnalyseDetailDto initAnalyseDetail(AnalyseDetail analyseDetail) { AnalyseDetailDto analyseDetailDto = new AnalyseDetailDto(); analyseDetailDto.setAnalyseId(analyseDetail.getAnalyseId()); analyseDetailDto.setCreateTime(analyseDetail.getCreateTime()); @@ -137,88 +137,88 @@ public class LearnController { } @RequestMapping(value = "insertBatchAnalyseDetail", method = RequestMethod.POST) - public boolean insertBatchAnalyseDetail(@RequestBody List analyseDetailDtos){ + public boolean insertBatchAnalyseDetail(@RequestBody List analyseDetailDtos) { List list = new ArrayList<>(); - for(AnalyseDetailDto analyseDetailDto :analyseDetailDtos){ + for (AnalyseDetailDto analyseDetailDto : analyseDetailDtos) { list.add(new AnalyseDetail(analyseDetailDto)); } analyseDetailService.insertBatch(list); - return true ; + return true; } @RequestMapping(value = "insertBatchAnalyseDimensional", method = RequestMethod.POST) - public boolean insertBatchAnalyseDimensional(@RequestBody List analyseDimensionalDtos){ + public boolean insertBatchAnalyseDimensional(@RequestBody List analyseDimensionalDtos) { List list = new ArrayList<>(); - for(AnalyseDimensionalDto analyseDimensionalDto :analyseDimensionalDtos){ + for (AnalyseDimensionalDto analyseDimensionalDto : analyseDimensionalDtos) { list.add(new AnalyseDimensional(analyseDimensionalDto)); } analyseDimensionalService.insertBatch(list); - return true ; + return true; } //查数据库是否已存在该四维诊断 不存在则导入 返回主键 @RequestMapping(value = "selectDimensional", method = RequestMethod.GET) public int selectDimensional(@RequestParam("type") int type, @RequestParam("name") String name) { - Dimensional result = dimensionalService.selectByTypeAndName(type,name); - int dimensionalId = 0 ; - if(result == null || result.getId() == 0){ + Dimensional result = dimensionalService.selectByTypeAndName(type, name); + int dimensionalId = 0; + if (result == null || result.getId() == 0) { Dimensional dimensional = new Dimensional(); dimensional.setDimensionalType(type); dimensional.setDimensionalName(name); dimensional.setCreateTime(new Date()); dimensionalService.insert(dimensional); dimensionalId = dimensional.getId(); - }else{ + } else { dimensionalId = result.getId(); } - return dimensionalId ; + return dimensionalId; } @RequestMapping(value = "insertBatchStudent", method = RequestMethod.POST) - public boolean insertBatchStudent(@RequestBody List studentDtos){ + public boolean insertBatchStudent(@RequestBody List studentDtos) { List list = new ArrayList<>(); - for(StudentDto studentDto :studentDtos){ + for (StudentDto studentDto : studentDtos) { list.add(new Student(studentDto)); } studentService.insertBatch(list); - return true ; + return true; } @RequestMapping(value = "insertBatchStudentDetail", method = RequestMethod.POST) - public boolean insertBatchStudentDetail(@RequestBody List studentDetailDtos){ + public boolean insertBatchStudentDetail(@RequestBody List studentDetailDtos) { List list = new ArrayList<>(); - for(StudentDetailDto studentDetailDto :studentDetailDtos){ + for (StudentDetailDto studentDetailDto : studentDetailDtos) { list.add(new StudentDetail(studentDetailDto)); } studentDetailService.insertBatch(list); - return true ; + return true; } @RequestMapping(value = "initLeagueSchool", method = RequestMethod.GET) - public boolean initLeagueSchool(@RequestParam("leagueId")int leagueId , @RequestParam("schoolName")String schoolName){ - return leagueService.initLeagueSchool(leagueId,schoolName)==1 ? true : false ; + public boolean initLeagueSchool(@RequestParam("leagueId") int leagueId, @RequestParam("schoolName") String schoolName) { + return leagueService.initLeagueSchool(leagueId, schoolName) == 1 ? true : false; } @RequestMapping(value = "insertLeague", method = RequestMethod.POST) - public int insertLeague(@RequestBody LeagueDto leagueDto){ + public int insertLeague(@RequestBody LeagueDto leagueDto) { League league = new League(leagueDto); leagueService.insert(league); return league.getId(); } @RequestMapping(value = "getSchoolName", method = RequestMethod.GET) - public List getSchoolName(@RequestParam("analyseId")int analyseId){ + public List getSchoolName(@RequestParam("analyseId") int analyseId) { return studentService.selectSchoolNameByAnalyse(analyseId); } @RequestMapping(value = "initChapter", method = RequestMethod.POST) - public boolean initChapter(@RequestBody List chapterDtos){ + public boolean initChapter(@RequestBody List chapterDtos) { List list = new ArrayList<>(); - for(ChapterDto chapterDto : chapterDtos){ + for (ChapterDto chapterDto : chapterDtos) { list.add(new Chapter(chapterDto)); } chapterService.insertBatch(list); - return true ; + return true; } } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnStatController.java b/cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnStatController.java index dfa3956..0d4488b 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnStatController.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/controller/LearnStatController.java @@ -55,15 +55,15 @@ public class LearnStatController { ChapterService chapterService; @Autowired - KnowledgeService knowledgeService ; + KnowledgeService knowledgeService; @RequestMapping(value = "getForm1_1", method = RequestMethod.POST) - public Form7RepVO getForm1_1(@RequestBody GetLearnDto getLearnDto){ + public Form7RepVO getForm1_1(@RequestBody GetLearnDto getLearnDto) { Form7RepVO form7RepVO = new Form7RepVO(); - if(RedisUtils.existsObject(getLearnDto.getAnalyseId()+"_"+getLearnDto.getSchoolName()+"_1_1")){ - form7RepVO = (Form7RepVO) RedisUtils.getObject(getLearnDto.getAnalyseId()+"_"+getLearnDto.getSchoolName()+"_1_1"); - }else { + if (RedisUtils.existsObject(getLearnDto.getAnalyseId() + "_" + getLearnDto.getSchoolName() + "_1_1")) { + form7RepVO = (Form7RepVO) RedisUtils.getObject(getLearnDto.getAnalyseId() + "_" + getLearnDto.getSchoolName() + "_1_1"); + } else { Analyse analyse = analyseService.selectById(getLearnDto.getAnalyseId()); form7RepVO.setExamTime(analyse.getExamTime()); form7RepVO.setMaxScore(analyse.getMaxScore()); @@ -72,7 +72,7 @@ public class LearnStatController { List chapters = chapterService.selectByAnalyse(analyse.getId()); List chapterDtos = new ArrayList<>(); - for(Chapter chapter : chapters){ + for (Chapter chapter : chapters) { ChapterDto chapterDto = new ChapterDto(); chapterDto.setAnalyseId(chapter.getAnalyseId()); chapterDto.setChapterName(chapter.getChapterName()); @@ -83,109 +83,109 @@ public class LearnStatController { } form7RepVO.setList(chapterDtos); List difficultList = new ArrayList<>(); - for (DifficultEnums difficultEnums : DifficultEnums.values()){ + for (DifficultEnums difficultEnums : DifficultEnums.values()) { Form7 form7 = new Form7(); form7.setName(difficultEnums.getDifficultShow()); - form7.setPercent(analyseDetailService.selectDifficult(analyse.getId(),difficultEnums.getDifficultType())/analyse.getMaxScore()*100); + form7.setPercent(analyseDetailService.selectDifficult(analyse.getId(), difficultEnums.getDifficultType()) / analyse.getMaxScore() * 100); difficultList.add(form7); } form7RepVO.setDifficultList(difficultList); List typeList = new ArrayList<>(); List list = analyseDetailService.selectQuestionType(analyse.getId()); - for(String type : list){ + for (String type : list) { Form7 form7 = new Form7(); form7.setName(type); - Double score = analyseDetailService.selectSumType(analyse.getId(),type); + Double score = analyseDetailService.selectSumType(analyse.getId(), type); form7.setScore(score); form7.setPercent(score / analyse.getMaxScore() * 100); typeList.add(form7); } form7RepVO.setTypeList(typeList); - RedisUtils.setObject(getLearnDto.getAnalyseId()+"_"+getLearnDto.getSchoolName()+"_1_1",form7RepVO); + RedisUtils.setObject(getLearnDto.getAnalyseId() + "_" + getLearnDto.getSchoolName() + "_1_1", form7RepVO); } return form7RepVO; } @RequestMapping(value = "getForm2_1_1", method = RequestMethod.POST) - public Form1RepVO getForm2_1_1(@RequestBody GetLearnDto getLearnDto){ + public Form1RepVO getForm2_1_1(@RequestBody GetLearnDto getLearnDto) { Form1RepVO form1RepVo = new Form1RepVO(); - if(RedisUtils.existsObject(getLearnDto.getAnalyseId()+"_"+getLearnDto.getSchoolName()+"_2_1_1")){ - form1RepVo = (Form1RepVO) RedisUtils.getObject(getLearnDto.getAnalyseId()+"_"+getLearnDto.getSchoolName()+"_2_1_1"); - }else { + if (RedisUtils.existsObject(getLearnDto.getAnalyseId() + "_" + getLearnDto.getSchoolName() + "_2_1_1")) { + form1RepVo = (Form1RepVO) RedisUtils.getObject(getLearnDto.getAnalyseId() + "_" + getLearnDto.getSchoolName() + "_2_1_1"); + } else { //2.1表 Analyse analyse = analyseService.selectById(getLearnDto.getAnalyseId()); //分数段 Double maxScore = analyse.getMaxScore(); - Map segmentMap = new HashMap<>(); - segmentMap.put("A(优秀)",maxScore*0.85 + "~" + maxScore+"分"); - segmentMap.put("B(良好)",maxScore*0.7 + "~" + (maxScore*0.85-1f)+"分"); - segmentMap.put("C(及格)",maxScore*0.6 + "~" + (maxScore*0.7-1f)+"分"); - segmentMap.put("D(不及格)",0 + "~" + (maxScore*0.6-1f)+"分"); + Map segmentMap = new HashMap<>(); + segmentMap.put("A(优秀)", maxScore * 0.85 + "~" + maxScore + "分"); + segmentMap.put("B(良好)", maxScore * 0.7 + "~" + (maxScore * 0.85 - 1f) + "分"); + segmentMap.put("C(及格)", maxScore * 0.6 + "~" + (maxScore * 0.7 - 1f) + "分"); + segmentMap.put("D(不及格)", 0 + "~" + (maxScore * 0.6 - 1f) + "分"); form1RepVo.setMap(segmentMap); - List students = studentService.selectBySchoolName(getLearnDto.getAnalyseId(),null,getLearnDto.getSchoolName()); + List students = studentService.selectBySchoolName(getLearnDto.getAnalyseId(), null, getLearnDto.getSchoolName()); double sum = new Double(students.size()); - int a = studentService.selectCountByScore(getLearnDto.getAnalyseId(),null,getLearnDto.getSchoolName(),maxScore*0.85,maxScore+1f); - int b = studentService.selectCountByScore(getLearnDto.getAnalyseId(),null,getLearnDto.getSchoolName(),maxScore*0.7,(maxScore*0.85)); - int c = studentService.selectCountByScore(getLearnDto.getAnalyseId(),null,getLearnDto.getSchoolName(),maxScore*0.6,(maxScore*0.7)); - int d = studentService.selectCountByScore(getLearnDto.getAnalyseId(),null,getLearnDto.getSchoolName(),maxScore*0,(maxScore*0.6)); + int a = studentService.selectCountByScore(getLearnDto.getAnalyseId(), null, getLearnDto.getSchoolName(), maxScore * 0.85, maxScore + 1f); + int b = studentService.selectCountByScore(getLearnDto.getAnalyseId(), null, getLearnDto.getSchoolName(), maxScore * 0.7, (maxScore * 0.85)); + int c = studentService.selectCountByScore(getLearnDto.getAnalyseId(), null, getLearnDto.getSchoolName(), maxScore * 0.6, (maxScore * 0.7)); + int d = studentService.selectCountByScore(getLearnDto.getAnalyseId(), null, getLearnDto.getSchoolName(), maxScore * 0, (maxScore * 0.6)); List form1List = new ArrayList<>(); Form1 formA = new Form1(); formA.setLevel("A"); formA.setNumber(a); - formA.setProp(a/sum*100); + formA.setProp(a / sum * 100); Form1 formB = new Form1(); formB.setLevel("B"); formB.setNumber(b); - formB.setProp(b/sum*100); + formB.setProp(b / sum * 100); Form1 formC = new Form1(); formC.setLevel("C"); formC.setNumber(c); - formC.setProp(c/sum*100); + formC.setProp(c / sum * 100); Form1 formD = new Form1(); formD.setLevel("D"); formD.setNumber(d); - formD.setProp(d/sum*100); + formD.setProp(d / sum * 100); form1List.add(formA); form1List.add(formB); form1List.add(formC); form1List.add(formD); form1RepVo.setList(form1List); - RedisUtils.setObject(getLearnDto.getAnalyseId()+"_"+getLearnDto.getSchoolName()+"_2_1_1",form1RepVo); + RedisUtils.setObject(getLearnDto.getAnalyseId() + "_" + getLearnDto.getSchoolName() + "_2_1_1", form1RepVo); } return form1RepVo; } @RequestMapping(value = "getForm2_1_2", method = RequestMethod.POST) - public Form2RepVO getForm2_1_2(@RequestBody GetLearnDto GetLearnDto){ + public Form2RepVO getForm2_1_2(@RequestBody GetLearnDto GetLearnDto) { Form2RepVO repVO = new Form2RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_1_2")){ - repVO = (Form2RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_1_2"); - }else { + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_1_2")) { + repVO = (Form2RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_1_2"); + } else { Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - if(analyse == null){ + if (analyse == null) { repVO.setSuccess(false); repVO.setMessage("请先创建考试"); - return repVO; + return repVO; } - List leagues = leagueService.getLeagueBySchoolName(analyse.getId(),GetLearnDto.getSchoolName()); - if(leagues == null){ + List leagues = leagueService.getLeagueBySchoolName(analyse.getId(), GetLearnDto.getSchoolName()); + if (leagues == null) { repVO.setSuccess(false); repVO.setMessage("请先设定联盟校"); - return repVO; + return repVO; } - List allStudents = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(),null,null); - List leagueStudents = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(),leagues,null); - List students = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName()); + List allStudents = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(), null, null); + List leagueStudents = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(), leagues, null); + List students = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName()); //先算高分段的分数 - int highNumber = (int) Math.floor(allStudents.size()*0.27); + int highNumber = (int) Math.floor(allStudents.size() * 0.27); double highScore = allStudents.get(highNumber).getScore(); - int lowNumber = allStudents.size()-highNumber; + int lowNumber = allStudents.size() - highNumber; double lowScore = allStudents.get(lowNumber).getScore(); List list = new ArrayList<>(); - int highAllCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),null,null,highScore,analyse.getMaxScore()+1f); - int lowAllCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),null,null,0,lowScore); + int highAllCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), null, null, highScore, analyse.getMaxScore() + 1f); + int lowAllCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), null, null, 0, lowScore); Form2 form2 = new Form2(); form2.setName("区"); form2.setStudentNumber(allStudents.size()); @@ -193,57 +193,57 @@ public class LearnStatController { form2.setLowNumber(lowAllCount); list.add(form2); { - int highLeagueCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),leagues,null,highScore,analyse.getMaxScore()+1f); - int lowLeagueCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),leagues,null,0,lowScore); + int highLeagueCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), leagues, null, highScore, analyse.getMaxScore() + 1f); + int lowLeagueCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), leagues, null, 0, lowScore); Form2 form = new Form2(); form.setName("联盟校"); form.setStudentNumber(leagueStudents.size()); form.setStudentProp(new Double(leagueStudents.size()) / new Double(allStudents.size())); form.setHighNumber(highLeagueCount); form.setLowNumber(lowLeagueCount); - form.setHighProp(highLeagueCount/new Double(highAllCount)); - form.setLowProp(lowLeagueCount/new Double(lowAllCount)); + form.setHighProp(highLeagueCount / new Double(highAllCount)); + form.setLowProp(lowLeagueCount / new Double(lowAllCount)); list.add(form); } { - int highCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName(),highScore,analyse.getMaxScore()+1f); - int lowCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName(),0,lowScore); + int highCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName(), highScore, analyse.getMaxScore() + 1f); + int lowCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName(), 0, lowScore); Form2 form = new Form2(); form.setName(GetLearnDto.getSchoolName()); form.setStudentNumber(students.size()); form.setStudentProp(new Double(students.size()) / new Double(allStudents.size())); form.setHighNumber(highCount); form.setLowNumber(lowCount); - form.setHighProp(highCount/new Double(highAllCount)); - form.setLowProp(lowCount/new Double(lowAllCount)); + form.setHighProp(highCount / new Double(highAllCount)); + form.setLowProp(lowCount / new Double(lowAllCount)); list.add(form); } repVO.setData(list); - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_1_2",repVO); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_1_2", repVO); } return repVO; } @RequestMapping(value = "getForm2_1_3_2", method = RequestMethod.POST) - public Form2RepVO getForm2_1_3_2(@RequestBody GetLearnDto GetLearnDto){ + public Form2RepVO getForm2_1_3_2(@RequestBody GetLearnDto GetLearnDto) { Form2RepVO repVO = new Form2RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_1_3_2")){ - repVO = (Form2RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_1_3_2"); - }else { + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_1_3_2")) { + repVO = (Form2RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_1_3_2"); + } else { Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - if(analyse == null){ + if (analyse == null) { repVO.setSuccess(false); repVO.setMessage("请先创建考试"); - return repVO; + return repVO; } - List allStudents = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName()); + List allStudents = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName()); //先算高分段的分数 - int highNumber = (int) Math.floor(allStudents.size()*0.27); + int highNumber = (int) Math.floor(allStudents.size() * 0.27); double highScore = allStudents.get(highNumber).getScore(); - int lowNumber = allStudents.size()-highNumber; + int lowNumber = allStudents.size() - highNumber; double lowScore = allStudents.get(lowNumber).getScore(); - int highAllCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName(),highScore,analyse.getMaxScore()+1f); - int lowAllCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName(),0,lowScore); + int highAllCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName(), highScore, analyse.getMaxScore() + 1f); + int lowAllCount = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName(), 0, lowScore); List resultList = new ArrayList<>(); Form2 form = new Form2(); form.setName(GetLearnDto.getSchoolName()); @@ -251,56 +251,56 @@ public class LearnStatController { form.setHighNumber(highAllCount); form.setLowNumber(lowAllCount); resultList.add(form); - List classNamList = studentService.selectClassNameBySchool(GetLearnDto.getAnalyseId(),GetLearnDto.getSchoolName()); - for(String className : classNamList){ - List list = studentService.selectByClassName(GetLearnDto.getAnalyseId(),GetLearnDto.getSchoolName(),className); - int highCount = studentService.selectCountBySchoolScore(GetLearnDto.getAnalyseId(),GetLearnDto.getSchoolName(),className,highScore,analyse.getMaxScore()+1f); - int lowCount = studentService.selectCountBySchoolScore(GetLearnDto.getAnalyseId(),GetLearnDto.getSchoolName(),className,0,lowScore); + List classNamList = studentService.selectClassNameBySchool(GetLearnDto.getAnalyseId(), GetLearnDto.getSchoolName()); + for (String className : classNamList) { + List list = studentService.selectByClassName(GetLearnDto.getAnalyseId(), GetLearnDto.getSchoolName(), className); + int highCount = studentService.selectCountBySchoolScore(GetLearnDto.getAnalyseId(), GetLearnDto.getSchoolName(), className, highScore, analyse.getMaxScore() + 1f); + int lowCount = studentService.selectCountBySchoolScore(GetLearnDto.getAnalyseId(), GetLearnDto.getSchoolName(), className, 0, lowScore); Form2 form2 = new Form2(); form2.setName(className); form2.setStudentNumber(list.size()); form2.setStudentProp(new Double(list.size()) / new Double(allStudents.size())); form2.setHighNumber(highCount); form2.setLowNumber(lowCount); - form2.setHighProp(highCount/new Double(highAllCount)); - form2.setLowProp(lowCount/new Double(lowAllCount)); + form2.setHighProp(highCount / new Double(highAllCount)); + form2.setLowProp(lowCount / new Double(lowAllCount)); resultList.add(form2); } repVO.setData(resultList); - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_1_3_2",repVO); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_1_3_2", repVO); } return repVO; } @RequestMapping(value = "getForm2_1_3", method = RequestMethod.POST) - public List getForm2_1_3(@RequestBody GetLearnDto GetLearnDto){ + public List getForm2_1_3(@RequestBody GetLearnDto GetLearnDto) { Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); List list = new ArrayList<>(); list.add(Math.ceil(analyse.getMaxScore())); - list.add(Math.ceil(analyse.getMaxScore()*0.95)); - list.add(Math.ceil(analyse.getMaxScore()*0.9)); - list.add(Math.ceil(analyse.getMaxScore()*0.85)); - list.add(Math.ceil(analyse.getMaxScore()*0.8)); - list.add(Math.ceil(analyse.getMaxScore()*0.75)); - list.add(Math.ceil(analyse.getMaxScore()*0.7)); - list.add(Math.ceil(analyse.getMaxScore()*0.65)); - list.add(Math.ceil(analyse.getMaxScore()*0.6)); - list.add(Math.ceil(analyse.getMaxScore()*0.55)); - list.add(Math.ceil(analyse.getMaxScore()*0.5)); - list.add(Math.ceil(analyse.getMaxScore()*0.45)); - list.add(Math.ceil(analyse.getMaxScore()*0.4)); - list.add(Math.ceil(analyse.getMaxScore()*0.35)); - list.add(Math.ceil(analyse.getMaxScore()*0.3)); - list.add(Math.ceil(analyse.getMaxScore()*0)); + list.add(Math.ceil(analyse.getMaxScore() * 0.95)); + list.add(Math.ceil(analyse.getMaxScore() * 0.9)); + list.add(Math.ceil(analyse.getMaxScore() * 0.85)); + list.add(Math.ceil(analyse.getMaxScore() * 0.8)); + list.add(Math.ceil(analyse.getMaxScore() * 0.75)); + list.add(Math.ceil(analyse.getMaxScore() * 0.7)); + list.add(Math.ceil(analyse.getMaxScore() * 0.65)); + list.add(Math.ceil(analyse.getMaxScore() * 0.6)); + list.add(Math.ceil(analyse.getMaxScore() * 0.55)); + list.add(Math.ceil(analyse.getMaxScore() * 0.5)); + list.add(Math.ceil(analyse.getMaxScore() * 0.45)); + list.add(Math.ceil(analyse.getMaxScore() * 0.4)); + list.add(Math.ceil(analyse.getMaxScore() * 0.35)); + list.add(Math.ceil(analyse.getMaxScore() * 0.3)); + list.add(Math.ceil(analyse.getMaxScore() * 0)); List list1 = new ArrayList<>(); - for(int i =0 ; i leagues = leagueService.getLeagueBySchoolName(analyse.getId(),GetLearnDto.getSchoolName()); - if(leagues == null){ + List leagues = leagueService.getLeagueBySchoolName(analyse.getId(), GetLearnDto.getSchoolName()); + if (leagues == null) { repVO.setSuccess(false); repVO.setMessage("请先设定联盟校"); - return repVO; + return repVO; } List list = new ArrayList<>(); - List allStudents = studentService.selectBySchoolName(analyse.getId(),null,null); + List allStudents = studentService.selectBySchoolName(analyse.getId(), null, null); { Form3 form3 = new Form3(); form3.setName("区"); - form3.setMaxScore(studentService.selectMaxScore(analyse.getId(),null,null)); - form3.setAverage(studentService.selectAvgScore(analyse.getId(),null,null)); - form3.setMinScore(studentService.selectMinScore(analyse.getId(),null,null)); - int a = studentService.selectCountByScore(analyse.getId(),null,null,analyse.getMaxScore()*0.85,analyse.getMaxScore()+1); + form3.setMaxScore(studentService.selectMaxScore(analyse.getId(), null, null)); + form3.setAverage(studentService.selectAvgScore(analyse.getId(), null, null)); + form3.setMinScore(studentService.selectMinScore(analyse.getId(), null, null)); + int a = studentService.selectCountByScore(analyse.getId(), null, null, analyse.getMaxScore() * 0.85, analyse.getMaxScore() + 1); form3.setApercent(a / new Double(allStudents.size()) * 100); - int b = studentService.selectCountByScore(analyse.getId(),null,null,analyse.getMaxScore()*0.7,analyse.getMaxScore()*0.85); + int b = studentService.selectCountByScore(analyse.getId(), null, null, analyse.getMaxScore() * 0.7, analyse.getMaxScore() * 0.85); form3.setBpercent(b / new Double(allStudents.size()) * 100); - int c = studentService.selectCountByScore(analyse.getId(),null,null,analyse.getMaxScore()*0.6,analyse.getMaxScore()*0.7); + int c = studentService.selectCountByScore(analyse.getId(), null, null, analyse.getMaxScore() * 0.6, analyse.getMaxScore() * 0.7); form3.setCpercent(c / new Double(allStudents.size()) * 100); - int d = studentService.selectCountByScore(analyse.getId(),null,null,analyse.getMaxScore()*0,analyse.getMaxScore()*0.6); + int d = studentService.selectCountByScore(analyse.getId(), null, null, analyse.getMaxScore() * 0, analyse.getMaxScore() * 0.6); form3.setDpercent(d / new Double(allStudents.size()) * 100); list.add(form3); } { Form3 form = new Form3(); form.setName("联盟校"); - List students = studentService.selectBySchoolName(analyse.getId(),leagues,null); - form.setMaxScore(studentService.selectMaxScore(analyse.getId(),leagues,null)); - form.setAverage(studentService.selectAvgScore(analyse.getId(),leagues,null)); - form.setMinScore(studentService.selectMinScore(analyse.getId(),leagues,null)); - int a1 = studentService.selectCountByScore(analyse.getId(),leagues,null,analyse.getMaxScore()*0.85,analyse.getMaxScore()+1); + List students = studentService.selectBySchoolName(analyse.getId(), leagues, null); + form.setMaxScore(studentService.selectMaxScore(analyse.getId(), leagues, null)); + form.setAverage(studentService.selectAvgScore(analyse.getId(), leagues, null)); + form.setMinScore(studentService.selectMinScore(analyse.getId(), leagues, null)); + int a1 = studentService.selectCountByScore(analyse.getId(), leagues, null, analyse.getMaxScore() * 0.85, analyse.getMaxScore() + 1); form.setApercent(a1 / new Double(students.size()) * 100); - int b1 = studentService.selectCountByScore(analyse.getId(),leagues,null,analyse.getMaxScore()*0.7,analyse.getMaxScore()*0.85); + int b1 = studentService.selectCountByScore(analyse.getId(), leagues, null, analyse.getMaxScore() * 0.7, analyse.getMaxScore() * 0.85); form.setBpercent(b1 / new Double(students.size()) * 100); - int c1 = studentService.selectCountByScore(analyse.getId(),leagues,null,analyse.getMaxScore()*0.6,analyse.getMaxScore()*0.7); + int c1 = studentService.selectCountByScore(analyse.getId(), leagues, null, analyse.getMaxScore() * 0.6, analyse.getMaxScore() * 0.7); form.setCpercent(c1 / new Double(students.size()) * 100); - int d1 = studentService.selectCountByScore(analyse.getId(),leagues,null,analyse.getMaxScore()*0,analyse.getMaxScore()*0.6); + int d1 = studentService.selectCountByScore(analyse.getId(), leagues, null, analyse.getMaxScore() * 0, analyse.getMaxScore() * 0.6); form.setDpercent(d1 / new Double(students.size()) * 100); list.add(form); } { Form3 form = new Form3(); form.setName(GetLearnDto.getSchoolName()); - List students = studentService.selectBySchoolName(analyse.getId(),null,GetLearnDto.getSchoolName()); - form.setMaxScore(studentService.selectMaxScore(analyse.getId(),null,GetLearnDto.getSchoolName())); - form.setAverage(studentService.selectAvgScore(analyse.getId(),null,GetLearnDto.getSchoolName())); - form.setMinScore(studentService.selectMinScore(analyse.getId(),null,GetLearnDto.getSchoolName())); - int a1 = studentService.selectCountByScore(analyse.getId(),null,GetLearnDto.getSchoolName(),analyse.getMaxScore()*0.85,analyse.getMaxScore()+1); + List students = studentService.selectBySchoolName(analyse.getId(), null, GetLearnDto.getSchoolName()); + form.setMaxScore(studentService.selectMaxScore(analyse.getId(), null, GetLearnDto.getSchoolName())); + form.setAverage(studentService.selectAvgScore(analyse.getId(), null, GetLearnDto.getSchoolName())); + form.setMinScore(studentService.selectMinScore(analyse.getId(), null, GetLearnDto.getSchoolName())); + int a1 = studentService.selectCountByScore(analyse.getId(), null, GetLearnDto.getSchoolName(), analyse.getMaxScore() * 0.85, analyse.getMaxScore() + 1); form.setApercent(a1 / new Double(students.size()) * 100); - int b1 = studentService.selectCountByScore(analyse.getId(),null,GetLearnDto.getSchoolName(),analyse.getMaxScore()*0.7,analyse.getMaxScore()*0.85); + int b1 = studentService.selectCountByScore(analyse.getId(), null, GetLearnDto.getSchoolName(), analyse.getMaxScore() * 0.7, analyse.getMaxScore() * 0.85); form.setBpercent(b1 / new Double(students.size()) * 100); - int c1 = studentService.selectCountByScore(analyse.getId(),null,GetLearnDto.getSchoolName(),analyse.getMaxScore()*0.6,analyse.getMaxScore()*0.7); + int c1 = studentService.selectCountByScore(analyse.getId(), null, GetLearnDto.getSchoolName(), analyse.getMaxScore() * 0.6, analyse.getMaxScore() * 0.7); form.setCpercent(c1 / new Double(students.size()) * 100); - int d1 = studentService.selectCountByScore(analyse.getId(),null,GetLearnDto.getSchoolName(),analyse.getMaxScore()*0,analyse.getMaxScore()*0.6); + int d1 = studentService.selectCountByScore(analyse.getId(), null, GetLearnDto.getSchoolName(), analyse.getMaxScore() * 0, analyse.getMaxScore() * 0.6); form.setDpercent(d1 / new Double(students.size()) * 100); list.add(form); } repVO.setData(list); - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_1",repVO); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_1", repVO); } - return repVO ; + return repVO; } @RequestMapping(value = "getForm2_2_2", method = RequestMethod.POST) - public Form4RepVO getForm2_2_2(@RequestBody GetLearnDto GetLearnDto){ + public Form4RepVO getForm2_2_2(@RequestBody GetLearnDto GetLearnDto) { Form4RepVO repVO = new Form4RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_2")){ - repVO = (Form4RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_2"); - }else { + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_2")) { + repVO = (Form4RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_2"); + } else { Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - if(analyse == null){ + if (analyse == null) { repVO.setSuccess(false); repVO.setMessage("请先创建考试"); - return repVO; + return repVO; } - List leagues = leagueService.getLeagueBySchoolName(analyse.getId(),GetLearnDto.getSchoolName()); - if(leagues == null){ + List leagues = leagueService.getLeagueBySchoolName(analyse.getId(), GetLearnDto.getSchoolName()); + if (leagues == null) { repVO.setSuccess(false); repVO.setMessage("请先设定联盟校"); - return repVO; + return repVO; } List list = new ArrayList<>(); { Form4 form4 = new Form4(); form4.setName("区"); - form4.setModeNumber(studentService.selectModeNumber(analyse.getId(),null,null)); - form4.setMedianNumber(studentService.selectMedian(analyse.getId(),null,null)); - form4.setStdev(studentService.selectStdev(analyse.getId(),null,null)); - form4.setAvgNumber(studentService.selectAvgScore(analyse.getId(),null,null)); + form4.setModeNumber(studentService.selectModeNumber(analyse.getId(), null, null)); + form4.setMedianNumber(studentService.selectMedian(analyse.getId(), null, null)); + form4.setStdev(studentService.selectStdev(analyse.getId(), null, null)); + form4.setAvgNumber(studentService.selectAvgScore(analyse.getId(), null, null)); list.add(form4); } { Form4 form = new Form4(); form.setName("联盟校"); - form.setModeNumber(studentService.selectModeNumber(analyse.getId(),leagues,null)); - form.setMedianNumber(studentService.selectMedian(analyse.getId(),leagues,null)); - form.setStdev(studentService.selectStdev(analyse.getId(),leagues,null)); - form.setAvgNumber(studentService.selectAvgScore(analyse.getId(),leagues,null)); + form.setModeNumber(studentService.selectModeNumber(analyse.getId(), leagues, null)); + form.setMedianNumber(studentService.selectMedian(analyse.getId(), leagues, null)); + form.setStdev(studentService.selectStdev(analyse.getId(), leagues, null)); + form.setAvgNumber(studentService.selectAvgScore(analyse.getId(), leagues, null)); list.add(form); } { Form4 form = new Form4(); form.setName(GetLearnDto.getSchoolName()); - form.setModeNumber(studentService.selectModeNumber(analyse.getId(),null,GetLearnDto.getSchoolName())); - form.setMedianNumber(studentService.selectMedian(analyse.getId(),null,GetLearnDto.getSchoolName())); - form.setStdev(studentService.selectStdev(analyse.getId(),null,GetLearnDto.getSchoolName())); - form.setAvgNumber(studentService.selectAvgScore(analyse.getId(),null,GetLearnDto.getSchoolName())); + form.setModeNumber(studentService.selectModeNumber(analyse.getId(), null, GetLearnDto.getSchoolName())); + form.setMedianNumber(studentService.selectMedian(analyse.getId(), null, GetLearnDto.getSchoolName())); + form.setStdev(studentService.selectStdev(analyse.getId(), null, GetLearnDto.getSchoolName())); + form.setAvgNumber(studentService.selectAvgScore(analyse.getId(), null, GetLearnDto.getSchoolName())); list.add(form); } repVO.setData(list); - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_2",repVO); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_2", repVO); } return repVO; } @RequestMapping(value = "getForm2_2_3", method = RequestMethod.POST) - public Form5RepVO getForm2_2_3(@RequestBody GetLearnDto GetLearnDto){ + public Form5RepVO getForm2_2_3(@RequestBody GetLearnDto GetLearnDto) { Form5RepVO repVO = new Form5RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_3")){ - repVO = (Form5RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_3"); - }else { + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_3")) { + repVO = (Form5RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_3"); + } else { Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - if(analyse == null){ + if (analyse == null) { repVO.setSuccess(false); repVO.setMessage("请先创建考试"); - return repVO; + return repVO; } - List leagues = leagueService.getLeagueBySchoolName(analyse.getId(),GetLearnDto.getSchoolName()); - if(leagues == null){ + List leagues = leagueService.getLeagueBySchoolName(analyse.getId(), GetLearnDto.getSchoolName()); + if (leagues == null) { repVO.setSuccess(false); repVO.setMessage("请先设定联盟校"); - return repVO; + return repVO; } List allHighStudent = new ArrayList<>(); List allLowStudent = new ArrayList<>(); - List allStudents = studentService.selectBySchoolName(analyse.getId(),null,null); - int allNumber = (int) Math.floor(allStudents.size()*0.27) ; + List allStudents = studentService.selectBySchoolName(analyse.getId(), null, null); + int allNumber = (int) Math.floor(allStudents.size() * 0.27); { //获取区 高分段,低分段学生编号 - for (int i = 0; i < allNumber ; i++) { + for (int i = 0; i < allNumber; i++) { allHighStudent.add(allStudents.get(i).getStudentNumber()); } - for(int i =allStudents.size()-allNumber ; i < allStudents.size() ; i++){ + for (int i = allStudents.size() - allNumber; i < allStudents.size(); i++) { allLowStudent.add(allStudents.get(i).getStudentNumber()); } } List leagueHighStudent = new ArrayList<>(); List leagueLowStudent = new ArrayList<>(); - List leagueStudents = studentService.selectBySchoolName(analyse.getId(),leagues,null); - int leagueNumber = (int) Math.floor(leagueStudents.size()*0.27) ; + List leagueStudents = studentService.selectBySchoolName(analyse.getId(), leagues, null); + int leagueNumber = (int) Math.floor(leagueStudents.size() * 0.27); { //获取联盟校 高分段 低分段 学生编号 - for (int i = 0; i < leagueNumber ; i++) { + for (int i = 0; i < leagueNumber; i++) { leagueHighStudent.add(leagueStudents.get(i).getStudentNumber()); } - for(int i =leagueStudents.size()-leagueNumber ; i < leagueStudents.size() ; i++){ + for (int i = leagueStudents.size() - leagueNumber; i < leagueStudents.size(); i++) { leagueLowStudent.add(leagueStudents.get(i).getStudentNumber()); } } List highStudent = new ArrayList<>(); List lowStudent = new ArrayList<>(); - List students = studentService.selectBySchoolName(analyse.getId(),null,GetLearnDto.getSchoolName()); - int number = (int) Math.floor(students.size()*0.27) ; + List students = studentService.selectBySchoolName(analyse.getId(), null, GetLearnDto.getSchoolName()); + int number = (int) Math.floor(students.size() * 0.27); { //获取本校高分段 低分段 学生编号 - for (int i = 0; i < number ; i++) { + for (int i = 0; i < number; i++) { highStudent.add(students.get(i).getStudentNumber()); } - for(int i =students.size()-number ; i < students.size() ; i++){ + for (int i = students.size() - number; i < students.size(); i++) { lowStudent.add(students.get(i).getStudentNumber()); } } @@ -496,136 +496,136 @@ public class LearnStatController { List list = new ArrayList<>(); List analyseDetails = analyseDetailService.selectByAnalyseId(analyse.getId()); - for(AnalyseDetail analyseDetail : analyseDetails){ + for (AnalyseDetail analyseDetail : analyseDetails) { Form5 from5 = new Form5(); - Double allSumScore = studentDetailService.selectSumScore(analyse.getId(),null,null,analyseDetail.getQuestionNumber()); - Double leagueSumScore = studentDetailService.selectSumScore(analyse.getId(),leagues,null,analyseDetail.getQuestionNumber()); - Double schoolSumScore = studentDetailService.selectSumScore(analyse.getId(),null,GetLearnDto.getSchoolName(),analyseDetail.getQuestionNumber()); + Double allSumScore = studentDetailService.selectSumScore(analyse.getId(), null, null, analyseDetail.getQuestionNumber()); + Double leagueSumScore = studentDetailService.selectSumScore(analyse.getId(), leagues, null, analyseDetail.getQuestionNumber()); + Double schoolSumScore = studentDetailService.selectSumScore(analyse.getId(), null, GetLearnDto.getSchoolName(), analyseDetail.getQuestionNumber()); from5.setExamNumber(analyseDetail.getQuestionNumber()); from5.setScore(analyseDetail.getScore()); from5.setDifficultName(DifficultEnums.getDifficultName(analyseDetail.getDifficult())); - from5.setAllRate(allSumScore/new Double(allStudents.size()) / analyseDetail.getScore()); - from5.setLeagueRate(leagueSumScore/new Double(leagueStudents.size()) / analyseDetail.getScore()); - from5.setSchoolRate(schoolSumScore/new Double(students.size()) / analyseDetail.getScore()); + from5.setAllRate(allSumScore / new Double(allStudents.size()) / analyseDetail.getScore()); + from5.setLeagueRate(leagueSumScore / new Double(leagueStudents.size()) / analyseDetail.getScore()); + from5.setSchoolRate(schoolSumScore / new Double(students.size()) / analyseDetail.getScore()); from5.setAllAvg(allSumScore / new Double(allStudents.size())); from5.setLeagueAvg(leagueSumScore / new Double(leagueStudents.size())); from5.setSchoolAvg(schoolSumScore / new Double(students.size())); - int allHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,null ,analyseDetail.getQuestionNumber(),allHighStudent); - int allLow = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,null ,analyseDetail.getQuestionNumber(),allLowStudent); + int allHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, null, analyseDetail.getQuestionNumber(), allHighStudent); + int allLow = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, null, analyseDetail.getQuestionNumber(), allLowStudent); - int leagueHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(),leagues,null ,analyseDetail.getQuestionNumber(),allHighStudent); - int leagueLow = studentDetailService.selectTrueByExamNumber(analyse.getId(),leagues,null ,analyseDetail.getQuestionNumber(),allLowStudent); + int leagueHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(), leagues, null, analyseDetail.getQuestionNumber(), allHighStudent); + int leagueLow = studentDetailService.selectTrueByExamNumber(analyse.getId(), leagues, null, analyseDetail.getQuestionNumber(), allLowStudent); - int high = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,GetLearnDto.getSchoolName() ,analyseDetail.getQuestionNumber(),highStudent); - int low = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,GetLearnDto.getSchoolName() ,analyseDetail.getQuestionNumber(),lowStudent); - from5.setAllDist(new Double(allHigh-allLow)/new Double(allNumber)); - from5.setLeagueDist(new Double(leagueHigh-leagueLow)/new Double(leagueNumber)); - from5.setSchoolDist(new Double(high-low)/new Double(number)); + int high = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, GetLearnDto.getSchoolName(), analyseDetail.getQuestionNumber(), highStudent); + int low = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, GetLearnDto.getSchoolName(), analyseDetail.getQuestionNumber(), lowStudent); + from5.setAllDist(new Double(allHigh - allLow) / new Double(allNumber)); + from5.setLeagueDist(new Double(leagueHigh - leagueLow) / new Double(leagueNumber)); + from5.setSchoolDist(new Double(high - low) / new Double(number)); list.add(from5); } repVO.setData(list); - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_3",repVO); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_3", repVO); } return repVO; } @RequestMapping(value = "getForm2_2_4", method = RequestMethod.POST) - public Form8RepVO getForm2_2_4(@RequestBody GetLearnDto GetLearnDto){ + public Form8RepVO getForm2_2_4(@RequestBody GetLearnDto GetLearnDto) { Form8RepVO repVO = new Form8RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_4")){ - repVO = (Form8RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_4"); - }else { + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_4")) { + repVO = (Form8RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_4"); + } else { Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - if(analyse == null){ + if (analyse == null) { repVO.setSuccess(false); repVO.setMessage("请先创建考试"); - return repVO; + return repVO; } - List leagues = leagueService.getLeagueBySchoolName(analyse.getId(),GetLearnDto.getSchoolName()); - if(leagues == null){ + List leagues = leagueService.getLeagueBySchoolName(analyse.getId(), GetLearnDto.getSchoolName()); + if (leagues == null) { repVO.setSuccess(false); repVO.setMessage("请先设定联盟校"); - return repVO; + return repVO; } List list = new ArrayList<>(); - List allStudents = studentService.selectBySchoolName(analyse.getId(),null,null); - List leagueStudents = studentService.selectBySchoolName(analyse.getId(),leagues,null); - List students = studentService.selectBySchoolName(analyse.getId(),null,GetLearnDto.getSchoolName()); - for(DifficultEnums enums : DifficultEnums.values()){ + List allStudents = studentService.selectBySchoolName(analyse.getId(), null, null); + List leagueStudents = studentService.selectBySchoolName(analyse.getId(), leagues, null); + List students = studentService.selectBySchoolName(analyse.getId(), null, GetLearnDto.getSchoolName()); + for (DifficultEnums enums : DifficultEnums.values()) { Form8 form8 = new Form8(); form8.setDifficultName(enums.getDifficultName()); - form8.setScore(analyseDetailService.selectDifficult(analyse.getId(),enums.getDifficultType())); - List analyseDetails = analyseDetailService.selectDifficultDetail(analyse.getId(),enums.getDifficultType()); - Double allSumScore = 0d , leagueSumScore = 0d , schoolSumScore = 0d , score = 0d; - for(AnalyseDetail analyseDetail : analyseDetails){ - allSumScore = allSumScore + studentDetailService.selectSumScore(analyse.getId(),null,null,analyseDetail.getQuestionNumber()); - leagueSumScore = leagueSumScore + studentDetailService.selectSumScore(analyse.getId(),leagues,null,analyseDetail.getQuestionNumber()); - schoolSumScore = schoolSumScore + studentDetailService.selectSumScore(analyse.getId(),null,GetLearnDto.getSchoolName(),analyseDetail.getQuestionNumber()); - score = score + analyseDetail.getScore() ; + form8.setScore(analyseDetailService.selectDifficult(analyse.getId(), enums.getDifficultType())); + List analyseDetails = analyseDetailService.selectDifficultDetail(analyse.getId(), enums.getDifficultType()); + Double allSumScore = 0d, leagueSumScore = 0d, schoolSumScore = 0d, score = 0d; + for (AnalyseDetail analyseDetail : analyseDetails) { + allSumScore = allSumScore + studentDetailService.selectSumScore(analyse.getId(), null, null, analyseDetail.getQuestionNumber()); + leagueSumScore = leagueSumScore + studentDetailService.selectSumScore(analyse.getId(), leagues, null, analyseDetail.getQuestionNumber()); + schoolSumScore = schoolSumScore + studentDetailService.selectSumScore(analyse.getId(), null, GetLearnDto.getSchoolName(), analyseDetail.getQuestionNumber()); + score = score + analyseDetail.getScore(); } - form8.setAllRate(allSumScore / new Double(allStudents.size()) / score ); - form8.setLeagueRate(leagueSumScore / new Double(leagueStudents.size()) / score ); + form8.setAllRate(allSumScore / new Double(allStudents.size()) / score); + form8.setLeagueRate(leagueSumScore / new Double(leagueStudents.size()) / score); form8.setSchoolRate(schoolSumScore / new Double(students.size()) / score); list.add(form8); } repVO.setData(list); - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_2_2_4",repVO); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_2_2_4", repVO); } return repVO; } @RequestMapping(value = "getForm2_2_5", method = RequestMethod.POST) - public Map getForm2_2_5(@RequestBody GetLearnDto GetLearnDto){ + public Map getForm2_2_5(@RequestBody GetLearnDto GetLearnDto) { Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); //分数段 Double maxScore = analyse.getMaxScore(); - Map segmentMap = new HashMap<>(); - segmentMap.put("A",maxScore*0.85); - segmentMap.put("B",maxScore*0.7); - segmentMap.put("C",maxScore*0.6); - segmentMap.put("D",maxScore*0.6); - return segmentMap ; + Map segmentMap = new HashMap<>(); + segmentMap.put("A", maxScore * 0.85); + segmentMap.put("B", maxScore * 0.7); + segmentMap.put("C", maxScore * 0.6); + segmentMap.put("D", maxScore * 0.6); + return segmentMap; } @RequestMapping(value = "getForm3_1", method = RequestMethod.POST) - public Form6RepVO getForm3_1(@RequestBody GetLearnDto GetLearnDto){ + public Form6RepVO getForm3_1(@RequestBody GetLearnDto GetLearnDto) { Form6RepVO form6RepVO = new Form6RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_1")){ - form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_1"); - }else { - form6RepVO = initDimensional(GetLearnDto, DimensionalEnums.knowledge.getDimensionalType()) ; - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_1",form6RepVO); + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_1")) { + form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_1"); + } else { + form6RepVO = initDimensional(GetLearnDto, DimensionalEnums.knowledge.getDimensionalType()); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_1", form6RepVO); } return form6RepVO; } @RequestMapping(value = "getForm3_1_1", method = RequestMethod.POST) - public Table2RepVO getForm3_1_1(@RequestBody GetLearnDto GetLearnDto){ + public Table2RepVO getForm3_1_1(@RequestBody GetLearnDto GetLearnDto) { Table2RepVO table2RepVO = new Table2RepVO(); Form6RepVO form6RepVO = new Form6RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_1")){ - form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_1"); - }else { - form6RepVO = initDimensional(GetLearnDto,DimensionalEnums.knowledge.getDimensionalType()) ; - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_1",form6RepVO); + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_1")) { + form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_1"); + } else { + form6RepVO = initDimensional(GetLearnDto, DimensionalEnums.knowledge.getDimensionalType()); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_1", form6RepVO); } List knowledges = knowledgeService.selectAll(); List table2List = new ArrayList<>(); - for(Knowledge knowledge : knowledges){ + for (Knowledge knowledge : knowledges) { Double sumScore = new Double("0"); Double getScore = new Double("0"); String[] detailArray = knowledge.getDetail().split("、"); - for(String detail : detailArray){ - for(Form6 form6 : form6RepVO.getData()){ - if(detail.equals(form6.getDimensional())){ - sumScore = sumScore + form6.getScore() ; - getScore = getScore + form6.getSchoolRate()*form6.getScore(); + for (String detail : detailArray) { + for (Form6 form6 : form6RepVO.getData()) { + if (detail.equals(form6.getDimensional())) { + sumScore = sumScore + form6.getScore(); + getScore = getScore + form6.getSchoolRate() * form6.getScore(); } } } - if(sumScore > 0){ + if (sumScore > 0) { Table2 table2 = new Table2(); table2.setKnowledge(knowledge.getKnowledge()); table2.setAvg(knowledge.getAvg()); @@ -639,36 +639,36 @@ public class LearnStatController { return table2RepVO; } - private List sort(List target){ + private List sort(List target) { List course = new ArrayList<>(); - if(target.size() > 0){ - for(Table2 table2 : target){ - if(table2.getSchoolRate() < 0.75 && Double.valueOf(table2.getAvg()) >2){ + if (target.size() > 0) { + for (Table2 table2 : target) { + if (table2.getSchoolRate() < 0.75 && Double.valueOf(table2.getAvg()) > 2) { course.add(table2); } } - if(course.size() == 0){ + if (course.size() == 0) { Double avg = new Double("0"); Table2 result = new Table2(); - for(Table2 table2 : target){ - if(avg < new Double(table2.getAvg())){ - avg = new Double(table2.getAvg()) ; - result = table2 ; + for (Table2 table2 : target) { + if (avg < new Double(table2.getAvg())) { + avg = new Double(table2.getAvg()); + result = table2; } } course.add(result); } - if(course.size() > 5){ - course = course.subList(0,5); + if (course.size() > 5) { + course = course.subList(0, 5); } - for (int i = 0; i < course.size() ; i++) { + for (int i = 0; i < course.size(); i++) { Table2 temp = new Table2(); - for (int j = 0; j < course.size() ; j++) { - if(new Double(course.get(i).getAvg()) > new Double(course.get(j).getAvg())){ + for (int j = 0; j < course.size(); j++) { + if (new Double(course.get(i).getAvg()) > new Double(course.get(j).getAvg())) { temp = course.get(j); - course.set(j,course.get(i)); - course.set(i,temp); + course.set(j, course.get(i)); + course.set(i, temp); } } } @@ -677,190 +677,190 @@ public class LearnStatController { } @RequestMapping(value = "getForm3_2", method = RequestMethod.POST) - public Form6RepVO getForm3_2(@RequestBody GetLearnDto GetLearnDto){ + public Form6RepVO getForm3_2(@RequestBody GetLearnDto GetLearnDto) { Form6RepVO form6RepVO = new Form6RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_2")){ - form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_2"); - }else { - form6RepVO = initDimensional(GetLearnDto,DimensionalEnums.skill.getDimensionalType()) ; - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_2",form6RepVO); + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_2")) { + form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_2"); + } else { + form6RepVO = initDimensional(GetLearnDto, DimensionalEnums.skill.getDimensionalType()); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_2", form6RepVO); } return form6RepVO; } @RequestMapping(value = "getForm3_3", method = RequestMethod.POST) - public Form6RepVO getForm3_3(@RequestBody GetLearnDto GetLearnDto){ + public Form6RepVO getForm3_3(@RequestBody GetLearnDto GetLearnDto) { Form6RepVO form6RepVO = new Form6RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_3")){ - form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_3"); - }else { - form6RepVO = initDimensional(GetLearnDto,DimensionalEnums.ability.getDimensionalType()) ; - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_3",form6RepVO); + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_3")) { + form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_3"); + } else { + form6RepVO = initDimensional(GetLearnDto, DimensionalEnums.ability.getDimensionalType()); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_3", form6RepVO); } return form6RepVO; } @RequestMapping(value = "getForm3_4", method = RequestMethod.POST) - public Form6RepVO getForm3_4(@RequestBody GetLearnDto GetLearnDto){ + public Form6RepVO getForm3_4(@RequestBody GetLearnDto GetLearnDto) { Form6RepVO form6RepVO = new Form6RepVO(); - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_4")){ - form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_4"); - }else { - form6RepVO = initDimensional(GetLearnDto,DimensionalEnums.think.getDimensionalType()) ; - RedisUtils.setObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_3_4",form6RepVO); + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_4")) { + form6RepVO = (Form6RepVO) RedisUtils.getObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_4"); + } else { + form6RepVO = initDimensional(GetLearnDto, DimensionalEnums.think.getDimensionalType()); + RedisUtils.setObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_3_4", form6RepVO); } return form6RepVO; } - private Form6RepVO initDimensional(GetLearnDto GetLearnDto , int dimensionalType){ + private Form6RepVO initDimensional(GetLearnDto GetLearnDto, int dimensionalType) { Form6RepVO repVO = new Form6RepVO(); Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - if(analyse == null){ + if (analyse == null) { repVO.setSuccess(false); repVO.setMessage("请先创建考试"); - return repVO; + return repVO; } - List leagues = leagueService.getLeagueBySchoolName(analyse.getId(),GetLearnDto.getSchoolName()); - if(leagues == null){ + List leagues = leagueService.getLeagueBySchoolName(analyse.getId(), GetLearnDto.getSchoolName()); + if (leagues == null) { repVO.setSuccess(false); repVO.setMessage("请先设定区"); - return repVO; + return repVO; } List allHighStudent = new ArrayList<>(); List allLowStudent = new ArrayList<>(); - List allStudents = studentService.selectBySchoolName(analyse.getId(),null,null); - int allNumber = (int) Math.floor(allStudents.size()*0.27) ; + List allStudents = studentService.selectBySchoolName(analyse.getId(), null, null); + int allNumber = (int) Math.floor(allStudents.size() * 0.27); { //获取区 高分段,低分段学生编号 - for (int i = 0; i < allNumber ; i++) { + for (int i = 0; i < allNumber; i++) { allHighStudent.add(allStudents.get(i).getStudentNumber()); } - for(int i =allStudents.size()-allNumber ; i < allStudents.size() ; i++){ + for (int i = allStudents.size() - allNumber; i < allStudents.size(); i++) { allLowStudent.add(allStudents.get(i).getStudentNumber()); } } List leagueHighStudent = new ArrayList<>(); List leagueLowStudent = new ArrayList<>(); - List leagueStudents = studentService.selectBySchoolName(analyse.getId(),leagues,null); - int leagueNumber = (int) Math.floor(leagueStudents.size()*0.27) ; + List leagueStudents = studentService.selectBySchoolName(analyse.getId(), leagues, null); + int leagueNumber = (int) Math.floor(leagueStudents.size() * 0.27); { //获取联盟校 高分段 低分段 学生编号 - for (int i = 0; i < leagueNumber ; i++) { + for (int i = 0; i < leagueNumber; i++) { leagueHighStudent.add(leagueStudents.get(i).getStudentNumber()); } - for(int i =leagueStudents.size()-leagueNumber ; i < leagueStudents.size() ; i++){ + for (int i = leagueStudents.size() - leagueNumber; i < leagueStudents.size(); i++) { leagueLowStudent.add(leagueStudents.get(i).getStudentNumber()); } } List highStudent = new ArrayList<>(); List lowStudent = new ArrayList<>(); - List students = studentService.selectBySchoolName(analyse.getId(),null,GetLearnDto.getSchoolName()); - int number = (int) Math.floor(students.size()*0.27) ; + List students = studentService.selectBySchoolName(analyse.getId(), null, GetLearnDto.getSchoolName()); + int number = (int) Math.floor(students.size() * 0.27); { //获取本校高分段 低分段 学生编号 - for (int i = 0; i < number ; i++) { + for (int i = 0; i < number; i++) { highStudent.add(students.get(i).getStudentNumber()); } - for(int i =students.size()-number ; i < students.size() ; i++){ + for (int i = students.size() - number; i < students.size(); i++) { lowStudent.add(students.get(i).getStudentNumber()); } } List list = new ArrayList<>(); - List knowledgeList = dimensionalService.selectByAnalyse(analyse.getId(),dimensionalType); - for(Dimensional dimensional : knowledgeList){ + List knowledgeList = dimensionalService.selectByAnalyse(analyse.getId(), dimensionalType); + for (Dimensional dimensional : knowledgeList) { Form6 form6 = new Form6(); form6.setDimensional(dimensional.getDimensionalName()); - List analyseDimensionals = analyseDimensionalService.selectByDimensional(analyse.getId(),dimensional.getId()); + List analyseDimensionals = analyseDimensionalService.selectByDimensional(analyse.getId(), dimensional.getId()); Double score = 0d; StringBuffer examNumber = new StringBuffer(); List examNumberList = new ArrayList<>(); - for(AnalyseDimensional analyseDimensional :analyseDimensionals){ - score = score + analyseDimensional.getScore() ; + for (AnalyseDimensional analyseDimensional : analyseDimensionals) { + score = score + analyseDimensional.getScore(); String questionNumber = analyseDimensional.getQuestionNumber(); - if(questionNumber.contains("(")){ + if (questionNumber.contains("(")) { questionNumber = questionNumber.split("\\(")[0]; } - if(!examNumber.toString().contains(questionNumber)){ + if (!examNumber.toString().contains(questionNumber)) { examNumber.append(questionNumber).append(","); } examNumberList.add(analyseDimensional.getQuestionNumber()); } - Double allSumScore = studentDetailService.selectSumScore(analyse.getId(),null,null,examNumberList); - int allHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,null ,examNumberList,allHighStudent); - int allLow = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,null ,examNumberList,allLowStudent); + Double allSumScore = studentDetailService.selectSumScore(analyse.getId(), null, null, examNumberList); + int allHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, null, examNumberList, allHighStudent); + int allLow = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, null, examNumberList, allLowStudent); - Double leagueSumScore = studentDetailService.selectSumScore(analyse.getId(),leagues,null,examNumberList); - int leagueHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(),leagues,null ,examNumberList,leagueHighStudent); - int leagueLow = studentDetailService.selectTrueByExamNumber(analyse.getId(),leagues,null ,examNumberList,leagueLowStudent); + Double leagueSumScore = studentDetailService.selectSumScore(analyse.getId(), leagues, null, examNumberList); + int leagueHigh = studentDetailService.selectTrueByExamNumber(analyse.getId(), leagues, null, examNumberList, leagueHighStudent); + int leagueLow = studentDetailService.selectTrueByExamNumber(analyse.getId(), leagues, null, examNumberList, leagueLowStudent); - Double schoolSumScore = studentDetailService.selectSumScore(analyse.getId(),null,GetLearnDto.getSchoolName(),examNumberList); - int high = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,GetLearnDto.getSchoolName() ,examNumberList,highStudent); - int low = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,GetLearnDto.getSchoolName() ,examNumberList,lowStudent); + Double schoolSumScore = studentDetailService.selectSumScore(analyse.getId(), null, GetLearnDto.getSchoolName(), examNumberList); + int high = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, GetLearnDto.getSchoolName(), examNumberList, highStudent); + int low = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, GetLearnDto.getSchoolName(), examNumberList, lowStudent); form6.setScore(score); - form6.setAllRate(allSumScore / new Double(allStudents.size()) / score ); - form6.setLeagueRate(leagueSumScore / new Double(leagueStudents.size()) / score ); + form6.setAllRate(allSumScore / new Double(allStudents.size()) / score); + form6.setLeagueRate(leagueSumScore / new Double(leagueStudents.size()) / score); form6.setSchoolRate(schoolSumScore / new Double(students.size()) / score); form6.setAllAvg(allSumScore / new Double(allStudents.size())); form6.setLeagueAvg(leagueSumScore / new Double(leagueStudents.size())); form6.setSchoolAvg(schoolSumScore / new Double(students.size())); - form6.setAllDist(new Double(allHigh-allLow) / new Double(allNumber * analyseDimensionals.size())); - form6.setLeagueDist(new Double(leagueHigh-leagueLow) / new Double(leagueNumber * analyseDimensionals.size())); - form6.setSchoolDist(new Double(high-low) / new Double(number * analyseDimensionals.size())); - form6.setExamNumber(examNumber.toString().substring(0,examNumber.toString().length()-1)); + form6.setAllDist(new Double(allHigh - allLow) / new Double(allNumber * analyseDimensionals.size())); + form6.setLeagueDist(new Double(leagueHigh - leagueLow) / new Double(leagueNumber * analyseDimensionals.size())); + form6.setSchoolDist(new Double(high - low) / new Double(number * analyseDimensionals.size())); + form6.setExamNumber(examNumber.toString().substring(0, examNumber.toString().length() - 1)); list.add(form6); } repVO.setData(list); return repVO; } - private Form6RepVO initSchoolDimensional(GetLearnDto GetLearnDto , int dimensionalType){ + private Form6RepVO initSchoolDimensional(GetLearnDto GetLearnDto, int dimensionalType) { Form6RepVO repVO = new Form6RepVO(); Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - if(analyse == null){ + if (analyse == null) { repVO.setSuccess(false); repVO.setMessage("请先创建考试"); - return repVO; + return repVO; } List highStudent = new ArrayList<>(); List lowStudent = new ArrayList<>(); - List students = studentService.selectBySchoolName(analyse.getId(),null,GetLearnDto.getSchoolName()); - int number = (int) Math.floor(students.size()*0.27) ; + List students = studentService.selectBySchoolName(analyse.getId(), null, GetLearnDto.getSchoolName()); + int number = (int) Math.floor(students.size() * 0.27); { //获取本校高分段 低分段 学生编号 - for (int i = 0; i < number ; i++) { + for (int i = 0; i < number; i++) { highStudent.add(students.get(i).getStudentNumber()); } - for(int i =students.size()-number ; i < students.size() ; i++){ + for (int i = students.size() - number; i < students.size(); i++) { lowStudent.add(students.get(i).getStudentNumber()); } } List list = new ArrayList<>(); - List knowledgeList = dimensionalService.selectByAnalyse(analyse.getId(),dimensionalType); - for(Dimensional dimensional : knowledgeList){ + List knowledgeList = dimensionalService.selectByAnalyse(analyse.getId(), dimensionalType); + for (Dimensional dimensional : knowledgeList) { Form6 form6 = new Form6(); form6.setDimensional(dimensional.getDimensionalName()); - List analyseDimensionals = analyseDimensionalService.selectByDimensional(analyse.getId(),dimensional.getId()); + List analyseDimensionals = analyseDimensionalService.selectByDimensional(analyse.getId(), dimensional.getId()); Double score = 0d; StringBuffer examNumber = new StringBuffer(); List examNumberList = new ArrayList<>(); - for(AnalyseDimensional analyseDimensional :analyseDimensionals){ - score = score + analyseDimensional.getScore() ; + for (AnalyseDimensional analyseDimensional : analyseDimensionals) { + score = score + analyseDimensional.getScore(); examNumber.append(analyseDimensional.getQuestionNumber()).append(","); examNumberList.add(analyseDimensional.getQuestionNumber()); } - Double schoolSumScore = studentDetailService.selectSumScore(analyse.getId(),null,GetLearnDto.getSchoolName(),examNumberList); - int high = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,GetLearnDto.getSchoolName() ,examNumberList,highStudent); - int low = studentDetailService.selectTrueByExamNumber(analyse.getId(),null,GetLearnDto.getSchoolName() ,examNumberList,lowStudent); + Double schoolSumScore = studentDetailService.selectSumScore(analyse.getId(), null, GetLearnDto.getSchoolName(), examNumberList); + int high = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, GetLearnDto.getSchoolName(), examNumberList, highStudent); + int low = studentDetailService.selectTrueByExamNumber(analyse.getId(), null, GetLearnDto.getSchoolName(), examNumberList, lowStudent); form6.setScore(score); form6.setSchoolRate(schoolSumScore / new Double(students.size()) / score); form6.setSchoolAvg(schoolSumScore / new Double(students.size())); - form6.setSchoolDist(new Double(high-low) / new Double(number * analyseDimensionals.size())); - form6.setExamNumber(examNumber.toString().substring(0,examNumber.toString().length()-1)); + form6.setSchoolDist(new Double(high - low) / new Double(number * analyseDimensionals.size())); + form6.setExamNumber(examNumber.toString().substring(0, examNumber.toString().length() - 1)); list.add(form6); } repVO.setData(list); @@ -868,95 +868,95 @@ public class LearnStatController { } @RequestMapping(value = "getSuggest", method = RequestMethod.POST) - public String getSuggest(@RequestBody GetLearnDto GetLearnDto){ - String suggest = null ; - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_suggest")){ - suggest = RedisUtils.getString(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_suggest"); - }else { - SuggestRepVo suggestRepVo = new SuggestRepVo() ; + public String getSuggest(@RequestBody GetLearnDto GetLearnDto) { + String suggest = null; + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_suggest")) { + suggest = RedisUtils.getString(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_suggest"); + } else { + SuggestRepVo suggestRepVo = new SuggestRepVo(); Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - Double avg = studentService.selectAvgScore(analyse.getId(),null,GetLearnDto.getSchoolName()) ; + Double avg = studentService.selectAvgScore(analyse.getId(), null, GetLearnDto.getSchoolName()); DecimalFormat df = new DecimalFormat("#.00"); //得分率 String avgStr = df.format(avg / analyse.getMaxScore()); - List students = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName()); - int a = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName(),analyse.getMaxScore()*0.85,analyse.getMaxScore()+1f); + List students = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName()); + int a = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName(), analyse.getMaxScore() * 0.85, analyse.getMaxScore() + 1f); //优秀率 - Double apercent = new Double(a) / new Double(students.size()) * 100 ; + Double apercent = new Double(a) / new Double(students.size()) * 100; String aStr = df.format(apercent); String access = ""; - if(avg>=80){ - if(apercent >= 20){ + if (avg >= 80) { + if (apercent >= 20) { access = "良好"; - }else { + } else { access = "相对可以"; } - }else if(avg >= 75){ - if(apercent >= 35){ + } else if (avg >= 75) { + if (apercent >= 35) { access = "很好"; - }else if(apercent >= 20){ + } else if (apercent >= 20) { access = "良好"; - }else { + } else { access = "相对可以"; } - }else if(avg >= 70){ - if(apercent >= 20){ + } else if (avg >= 70) { + if (apercent >= 20) { access = "良好"; - }else { + } else { access = "相对可以"; } } else if (avg >= 60) { - if(apercent >= 10){ + if (apercent >= 10) { access = "相对可以"; - }else { + } else { access = "一般"; } - }else { + } else { access = "暴露出一些问题,试卷偏难,学生掌握不够理想"; } suggestRepVo.setAssess(access); suggestRepVo.setDifficultyDegree(avgStr); suggestRepVo.setExcellentRate(aStr); - suggestRepVo.setErrorList(getErrorRate(GetLearnDto.getAnalyseId(),GetLearnDto.getSchoolName(),students.size())); - Form6RepVO knowledge = initSchoolDimensional(GetLearnDto,DimensionalEnums.knowledge.getDimensionalType()); + suggestRepVo.setErrorList(getErrorRate(GetLearnDto.getAnalyseId(), GetLearnDto.getSchoolName(), students.size())); + Form6RepVO knowledge = initSchoolDimensional(GetLearnDto, DimensionalEnums.knowledge.getDimensionalType()); List lessKnowledgeList = new ArrayList<>(); //不足50% List midKnowledgeList = new ArrayList<>(); //50-70% - for(Form6 form6 :knowledge.getData()){ - if(form6.getSchoolRate() < 0.5d){ + for (Form6 form6 : knowledge.getData()) { + if (form6.getSchoolRate() < 0.5d) { lessKnowledgeList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() < 0.7d){ + } else if (form6.getSchoolRate() < 0.7d) { midKnowledgeList.add(form6.getDimensional()); } } suggestRepVo.setLessKnowledgeList(lessKnowledgeList); suggestRepVo.setMidKnowledgeList(midKnowledgeList); - Form6RepVO ability = initSchoolDimensional(GetLearnDto,DimensionalEnums.ability.getDimensionalType()); + Form6RepVO ability = initSchoolDimensional(GetLearnDto, DimensionalEnums.ability.getDimensionalType()); List lessAbilityList = new ArrayList<>(); //不足70% List midAbilityList = new ArrayList<>(); //70-80% List highAbilityList = new ArrayList<>(); //大于80% - for(Form6 form6 :ability.getData()){ - if(form6.getSchoolRate() < 0.7d){ + for (Form6 form6 : ability.getData()) { + if (form6.getSchoolRate() < 0.7d) { lessAbilityList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() < 0.8d){ + } else if (form6.getSchoolRate() < 0.8d) { midAbilityList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() >= 0.8d){ + } else if (form6.getSchoolRate() >= 0.8d) { highAbilityList.add(form6.getDimensional()); } } suggestRepVo.setLessAbilityList(lessAbilityList); suggestRepVo.setMidAbilityList(midAbilityList); suggestRepVo.setHighAbilityList(highAbilityList); - Form6RepVO skill = initSchoolDimensional(GetLearnDto,DimensionalEnums.skill.getDimensionalType()); + Form6RepVO skill = initSchoolDimensional(GetLearnDto, DimensionalEnums.skill.getDimensionalType()); List lessSkillList = new ArrayList<>(); //不足70% List midSkillList = new ArrayList<>(); //70-80% List highSkillList = new ArrayList<>(); //大于80% - for(Form6 form6 :skill.getData()){ - if(form6.getSchoolRate() < 0.7d){ + for (Form6 form6 : skill.getData()) { + if (form6.getSchoolRate() < 0.7d) { lessSkillList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() < 0.8d){ + } else if (form6.getSchoolRate() < 0.8d) { midSkillList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() >= 0.8d){ + } else if (form6.getSchoolRate() >= 0.8d) { highSkillList.add(form6.getDimensional()); } } @@ -964,19 +964,19 @@ public class LearnStatController { suggestRepVo.setMidSkillList(midSkillList); suggestRepVo.setHighSkillList(highSkillList); suggest = initSuggest(suggestRepVo); - RedisUtils.setString(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_suggest",suggest); + RedisUtils.setString(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_suggest", suggest); } return suggest; } - private List getErrorRate(int analyseId , String schoolName , int studentSize){ + private List getErrorRate(int analyseId, String schoolName, int studentSize) { List errorList = new ArrayList<>(); List analyseDetails = analyseDetailService.selectByAnalyseId(analyseId); - double errorNumber = Math.ceil(studentSize * 0.15) ; - for(AnalyseDetail analyseDetail :analyseDetails){ - if("选择题".equals(analyseDetail.getQuestionType())){ - int number = studentDetailService.selectTrueByExamNumber(analyseId,schoolName,analyseDetail.getQuestionNumber()); - if(errorNumber < (studentSize-number)){ + double errorNumber = Math.ceil(studentSize * 0.15); + for (AnalyseDetail analyseDetail : analyseDetails) { + if ("选择题".equals(analyseDetail.getQuestionType())) { + int number = studentDetailService.selectTrueByExamNumber(analyseId, schoolName, analyseDetail.getQuestionNumber()); + if (errorNumber < (studentSize - number)) { errorList.add(analyseDetail.getQuestionNumber()); } } @@ -984,99 +984,99 @@ public class LearnStatController { return errorList; } - private String initSuggest(SuggestRepVo suggestRepVo){ + private String initSuggest(SuggestRepVo suggestRepVo) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("

本次检测总体情况").append(suggestRepVo.getAssess()).append(",难度系数是0") .append(suggestRepVo.getDifficultyDegree()).append(",优秀率是").append(suggestRepVo.getExcellentRate()).append("%。") .append("对有关知识,总体掌握情况比较好。

从考试结果分析,各知识点掌握程度较好,唯"); - if(suggestRepVo.getMidKnowledgeList().size() != 0){ + if (suggestRepVo.getMidKnowledgeList().size() != 0) { for (int i = 0; i < suggestRepVo.getMidKnowledgeList().size(); i++) { - if(i == suggestRepVo.getMidKnowledgeList().size() - 1 ){ + if (i == suggestRepVo.getMidKnowledgeList().size() - 1) { stringBuffer.append(suggestRepVo.getMidKnowledgeList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getMidKnowledgeList().get(i)).append("、"); } } stringBuffer.append("几个知识点掌握较弱,"); } - if(suggestRepVo.getLessKnowledgeList().size() != 0){ + if (suggestRepVo.getLessKnowledgeList().size() != 0) { for (int i = 0; i < suggestRepVo.getLessKnowledgeList().size(); i++) { - if(i == suggestRepVo.getLessKnowledgeList().size() - 1 ){ + if (i == suggestRepVo.getLessKnowledgeList().size() - 1) { stringBuffer.append(suggestRepVo.getLessKnowledgeList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getLessKnowledgeList().get(i)).append("、"); } } stringBuffer.append("几个知识点学生的理解有些问题。"); } stringBuffer.append("

探究技能方面:"); - if(suggestRepVo.getHighSkillList().size() != 0){ + if (suggestRepVo.getHighSkillList().size() != 0) { for (int i = 0; i < suggestRepVo.getHighSkillList().size(); i++) { - if(i == suggestRepVo.getHighSkillList().size() - 1 ){ + if (i == suggestRepVo.getHighSkillList().size() - 1) { stringBuffer.append(suggestRepVo.getHighSkillList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getHighSkillList().get(i)).append("、"); } } stringBuffer.append("掌握的比较好,"); } - if(suggestRepVo.getMidSkillList().size() != 0){ + if (suggestRepVo.getMidSkillList().size() != 0) { for (int i = 0; i < suggestRepVo.getMidSkillList().size(); i++) { - if(i == suggestRepVo.getMidSkillList().size() - 1 ){ + if (i == suggestRepVo.getMidSkillList().size() - 1) { stringBuffer.append(suggestRepVo.getMidSkillList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getMidSkillList().get(i)).append("、"); } } stringBuffer.append("等相对较弱一些,"); } - if(suggestRepVo.getLessSkillList().size() != 0){ + if (suggestRepVo.getLessSkillList().size() != 0) { for (int i = 0; i < suggestRepVo.getLessSkillList().size(); i++) { - if(i == suggestRepVo.getLessSkillList().size() - 1 ){ + if (i == suggestRepVo.getLessSkillList().size() - 1) { stringBuffer.append(suggestRepVo.getLessSkillList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getLessSkillList().get(i)).append("、"); } } stringBuffer.append("学生掌握有些问题。"); } stringBuffer.append("

学习能力上:"); - if(suggestRepVo.getHighAbilityList().size() != 0){ + if (suggestRepVo.getHighAbilityList().size() != 0) { for (int i = 0; i < suggestRepVo.getHighAbilityList().size(); i++) { - if(i == suggestRepVo.getHighAbilityList().size() - 1 ){ + if (i == suggestRepVo.getHighAbilityList().size() - 1) { stringBuffer.append(suggestRepVo.getHighAbilityList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getHighAbilityList().get(i)).append("、"); } } stringBuffer.append("掌握较好,"); } - if(suggestRepVo.getMidAbilityList().size() != 0){ + if (suggestRepVo.getMidAbilityList().size() != 0) { for (int i = 0; i < suggestRepVo.getMidAbilityList().size(); i++) { - if(i == suggestRepVo.getMidAbilityList().size() - 1 ){ + if (i == suggestRepVo.getMidAbilityList().size() - 1) { stringBuffer.append(suggestRepVo.getMidAbilityList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getMidAbilityList().get(i)).append("、"); } } stringBuffer.append("等相对较弱一些,"); } - if(suggestRepVo.getLessAbilityList().size() != 0){ + if (suggestRepVo.getLessAbilityList().size() != 0) { for (int i = 0; i < suggestRepVo.getLessAbilityList().size(); i++) { - if(i == suggestRepVo.getLessAbilityList().size() - 1 ){ + if (i == suggestRepVo.getLessAbilityList().size() - 1) { stringBuffer.append(suggestRepVo.getLessAbilityList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getLessAbilityList().get(i)).append("、"); } } stringBuffer.append("学得还欠缺一些。"); } - if(suggestRepVo.getErrorList().size() != 0){ + if (suggestRepVo.getErrorList().size() != 0) { stringBuffer.append("另外,部分学生审题不够清楚、思维有定势,如选择题"); for (int i = 0; i < suggestRepVo.getErrorList().size(); i++) { - if(i == suggestRepVo.getErrorList().size() - 1 ){ + if (i == suggestRepVo.getErrorList().size() - 1) { stringBuffer.append(suggestRepVo.getErrorList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getErrorList().get(i)).append("、"); } } @@ -1084,114 +1084,114 @@ public class LearnStatController { } stringBuffer.append("

后续复习巩固可以从抓好基础、提高能力和注重应用上下功夫。提升"); for (int i = 0; i < suggestRepVo.getLessKnowledgeList().size(); i++) { - if(i == suggestRepVo.getLessKnowledgeList().size() - 1 ){ + if (i == suggestRepVo.getLessKnowledgeList().size() - 1) { stringBuffer.append(suggestRepVo.getLessKnowledgeList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getLessKnowledgeList().get(i)).append("、"); } } stringBuffer.append("的教学,减少低分面;以思维教学促进学生能力的提高,特别是"); for (int i = 0; i < suggestRepVo.getLessAbilityList().size(); i++) { - if(i == suggestRepVo.getLessAbilityList().size() - 1 ){ + if (i == suggestRepVo.getLessAbilityList().size() - 1) { stringBuffer.append(suggestRepVo.getLessAbilityList().get(i)); - }else { + } else { stringBuffer.append(suggestRepVo.getLessAbilityList().get(i)).append("、"); } } stringBuffer.append("等方面的能力;重视将知识应用到具体的实践中,尤其是做好试题审题和思路分析的引导,教师自己开发一些新情景的试题。

"); - return stringBuffer.toString(); + return stringBuffer.toString(); } @RequestMapping(value = "getSuggest2", method = RequestMethod.POST) - public String getSuggest2(@RequestBody GetLearnDto GetLearnDto){ - String suggest = null ; - if(RedisUtils.existsObject(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_suggest2")){ - suggest = RedisUtils.getString(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_suggest2"); - }else { - SuggestRepVo suggestRepVo = new SuggestRepVo() ; + public String getSuggest2(@RequestBody GetLearnDto GetLearnDto) { + String suggest = null; + if (RedisUtils.existsObject(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_suggest2")) { + suggest = RedisUtils.getString(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_suggest2"); + } else { + SuggestRepVo suggestRepVo = new SuggestRepVo(); Analyse analyse = analyseService.selectById(GetLearnDto.getAnalyseId()); - Double avg = studentService.selectAvgScore(analyse.getId(),null,GetLearnDto.getSchoolName()) ; + Double avg = studentService.selectAvgScore(analyse.getId(), null, GetLearnDto.getSchoolName()); DecimalFormat df = new DecimalFormat("#.00"); //得分率 String avgStr = df.format(avg / analyse.getMaxScore()); - List students = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName()); - int a = studentService.selectCountByScore(GetLearnDto.getAnalyseId(),null,GetLearnDto.getSchoolName(),analyse.getMaxScore()*0.85,analyse.getMaxScore()+1f); + List students = studentService.selectBySchoolName(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName()); + int a = studentService.selectCountByScore(GetLearnDto.getAnalyseId(), null, GetLearnDto.getSchoolName(), analyse.getMaxScore() * 0.85, analyse.getMaxScore() + 1f); //优秀率 - Double apercent = new Double(a) / new Double(students.size()) * 100 ; + Double apercent = new Double(a) / new Double(students.size()) * 100; String aStr = df.format(apercent); String access = ""; - if(avg>=80){ - if(apercent >= 20){ + if (avg >= 80) { + if (apercent >= 20) { access = "良好"; - }else { + } else { access = "相对可以"; } - }else if(avg >= 75){ - if(apercent >= 35){ + } else if (avg >= 75) { + if (apercent >= 35) { access = "很好"; - }else if(apercent >= 20){ + } else if (apercent >= 20) { access = "良好"; - }else { + } else { access = "相对可以"; } - }else if(avg >= 70){ - if(apercent >= 20){ + } else if (avg >= 70) { + if (apercent >= 20) { access = "良好"; - }else { + } else { access = "相对可以"; } } else if (avg >= 60) { - if(apercent >= 10){ + if (apercent >= 10) { access = "相对可以"; - }else { + } else { access = "一般"; } - }else { + } else { access = "暴露出一些问题,试卷偏难,学生掌握不够理想"; } suggestRepVo.setAssess(access); suggestRepVo.setDifficultyDegree(avgStr); suggestRepVo.setExcellentRate(aStr); - suggestRepVo.setErrorList(getErrorRate(GetLearnDto.getAnalyseId(),GetLearnDto.getSchoolName(),students.size())); - Form6RepVO knowledge = initSchoolDimensional(GetLearnDto,DimensionalEnums.knowledge.getDimensionalType()); + suggestRepVo.setErrorList(getErrorRate(GetLearnDto.getAnalyseId(), GetLearnDto.getSchoolName(), students.size())); + Form6RepVO knowledge = initSchoolDimensional(GetLearnDto, DimensionalEnums.knowledge.getDimensionalType()); List lessKnowledgeList = new ArrayList<>(); //不足50% List midKnowledgeList = new ArrayList<>(); //50-70% - for(Form6 form6 :knowledge.getData()){ - if(form6.getSchoolRate() < 0.5d){ + for (Form6 form6 : knowledge.getData()) { + if (form6.getSchoolRate() < 0.5d) { lessKnowledgeList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() < 0.7d){ + } else if (form6.getSchoolRate() < 0.7d) { midKnowledgeList.add(form6.getDimensional()); } } suggestRepVo.setLessKnowledgeList(lessKnowledgeList); suggestRepVo.setMidKnowledgeList(midKnowledgeList); - Form6RepVO ability = initSchoolDimensional(GetLearnDto,DimensionalEnums.ability.getDimensionalType()); + Form6RepVO ability = initSchoolDimensional(GetLearnDto, DimensionalEnums.ability.getDimensionalType()); List lessAbilityList = new ArrayList<>(); //不足70% List midAbilityList = new ArrayList<>(); //70-80% List highAbilityList = new ArrayList<>(); //大于80% - for(Form6 form6 :ability.getData()){ - if(form6.getSchoolRate() < 0.7d){ + for (Form6 form6 : ability.getData()) { + if (form6.getSchoolRate() < 0.7d) { lessAbilityList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() < 0.8d){ + } else if (form6.getSchoolRate() < 0.8d) { midAbilityList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() >= 0.8d){ + } else if (form6.getSchoolRate() >= 0.8d) { highAbilityList.add(form6.getDimensional()); } } suggestRepVo.setLessAbilityList(lessAbilityList); suggestRepVo.setMidAbilityList(midAbilityList); suggestRepVo.setHighAbilityList(highAbilityList); - Form6RepVO skill = initSchoolDimensional(GetLearnDto,DimensionalEnums.skill.getDimensionalType()); + Form6RepVO skill = initSchoolDimensional(GetLearnDto, DimensionalEnums.skill.getDimensionalType()); List lessSkillList = new ArrayList<>(); //不足70% List midSkillList = new ArrayList<>(); //70-80% List highSkillList = new ArrayList<>(); //大于80% - for(Form6 form6 :skill.getData()){ - if(form6.getSchoolRate() < 0.7d){ + for (Form6 form6 : skill.getData()) { + if (form6.getSchoolRate() < 0.7d) { lessSkillList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() < 0.8d){ + } else if (form6.getSchoolRate() < 0.8d) { midSkillList.add(form6.getDimensional()); - }else if(form6.getSchoolRate() >= 0.8d){ + } else if (form6.getSchoolRate() >= 0.8d) { highSkillList.add(form6.getDimensional()); } } @@ -1199,18 +1199,18 @@ public class LearnStatController { suggestRepVo.setMidSkillList(midSkillList); suggestRepVo.setHighSkillList(highSkillList); suggest = initSuggest2(suggestRepVo); - RedisUtils.setString(GetLearnDto.getAnalyseId()+"_"+GetLearnDto.getSchoolName()+"_suggest2",suggest); + RedisUtils.setString(GetLearnDto.getAnalyseId() + "_" + GetLearnDto.getSchoolName() + "_suggest2", suggest); } return suggest; } - private String initSuggest2(SuggestRepVo suggestRepVo){ + private String initSuggest2(SuggestRepVo suggestRepVo) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("

本次检测总体情况").append(suggestRepVo.getAssess()).append(",难度系数是0") .append(suggestRepVo.getDifficultyDegree()).append(",优秀率是").append(suggestRepVo.getExcellentRate()).append("%。") .append("对有关知识,总体掌握情况比较好。

从考试结果分析,各知识点掌握程度较好,唯......"); stringBuffer.append("

后续复习巩固可以从抓好基础、提高能力和注重应用上下功夫......

"); - return stringBuffer.toString(); + return stringBuffer.toString(); } } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleController.java b/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleController.java index 3e87426..999c57d 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleController.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleController.java @@ -44,76 +44,76 @@ public class ScheduleController { @ApiOperation("作息安排") @RequestMapping(value = "firstChoose", method = RequestMethod.POST) - public BaseVo firstChoose(@RequestBody FirstReqVo firstReqVo){ + public BaseVo firstChoose(@RequestBody FirstReqVo firstReqVo) { BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(firstReqVo.getScheduleId()); - if(schedule != null && schedule.getSpeed() == 0){ + if (schedule != null && schedule.getSpeed() == 0) { schedule.setMorning(firstReqVo.getMorning()); schedule.setAfternoon(firstReqVo.getAfternoon()); schedule.setNight(firstReqVo.getNight()); scheduleService.updateZuoxi(schedule); - firstReqVo.setDayNumber(firstReqVo.getMorning()+firstReqVo.getAfternoon()+firstReqVo.getNight()); + firstReqVo.setDayNumber(firstReqVo.getMorning() + firstReqVo.getAfternoon() + firstReqVo.getNight()); List classCourses = new ArrayList<>(); //暂时只有单周 for (int i = 1; i <= 7; i++) { - classCourses.addAll(setClassCourse(false,i,firstReqVo)); + classCourses.addAll(setClassCourse(false, i, firstReqVo)); } classCourseService.insertSchoolClass(classCourses); schedule.setSpeed(2); scheduleService.updateSpeed(schedule); - }else { + } else { baseVo.setMessage("排课计划不存在或已生成作息"); baseVo.setSuccess(false); } - return baseVo; + return baseVo; } @ApiOperation("设置公共资源课,主课,副课") @RequestMapping(value = "setCourseType", method = RequestMethod.POST) - public BaseVo setCourseType(@RequestBody SetTypeReqVo setTypeReqVo){ + public BaseVo setCourseType(@RequestBody SetTypeReqVo setTypeReqVo) { BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(setTypeReqVo.getScheduleId()); - if(schedule == null){ + if (schedule == null) { baseVo.setMessage("参数有误"); baseVo.setSuccess(false); return baseVo; } - if(teacherClassService.selectHasSchedule(schedule.getSchoolId(),schedule.getTeam()) >0){ + if (teacherClassService.selectHasSchedule(schedule.getSchoolId(), schedule.getTeam()) > 0) { baseVo.setMessage("已经部分排课,不能再设置"); baseVo.setSuccess(false); return baseVo; } - for(Integer courseId : setTypeReqVo.getCourseIdList()){ - if(setTypeReqVo.getCourseType() !=1 && setTypeReqVo.getCourseType() != 2 &&setTypeReqVo.getCourseType() != 3){ + for (Integer courseId : setTypeReqVo.getCourseIdList()) { + if (setTypeReqVo.getCourseType() != 1 && setTypeReqVo.getCourseType() != 2 && setTypeReqVo.getCourseType() != 3) { baseVo.setMessage("课程类型错误"); baseVo.setSuccess(false); return baseVo; } - courseService.updateCourseType(courseId,setTypeReqVo.getCourseType(),schedule.getSchoolId()); + courseService.updateCourseType(courseId, setTypeReqVo.getCourseType(), schedule.getSchoolId()); } return baseVo; } @ApiOperation("合班") @RequestMapping(value = "joinClass", method = RequestMethod.POST) - public BaseVo joinClass(@RequestBody JoinClassReqVo joinClassReqVo){ + public BaseVo joinClass(@RequestBody JoinClassReqVo joinClassReqVo) { BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(joinClassReqVo.getScheduleId()); - if(teacherClassService.selectHasSchedule(schedule.getSchoolId(),schedule.getTeam()) >0){ + if (teacherClassService.selectHasSchedule(schedule.getSchoolId(), schedule.getTeam()) > 0) { baseVo.setMessage("已经部分排课,不能再设置"); baseVo.setSuccess(false); return baseVo; } - Course course = courseService.selectBySchoolIdAndCourseId(schedule.getSchoolId(),joinClassReqVo.getCourseId()); + Course course = courseService.selectBySchoolIdAndCourseId(schedule.getSchoolId(), joinClassReqVo.getCourseId()); List list = new ArrayList<>(); - String grade = null ; - String teacherName = null ; - for(Integer classId : joinClassReqVo.getClassIdList()){ + String grade = null; + String teacherName = null; + for (Integer classId : joinClassReqVo.getClassIdList()) { ClassModel classModel = classModelService.selectByPrimaryKey(classId); - if(grade == null){ + if (grade == null) { grade = classModel.getGrade(); } - if(!grade.equals(classModel.getGrade())){ + if (!grade.equals(classModel.getGrade())) { baseVo.setMessage("合班不能跨年段"); baseVo.setSuccess(false); return baseVo; @@ -124,10 +124,10 @@ public class ScheduleController { teacherClass.setCourseName(course.getCourseName()); teacherClass.setClassId(classId); TeacherClass resultTeacherClass = teacherClassService.selectByCourseAndClass(teacherClass); - if(teacherName == null){ + if (teacherName == null) { teacherName = resultTeacherClass.getTeacherName(); } - if(!teacherName.equals(resultTeacherClass.getTeacherName())){ + if (!teacherName.equals(resultTeacherClass.getTeacherName())) { baseVo.setMessage("合班必须同一个老师"); baseVo.setSuccess(false); return baseVo; @@ -139,7 +139,7 @@ public class ScheduleController { joinClass.setCourseId(course.getCourseId()); joinClass.setCourseName(course.getCourseName()); List joinClasses = joinClassService.selectByCourse(joinClass); - if(joinClasses != null && joinClasses.size() > 0){ + if (joinClasses != null && joinClasses.size() > 0) { baseVo.setSuccess(false); baseVo.setMessage("不能重复合班"); return baseVo; @@ -152,10 +152,10 @@ public class ScheduleController { @ApiOperation("删除某个合班信息") @RequestMapping(value = "deleteJoinClass", method = RequestMethod.POST) - public BaseVo deleteJoinClass(@RequestBody CourseGroupReqVo courseGroupReqVo){ + public BaseVo deleteJoinClass(@RequestBody CourseGroupReqVo courseGroupReqVo) { BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(courseGroupReqVo.getScheduleId()); - if(teacherClassService.selectHasSchedule(schedule.getSchoolId(),schedule.getTeam()) >0){ + if (teacherClassService.selectHasSchedule(schedule.getSchoolId(), schedule.getTeam()) > 0) { baseVo.setMessage("已经部分排课,不能再删除"); baseVo.setSuccess(false); return baseVo; @@ -166,15 +166,15 @@ public class ScheduleController { @ApiOperation("不排课") @RequestMapping(value = "noSchedule", method = RequestMethod.POST) - public BaseVo noSchedule(@RequestBody NoScheduleReqVo noScheduleReqVo){ + public BaseVo noSchedule(@RequestBody NoScheduleReqVo noScheduleReqVo) { BaseVo baseVo = new BaseVo(); - Schedule schedule =scheduleService.selectById(noScheduleReqVo.getScheduleId()); - if(teacherClassService.selectHasSchedule(schedule.getSchoolId(),schedule.getTeam()) >0){ + Schedule schedule = scheduleService.selectById(noScheduleReqVo.getScheduleId()); + if (teacherClassService.selectHasSchedule(schedule.getSchoolId(), schedule.getTeam()) > 0) { baseVo.setMessage("已经部分排课,不能再设置"); baseVo.setSuccess(false); return baseVo; } - for(String msg : noScheduleReqVo.getList()){ + for (String msg : noScheduleReqVo.getList()) { try { String[] arrayMsg = msg.split("-"); ClassCourse classCourse = new ClassCourse(); @@ -183,19 +183,19 @@ public class ScheduleController { classCourse.setWeek(Integer.valueOf(arrayMsg[0])); classCourse.setCourseNumber(Integer.valueOf(arrayMsg[1])); classCourse.setSingleOrDouble(1); - if(noScheduleReqVo.getLevel() == 1){ + if (noScheduleReqVo.getLevel() == 1) { classCourse.setClassId(noScheduleReqVo.getClassId()); } - if(noScheduleReqVo.getLevel() == 2){ + if (noScheduleReqVo.getLevel() == 2) { classCourse.setGrade(noScheduleReqVo.getGrade()); } List list = classCourseService.selectClassCourseByClass(classCourse); - for(ClassCourse temp : list){ + for (ClassCourse temp : list) { temp.setCourseName("不排课"); classCourseService.updateByPrimaryKey(temp); } - }catch (Exception e){ - System.out.println("不排课"+e.toString()); + } catch (Exception e) { + System.out.println("不排课" + e.toString()); baseVo.setSuccess(false); baseVo.setMessage("格式不对"); } @@ -205,19 +205,19 @@ public class ScheduleController { @ApiOperation("选择拟排科目类型,设置优先区间 提示") @RequestMapping(value = "secondChooseBefore", method = RequestMethod.POST) - public BaseVo secondChooseBefore(@RequestBody ParallelClassReqVo parallelClassReqVo){ + public BaseVo secondChooseBefore(@RequestBody ParallelClassReqVo parallelClassReqVo) { BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(parallelClassReqVo.getScheduleId()); StringBuffer stringBuffer = new StringBuffer(); - if(parallelClassReqVo.getLevel() == 1){ + if (parallelClassReqVo.getLevel() == 1) { ClassModel classModel = classModelService.selectByPrimaryKey(parallelClassReqVo.getClassId()); - stringBuffer.append("本次不排课设置,只涉及"+classModel.getClassName()); - }else if(parallelClassReqVo.getLevel() == 2){ - List list = classModelService.selectBySchoolIdAndGrade(schedule.getSchoolId(),parallelClassReqVo.getGrade()); - stringBuffer.append("本次不排课设置,共涉及"+list.size()+"个班"); - }else { + stringBuffer.append("本次不排课设置,只涉及" + classModel.getClassName()); + } else if (parallelClassReqVo.getLevel() == 2) { + List list = classModelService.selectBySchoolIdAndGrade(schedule.getSchoolId(), parallelClassReqVo.getGrade()); + stringBuffer.append("本次不排课设置,共涉及" + list.size() + "个班"); + } else { List list = classModelService.selectBySchoolId(schedule.getSchoolId()); - stringBuffer.append("本次不排课设置,共涉及"+list.size()+"个班"); + stringBuffer.append("本次不排课设置,共涉及" + list.size() + "个班"); } baseVo.setMessage(stringBuffer.toString()); return baseVo; @@ -233,7 +233,7 @@ public class ScheduleController { boolean isDouble = false; //优先范围 List limitList = new ArrayList<>(); - for(String msg : parallelClassReqVo.getIntervalList()){ + for (String msg : parallelClassReqVo.getIntervalList()) { String[] arrayMsg = msg.split("-"); ClassCourse classCourse = new ClassCourse(); classCourse.setSingleOrDouble(1); @@ -248,30 +248,30 @@ public class ScheduleController { course.setCourseType(parallelClassReqVo.getCourseType()); List courseList = courseService.selectByCourse(course); List teacherClasss = new ArrayList<>(); - int courseCount = 0 ; - for(Course course1 : courseList){ + int courseCount = 0; + for (Course course1 : courseList) { TeacherClass search = new TeacherClass(); search.setSchoolId(schedule.getSchoolId()); search.setCourseName(course1.getCourseName()); search.setTeam(schedule.getTeam()); - if(parallelClassReqVo.getLevel() == 1){ + if (parallelClassReqVo.getLevel() == 1) { search.setClassId(parallelClassReqVo.getClassId()); } - if(parallelClassReqVo.getLevel() == 2){ + if (parallelClassReqVo.getLevel() == 2) { search.setGrade(parallelClassReqVo.getGrade()); } List teacherClassList = teacherClassService.selectByCourseName(search); courseCount = courseCount + teacherClassList.get(0).getTimes(); teacherClasss.addAll(teacherClassList); } - if(courseCount > limitList.size()){ + if (courseCount > limitList.size()) { baseVo.setSuccess(false); baseVo.setMessage("所要设置的公共课程数大于选择课表时段,请重新设置"); return baseVo; } //联排的优先级 List joinList = new ArrayList<>(); - for(int i = 1 ; i <= 5 ; i++) { + for (int i = 1; i <= 5; i++) { joinList.add(i); } Set teacherClassSet = new HashSet<>(teacherClasss); @@ -281,7 +281,7 @@ public class ScheduleController { teacherCourse.setTeacherName(temp.getTeacherName()); teacherCourse.setTeam(schedule.getTeam()); //插入教师排课表 - if(teacherCourseService.isCreateCourse(teacherCourse) == 0){ + if (teacherCourseService.isCreateCourse(teacherCourse) == 0) { //插入教师排课表 insertTeacherCourse(isDouble, teacherCourse); } @@ -292,35 +292,35 @@ public class ScheduleController { searchTeacher.setTeacherName(temp.getTeacherName()); searchTeacher.setCourseName(temp.getCourseName()); TeacherClass teacherClass = teacherClassService.selectByTeacher(searchTeacher); - if(teacherClass.getStatus() == 1){ + if (teacherClass.getStatus() == 1) { //已经排课不再排课 - }else { + } else { ClassCourse classCourse = new ClassCourse(); classCourse.setClassId(temp.getClassId()); classCourse.setTeam(schedule.getTeam()); classCourse.setSchoolId(schedule.getSchoolId()); classCourse.setSingleOrDouble(1); List classCourses = classCourseService.selectByClassIdAndSingleOrDouble(classCourse); - initWeekCourse(parallelClassReqVo.getCourseType(),joinList,teacherClass,classCourses,limitList,0); + initWeekCourse(parallelClassReqVo.getCourseType(), joinList, teacherClass, classCourses, limitList, 0); //排课结束,更新 //如果是合班的话,需要更新多个teacherClass teacherClassService.updateSchedule(teacherClass.gettClassId()); JoinClass joinClass = new JoinClass(); joinClass.setSchoolId(schedule.getSchoolId()); joinClass.setTeam(schedule.getTeam()); - joinClass.setCourseId(courseService.selectBySchoolIdAndCourseName(schedule.getSchoolId(),teacherClass.getCourseName()).getCourseId()); + joinClass.setCourseId(courseService.selectBySchoolIdAndCourseName(schedule.getSchoolId(), teacherClass.getCourseName()).getCourseId()); joinClass.setClassId(classCourse.getClassId()); List joinClasses = joinClassService.selectByCourse(joinClass); - if(joinClasses != null && joinClasses.size() > 0){ + if (joinClasses != null && joinClasses.size() > 0) { List resultList = joinClassService.selectByCourseGroup(joinClasses.get(0).getCourseGroup()); - for(JoinClass joinClass1 :resultList){ - TeacherClass searchTeacherClass = new TeacherClass(); - searchTeacherClass.setSchoolId(schedule.getSchoolId()); - searchTeacherClass.setTeam(schedule.getTeam()); - searchTeacherClass.setCourseName(teacherClass.getCourseName()); - searchTeacherClass.setClassId(joinClass1.getClassId()); - TeacherClass resultTeacherClass = teacherClassService.selectByCourseAndClass(searchTeacherClass); - teacherClassService.updateSchedule(resultTeacherClass.gettClassId()); + for (JoinClass joinClass1 : resultList) { + TeacherClass searchTeacherClass = new TeacherClass(); + searchTeacherClass.setSchoolId(schedule.getSchoolId()); + searchTeacherClass.setTeam(schedule.getTeam()); + searchTeacherClass.setCourseName(teacherClass.getCourseName()); + searchTeacherClass.setClassId(joinClass1.getClassId()); + TeacherClass resultTeacherClass = teacherClassService.selectByCourseAndClass(searchTeacherClass); + teacherClassService.updateSchedule(resultTeacherClass.gettClassId()); } } @@ -331,10 +331,10 @@ public class ScheduleController { @ApiOperation("排课撤回") @RequestMapping(value = "recall", method = RequestMethod.POST) - public BaseVo recall(@RequestBody RecallReqVo recallReqVo){ + public BaseVo recall(@RequestBody RecallReqVo recallReqVo) { BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(recallReqVo.getScheduleId()); - switch (recallReqVo.getNumber()){ + switch (recallReqVo.getNumber()) { case 1: //不排课撤回 ClassCourse classCourse1 = new ClassCourse(); @@ -344,25 +344,25 @@ public class ScheduleController { break; case 2: //公共课不排课 - recall(3,schedule); + recall(3, schedule); break; case 3: //主课 - recall(1,schedule); + recall(1, schedule); break; case 4: - recall(2,schedule); + recall(2, schedule); break; } return baseVo; } - private void recall(int courseType , Schedule schedule){ + private void recall(int courseType, Schedule schedule) { Course course = new Course(); course.setSchoolId(schedule.getSchoolId()); course.setCourseType(courseType); List list = courseService.selectByCourse(course); - for(Course temp : list){ + for (Course temp : list) { ClassCourse classCourse2 = new ClassCourse(); classCourse2.setSchoolId(schedule.getSchoolId()); classCourse2.setCourseName(temp.getCourseName()); @@ -372,7 +372,7 @@ public class ScheduleController { teacherClass.setTeam(schedule.getTeam()); teacherClass.setCourseName(temp.getCourseName()); List teacherClasses = teacherClassService.selectByCourseName(teacherClass); - for(TeacherClass teacherClass1 : teacherClasses){ + for (TeacherClass teacherClass1 : teacherClasses) { TeacherCourse teacherCourse2 = new TeacherCourse(); teacherCourse2.setSchoolId(schedule.getSchoolId()); teacherCourse2.setTeam(schedule.getTeam()); @@ -386,11 +386,11 @@ public class ScheduleController { } //设置当天课的信息 - private List setClassCourse(boolean isDouble , int i , FirstReqVo firstReqVo){ + private List setClassCourse(boolean isDouble, int i, FirstReqVo firstReqVo) { List classCourses = new ArrayList<>(); Schedule schedule = scheduleService.selectById(firstReqVo.getScheduleId()); Date date = new Date(); - for(int j = 1 ; j <= firstReqVo.getDayNumber() ; j++){ + for (int j = 1; j <= firstReqVo.getDayNumber(); j++) { ClassCourse classCourse = new ClassCourse(); classCourse.setSingleOrDouble(isDouble ? 2 : 1); classCourse.setSchoolId(schedule.getSchoolId()); @@ -404,41 +404,40 @@ public class ScheduleController { } /** - * - * @param courseType 所排课的课程类型 // 1 主课 2 副课 3 公共课 - * @param joinList 联课优先级 + * @param courseType 所排课的课程类型 // 1 主课 2 副课 3 公共课 + * @param joinList 联课优先级 * @param teacherClass 老师授课信息 - * @param list 班级课程 - * @param limitList 单课优先级 - * @param functionTimes 循环次数 + * @param list 班级课程 + * @param limitList 单课优先级 + * @param functionTimes 循环次数 */ - private void initWeekCourse(int courseType ,List joinList ,TeacherClass teacherClass , - List list , List limitList ,int functionTimes){ - List sort = new ArrayList<>(); + private void initWeekCourse(int courseType, List joinList, TeacherClass teacherClass, + List list, List limitList, int functionTimes) { + List sort = new ArrayList<>(); String team = teacherClass.getTeam(); int singleOrDouble = list.get(0).getSingleOrDouble(); - for(ClassCourse classCourse : limitList){ - if(!sort.contains(classCourse.getCourseNumber())){ + for (ClassCourse classCourse : limitList) { + if (!sort.contains(classCourse.getCourseNumber())) { sort.add(classCourse.getCourseNumber()); } } - int times = 0 ; //已经排课数 + int times = 0; //已经排课数 //先排联课 - int joinTimes = 0 ; //已经排联课数 - for(int w = 0 ; w <= 4 ; w++) { + int joinTimes = 0; //已经排联课数 + for (int w = 0; w <= 4; w++) { int week = joinList.get(w); - if(joinTimes == teacherClass.getJoinTimes()){ + if (joinTimes == teacherClass.getJoinTimes()) { break; } for (int i = 0; i < sort.size(); i++) { int courseNumber = sort.get(i); ClassCourse classCourse = getClassCourse(list, week, courseNumber); - if(!sort.contains(courseNumber+1)){ + if (!sort.contains(courseNumber + 1)) { continue; } - ClassCourse classCourseNext =getClassCourse(list, week, courseNumber+1); + ClassCourse classCourseNext = getClassCourse(list, week, courseNumber + 1); if (StringUtils.isBlank(classCourse.getCourseName()) && StringUtils.isBlank(classCourseNext.getCourseName())) { - Course course = courseService.selectBySchoolIdAndCourseName(teacherClass.getSchoolId(),teacherClass.getCourseName()); + Course course = courseService.selectBySchoolIdAndCourseName(teacherClass.getSchoolId(), teacherClass.getCourseName()); classCourse.setCourseOpenId(course.getCourseId()); classCourse.setCourseName(teacherClass.getCourseName()); classCourseNext.setCourseOpenId(course.getCourseId()); @@ -453,27 +452,27 @@ public class ScheduleController { searchTeacherCourse.setCourseName(teacherClass.getCourseName()); //查询当天老师的课是否已经大于等于2 防止老师一天课程太多 int dayCourse = teacherCourseService.selectTeacherDayCourseNumber(searchTeacherCourse); - if(dayCourse >= 2){ + if (dayCourse >= 2) { break; } searchTeacherCourse.setCourseNumber(courseNumber); TeacherCourse teacherFirst = teacherCourseService.selectTeacherCourse(searchTeacherCourse); - searchTeacherCourse.setCourseNumber(courseNumber+1); + searchTeacherCourse.setCourseNumber(courseNumber + 1); TeacherCourse teacherSecond = teacherCourseService.selectTeacherCourse(searchTeacherCourse); if (StringUtils.isBlank(teacherFirst.getCourseName()) && StringUtils.isBlank(teacherSecond.getCourseName())) { classCourseService.updateByPrimaryKey(classCourse); classCourseService.updateByPrimaryKey(classCourseNext); teacherFirst.setCourseName(teacherClass.getCourseName()); - teacherFirst.setClassId(classCourse.getClassId()+""); + teacherFirst.setClassId(classCourse.getClassId() + ""); teacherSecond.setCourseName(teacherClass.getCourseName()); - teacherSecond.setClassId(classCourse.getClassId()+""); + teacherSecond.setClassId(classCourse.getClassId() + ""); teacherCourseService.updateTeacherCourse(teacherFirst); teacherCourseService.updateTeacherCourse(teacherSecond); times = times + 2; - reSort(sort,courseNumber); - reSort(sort,courseNumber+1); - reSort(joinList,week); - joinTimes++ ; + reSort(sort, courseNumber); + reSort(sort, courseNumber + 1); + reSort(joinList, week); + joinTimes++; break; } else { continue; @@ -482,100 +481,100 @@ public class ScheduleController { } } //单节课 - int before = 0 ; - for(int week = 1 ; week <= 5 ; week++){ - if(times == teacherClass.getTimes()){ + int before = 0; + for (int week = 1; week <= 5; week++) { + if (times == teacherClass.getTimes()) { break; } - if(before > 0){ - sort = reSort(sort,before); + if (before > 0) { + sort = reSort(sort, before); } - for(int i = 0 ; i < sort.size() ; i++){ + for (int i = 0; i < sort.size(); i++) { int courseNumber = sort.get(i); - ClassCourse classCourse = getClassCourse(list,week,courseNumber); - boolean flag = false ; + ClassCourse classCourse = getClassCourse(list, week, courseNumber); + boolean flag = false; //去判断 查出的classCourse 是否在limitList - for(ClassCourse temp : limitList){ - if(temp.getWeek() == classCourse.getWeek() && - temp.getCourseNumber() == classCourse.getCourseNumber()){ - flag = true ; + for (ClassCourse temp : limitList) { + if (temp.getWeek() == classCourse.getWeek() && + temp.getCourseNumber() == classCourse.getCourseNumber()) { + flag = true; break; } } - if(flag){ - if(StringUtils.isBlank(classCourse.getCourseName())){ - Course course = courseService.selectBySchoolIdAndCourseName(teacherClass.getSchoolId(),teacherClass.getCourseName()); + if (flag) { + if (StringUtils.isBlank(classCourse.getCourseName())) { + Course course = courseService.selectBySchoolIdAndCourseName(teacherClass.getSchoolId(), teacherClass.getCourseName()); //约束条件判断 - TeacherCourse result = checkConstraint(classCourse,teacherClass,course,singleOrDouble,week,courseNumber); - if(result == null){ - break; + TeacherCourse result = checkConstraint(classCourse, teacherClass, course, singleOrDouble, week, courseNumber); + if (result == null) { + break; } //设置课程 - if(setCourse(classCourse,teacherClass,result,course)){ + if (setCourse(classCourse, teacherClass, result, course)) { times++; before = courseNumber; break; - }else { + } else { continue; } } } } } - if(functionTimes > 2){ + if (functionTimes > 2) { //递归次数限制,防止无限循环,内存溢出,手动优化课程 optimizeCourse(teacherClass); - }else{ - if(times < teacherClass.getTimes()){ + } else { + if (times < teacherClass.getTimes()) { //优先时段中课程数 不够 - teacherClass.setTimes(teacherClass.getTimes()-times); - teacherClass.setJoinTimes(teacherClass.getJoinTimes()-joinTimes); + teacherClass.setTimes(teacherClass.getTimes() - times); + teacherClass.setJoinTimes(teacherClass.getJoinTimes() - joinTimes); //放大优先范围,上下一节,并去掉原来的优先范围 List newLimitList = new ArrayList<>(); - int maxCourseNumber =classCourseService.selectMaxCourseNumber(teacherClass.getSchoolId(),team); - for(ClassCourse classCourse : limitList){ - if(classCourse.getCourseNumber() == 1){ + int maxCourseNumber = classCourseService.selectMaxCourseNumber(teacherClass.getSchoolId(), team); + for (ClassCourse classCourse : limitList) { + if (classCourse.getCourseNumber() == 1) { ClassCourse temp = new ClassCourse(); temp.setWeek(classCourse.getWeek()); temp.setCourseNumber(2); newLimitList.add(temp); - }else if(classCourse.getCourseNumber() == maxCourseNumber){ + } else if (classCourse.getCourseNumber() == maxCourseNumber) { ClassCourse temp = new ClassCourse(); temp.setWeek(classCourse.getWeek()); - temp.setCourseNumber(maxCourseNumber-1); + temp.setCourseNumber(maxCourseNumber - 1); newLimitList.add(temp); - }else{ + } else { ClassCourse temp = new ClassCourse(); temp.setWeek(classCourse.getWeek()); - temp.setCourseNumber(classCourse.getCourseNumber()-1); + temp.setCourseNumber(classCourse.getCourseNumber() - 1); newLimitList.add(temp); ClassCourse temp2 = new ClassCourse(); temp2.setWeek(classCourse.getWeek()); - temp2.setCourseNumber(classCourse.getCourseNumber()+1); + temp2.setCourseNumber(classCourse.getCourseNumber() + 1); newLimitList.add(temp2); } } List result = new ArrayList<>(); - for (int i = 0; i < newLimitList.size() ; i++) { - boolean isExist = false ; - for(ClassCourse classCourse : limitList){ - if(newLimitList.get(i).getWeek() == classCourse.getWeek() && - newLimitList.get(i).getCourseNumber() == classCourse.getCourseNumber()){ - isExist = true ; + for (int i = 0; i < newLimitList.size(); i++) { + boolean isExist = false; + for (ClassCourse classCourse : limitList) { + if (newLimitList.get(i).getWeek() == classCourse.getWeek() && + newLimitList.get(i).getCourseNumber() == classCourse.getCourseNumber()) { + isExist = true; } } - if(!isExist){ + if (!isExist) { result.add(newLimitList.get(i)); } } - functionTimes ++ ; - initWeekCourse(courseType,joinList,teacherClass,list,result,functionTimes); + functionTimes++; + initWeekCourse(courseType, joinList, teacherClass, list, result, functionTimes); } } } //设置课程 - private boolean setCourse(ClassCourse classCourse ,TeacherClass teacherClass , TeacherCourse result , Course course){ + private boolean setCourse(ClassCourse classCourse, TeacherClass teacherClass, TeacherCourse result, Course course) { //合课 多做一层判断 另一个班级这节课也为空 JoinClass joinClass = new JoinClass(); joinClass.setSchoolId(classCourse.getSchoolId()); @@ -583,12 +582,12 @@ public class ScheduleController { joinClass.setCourseId(classCourse.getCourseOpenId()); joinClass.setClassId(classCourse.getClassId()); List joinClasses = joinClassService.selectByCourse(joinClass); - if(joinClasses != null && joinClasses.size() > 0){ + if (joinClasses != null && joinClasses.size() > 0) { //说明是合班的课程 - boolean isClash = false ; + boolean isClash = false; List joinClassList = new ArrayList<>(); List resultList = joinClassService.selectByCourseGroup(joinClasses.get(0).getCourseGroup()); - for(JoinClass temp : resultList){ + for (JoinClass temp : resultList) { ClassCourse joinClassCourse = new ClassCourse(); joinClassCourse.setTeam(classCourse.getTeam()); joinClassCourse.setClassId(temp.getClassId()); @@ -597,18 +596,18 @@ public class ScheduleController { joinClassCourse.setSingleOrDouble(classCourse.getSingleOrDouble()); ClassCourse joinResultClassCourse = classCourseService.selectClassCourse(joinClassCourse); joinClassList.add(joinResultClassCourse); - if(StringUtils.isNotBlank(joinResultClassCourse.getCourseName())){ - isClash = true ; + if (StringUtils.isNotBlank(joinResultClassCourse.getCourseName())) { + isClash = true; break; } } - if(isClash){ + if (isClash) { //合班的班级有 该节次的课 已经有老师上了 return false; - }else { + } else { String classIdString = ""; - for(ClassCourse temp : joinClassList){ - classIdString = course.getCourseId() + "," ; + for (ClassCourse temp : joinClassList) { + classIdString = course.getCourseId() + ","; temp.setCourseOpenId(course.getCourseId()); temp.setCourseName(teacherClass.getCourseName()); classCourseService.updateByPrimaryKey(temp); @@ -619,24 +618,24 @@ public class ScheduleController { teacherCourseService.updateTeacherCourse(result); return true; } - }else { + } else { //普通课程 - if(StringUtils.isBlank(result.getCourseName())){ + if (StringUtils.isBlank(result.getCourseName())) { classCourseService.updateByPrimaryKey(classCourse); result.setGrade(classCourse.getGrade()); - result.setClassId(classCourse.getClassId()+""); + result.setClassId(classCourse.getClassId() + ""); result.setCourseName(classCourse.getCourseName()); teacherCourseService.updateTeacherCourse(result); return true; - }else { - return false ; + } else { + return false; } } } //判断班级与老师的约束条件 - private TeacherCourse checkConstraint(ClassCourse classCourse , TeacherClass teacherClass , - Course course , int singleOrDouble , int week , int courseNumber ){ + private TeacherCourse checkConstraint(ClassCourse classCourse, TeacherClass teacherClass, + Course course, int singleOrDouble, int week, int courseNumber) { classCourse.setCourseOpenId(course.getCourseId()); classCourse.setCourseName(teacherClass.getCourseName()); //判断当天是否还能继续排课 @@ -647,11 +646,11 @@ public class ScheduleController { searchTeacher.setTeacherName(teacherClass.getTeacherName()); searchTeacher.setCourseName(teacherClass.getCourseName()); TeacherClass resultTeacherClass = teacherClassService.selectByTeacher(searchTeacher); - if(resultTeacherClass.getTimes() > 5 && classCourseService.selectCourseByClassIdAndWeek(classCourse) >= 2){ - return null ; + if (resultTeacherClass.getTimes() > 5 && classCourseService.selectCourseByClassIdAndWeek(classCourse) >= 2) { + return null; } - if(resultTeacherClass.getTimes() <= 5 && classCourseService.selectCourseByClassIdAndWeek(classCourse) >= 1){ - return null ; + if (resultTeacherClass.getTimes() <= 5 && classCourseService.selectCourseByClassIdAndWeek(classCourse) >= 1) { + return null; } TeacherCourse searchTeacherCourse = new TeacherCourse(); searchTeacherCourse.setTeam(teacherClass.getTeam()); @@ -664,30 +663,30 @@ public class ScheduleController { searchTeacherCourse.setCourseName(teacherClass.getCourseName()); TeacherCourse result = teacherCourseService.selectTeacherCourse(searchTeacherCourse); //老师当天课程不能多于 该老师平均课程 - if(teacherCourseService.selectTeacherDayCourseNumber(searchTeacherCourse) - >= teacherClassService.selectTeacherDayClass(teacherClass.getSchoolId(),teacherClass.getTeam(),teacherClass.getTeacherName())){ - return null ; + if (teacherCourseService.selectTeacherDayCourseNumber(searchTeacherCourse) + >= teacherClassService.selectTeacherDayClass(teacherClass.getSchoolId(), teacherClass.getTeam(), teacherClass.getTeacherName())) { + return null; } - return result ; + return result; } //课程冲突 ,调优 - private void optimizeCourse(TeacherClass teacherClass){ + private void optimizeCourse(TeacherClass teacherClass) { int times = teacherClass.getTimes(); - int maxCourseNumber = classCourseService.selectMaxCourseNumber(teacherClass.getSchoolId(),teacherClass.getTeam()) ; - while (times > 0){ - boolean flag = false ; - List noClassList = classCourseService.selectNoCourse(teacherClass.getClassId(),teacherClass.getTeam()); - for(ClassCourse classCourse : noClassList){ - for(int i = -2 ; i <= 2 ; i++){ - int weekChange = classCourse.getWeek()+i ; - if(weekChange > 5){ + int maxCourseNumber = classCourseService.selectMaxCourseNumber(teacherClass.getSchoolId(), teacherClass.getTeam()); + while (times > 0) { + boolean flag = false; + List noClassList = classCourseService.selectNoCourse(teacherClass.getClassId(), teacherClass.getTeam()); + for (ClassCourse classCourse : noClassList) { + for (int i = -2; i <= 2; i++) { + int weekChange = classCourse.getWeek() + i; + if (weekChange > 5) { weekChange = weekChange - 5; } - if(weekChange < 1){ + if (weekChange < 1) { weekChange = weekChange + 5; } - List list = classCourseService.selectWeekCourse(classCourse.getClassId(),weekChange,classCourse.getSingleOrDouble(),teacherClass.getCourseName(),teacherClass.getTeam()); + List list = classCourseService.selectWeekCourse(classCourse.getClassId(), weekChange, classCourse.getSingleOrDouble(), teacherClass.getCourseName(), teacherClass.getTeam()); //查询当天的课程还能继续派排课 TeacherClass searchTeacher = new TeacherClass(); searchTeacher.setSchoolId(teacherClass.getSchoolId()); @@ -696,40 +695,40 @@ public class ScheduleController { searchTeacher.setTeacherName(teacherClass.getTeacherName()); searchTeacher.setCourseName(teacherClass.getCourseName()); TeacherClass resultTeacherClass = teacherClassService.selectByTeacher(searchTeacher); - if(resultTeacherClass.getTimes() > 5 && list.size() >= 2){ + if (resultTeacherClass.getTimes() > 5 && list.size() >= 2) { continue; } - if(resultTeacherClass.getTimes() <= 5 && list.size() >= 1){ + if (resultTeacherClass.getTimes() <= 5 && list.size() >= 1) { continue; } - for(int j = -1 ; j<=1 ; j++){ - int courseNumberChange = classCourse.getCourseNumber() + j ; - if(courseNumberChange > maxCourseNumber){ + for (int j = -1; j <= 1; j++) { + int courseNumberChange = classCourse.getCourseNumber() + j; + if (courseNumberChange > maxCourseNumber) { continue; } - if(courseNumberChange < 1){ + if (courseNumberChange < 1) { continue; } - if(changeClass(classCourse,teacherClass,weekChange,courseNumberChange)){ + if (changeClass(classCourse, teacherClass, weekChange, courseNumberChange)) { flag = true; break; } } - if(flag){ + if (flag) { break; } } - if(flag){ + if (flag) { break; } } - if(flag){ - times-- ; + if (flag) { + times--; } } } - private boolean changeClass(ClassCourse classCourse , TeacherClass teacherClass , int weekChange ,int courseNumberChange){ + private boolean changeClass(ClassCourse classCourse, TeacherClass teacherClass, int weekChange, int courseNumberChange) { String team = classCourse.getTeam(); int week = classCourse.getWeek(); int courseNumber = classCourse.getCourseNumber(); @@ -740,13 +739,13 @@ public class ScheduleController { searchClass.setCourseNumber(courseNumberChange); searchClass.setTeam(team); ClassCourse nextClass = classCourseService.selectClassCourse(searchClass); - if(StringUtils.isBlank(nextClass.getCourseName())){ + if (StringUtils.isBlank(nextClass.getCourseName())) { //替换的课 本来就没课 - String className =teacherClass.getCourseName(); + String className = teacherClass.getCourseName(); String nextNameClass = nextClass.getCourseName(); - classCourse.setCourseOpenId(courseService.selectBySchoolIdAndCourseName(classCourse.getSchoolId(),nextNameClass).getCourseId()); + classCourse.setCourseOpenId(courseService.selectBySchoolIdAndCourseName(classCourse.getSchoolId(), nextNameClass).getCourseId()); classCourse.setCourseName(nextNameClass); - nextClass.setCourseOpenId(courseService.selectBySchoolIdAndCourseName(classCourse.getSchoolId(),className).getCourseId()); + nextClass.setCourseOpenId(courseService.selectBySchoolIdAndCourseName(classCourse.getSchoolId(), className).getCourseId()); nextClass.setCourseName(className); classCourseService.updateByPrimaryKey(classCourse); classCourseService.updateByPrimaryKey(nextClass); @@ -760,28 +759,28 @@ public class ScheduleController { teacherCourse.setCourseNumber(courseNumberChange); teacherCourse.setCourseName(className); teacherCourse.setTeacherName(teacherClass.getTeacherName()); - teacherCourse.setClassId(classCourse.getClassId()+""); + teacherCourse.setClassId(classCourse.getClassId() + ""); teacherCourseService.updateTeacherCourse(teacherCourse); - return true ; - }else { + return true; + } else { //增加判断 不排课的课程不能替换 合班的课程不能替换 联课的可能不能替换 - if(!nextClass.getCourseName().equals("不排课")){ + if (!nextClass.getCourseName().equals("不排课")) { JoinClass joinClass = new JoinClass(); joinClass.setSchoolId(nextClass.getSchoolId()); joinClass.setTeam(nextClass.getTeam()); joinClass.setCourseId(nextClass.getCourseId()); joinClass.setClassId(nextClass.getClassId()); List joinClasses = joinClassService.selectByCourse(joinClass); - boolean joinClassFlag = joinClasses != null && joinClasses.size() > 0 ; + boolean joinClassFlag = joinClasses != null && joinClasses.size() > 0; TeacherClass searchTeacherClass = new TeacherClass(); searchTeacherClass.setSchoolId(nextClass.getSchoolId()); searchTeacherClass.setTeam(nextClass.getTeam()); searchTeacherClass.setCourseName(nextClass.getCourseName()); List teacherClasses = teacherClassService.selectByCourseName(searchTeacherClass); - boolean joinTimesFlag = teacherClasses.get(0).getJoinTimes()>0?true:false; - if(nextClass.getCourseName().equals("不排课") || joinClassFlag || joinTimesFlag){ + boolean joinTimesFlag = teacherClasses.get(0).getJoinTimes() > 0 ? true : false; + if (nextClass.getCourseName().equals("不排课") || joinClassFlag || joinTimesFlag) { //这些课 不能替换 - }else { + } else { TeacherClass replaceClassTeacher = new TeacherClass(); replaceClassTeacher.setSchoolId(classCourse.getSchoolId()); replaceClassTeacher.setGrade(classCourse.getGrade()); @@ -808,9 +807,9 @@ public class ScheduleController { nextTeacherCourseSearch.setCourseNumber(courseNumber); nextTeacherCourseSearch.setTeam(team); TeacherCourse nextTeacherCourse = teacherCourseService.selectTeacherCourse(nextTeacherCourseSearch); - if(StringUtils.isBlank(nextTeacherCourse.getCourseName()) && StringUtils.isBlank(teacherCourse.getCourseName())){ + if (StringUtils.isBlank(nextTeacherCourse.getCourseName()) && StringUtils.isBlank(teacherCourse.getCourseName())) { //则上下替换课程 班级课程上下替换,老师课程交换 - String className =teacherClass.getCourseName(); + String className = teacherClass.getCourseName(); String nextClassName = nextClass.getCourseName(); classCourse.setCourseName(nextClassName); nextClass.setCourseName(className); @@ -819,12 +818,12 @@ public class ScheduleController { teacherCourse.setGrade(teacherClass.getGrade()); teacherCourse.setCourseName(className); - teacherCourse.setClassId(teacherClass.getClassId()+""); + teacherCourse.setClassId(teacherClass.getClassId() + ""); teacherCourseService.updateTeacherCourse(teacherCourse); nextTeacherCourse.setGrade(nextClass.getGrade()); nextTeacherCourse.setCourseName(nextClassName); - nextTeacherCourse.setClassId(nextClass.getClassId()+""); + nextTeacherCourse.setClassId(nextClass.getClassId() + ""); teacherCourseService.updateTeacherCourse(nextTeacherCourse); nextTeacherCourse.setWeek(weekChange); @@ -832,34 +831,34 @@ public class ScheduleController { nextTeacherCourse.setCourseName(null); nextTeacherCourse.setClassId(null); teacherCourseService.updateTeacherCourse(nextTeacherCourse); - return true ; + return true; } } } } - return false ; + return false; } //所谓权重 节次优先级 - private List reSort(List list , int number){ - int index = -1 ; - for(Integer i = 0 ; i < list.size() ;i++){ - if(list.get(i) == number){ - index = i ; - break ; + private List reSort(List list, int number) { + int index = -1; + for (Integer i = 0; i < list.size(); i++) { + if (list.get(i) == number) { + index = i; + break; } } list.remove(index); list.add(number); - return list ; + return list; } //查所在课表中 返回某天某节课 - private ClassCourse getClassCourse(List list , int week , int courseNumber){ - ClassCourse result = null ; - for(ClassCourse classCourse : list){ - if(classCourse.getWeek() == week && classCourse.getCourseNumber() == courseNumber){ - result = classCourse ; + private ClassCourse getClassCourse(List list, int week, int courseNumber) { + ClassCourse result = null; + for (ClassCourse classCourse : list) { + if (classCourse.getWeek() == week && classCourse.getCourseNumber() == courseNumber) { + result = classCourse; break; } } @@ -867,28 +866,28 @@ public class ScheduleController { } //生成教师排课表 - private void insertTeacherCourse(boolean isDouble , TeacherCourse teacherCourse){ + private void insertTeacherCourse(boolean isDouble, TeacherCourse teacherCourse) { List list = new ArrayList<>(); //单周课表必生成 - list.addAll(createWeekTeacherCourse(teacherCourse,false)); - if(isDouble){ - list.addAll(createWeekTeacherCourse(teacherCourse,true)); + list.addAll(createWeekTeacherCourse(teacherCourse, false)); + if (isDouble) { + list.addAll(createWeekTeacherCourse(teacherCourse, true)); } teacherCourseService.insertBatch(list); } // 创建教师 周课表 单周isDouble false 双周isDouble true - private List createWeekTeacherCourse(TeacherCourse teacherCourse , boolean isDouble){ - int singleOrDouble = 1 ; - if(isDouble){ + private List createWeekTeacherCourse(TeacherCourse teacherCourse, boolean isDouble) { + int singleOrDouble = 1; + if (isDouble) { singleOrDouble = 2; } - Date date =new Date(); + Date date = new Date(); List list = new ArrayList<>(); - int courseNumMax = classCourseService.selectMaxCourseNumber(teacherCourse.getSchoolId(),teacherCourse.getTeam()); + int courseNumMax = classCourseService.selectMaxCourseNumber(teacherCourse.getSchoolId(), teacherCourse.getTeam()); for (int i = 1; i <= 7; i++) { - for(int j = 1 ; j <= courseNumMax ; j++){ - TeacherCourse temp = new TeacherCourse() ; + for (int j = 1; j <= courseNumMax; j++) { + TeacherCourse temp = new TeacherCourse(); temp.setTeam(teacherCourse.getTeam()); temp.setSchoolId(teacherCourse.getSchoolId()); temp.setClassId(teacherCourse.getClassId()); @@ -901,7 +900,7 @@ public class ScheduleController { list.add(temp); } } - return list ; + return list; } } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java b/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java index 37835a1..4e4abe1 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleInitController.java @@ -33,7 +33,7 @@ public class ScheduleInitController { TeacherClassService teacherClassService; @Autowired - CourseService courseService ; + CourseService courseService; @Autowired TeacherService teacherService; @@ -51,67 +51,67 @@ public class ScheduleInitController { ClassCourseService classCourseService; @Value("${remoting.url}") - private String url ; + private String url; @ApiOperation("创建排课计划 ") @RequestMapping(value = "createSchedule", method = RequestMethod.GET) - public int createSchedule(@RequestParam("team")String team , @RequestParam("scheduleName") String scheduleName , - @RequestParam("schoolId") int schoolId){ + public int createSchedule(@RequestParam("team") String team, @RequestParam("scheduleName") String scheduleName, + @RequestParam("schoolId") int schoolId) { Schedule schedule = new Schedule(); schedule.setTeam(team); schedule.setScheduleName(scheduleName); schedule.setSchoolId(schoolId); Schedule temp = scheduleService.selectBySchoolAndTeam(schedule); - if(temp == null){ + if (temp == null) { scheduleService.insert(schedule); initMessage(schoolId); return schedule.getId(); - }else { - return 0 ; + } else { + return 0; } } @ApiOperation("更新计划") @RequestMapping(value = "updateSchedule", method = RequestMethod.GET) - public boolean updateSchedule(@RequestParam("scheduleId") int scheduleId , @RequestParam("scheduleName")String scheduleName, - @RequestParam("team")String team){ + public boolean updateSchedule(@RequestParam("scheduleId") int scheduleId, @RequestParam("scheduleName") String scheduleName, + @RequestParam("team") String team) { Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule != null){ + if (schedule != null) { schedule.setScheduleName(scheduleName); schedule.setTeam(team); scheduleService.update(schedule); return true; - }else { - return false ; + } else { + return false; } } @ApiOperation("复制") @RequestMapping(value = "copySchedule", method = RequestMethod.GET) - public BaseVo copySchedule(@RequestParam("scheduleId") int scheduleId , @RequestParam("scheduleName")String scheduleName, - @RequestParam("team")String team){ + public BaseVo copySchedule(@RequestParam("scheduleId") int scheduleId, @RequestParam("scheduleName") String scheduleName, + @RequestParam("team") String team) { BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { baseVo.setMessage("原始课表不存在"); baseVo.setSuccess(false); - return baseVo; + return baseVo; } Schedule temp = new Schedule(); temp.setSchoolId(schedule.getSchoolId()); temp.setTeam(team); Schedule result = scheduleService.selectBySchoolAndTeam(temp); - if(result != null){ + if (result != null) { baseVo.setMessage("该学年学期已创建课表计划"); baseVo.setSuccess(false); - return baseVo; + return baseVo; } temp.setScheduleName(scheduleName); scheduleService.insert(temp); Date date = new Date(); //复制 classCourse teacherClass teacherCourse - List classCourses = classCourseService.copyClassCourse(schedule.getSchoolId(),schedule.getTeam()); - for(ClassCourse classCourse :classCourses){ + List classCourses = classCourseService.copyClassCourse(schedule.getSchoolId(), schedule.getTeam()); + for (ClassCourse classCourse : classCourses) { classCourse.setSchoolId(temp.getSchoolId()); classCourse.setTeam(temp.getTeam()); classCourse.setCreateTime(date); @@ -121,15 +121,15 @@ public class ScheduleInitController { teacherClass.setSchoolId(schedule.getSchoolId()); teacherClass.setTeam(schedule.getTeam()); List teacherClasses = teacherClassService.selectBySchoolAndTeam(teacherClass); - for(TeacherClass teacherClass1 :teacherClasses){ + for (TeacherClass teacherClass1 : teacherClasses) { teacherClass1.setSchoolId(temp.getSchoolId()); teacherClass1.setTeam(temp.getTeam()); teacherClass1.setCreateTime(date); } teacherClassService.insertBatch(teacherClasses); - List teacherCourses = teacherCourseService.selectBySchoolIdAndTeam(schedule.getSchoolId(),schedule.getTeam()); - for(TeacherCourse teacherCourse : teacherCourses){ + List teacherCourses = teacherCourseService.selectBySchoolIdAndTeam(schedule.getSchoolId(), schedule.getTeam()); + for (TeacherCourse teacherCourse : teacherCourses) { teacherCourse.setSchoolId(temp.getSchoolId()); teacherCourse.setTeam(temp.getTeam()); teacherCourse.setCreateTime(date); @@ -140,29 +140,29 @@ public class ScheduleInitController { @ApiOperation("删除排课计划") @RequestMapping(value = "deleteSchedule", method = RequestMethod.GET) - public boolean deleteSchedule(@RequestParam("scheduleId") int scheduleId){ + public boolean deleteSchedule(@RequestParam("scheduleId") int scheduleId) { Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { return true; } - teacherCourseService.deleteBySchoolIdAndTeam(schedule.getSchoolId(),schedule.getTeam()); - joinClassService.deleteBySchoolIdAndTeam(schedule.getSchoolId(),schedule.getTeam()); - classCourseService.deleteBySchoolIdAndTeam(schedule.getSchoolId(),schedule.getTeam()); + teacherCourseService.deleteBySchoolIdAndTeam(schedule.getSchoolId(), schedule.getTeam()); + joinClassService.deleteBySchoolIdAndTeam(schedule.getSchoolId(), schedule.getTeam()); + classCourseService.deleteBySchoolIdAndTeam(schedule.getSchoolId(), schedule.getTeam()); TeacherClass teacherClass = new TeacherClass(); teacherClass.setSchoolId(schedule.getSchoolId()); teacherClass.setTeam(schedule.getTeam()); teacherClassService.deleteBySchoolAndTeam(teacherClass); courseService.initSchoolId(schedule.getSchoolId()); scheduleService.deleteBySchedule(schedule.getId()); - return true ; + return true; } @ApiOperation("获取基础信息") @RequestMapping(value = "getInitMessage", method = RequestMethod.GET) - public InitRepVo getInitMessage(@RequestParam("scheduleId") int scheduleId){ + public InitRepVo getInitMessage(@RequestParam("scheduleId") int scheduleId) { InitRepVo initRepVo = new InitRepVo(); Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { initRepVo.setSuccess(false); initRepVo.setMessage("没有改排课计划"); return initRepVo; @@ -179,13 +179,13 @@ public class ScheduleInitController { @Transactional @ApiOperation("教师授课信息") @RequestMapping(value = "initTeacherCourse", method = RequestMethod.POST) - public BaseVo initTeacherCourse(@RequestBody InitTeacherCourseReqVo initTeacherCourseReqVo){ + public BaseVo initTeacherCourse(@RequestBody InitTeacherCourseReqVo initTeacherCourseReqVo) { BaseVo baseVo = new BaseVo(); Date date = new Date(); - try{ + try { TeacherClass temp = new TeacherClass(); Schedule schedule = scheduleService.selectById(initTeacherCourseReqVo.getScheduleId()); - if(schedule != null && schedule.getSpeed() == 2) { + if (schedule != null && schedule.getSpeed() == 2) { temp.setSchoolId(schedule.getSchoolId()); temp.setTeam(schedule.getTeam()); List list = teacherClassService.selectBySchoolAndTeam(temp); @@ -197,9 +197,9 @@ public class ScheduleInitController { // 获得工作簿 Workbook workbook = null; String file = excelFile.getName(); - InputStream inputStream = new FileInputStream(excelFile) ; + InputStream inputStream = new FileInputStream(excelFile); //InputStream inputStream = HttpClientUtils.GetFileInputStream(initTeacherCourseReqVo.getUrl()); - if(inputStream == null){ + if (inputStream == null) { baseVo.setMessage("路径不存在"); baseVo.setSuccess(false); return baseVo; @@ -228,7 +228,7 @@ public class ScheduleInitController { } courseNumber = j - 1; } else { - if(sheetRow.getCell(0) != null){ + if (sheetRow.getCell(0) != null) { if (StringUtils.isBlank(sheetRow.getCell(0).getStringCellValue().trim())) { continue; } @@ -287,11 +287,11 @@ public class ScheduleInitController { teacherClassService.insertBatch(teacherClasses); schedule.setSpeed(3); scheduleService.updateSpeed(schedule); - }else { + } else { baseVo.setMessage("排课计划不存在或已导入"); baseVo.setSuccess(false); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); baseVo.setMessage("导入的数据有误"); baseVo.setSuccess(false); @@ -299,22 +299,22 @@ public class ScheduleInitController { return baseVo; } - private void initMessage(int schoolId){ - JSONObject teacherList = HttpClientUtils.httpGet(url+"/api/EasyN/GetSchoolTeacher?SchoolId="+schoolId); - List openTeacherList = (List)teacherList.get("data"); + private void initMessage(int schoolId) { + JSONObject teacherList = HttpClientUtils.httpGet(url + "/api/EasyN/GetSchoolTeacher?SchoolId=" + schoolId); + List openTeacherList = (List) teacherList.get("data"); List teachers = new ArrayList<>(); - for(JSONObject json :openTeacherList){ + for (JSONObject json : openTeacherList) { Teacher teacher = new Teacher(); teacher.setSchoolId(Integer.valueOf(json.get("school_id").toString())); teacher.setTeacherId(Integer.valueOf(json.get("teacher_id").toString())); teacher.setTeacherName(json.get("name").toString()); teachers.add(teacher); } - initTeacher(teachers,schoolId); - JSONObject classList = HttpClientUtils.httpGet(url+"/api/EasyN/GetSchoolClass?SchoolId="+schoolId); - List openClasses = (List)classList.get("data"); + initTeacher(teachers, schoolId); + JSONObject classList = HttpClientUtils.httpGet(url + "/api/EasyN/GetSchoolClass?SchoolId=" + schoolId); + List openClasses = (List) classList.get("data"); List classModels = new ArrayList<>(); - for(JSONObject json :openClasses){ + for (JSONObject json : openClasses) { ClassModel classModel = new ClassModel(); classModel.setSchoolId(Integer.valueOf(json.get("school_id").toString())); classModel.setClassId(Integer.valueOf(json.get("class_id").toString())); @@ -322,11 +322,11 @@ public class ScheduleInitController { classModel.setClassName(json.get("class_name").toString()); classModels.add(classModel); } - initClass(classModels,schoolId); - JSONObject courseList = HttpClientUtils.httpGet(url+"/api/EasyN/GetSchoolSubject?SchoolId="+schoolId); - List openCourses = (List)courseList.get("data"); + initClass(classModels, schoolId); + JSONObject courseList = HttpClientUtils.httpGet(url + "/api/EasyN/GetSchoolSubject?SchoolId=" + schoolId); + List openCourses = (List) courseList.get("data"); List courses = new ArrayList<>(); - for(JSONObject json :openCourses){ + for (JSONObject json : openCourses) { Course course = new Course(); course.setSchoolId(Integer.valueOf(json.get("school_id").toString())); course.setCourseId(Integer.valueOf(json.get("subject_id").toString())); @@ -334,76 +334,76 @@ public class ScheduleInitController { course.setCourseType(0); courses.add(course); } - initCourse(courses,schoolId); + initCourse(courses, schoolId); } - private BaseVo initCourse(List courseList ,int schoolId){ + private BaseVo initCourse(List courseList, int schoolId) { BaseVo baseVo = new BaseVo(); courseService.deleteSchoolId(schoolId); - for(Course course : courseList){ - if(course.getCourseId() == 0 || StringUtils.isBlank(course.getCourseName())){ + for (Course course : courseList) { + if (course.getCourseId() == 0 || StringUtils.isBlank(course.getCourseName())) { baseVo.setSuccess(false); baseVo.setMessage("缺少参数"); break; } } - if(baseVo.isSuccess()){ + if (baseVo.isSuccess()) { courseService.insertBatch(courseList); baseVo.setSuccess(true); return baseVo; - }else { + } else { return baseVo; } } - private BaseVo initClass(List classList , int schoolId){ + private BaseVo initClass(List classList, int schoolId) { BaseVo baseVo = new BaseVo(); classModelService.deleteSchool(schoolId); - for(ClassModel classModel : classList){ - if(classModel.getClassId() == 0 || StringUtils.isBlank(classModel.getClassName()) || - StringUtils.isBlank(classModel.getGrade()) || classModel.getSchoolId() == 0){ + for (ClassModel classModel : classList) { + if (classModel.getClassId() == 0 || StringUtils.isBlank(classModel.getClassName()) || + StringUtils.isBlank(classModel.getGrade()) || classModel.getSchoolId() == 0) { baseVo.setSuccess(false); baseVo.setMessage("缺少参数"); break; } } - if(baseVo.isSuccess()){ + if (baseVo.isSuccess()) { classModelService.insertBatch(classList); baseVo.setSuccess(true); return baseVo; - }else { + } else { return baseVo; } } - private BaseVo initTeacher(List teacherList , int schoolId){ + private BaseVo initTeacher(List teacherList, int schoolId) { List result = new ArrayList<>(); - for(Teacher teacher : teacherList){ + for (Teacher teacher : teacherList) { boolean isExist = false; - for(Teacher t : result){ - if(t.getTeacherName().equals(teacher.getTeacherName())){ + for (Teacher t : result) { + if (t.getTeacherName().equals(teacher.getTeacherName())) { isExist = true; } } - if(!isExist && StringUtils.isNotBlank(teacher.getTeacherName())){ + if (!isExist && StringUtils.isNotBlank(teacher.getTeacherName())) { result.add(teacher); } } BaseVo baseVo = new BaseVo(); teacherService.deleteSchool(schoolId); - for(Teacher teacher : result){ - if(teacher.getSchoolId() == 0 || StringUtils.isBlank(teacher.getTeacherName()) || - teacher.getTeacherId() == 0){ + for (Teacher teacher : result) { + if (teacher.getSchoolId() == 0 || StringUtils.isBlank(teacher.getTeacherName()) || + teacher.getTeacherId() == 0) { baseVo.setSuccess(false); baseVo.setMessage("缺少参数"); break; } } - if(baseVo.isSuccess()){ + if (baseVo.isSuccess()) { teacherService.insertBatch(result); baseVo.setSuccess(true); return baseVo; - }else { + } else { return baseVo; } } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java b/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java index 4bcbe2b..2e09ee7 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/controller/ScheduleMessageController.java @@ -42,18 +42,18 @@ public class ScheduleMessageController { TeacherClassService teacherClassService; @RequestMapping(value = "getScheduleList", method = RequestMethod.GET) - public ScheduleListRepVo getScheduleList(@RequestParam("schoolId") int schoolId){ + public ScheduleListRepVo getScheduleList(@RequestParam("schoolId") int schoolId) { ScheduleListRepVo scheduleListRepVo = new ScheduleListRepVo(); - List scheduleList = scheduleService.selectBySchool(schoolId) ; + List scheduleList = scheduleService.selectBySchool(schoolId); List scheduleDtos = new ArrayList<>(); - for(Schedule schedule:scheduleList){ + for (Schedule schedule : scheduleList) { scheduleDtos.add(initSchedule(schedule)); } scheduleListRepVo.setData(scheduleDtos); return scheduleListRepVo; } - private ScheduleDto initSchedule(Schedule schedule){ + private ScheduleDto initSchedule(Schedule schedule) { ScheduleDto scheduleDto = new ScheduleDto(); scheduleDto.setId(schedule.getId()); scheduleDto.setScheduleName(schedule.getScheduleName()); @@ -65,22 +65,22 @@ public class ScheduleMessageController { scheduleDto.setMorning(schedule.getMorning()); scheduleDto.setAfternoon(schedule.getAfternoon()); scheduleDto.setNight(schedule.getNight()); - return scheduleDto ; + return scheduleDto; } @RequestMapping(value = "getClassList", method = RequestMethod.GET) - public ClassRepVo getClassList(@RequestParam("schoolId") int schoolId){ + public ClassRepVo getClassList(@RequestParam("schoolId") int schoolId) { ClassRepVo classRepVo = new ClassRepVo(); List classModels = classModelService.selectBySchoolId(schoolId); List list = new ArrayList<>(); - for(ClassModel classModel :classModels){ + for (ClassModel classModel : classModels) { list.add(initClassModel(classModel)); } classRepVo.setData(list); return classRepVo; } - private ClassModelDto initClassModel(ClassModel classModel){ + private ClassModelDto initClassModel(ClassModel classModel) { ClassModelDto classModelDto = new ClassModelDto(); classModelDto.setClassId(classModel.getClassId()); classModelDto.setClassName(classModel.getClassName()); @@ -90,24 +90,24 @@ public class ScheduleMessageController { } @RequestMapping(value = "getCourseList", method = RequestMethod.GET) - public CourseRepVo getCourseList(@RequestParam("scheduleId") int scheduleId){ + public CourseRepVo getCourseList(@RequestParam("scheduleId") int scheduleId) { CourseRepVo courseRepVo = new CourseRepVo(); Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { courseRepVo.setSuccess(false); courseRepVo.setMessage("请先创建计划"); return courseRepVo; } List list = courseService.selectBySchoolId(schedule.getSchoolId()); List courseDtos = new ArrayList<>(); - for(Course course : list){ + for (Course course : list) { courseDtos.add(initCourse(course)); } courseRepVo.setData(courseDtos); return courseRepVo; } - private CourseDto initCourse(Course course){ + private CourseDto initCourse(Course course) { CourseDto courseDto = new CourseDto(); courseDto.setCourseId(course.getCourseId()); courseDto.setCourseName(course.getCourseName()); @@ -118,19 +118,19 @@ public class ScheduleMessageController { } @RequestMapping(value = "getCourseClassList", method = RequestMethod.GET) - public List getCourseClassList(@RequestParam("scheduleId") int scheduleId , @RequestParam("courseId") int courseId){ + public List getCourseClassList(@RequestParam("scheduleId") int scheduleId, @RequestParam("courseId") int courseId) { List repVos = new ArrayList<>(); Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { return null; } TeacherClass search = new TeacherClass(); search.setSchoolId(schedule.getSchoolId()); search.setTeam(schedule.getTeam()); - String courseName =courseService.selectBySchoolIdAndCourseId(schedule.getSchoolId(),courseId).getCourseName(); + String courseName = courseService.selectBySchoolIdAndCourseId(schedule.getSchoolId(), courseId).getCourseName(); search.setCourseName(courseName); List list = teacherClassService.selectByCourseName(search); - for(TeacherClass teacherClass : list){ + for (TeacherClass teacherClass : list) { GetCourseClassListRepVo repVo = new GetCourseClassListRepVo(); repVo.setClassId(teacherClass.getClassId()); repVo.setClassName(classModelService.selectByPrimaryKey(teacherClass.getClassId()).getClassName()); @@ -143,10 +143,10 @@ public class ScheduleMessageController { } @RequestMapping(value = "getClassCourseList", method = RequestMethod.GET) - public ClassCourseRepVo getClassCourseList(@RequestParam("scheduleId") int scheduleId , @RequestParam("classId") int classId){ + public ClassCourseRepVo getClassCourseList(@RequestParam("scheduleId") int scheduleId, @RequestParam("classId") int classId) { ClassCourseRepVo classCourseRepVo = new ClassCourseRepVo(); Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { classCourseRepVo.setSuccess(false); classCourseRepVo.setMessage("请先创建计划"); return classCourseRepVo; @@ -157,23 +157,23 @@ public class ScheduleMessageController { search.setTeam(schedule.getTeam()); List list = classCourseService.selectByClassIdAndSingleOrDouble(search); List classCourseDtos = new ArrayList<>(); - for(ClassCourse classCourse : list){ + for (ClassCourse classCourse : list) { classCourseDtos.add(initClassCourse(classCourse)); } classCourseRepVo.setData(classCourseDtos); - int max = schedule.getMorning() + schedule.getAfternoon() + schedule.getNight() ; - for(int i = 1 ; i < 6 ; i++){ - System.out.print("周"+i+" "); - for(int j = 1 ; j < max ; j++){ - System.out.print(getClassCourse(list,i,j).getCourseName() + " "); + int max = schedule.getMorning() + schedule.getAfternoon() + schedule.getNight(); + for (int i = 1; i < 6; i++) { + System.out.print("周" + i + " "); + for (int j = 1; j < max; j++) { + System.out.print(getClassCourse(list, i, j).getCourseName() + " "); } System.out.println(); } return classCourseRepVo; } - private ClassCourseDto initClassCourse(ClassCourse classCourse){ + private ClassCourseDto initClassCourse(ClassCourse classCourse) { ClassCourseDto classCourseDto = new ClassCourseDto(); classCourseDto.setClassId(classCourse.getClassId()); classCourseDto.setSchoolId(classCourse.getSchoolId()); @@ -188,11 +188,11 @@ public class ScheduleMessageController { } //查所在课表中 返回某天某节课 - private ClassCourse getClassCourse(List list , int week , int courseNumber){ - ClassCourse result = null ; - for(ClassCourse classCourse : list){ - if(classCourse.getWeek() == week && classCourse.getCourseNumber() == courseNumber){ - result = classCourse ; + private ClassCourse getClassCourse(List list, int week, int courseNumber) { + ClassCourse result = null; + for (ClassCourse classCourse : list) { + if (classCourse.getWeek() == week && classCourse.getCourseNumber() == courseNumber) { + result = classCourse; break; } } @@ -201,7 +201,7 @@ public class ScheduleMessageController { @RequestMapping(value = "getJoinList", method = RequestMethod.GET) - public JoinRepVo getJoinList(@RequestParam("scheduleId") int scheduleId){ + public JoinRepVo getJoinList(@RequestParam("scheduleId") int scheduleId) { JoinRepVo joinRepVo = new JoinRepVo(); Schedule schedule = scheduleService.selectById(scheduleId); JoinClass joinClass = new JoinClass(); @@ -209,18 +209,18 @@ public class ScheduleMessageController { joinClass.setTeam(schedule.getTeam()); List list = joinClassService.selectByCourse(joinClass); List joinDetails = new ArrayList<>(); - for(JoinClass temp : list){ - boolean flag = false ; + for (JoinClass temp : list) { + boolean flag = false; ClassModel classModel = classModelService.selectByPrimaryKey(temp.getClassId()); - for(JoinDetail joinDetail : joinDetails){ - if(temp.getCourseGroup() == joinDetail.getCourseGroup()){ + for (JoinDetail joinDetail : joinDetails) { + if (temp.getCourseGroup() == joinDetail.getCourseGroup()) { flag = true; - if(!joinDetail.getClassName().contains(classModel.getClassName())){ - joinDetail.setClassName(joinDetail.getClassName()+","+classModel.getClassName()); + if (!joinDetail.getClassName().contains(classModel.getClassName())) { + joinDetail.setClassName(joinDetail.getClassName() + "," + classModel.getClassName()); } } } - if(!flag){ + if (!flag) { JoinDetail joinDetail = new JoinDetail(); joinDetail.setCourseGroup(temp.getCourseGroup()); joinDetail.setClassName(classModel.getClassName()); @@ -239,7 +239,7 @@ public class ScheduleMessageController { } @RequestMapping(value = "getTeacherClassList", method = RequestMethod.GET) - public TeacherCourseRepVo getTeacherClassList(@RequestParam("scheduleId") int scheduleId){ + public TeacherCourseRepVo getTeacherClassList(@RequestParam("scheduleId") int scheduleId) { TeacherCourseRepVo teacherCourseRepVo = new TeacherCourseRepVo(); Schedule schedule = scheduleService.selectById(scheduleId); TeacherClass temp = new TeacherClass(); @@ -248,23 +248,23 @@ public class ScheduleMessageController { List data = new ArrayList<>(); List courseNameList = new ArrayList<>(); List teacherClasses = teacherClassService.selectBySchoolAndTeam(temp); - for(TeacherClass teacherClass :teacherClasses){ + for (TeacherClass teacherClass : teacherClasses) { TeacherClassDto teacherClassDto = initTeacherClass(teacherClass); boolean isExist = false; - if(!courseNameList.contains(teacherClass.getCourseName())){ + if (!courseNameList.contains(teacherClass.getCourseName())) { courseNameList.add(teacherClass.getCourseName()); } - for(ClassCourseVO classCourseVO : data){ - if(classCourseVO.getClassId() == teacherClass.getClassId()){ - isExist = true ; + for (ClassCourseVO classCourseVO : data) { + if (classCourseVO.getClassId() == teacherClass.getClassId()) { + isExist = true; ClassCourseDetailVo classCourseDetailVo = new ClassCourseDetailVo(teacherClassDto); List classCourseDetailVos = classCourseVO.getList(); classCourseDetailVos.add(classCourseDetailVo); - classCourseVO.setAllCount(classCourseVO.getAllCount()+teacherClass.getTimes()); + classCourseVO.setAllCount(classCourseVO.getAllCount() + teacherClass.getTimes()); classCourseVO.setList(classCourseDetailVos); } } - if(!isExist){ + if (!isExist) { ClassCourseVO classCourseVO = new ClassCourseVO(); classCourseVO.setClassId(teacherClass.getClassId()); classCourseVO.setAllCount(teacherClass.getTimes()); @@ -280,7 +280,7 @@ public class ScheduleMessageController { return teacherCourseRepVo; } - private TeacherClassDto initTeacherClass(TeacherClass teacherClass){ + private TeacherClassDto initTeacherClass(TeacherClass teacherClass) { TeacherClassDto teacherClassDto = new TeacherClassDto(); teacherClassDto.setClassId(teacherClass.getClassId()); teacherClassDto.setCourseName(teacherClass.getCourseName()); @@ -298,20 +298,20 @@ public class ScheduleMessageController { } @RequestMapping(value = "getCourseTypeList", method = RequestMethod.GET) - public GetCourseTypeListRepVo getCourseTypeList(@RequestParam("scheduleId") int scheduleId){ + public GetCourseTypeListRepVo getCourseTypeList(@RequestParam("scheduleId") int scheduleId) { GetCourseTypeListRepVo getCourseTypeListRepVo = new GetCourseTypeListRepVo(); List data = new ArrayList<>(); Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { getCourseTypeListRepVo.setSuccess(false); getCourseTypeListRepVo.setMessage("请先创建计划"); return getCourseTypeListRepVo; } - for(int i = 1 ; i <=3 ; i++){ + for (int i = 1; i <= 3; i++) { CourseTypeListVO vo = new CourseTypeListVO(); vo.setCourseType(i); - switch (i){ - case 1 : + switch (i) { + case 1: vo.setCourseTypeName("主课"); break; case 2: @@ -324,9 +324,9 @@ public class ScheduleMessageController { Course course = new Course(); course.setSchoolId(schedule.getSchoolId()); course.setCourseType(i); - List courses = courseService.selectByCourse(course) ; + List courses = courseService.selectByCourse(course); List courseDtos = new ArrayList<>(); - for(Course course1 : courses){ + for (Course course1 : courses) { courseDtos.add(initCourse(course1)); } vo.setList(courseDtos); @@ -338,10 +338,10 @@ public class ScheduleMessageController { } @RequestMapping(value = "getUnCourseList", method = RequestMethod.GET) - public CourseRepVo getUnCourseList(@RequestParam("scheduleId") int scheduleId){ + public CourseRepVo getUnCourseList(@RequestParam("scheduleId") int scheduleId) { CourseRepVo courseRepVo = new CourseRepVo(); Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { courseRepVo.setSuccess(false); courseRepVo.setMessage("请先创建计划"); return courseRepVo; @@ -349,9 +349,9 @@ public class ScheduleMessageController { Course course = new Course(); course.setSchoolId(schedule.getSchoolId()); course.setCourseType(0); - List courses = courseService.selectByCourse(course) ; + List courses = courseService.selectByCourse(course); List courseDtos = new ArrayList<>(); - for(Course course1 : courses){ + for (Course course1 : courses) { courseDtos.add(initCourse(course1)); } courseRepVo.setData(courseDtos); @@ -359,34 +359,34 @@ public class ScheduleMessageController { } @RequestMapping(value = "deleteCourseType", method = RequestMethod.GET) - public BaseVo deleteCourseType(@RequestParam("scheduleId") int scheduleId , @RequestParam("courseId") int courseId){ + public BaseVo deleteCourseType(@RequestParam("scheduleId") int scheduleId, @RequestParam("courseId") int courseId) { BaseVo baseVo = new BaseVo(); Schedule schedule = scheduleService.selectById(scheduleId); - if(schedule == null){ + if (schedule == null) { baseVo.setSuccess(false); baseVo.setMessage("请先创建计划"); return baseVo; } - if(teacherClassService.selectHasSchedule(schedule.getSchoolId(),schedule.getTeam()) > 0){ + if (teacherClassService.selectHasSchedule(schedule.getSchoolId(), schedule.getTeam()) > 0) { baseVo.setSuccess(false); baseVo.setMessage("已经排课,不能再删除"); return baseVo; } - courseService.updateCourseType(courseId,0,schedule.getSchoolId()); + courseService.updateCourseType(courseId, 0, schedule.getSchoolId()); return baseVo; } @RequestMapping(value = "getSchedule", method = RequestMethod.GET) - public ScheduleDto getSchedule(@RequestParam("scheduleId") int scheduleId){ + public ScheduleDto getSchedule(@RequestParam("scheduleId") int scheduleId) { Schedule schedule = scheduleService.selectById(scheduleId); return initSchedule(schedule); } @RequestMapping(value = "getCourseBySchoolId", method = RequestMethod.GET) - public List getCourseBySchoolId(@RequestParam("schoolId") int schoolId){ + public List getCourseBySchoolId(@RequestParam("schoolId") int schoolId) { List courses = courseService.selectBySchoolId2(schoolId); List courseDtoList = new ArrayList<>(); - for(Course course : courses){ + for (Course course : courses) { courseDtoList.add(initCourse(course)); } return courseDtoList; @@ -394,10 +394,10 @@ public class ScheduleMessageController { @RequestMapping(value = "getClassModelBySchoolId", method = RequestMethod.GET) - public List getClassModelBySchoolId(@RequestParam("schoolId") int schoolId){ + public List getClassModelBySchoolId(@RequestParam("schoolId") int schoolId) { List classModels = classModelService.selectBySchoolId(schoolId); List classModelDtoList = new ArrayList<>(); - for(ClassModel classModel : classModels){ + for (ClassModel classModel : classModels) { classModelDtoList.add(initClassModel(classModel)); } return classModelDtoList; diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/mapper/StudentMapper.java b/cloud/search_independence/src/main/java/com/sincere/independence/mapper/StudentMapper.java index 432212c..778e7a9 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/mapper/StudentMapper.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/mapper/StudentMapper.java @@ -25,14 +25,19 @@ public interface StudentMapper { //最高分 Double selectMaxScore(Student student); + //最低分 Double selectMinScore(Student student); + //平均分 Double selectAvgScore(Student student); + //众数 List selectModeNumber(Student student); + //中位数 Double selectMedian(Student student); + //标准差 Double selectStdev(Student student); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/Analyse.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/Analyse.java index 0da24a5..7f77ee7 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/Analyse.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/Analyse.java @@ -13,25 +13,25 @@ import java.util.Date; */ public class Analyse implements Serializable { - private int id ; - private String examName ; - private String examTime ; - private String courseName ; - private Date createTime ; - private Double maxScore ; - private String grade ; - private String examScope ; + private int id; + private String examName; + private String examTime; + private String courseName; + private Date createTime; + private Double maxScore; + private String grade; + private String examScope; public Analyse() { } - public Analyse(AnalyseDto analyseDto){ + public Analyse(AnalyseDto analyseDto) { this.examName = analyseDto.getExamName(); this.grade = analyseDto.getGrade(); this.examTime = analyseDto.getExamTime(); this.createTime = analyseDto.getCreateTime(); this.maxScore = analyseDto.getMaxScore(); - this.courseName= analyseDto.getCourseName(); + this.courseName = analyseDto.getCourseName(); this.examScope = analyseDto.getExamScope(); this.id = analyseDto.getId(); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDetail.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDetail.java index a750f8a..c924763 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDetail.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDetail.java @@ -12,13 +12,13 @@ import java.util.Date; */ public class AnalyseDetail implements Serializable { - private int id ; - private int analyseId ; - private String questionNumber ; - private String questionType ; - private int difficult ; - private Double score ; - private Date createTime ; + private int id; + private int analyseId; + private String questionNumber; + private String questionType; + private int difficult; + private Double score; + private Date createTime; public AnalyseDetail() { } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDimensional.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDimensional.java index b7db3c4..8a2ea6b 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDimensional.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/AnalyseDimensional.java @@ -12,12 +12,12 @@ import java.util.Date; */ public class AnalyseDimensional implements Serializable { - private int id ; - private int analyseId ; - private String questionNumber ; - private int dimensionalId ; - private Double score ; - private Date createTime ; + private int id; + private int analyseId; + private String questionNumber; + private int dimensionalId; + private Double score; + private Date createTime; public AnalyseDimensional() { } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/Chapter.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/Chapter.java index 6a21f2e..da74b53 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/Chapter.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/Chapter.java @@ -11,20 +11,20 @@ import java.io.Serializable; */ public class Chapter implements Serializable { - private int id ; - private int analyseId ; - private int chapterNumber ; - private String chapterName ; - private Double chapterScore ; + private int id; + private int analyseId; + private int chapterNumber; + private String chapterName; + private Double chapterScore; - private Double percent ; + private Double percent; public Chapter() { } public Chapter(ChapterDto chapterDto) { this.id = chapterDto.getId(); - this.analyseId =chapterDto.getAnalyseId() ; + this.analyseId = chapterDto.getAnalyseId(); this.chapterNumber = chapterDto.getChapterNumber(); this.chapterName = chapterDto.getChapterName(); this.chapterScore = chapterDto.getChapterScore(); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/ClassCourse.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/ClassCourse.java index 5a1fd37..4c234a2 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/ClassCourse.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/ClassCourse.java @@ -24,9 +24,9 @@ public class ClassCourse implements Serializable { private Date updateTime; - private String team ; + private String team; - private int courseOpenId ; + private int courseOpenId; public Integer getCourseId() { return courseId; diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/Course.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/Course.java index cfe840e..1235205 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/Course.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/Course.java @@ -9,10 +9,10 @@ import java.io.Serializable; */ public class Course implements Serializable { - private int id ; - private int schoolId ; - private int courseId ; - private String courseName ; + private int id; + private int schoolId; + private int courseId; + private String courseName; private int courseType; public int getCourseId() { diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/Dimensional.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/Dimensional.java index dfa9c4d..5703da2 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/Dimensional.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/Dimensional.java @@ -10,12 +10,12 @@ import java.util.Date; */ public class Dimensional implements Serializable { - private int id ; - private int dimensionalType ; + private int id; + private int dimensionalType; private String dimensionalName; - private Date createTime ; + private Date createTime; //查询用 - private int analyseId ; + private int analyseId; public int getId() { return id; diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/JoinClass.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/JoinClass.java index 95b5e0f..25c5adb 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/JoinClass.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/JoinClass.java @@ -11,13 +11,13 @@ import java.io.Serializable; */ public class JoinClass implements Serializable { - private int id ; - private int schoolId ; - private int classId ; - private String team ; - private int courseId ; - private String courseName ; - private int courseGroup ; + private int id; + private int schoolId; + private int classId; + private String team; + private int courseId; + private String courseName; + private int courseGroup; public JoinClass() { } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/Knowledge.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/Knowledge.java index ba36152..169bfd4 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/Knowledge.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/Knowledge.java @@ -10,12 +10,12 @@ import java.util.Date; */ public class Knowledge implements Serializable { - private int id ; - private String knowledge ; - private String detail ; - private String rate ; - private String avg ; - private Date updateTime ; + private int id; + private String knowledge; + private String detail; + private String rate; + private String avg; + private Date updateTime; public int getId() { return id; diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/League.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/League.java index 51f650e..fe1b87d 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/League.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/League.java @@ -11,10 +11,10 @@ import java.io.Serializable; */ public class League implements Serializable { - private int id ; - private int analyseId ; - private String league ; - private String schoolName ; + private int id; + private int analyseId; + private String league; + private String schoolName; public League() { } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/Schedule.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/Schedule.java index 24a96e2..350ad3f 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/Schedule.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/Schedule.java @@ -11,23 +11,23 @@ import java.util.Date; * @date 2019/10/10 0010 11:17 */ public class Schedule implements Serializable { - private int id ; - private String scheduleName ; - private int schoolId ; - private String team ; - private Date createTime ; - private Date updateTime ; - private int speed ; - private int morning ; + private int id; + private String scheduleName; + private int schoolId; + private String team; + private Date createTime; + private Date updateTime; + private int speed; + private int morning; private int afternoon; - private int night ; + private int night; public Schedule() { } public Schedule(ScheduleDto scheduleDto) { this.id = scheduleDto.getId(); - this.scheduleName =scheduleDto.getScheduleName(); + this.scheduleName = scheduleDto.getScheduleName(); this.schoolId = scheduleDto.getSchoolId(); this.team = scheduleDto.getTeam(); this.createTime = scheduleDto.getCreateTime(); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/Student.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/Student.java index ae5a4f7..54ee304 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/Student.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/Student.java @@ -13,19 +13,19 @@ import java.util.List; */ public class Student implements Serializable { - private int id ; + private int id; private int openId; - private String schoolName ; - private String className ; - private String studentName ; - private String studentNumber ; - private int analyseId ; - private double score ; - private Date createTime ; - - private double begin ; - private double end ; - private List schoolNames ; + private String schoolName; + private String className; + private String studentName; + private String studentNumber; + private int analyseId; + private double score; + private Date createTime; + + private double begin; + private double end; + private List schoolNames; public Student(StudentDto studentDto) { this.id = studentDto.getId(); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/StudentDetail.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/StudentDetail.java index 4b73ecb..b06183d 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/StudentDetail.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/StudentDetail.java @@ -13,22 +13,22 @@ import java.util.List; */ public class StudentDetail implements Serializable { - private long id ; + private long id; private int openId; - private String schoolName ; - private String className ; - private String studentName ; - private String studentNumber ; - private int analyseId ; - private String examNumber ; - private Double score ; - private Date createTime ; - private int correct ; //1 正确 0 错误 + private String schoolName; + private String className; + private String studentName; + private String studentNumber; + private int analyseId; + private String examNumber; + private Double score; + private Date createTime; + private int correct; //1 正确 0 错误 //查询用 高分段 低分段学生考号 - private List studentNumbers ; - private List schoolNames ; - private List examNumbers ; + private List studentNumbers; + private List schoolNames; + private List examNumbers; public StudentDetail(StudentDetailDto studentDetailDto) { this.id = studentDetailDto.getId(); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/Teacher.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/Teacher.java index 1f5c336..c8a1c5c 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/Teacher.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/Teacher.java @@ -9,10 +9,10 @@ import java.io.Serializable; */ public class Teacher implements Serializable { - private int id ; - private int schoolId ; - private int teacherId ; - private String teacherName ; + private int id; + private int schoolId; + private int teacherId; + private String teacherName; public int getId() { return id; diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherClass.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherClass.java index 1660242..0cbf2c9 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherClass.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherClass.java @@ -16,8 +16,8 @@ public class TeacherClass implements Serializable { private Integer times; private Integer joinTimes; private Date createTime; - private String team ; - private int status ; + private String team; + private int status; public TeacherClass(TeacherClassDto teacherClassDto) { this.tClassId = teacherClassDto.gettClassId(); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherCourse.java b/cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherCourse.java index 6667565..128098c 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherCourse.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/model/TeacherCourse.java @@ -24,7 +24,7 @@ public class TeacherCourse implements Serializable { private Date createTime; - private String team ; + private String team; public Integer gettClassId() { return tClassId; diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/StudentService.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/StudentService.java index 7c90ba2..2911421 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/StudentService.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/StudentService.java @@ -34,10 +34,13 @@ public interface StudentService { Double selectMinScore(int analyseId, List league, String schoolName); Double selectAvgScore(int analyseId, List league, String schoolName); + //众数 Double selectModeNumber(int analyseId, List league, String schoolName); + //中位数 Double selectMedian(int analyseId, List league, String schoolName); + //标准差 Double selectStdev(int analyseId, List league, String schoolName); } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDetailServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDetailServiceImpl.java index 3314d7d..7fe6292 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDetailServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDetailServiceImpl.java @@ -22,20 +22,20 @@ public class AnalyseDetailServiceImpl implements AnalyseDetailService { @Override public int insertBatch(List list) { - int i = 0 ; + int i = 0; List result = new ArrayList<>(); - for(AnalyseDetail analyseDetail :list){ - i++ ; + for (AnalyseDetail analyseDetail : list) { + i++; result.add(analyseDetail); - if(i % 100 == 0){ + if (i % 100 == 0) { analyseDetailMapper.insertBatch(result); result = new ArrayList<>(); } } - if(result.size() > 0){ + if (result.size() > 0) { analyseDetailMapper.insertBatch(result); } - return 1 ; + return 1; } @Override diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDimensionalServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDimensionalServiceImpl.java index 5fdd098..fba2915 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDimensionalServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/AnalyseDimensionalServiceImpl.java @@ -22,20 +22,20 @@ public class AnalyseDimensionalServiceImpl implements AnalyseDimensionalService @Override public int insertBatch(List list) { - int i = 0 ; + int i = 0; List result = new ArrayList<>(); - for(AnalyseDimensional analyseDetail :list){ - i++ ; + for (AnalyseDimensional analyseDetail : list) { + i++; result.add(analyseDetail); - if(i % 100 == 0){ + if (i % 100 == 0) { analyseDimensionalMapper.insertBatch(result); result = new ArrayList<>(); } } - if(result.size() > 0){ + if (result.size() > 0) { analyseDimensionalMapper.insertBatch(result); } - return 1 ; + return 1; } @Override diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassCourseServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassCourseServiceImpl.java index efaea87..e6739b3 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassCourseServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassCourseServiceImpl.java @@ -21,24 +21,24 @@ import java.util.List; public class ClassCourseServiceImpl implements ClassCourseService { @Autowired - ClassCourseMapper classCourseMapper ; + ClassCourseMapper classCourseMapper; @Autowired ClassModelMapper classModelMapper; @Override public int insertBatch(List classCourses) { - int i = 0 ; + int i = 0; List result = new ArrayList<>(); - for(ClassCourse classCourse :classCourses){ - i++ ; + for (ClassCourse classCourse : classCourses) { + i++; result.add(classCourse); - if(i % 100 == 0){ + if (i % 100 == 0) { classCourseMapper.insertBatch(result); result = new ArrayList<>(); } } - if(result.size()>0){ + if (result.size() > 0) { classCourseMapper.insertBatch(result); } return 1; @@ -48,8 +48,8 @@ public class ClassCourseServiceImpl implements ClassCourseService { public boolean insertSchoolClass(List classCourses) { List classModels = classModelMapper.selectBySchoolId(classCourses.get(0).getSchoolId()); Date date = new Date(); - for(ClassModel classModel : classModels){ - for(ClassCourse classCourse : classCourses){ + for (ClassModel classModel : classModels) { + for (ClassCourse classCourse : classCourses) { classCourse.setGrade(classModel.getGrade()); classCourse.setClassId(classModel.getClassId()); classCourse.setCreateTime(date); @@ -71,11 +71,11 @@ public class ClassCourseServiceImpl implements ClassCourseService { @Override public boolean selectSingleOrDouble(ClassCourse classCourse) { - return classCourseMapper.selectSingleOrDouble(classCourse) > 1 ; + return classCourseMapper.selectSingleOrDouble(classCourse) > 1; } @Override - public int selectMaxCourseNumber(int schoolId , String team) { + public int selectMaxCourseNumber(int schoolId, String team) { ClassCourse classCourse = new ClassCourse(); classCourse.setSchoolId(schoolId); classCourse.setTeam(team); @@ -98,7 +98,7 @@ public class ClassCourseServiceImpl implements ClassCourseService { } @Override - public List selectNoCourse(int classId , String team) { + public List selectNoCourse(int classId, String team) { ClassCourse classCourse = new ClassCourse(); classCourse.setClassId(classId); classCourse.setTeam(team); @@ -106,7 +106,7 @@ public class ClassCourseServiceImpl implements ClassCourseService { } @Override - public List selectWeekCourse(int classId, int week, int singOrDouble, String courseName , String team) { + public List selectWeekCourse(int classId, int week, int singOrDouble, String courseName, String team) { ClassCourse classCourse = new ClassCourse(); classCourse.setClassId(classId); classCourse.setWeek(week); @@ -135,7 +135,7 @@ public class ClassCourseServiceImpl implements ClassCourseService { } @Override - public List copyClassCourse(int schoolId ,String team) { + public List copyClassCourse(int schoolId, String team) { ClassCourse classCourse = new ClassCourse(); classCourse.setSchoolId(schoolId); classCourse.setTeam(team); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassModelServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassModelServiceImpl.java index 19056fb..b891af3 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassModelServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/ClassModelServiceImpl.java @@ -35,7 +35,7 @@ public class ClassModelServiceImpl implements ClassModelService { } @Override - public List selectBySchoolIdAndGrade(int schoolId , String grade ) { + public List selectBySchoolIdAndGrade(int schoolId, String grade) { ClassModel classModel = new ClassModel(); classModel.setSchoolId(schoolId); classModel.setGrade(grade); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/CourseServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/CourseServiceImpl.java index 1775439..c8afd0f 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/CourseServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/CourseServiceImpl.java @@ -44,11 +44,11 @@ public class CourseServiceImpl implements CourseService { Course course = new Course(); course.setSchoolId(schoolId); course.setCourseId(courseId); - List list = courseMapper.selectByCourse(course) ; - if(list != null && list.size() > 0){ + List list = courseMapper.selectByCourse(course); + if (list != null && list.size() > 0) { return list.get(0); - }else { - return null ; + } else { + return null; } } @@ -57,16 +57,16 @@ public class CourseServiceImpl implements CourseService { Course course = new Course(); course.setSchoolId(schoolId); course.setCourseName(courseName); - List list = courseMapper.selectByCourse(course) ; - if(list != null && list.size() > 0){ + List list = courseMapper.selectByCourse(course); + if (list != null && list.size() > 0) { return list.get(0); - }else { - return null ; + } else { + return null; } } @Override - public int updateCourseType(int courseId , int courseType , int schoolId) { + public int updateCourseType(int courseId, int courseType, int schoolId) { Course course = new Course(); course.setCourseId(courseId); course.setCourseType(courseType); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/DimensionalServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/DimensionalServiceImpl.java index 679e842..f48aee4 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/DimensionalServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/DimensionalServiceImpl.java @@ -35,7 +35,7 @@ public class DimensionalServiceImpl implements DimensionalService { dimensional.setDimensionalType(type); dimensional.setDimensionalName(name); List list = dimensionalMapper.select(dimensional); - if(list != null &&list.size() > 0){ + if (list != null && list.size() > 0) { return list.get(0); } return null; diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/JoinCLassServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/JoinCLassServiceImpl.java index e3d7397..0dc235f 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/JoinCLassServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/JoinCLassServiceImpl.java @@ -22,12 +22,12 @@ public class JoinCLassServiceImpl implements JoinClassService { @Override public int insertBatch(List list) { Integer maxGroup = joinClassMapper.selectMaxGroup(); - if(maxGroup == null){ - maxGroup = 1 ; - }else { - maxGroup = maxGroup + 1 ; + if (maxGroup == null) { + maxGroup = 1; + } else { + maxGroup = maxGroup + 1; } - for(JoinClass joinClass : list){ + for (JoinClass joinClass : list) { joinClass.setCourseGroup(maxGroup); } return joinClassMapper.insertBatch(list); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/KnowledgeServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/KnowledgeServiceImpl.java index 65cfd7c..2750673 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/KnowledgeServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/KnowledgeServiceImpl.java @@ -17,7 +17,7 @@ import java.util.List; public class KnowledgeServiceImpl implements KnowledgeService { @Autowired - KnowledgeMapper knowledgeMapper ; + KnowledgeMapper knowledgeMapper; @Override public int insertBatch(List list) { diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/LeagueServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/LeagueServiceImpl.java index 0497c02..e3e384e 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/LeagueServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/LeagueServiceImpl.java @@ -41,27 +41,27 @@ public class LeagueServiceImpl implements LeagueService { @Override public int initLeagueSchool(int id, String schoolName) { - League result = leagueMapper.selectById(id) ; + League result = leagueMapper.selectById(id); League search = new League(); search.setAnalyseId(result.getAnalyseId()); search.setSchoolName(schoolName); - List leagues = leagueMapper.selectByLeague(search) ; - if(leagues != null & leagues.size() >0){ - return 0 ; - }else { + List leagues = leagueMapper.selectByLeague(search); + if (leagues != null & leagues.size() > 0) { + return 0; + } else { search.setLeague(result.getLeague()); search.setSchoolName(null); List list = leagueMapper.selectByLeague(search); - boolean isCreate = true ; - for(League temp : list){ - if(StringUtils.isBlank(temp.getSchoolName())){ + boolean isCreate = true; + for (League temp : list) { + if (StringUtils.isBlank(temp.getSchoolName())) { temp.setSchoolName(schoolName); leagueMapper.update(temp); isCreate = false; break; } } - if(isCreate){ + if (isCreate) { League createLeague = new League(); createLeague.setAnalyseId(result.getAnalyseId()); createLeague.setLeague(result.getLeague()); @@ -86,16 +86,16 @@ public class LeagueServiceImpl implements LeagueService { league.setAnalyseId(analyseId); league.setSchoolName(schoolName); List leagues = leagueMapper.selectByLeague(league); - if(leagues != null && leagues.size() > 0){ + if (leagues != null && leagues.size() > 0) { League search = new League(); search.setAnalyseId(analyseId); search.setLeague(leagues.get(0).getLeague()); List result = leagueMapper.selectByLeague(search); List leagueSchoolName = new ArrayList<>(); - for(League league1 : result){ + for (League league1 : result) { leagueSchoolName.add(league1.getSchoolName()); } - return leagueSchoolName ; + return leagueSchoolName; } return null; } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentDetailServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentDetailServiceImpl.java index d53c255..3303766 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentDetailServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentDetailServiceImpl.java @@ -22,24 +22,24 @@ public class StudentDetailServiceImpl implements StudentDetailService { @Override public int insertBatch(List list) { - int i = 0 ; + int i = 0; List result = new ArrayList<>(); - for(StudentDetail studentDetail :list){ - i++ ; + for (StudentDetail studentDetail : list) { + i++; result.add(studentDetail); - if(i % 100 == 0){ + if (i % 100 == 0) { studentDetailMapper.insertBatch(result); result = new ArrayList<>(); } } - if(result.size()>0){ + if (result.size() > 0) { studentDetailMapper.insertBatch(result); } - return 1 ; + return 1; } @Override - public Double selectSumScore(int analyseId, List league , String schoolName, String examNumber) { + public Double selectSumScore(int analyseId, List league, String schoolName, String examNumber) { StudentDetail studentDetail = new StudentDetail(); studentDetail.setAnalyseId(analyseId); studentDetail.setSchoolName(schoolName); @@ -89,7 +89,7 @@ public class StudentDetailServiceImpl implements StudentDetailService { } @Override - public int selectTrueByExamNumber(int analyseId,List league , String schoolName, String examNumber, List studentNumbers) { + public int selectTrueByExamNumber(int analyseId, List league, String schoolName, String examNumber, List studentNumbers) { StudentDetail studentDetail = new StudentDetail(); studentDetail.setAnalyseId(analyseId); studentDetail.setSchoolName(schoolName); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentServiceImpl.java index a3ce33e..2895660 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/StudentServiceImpl.java @@ -22,20 +22,20 @@ public class StudentServiceImpl implements StudentService { @Override public int insertBatch(List list) { - int i = 0 ; + int i = 0; List result = new ArrayList<>(); - for(Student student :list){ - i++ ; + for (Student student : list) { + i++; result.add(student); - if(i % 100 == 0){ + if (i % 100 == 0) { studentMapper.insertBatch(result); result = new ArrayList<>(); } } - if(result.size()>0){ + if (result.size() > 0) { studentMapper.insertBatch(result); } - return 1 ; + return 1; } @Override @@ -48,7 +48,7 @@ public class StudentServiceImpl implements StudentService { } @Override - public List selectBySchoolName(int analyseId , List league , String schoolName) { + public List selectBySchoolName(int analyseId, List league, String schoolName) { Student student = new Student(); student.setAnalyseId(analyseId); student.setSchoolName(schoolName); @@ -66,7 +66,7 @@ public class StudentServiceImpl implements StudentService { } @Override - public int selectCountByScore(int analyseId, List league , String schoolName, double begin, double end) { + public int selectCountByScore(int analyseId, List league, String schoolName, double begin, double end) { Student student = new Student(); student.setAnalyseId(analyseId); student.setSchoolName(schoolName); @@ -84,7 +84,8 @@ public class StudentServiceImpl implements StudentService { student.setClassName(className); student.setBegin(begin); student.setEnd(end); - return studentMapper.selectCountByScore(student); } + return studentMapper.selectCountByScore(student); + } @Override public List selectClassNameBySchool(int analyseId, String schoolName) { @@ -109,7 +110,7 @@ public class StudentServiceImpl implements StudentService { } @Override - public Double selectMaxScore(int analyseId,List league , String schoolName) { + public Double selectMaxScore(int analyseId, List league, String schoolName) { Student student = new Student(); student.setAnalyseId(analyseId); student.setSchoolName(schoolName); @@ -118,7 +119,7 @@ public class StudentServiceImpl implements StudentService { } @Override - public Double selectMinScore(int analyseId, List league ,String schoolName) { + public Double selectMinScore(int analyseId, List league, String schoolName) { Student student = new Student(); student.setAnalyseId(analyseId); student.setSchoolName(schoolName); @@ -127,7 +128,7 @@ public class StudentServiceImpl implements StudentService { } @Override - public Double selectAvgScore(int analyseId,List league , String schoolName) { + public Double selectAvgScore(int analyseId, List league, String schoolName) { Student student = new Student(); student.setAnalyseId(analyseId); student.setSchoolName(schoolName); @@ -136,21 +137,21 @@ public class StudentServiceImpl implements StudentService { } @Override - public Double selectModeNumber(int analyseId,List league , String schoolName) { + public Double selectModeNumber(int analyseId, List league, String schoolName) { Student student = new Student(); student.setAnalyseId(analyseId); student.setSchoolName(schoolName); student.setSchoolNames(league); List list = studentMapper.selectModeNumber(student); - if(list.size() > 1){ - return null ; - }else { + if (list.size() > 1) { + return null; + } else { return list.get(0); } } @Override - public Double selectMedian(int analyseId,List league , String schoolName) { + public Double selectMedian(int analyseId, List league, String schoolName) { Student student = new Student(); student.setAnalyseId(analyseId); student.setSchoolName(schoolName); @@ -159,7 +160,7 @@ public class StudentServiceImpl implements StudentService { } @Override - public Double selectStdev(int analyseId,List league , String schoolName) { + public Double selectStdev(int analyseId, List league, String schoolName) { Student student = new Student(); student.setAnalyseId(analyseId); student.setSchoolName(schoolName); diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherClassServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherClassServiceImpl.java index 5fce283..9aae3f2 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherClassServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherClassServiceImpl.java @@ -27,17 +27,17 @@ public class TeacherClassServiceImpl implements TeacherClassService { @Override public int insertBatch(List teacherClasses) { - int i = 0 ; + int i = 0; List result = new ArrayList<>(); - for(TeacherClass teacherClass :teacherClasses){ - i++ ; + for (TeacherClass teacherClass : teacherClasses) { + i++; result.add(teacherClass); - if(i % 100 == 0){ + if (i % 100 == 0) { teacherClassMapper.insertBatch(result); result = new ArrayList<>(); } } - if(result.size()>0){ + if (result.size() > 0) { teacherClassMapper.insertBatch(result); } return 1; @@ -114,15 +114,15 @@ public class TeacherClassServiceImpl implements TeacherClassService { @Override public int selectTeacherDayClass(int schoolId, String team, String teacherName) { - TeacherClass search = new TeacherClass() ; + TeacherClass search = new TeacherClass(); search.setSchoolId(schoolId); search.setTeam(team); search.setTeacherName(teacherName); List list = teacherClassMapper.selectByTeacherClass(search); - int sumClassNumber = 0 ; - for(TeacherClass teacherClass :list){ + int sumClassNumber = 0; + for (TeacherClass teacherClass : list) { sumClassNumber += teacherClass.getTimes(); } - return (sumClassNumber/5) +1; + return (sumClassNumber / 5) + 1; } } diff --git a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherCourseServiceImpl.java b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherCourseServiceImpl.java index 10c85d9..47ed743 100644 --- a/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherCourseServiceImpl.java +++ b/cloud/search_independence/src/main/java/com/sincere/independence/service/impl/TeacherCourseServiceImpl.java @@ -19,19 +19,20 @@ public class TeacherCourseServiceImpl implements TeacherCourseService { @Autowired TeacherCourseMapper teacherCourseMapper; + @Override public int insertBatch(List list) { - int i = 0 ; + int i = 0; List result = new ArrayList<>(); - for(TeacherCourse teacherClass :list){ - i++ ; + for (TeacherCourse teacherClass : list) { + i++; result.add(teacherClass); - if(i % 100 == 0){ + if (i % 100 == 0) { teacherCourseMapper.insertBatch(result); result = new ArrayList<>(); } } - if(result.size()>0){ + if (result.size() > 0) { teacherCourseMapper.insertBatch(result); } return 1; diff --git a/cloud/search_independence/src/main/resources/application.yml b/cloud/search_independence/src/main/resources/application.yml index 5bf9068..df147cb 100644 --- a/cloud/search_independence/src/main/resources/application.yml +++ b/cloud/search_independence/src/main/resources/application.yml @@ -25,6 +25,6 @@ eureka: remoting: -# url: http://60.190.202.57:1000 + # url: http://60.190.202.57:1000 url: http://campus.myjxt.com diff --git a/cloud/search_independence/src/main/resources/logback.xml b/cloud/search_independence/src/main/resources/logback.xml index 4e5fd32..63c3f18 100644 --- a/cloud/search_independence/src/main/resources/logback.xml +++ b/cloud/search_independence/src/main/resources/logback.xml @@ -1,61 +1,96 @@     -     +     +     - +     -     -         -         -             -             [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n) -             UTF-8 -         -     +     + +         +         + +             +             + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n) +             + UTF-8 +         + +     +     -     -         -         -             -             ${LOG_HOME}/${PROJECT_NAME}.system-dev.%d{yyyy-MM-dd HH}.%i.log -             -             30 -             -             100MB -         - -         -             -             [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n -             UTF-8 -         -     -     -        -    - -    -    -    -    -    -    -    - - -    -    -    -    -    -    -        -        -    +     + +         +         + +             +             + ${LOG_HOME}/${PROJECT_NAME}.system-dev.%d{yyyy-MM-dd HH}.%i.log +             +             + 30 +             +             + 100MB +         + + +         + +             +             + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n +             + UTF-8 +         + +     + +     + +         + +     + + +     +     + +     + +     + +     + +     + +     + + + +     + +     + +     + +     + +     +     + +         + +         + +     + diff --git a/cloud/search_independence/src/main/resources/mapper/AnalyseDetailMapper.xml b/cloud/search_independence/src/main/resources/mapper/AnalyseDetailMapper.xml index d115c93..b691c9a 100644 --- a/cloud/search_independence/src/main/resources/mapper/AnalyseDetailMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/AnalyseDetailMapper.xml @@ -1,49 +1,56 @@ - - - - - - - - - - - - - insert into sz_learn_analyse_detail (analyse_id, question_number,question_type,difficult,score,create_time) - values - - (#{emp.analyseId},#{emp.questionNumber},#{emp.questionType},#{emp.difficult},#{emp.score},#{emp.createTime}) - - - - - - - - - - - - - - - - + + + + + + + + + + + + + insert into sz_learn_analyse_detail (analyse_id, question_number,question_type,difficult,score,create_time) + values + + (#{emp.analyseId},#{emp.questionNumber},#{emp.questionType},#{emp.difficult},#{emp.score},#{emp.createTime}) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/AnalyseDimensionalMapper.xml b/cloud/search_independence/src/main/resources/mapper/AnalyseDimensionalMapper.xml index 9697f84..705863f 100644 --- a/cloud/search_independence/src/main/resources/mapper/AnalyseDimensionalMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/AnalyseDimensionalMapper.xml @@ -1,25 +1,26 @@ - - - - - - - - - + + + + + + + + + - - insert into sz_learn_analyse_dimensional (analyse_id, question_number,dimensional_id,score,create_time) - values - - (#{emp.analyseId},#{emp.questionNumber},#{emp.dimensionalId},#{emp.score},#{emp.createTime}) - - + + insert into sz_learn_analyse_dimensional (analyse_id, question_number,dimensional_id,score,create_time) + values + + (#{emp.analyseId},#{emp.questionNumber},#{emp.dimensionalId},#{emp.score},#{emp.createTime}) + + - + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/AnalyseMapper.xml b/cloud/search_independence/src/main/resources/mapper/AnalyseMapper.xml index f0e1bda..49551aa 100644 --- a/cloud/search_independence/src/main/resources/mapper/AnalyseMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/AnalyseMapper.xml @@ -1,61 +1,61 @@ - - - - - - - - - - - + + + + + + + + + + + - - insert into sz_learn_analyse (exam_name, exam_time,course_name,create_time,grade) - values (#{examName},#{examTime},#{courseName},#{createTime},#{grade}) - + + insert into sz_learn_analyse (exam_name, exam_time,course_name,create_time,grade) + values (#{examName},#{examTime},#{courseName},#{createTime},#{grade}) + - - update sz_learn_analyse - - - exam_name = #{examName}, - - - exam_time = #{examTime}, - - - grade = #{grade}, - - - max_score = #{maxScore}, - - - where id = #{id} - + + update sz_learn_analyse + + + exam_name = #{examName}, + + + exam_time = #{examTime}, + + + grade = #{grade}, + + + max_score = #{maxScore}, + + + where id = #{id} + - + - + - - update sz_learn_analyse set exam_time = #{examTime} , exam_scope = #{examScope} where id = #{id} - + + update sz_learn_analyse set exam_time = #{examTime} , exam_scope = #{examScope} where id = #{id} + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/ChapterMapper.xml b/cloud/search_independence/src/main/resources/mapper/ChapterMapper.xml index c3d8867..ea43d2a 100644 --- a/cloud/search_independence/src/main/resources/mapper/ChapterMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/ChapterMapper.xml @@ -1,24 +1,25 @@ - - - - - - - - + + + + + + + + - - insert into sz_learn_analyse_chapter (analyse_id, chapter_number,chapter_name,chapter_score) - values - - (#{emp.analyseId}, #{emp.chapterNumber}, #{emp.chapterName}, #{emp.chapterScore}) - - + + insert into sz_learn_analyse_chapter (analyse_id, chapter_number,chapter_name,chapter_score) + values + + (#{emp.analyseId}, #{emp.chapterNumber}, #{emp.chapterName}, #{emp.chapterScore}) + + - + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/ClassCourseMapper.xml b/cloud/search_independence/src/main/resources/mapper/ClassCourseMapper.xml index d5ee3f2..0a34b9a 100644 --- a/cloud/search_independence/src/main/resources/mapper/ClassCourseMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/ClassCourseMapper.xml @@ -1,112 +1,122 @@ - - - - - - - - - - - - - - - - - course_id, school_id, grade, class_id, single_or_double, week, course_number, course_name, - create_time, update_time,team,course_open_id - + + + + + + + + + + + + + + + + + course_id, school_id, grade, class_id, single_or_double, week, course_number, course_name, + create_time, update_time,team,course_open_id + - + insert into sz_sch_class_course ( school_id, grade, - class_id, single_or_double, week, - course_number, course_name, create_time, - update_time,team,course_open_id) - values - - (#{emp.schoolId,jdbcType=INTEGER}, #{emp.grade,jdbcType=INTEGER}, - #{emp.classId,jdbcType=INTEGER}, #{emp.singleOrDouble,jdbcType=INTEGER}, #{emp.week,jdbcType=INTEGER}, - #{emp.courseNumber,jdbcType=INTEGER}, #{emp.courseName,jdbcType=VARCHAR}, #{emp.createTime,jdbcType=TIMESTAMP}, - #{emp.updateTime,jdbcType=TIMESTAMP},#{emp.team,jdbcType=VARCHAR}, #{emp.courseOpenId,jdbcType=INTEGER}) - - + class_id, single_or_double, week, + course_number, course_name, create_time, + update_time,team,course_open_id) + values + + (#{emp.schoolId,jdbcType=INTEGER}, #{emp.grade,jdbcType=INTEGER}, + #{emp.classId,jdbcType=INTEGER}, #{emp.singleOrDouble,jdbcType=INTEGER}, #{emp.week,jdbcType=INTEGER}, + #{emp.courseNumber,jdbcType=INTEGER}, #{emp.courseName,jdbcType=VARCHAR}, + #{emp.createTime,jdbcType=TIMESTAMP}, + #{emp.updateTime,jdbcType=TIMESTAMP},#{emp.team,jdbcType=VARCHAR}, #{emp.courseOpenId,jdbcType=INTEGER}) + + - + update sz_sch_class_course set course_name = null where school_id = #{schoolId} and course_name = #{courseName} - + - + - + - + select * from sz_sch_class_course where team =#{team} and class_id = #{classId} and week = #{week} and + single_or_double = #{singleOrDouble} and course_name = #{courseName} - + - + - + - + - + - - - delete from sz_sch_class_course where team =#{team} and school_id = #{schoolId} - + + + delete from sz_sch_class_course where team =#{team} and school_id = #{schoolId} + - + - - update sz_sch_class_course set course_name = #{courseName} where team =#{team} and school_id = #{schoolId} and grade = #{grade} - and week=#{week} and course_number = #{courseNumber} and single_or_double = #{singleOrDouble} - + + update sz_sch_class_course set course_name = #{courseName} where team =#{team} and school_id = #{schoolId} and + grade = #{grade} + and week=#{week} and course_number = #{courseNumber} and single_or_double = #{singleOrDouble} + - - update sz_sch_class_course - set school_id = #{schoolId,jdbcType=INTEGER}, - grade = #{grade,jdbcType=INTEGER}, - class_id = #{classId,jdbcType=INTEGER}, - single_or_double = #{singleOrDouble,jdbcType=INTEGER}, - week = #{week,jdbcType=INTEGER}, - course_number = #{courseNumber,jdbcType=INTEGER}, - course_name = #{courseName,jdbcType=VARCHAR}, - course_open_id = #{courseOpenId,jdbcType=INTEGER}, - create_time = #{createTime,jdbcType=TIMESTAMP}, - update_time = #{updateTime,jdbcType=TIMESTAMP} - where course_id = #{courseId,jdbcType=INTEGER} - + + update sz_sch_class_course + set school_id = #{schoolId,jdbcType=INTEGER}, + grade = #{grade,jdbcType=INTEGER}, + class_id = #{classId,jdbcType=INTEGER}, + single_or_double = #{singleOrDouble,jdbcType=INTEGER}, + week = #{week,jdbcType=INTEGER}, + course_number = #{courseNumber,jdbcType=INTEGER}, + course_name = #{courseName,jdbcType=VARCHAR}, + course_open_id = #{courseOpenId,jdbcType=INTEGER}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP} + where course_id = #{courseId,jdbcType=INTEGER} + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/ClassModelMapper.xml b/cloud/search_independence/src/main/resources/mapper/ClassModelMapper.xml index e1ea8bd..573f09e 100644 --- a/cloud/search_independence/src/main/resources/mapper/ClassModelMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/ClassModelMapper.xml @@ -1,52 +1,54 @@ - - - - - - - - - class_id, school_id, grade, class_name - - + + + + + + + + + class_id, school_id, grade, class_name + + - - insert into sz_sch_class (class_id, school_id, grade, - class_name) - values - - (#{emp.classId,jdbcType=INTEGER}, #{emp.schoolId,jdbcType=INTEGER}, #{emp.grade,jdbcType=VARCHAR}, - #{emp.className,jdbcType=VARCHAR}) - - - - update sz_sch_class - set school_id = #{schoolId,jdbcType=INTEGER}, - grade = #{grade,jdbcType=VARCHAR}, - class_name = #{className,jdbcType=VARCHAR}, - where class_id = #{classId,jdbcType=INTEGER} - + + insert into sz_sch_class (class_id, school_id, grade, + class_name) + values + + (#{emp.classId,jdbcType=INTEGER}, #{emp.schoolId,jdbcType=INTEGER}, #{emp.grade,jdbcType=VARCHAR}, + #{emp.className,jdbcType=VARCHAR}) + + + + update sz_sch_class + set school_id = #{schoolId,jdbcType=INTEGER}, + grade = #{grade,jdbcType=VARCHAR}, + class_name = #{className,jdbcType=VARCHAR}, + where class_id = #{classId,jdbcType=INTEGER} + - + - + - - delete from sz_sch_class where school_id = #{schoolId} - - + + delete from sz_sch_class where school_id = #{schoolId} + + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/CourseMapper.xml b/cloud/search_independence/src/main/resources/mapper/CourseMapper.xml index c71895c..b938a10 100644 --- a/cloud/search_independence/src/main/resources/mapper/CourseMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/CourseMapper.xml @@ -1,54 +1,54 @@ - - - - - - - - - - + + + + + + + + + + insert into sz_sch_course ( school_id , course_id, course_name,course_type) - values - - (#{emp.schoolId,jdbcType=INTEGER}, #{emp.courseId,jdbcType=INTEGER}, #{emp.courseName,jdbcType=VARCHAR},0) - - - - - - - - - delete from sz_sch_course where school_Id =#{schoolId} - - - - update sz_sch_course set course_type = 0 where school_Id =#{schoolId} - - - - - - update sz_sch_course set course_type =#{courseType} where course_id = #{courseId} and school_id = #{schoolId} - + values + + (#{emp.schoolId,jdbcType=INTEGER}, #{emp.courseId,jdbcType=INTEGER}, #{emp.courseName,jdbcType=VARCHAR},0) + + + + + + + + + delete from sz_sch_course where school_Id =#{schoolId} + + + + update sz_sch_course set course_type = 0 where school_Id =#{schoolId} + + + + + + update sz_sch_course set course_type =#{courseType} where course_id = #{courseId} and school_id = #{schoolId} + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/DimensionalMapper.xml b/cloud/search_independence/src/main/resources/mapper/DimensionalMapper.xml index a13f872..9182e2c 100644 --- a/cloud/search_independence/src/main/resources/mapper/DimensionalMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/DimensionalMapper.xml @@ -1,32 +1,33 @@ - - - - - - - + + + + + + + - - insert into sz_learn_dimensional (dimensional_type, dimensional_name,create_time) - values (#{dimensionalType},#{dimensionalName},#{createTime}) - + + insert into sz_learn_dimensional (dimensional_type, dimensional_name,create_time) + values (#{dimensionalType},#{dimensionalName},#{createTime}) + - + - + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/JoinClassMapper.xml b/cloud/search_independence/src/main/resources/mapper/JoinClassMapper.xml index 71c565b..ae909fa 100644 --- a/cloud/search_independence/src/main/resources/mapper/JoinClassMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/JoinClassMapper.xml @@ -1,55 +1,55 @@ - - - - - - - - - - + + + + + + + + + + - + insert into sz_sch_join_class ( school_id ,class_id,team, course_id, course_name,course_group) - values - - (#{emp.schoolId,jdbcType=INTEGER}, #{emp.classId,jdbcType=INTEGER}, #{emp.team,jdbcType=VARCHAR} - , #{emp.courseId,jdbcType=INTEGER}, #{emp.courseName,jdbcType=VARCHAR}, #{emp.courseGroup,jdbcType=INTEGER}) - - + values + + (#{emp.schoolId,jdbcType=INTEGER}, #{emp.classId,jdbcType=INTEGER}, #{emp.team,jdbcType=VARCHAR} + , #{emp.courseId,jdbcType=INTEGER}, #{emp.courseName,jdbcType=VARCHAR}, #{emp.courseGroup,jdbcType=INTEGER}) + + - + - + - - delete from sz_sch_join_class where course_group = #{courseGroup} - + + delete from sz_sch_join_class where course_group = #{courseGroup} + - - delete from sz_sch_join_class where school_id = #{schoolId} and team = #{team} - + + delete from sz_sch_join_class where school_id = #{schoolId} and team = #{team} + - + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/KnowledgeMapper.xml b/cloud/search_independence/src/main/resources/mapper/KnowledgeMapper.xml index f46c6d1..64d4d7f 100644 --- a/cloud/search_independence/src/main/resources/mapper/KnowledgeMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/KnowledgeMapper.xml @@ -1,29 +1,29 @@ - - - - - - - - - + + + + + + + + + - - insert into sz_learn_knowledge (knowledge,detail, rate,knowledge_avg,update_time) - values - - (#{emp.knowledge},#{emp.detail},#{emp.rate},#{emp.avg},#{emp.updateTime}) - - + + insert into sz_learn_knowledge (knowledge,detail, rate,knowledge_avg,update_time) + values + + (#{emp.knowledge},#{emp.detail},#{emp.rate},#{emp.avg},#{emp.updateTime}) + + - + - + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/LeagueMapper.xml b/cloud/search_independence/src/main/resources/mapper/LeagueMapper.xml index 9c32cf3..036df5d 100644 --- a/cloud/search_independence/src/main/resources/mapper/LeagueMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/LeagueMapper.xml @@ -1,47 +1,48 @@ - - - - - - - + + + + + + + - - insert into sz_learn_league (analyse_id, league,school_name) - values - (#{analyseId,jdbcType=INTEGER}, #{league,jdbcType=INTEGER}, #{schoolName,jdbcType=VARCHAR}) - + + insert into sz_learn_league (analyse_id, league,school_name) + values + (#{analyseId,jdbcType=INTEGER}, #{league,jdbcType=INTEGER}, #{schoolName,jdbcType=VARCHAR}) + - - insert into sz_learn_league (analyse_id, league,school_name) - values - - (#{emp.analyseId,jdbcType=INTEGER}, #{emp.league,jdbcType=INTEGER}, #{emp.schoolName,jdbcType=VARCHAR}) - - + + insert into sz_learn_league (analyse_id, league,school_name) + values + + (#{emp.analyseId,jdbcType=INTEGER}, #{emp.league,jdbcType=INTEGER}, #{emp.schoolName,jdbcType=VARCHAR}) + + - + - - update sz_learn_league set league = #{league} , school_name = #{schoolName} where id = #{id} - + + update sz_learn_league set league = #{league} , school_name = #{schoolName} where id = #{id} + - + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/ScheduleMapper.xml b/cloud/search_independence/src/main/resources/mapper/ScheduleMapper.xml index 04c1008..0b5d3e3 100644 --- a/cloud/search_independence/src/main/resources/mapper/ScheduleMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/ScheduleMapper.xml @@ -1,49 +1,51 @@ - - - - - - - - - - - - - - - - insert into sz_schedule ( schedule_name , school_id, team,create_time,speed) - values (#{scheduleName},#{schoolId},#{team},#{createTime},#{speed}) - - - - - - - - - - delete sz_schedule where id =#{id} - - - - update sz_schedule set speed = #{speed} where id =#{id} - - - - update sz_schedule set schedule_name = #{scheduleName} , team =#{team} where id =#{id} - - - - update sz_schedule set morning = #{morning} , afternoon =#{afternoon} , night=#{night} where id =#{id} - + + + + + + + + + + + + + + + + insert into sz_schedule ( schedule_name , school_id, team,create_time,speed) + values (#{scheduleName},#{schoolId},#{team},#{createTime},#{speed}) + + + + + + + + + + delete sz_schedule where id =#{id} + + + + update sz_schedule set speed = #{speed} where id =#{id} + + + + update sz_schedule set schedule_name = #{scheduleName} , team =#{team} where id =#{id} + + + + update sz_schedule set morning = #{morning} , afternoon =#{afternoon} , night=#{night} where id =#{id} + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/StudentDetailMapper.xml b/cloud/search_independence/src/main/resources/mapper/StudentDetailMapper.xml index 2eff3b7..eb31578 100644 --- a/cloud/search_independence/src/main/resources/mapper/StudentDetailMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/StudentDetailMapper.xml @@ -1,96 +1,98 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - insert into sz_learn_student_detail (school_name, class_name,student_name, - student_number,analyse_id,exam_number,score,create_time,correct) - values - - (#{emp.schoolName},#{emp.className},#{emp.studentName}, - #{emp.studentNumber},#{emp.analyseId},#{emp.examNumber},#{emp.score},#{emp.createTime},#{emp.correct}) - - - - - - +
+ + + +
\ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/StudentMapper.xml b/cloud/search_independence/src/main/resources/mapper/StudentMapper.xml index 0b41f17..ea7123d 100644 --- a/cloud/search_independence/src/main/resources/mapper/StudentMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/StudentMapper.xml @@ -1,56 +1,57 @@ - - - - - - - - - - - - + + + + + + + + + + + + - insert into sz_learn_student (school_name, class_name,student_name, - student_number,analyse_id,score,create_time) - values - - (#{emp.schoolName},#{emp.className},#{emp.studentName}, - #{emp.studentNumber},#{emp.analyseId},#{emp.score},#{emp.createTime}) - + insert into sz_learn_student (school_name, class_name,student_name, + student_number,analyse_id,score,create_time) + values + + (#{emp.schoolName},#{emp.className},#{emp.studentName}, + #{emp.studentNumber},#{emp.analyseId},#{emp.score},#{emp.createTime}) + - + select * from sz_learn_student where analyse_id = #{analyseId} and school_name = #{schoolName} + and student_number = #{studentNumber} - + select * from sz_learn_student + + + and analyse_id = #{analyseId} + + + and school_name = #{schoolName} + + + and class_name = #{className} + + + AND school_name IN + + #{item} + + + + order by score desc - select count(1) from sz_learn_student @@ -70,16 +71,17 @@ AND school_name IN - + #{item} - + select DISTINCT(class_name) from sz_learn_student where analyse_id = #{analyseId} + and school_name = #{schoolName} - + - select count(status) from sz_sch_teacher_class where school_id = #{schoolId} and team = #{team} and status=1 - + - - update sz_sch_teacher_class set status = 1 where t_class_id =#{tClassId} - - - update sz_sch_teacher_class set status = 0 where t_class_id =#{tClassId} - + + update sz_sch_teacher_class set status = 1 where t_class_id =#{tClassId} + + + update sz_sch_teacher_class set status = 0 where t_class_id =#{tClassId} + - - delete from sz_sch_teacher_class where team =#{team} and school_id = #{schoolId} - + + delete from sz_sch_teacher_class where team =#{team} and school_id = #{schoolId} + - + - - update sz_sch_teacher_class - set teacher_id = #{teacherId,jdbcType=INTEGER}, - teacher_name = #{teacherName,jdbcType=VARCHAR}, - school_id = #{schoolId,jdbcType=INTEGER}, - grade = #{grade,jdbcType=INTEGER}, - class_id = #{classId,jdbcType=INTEGER}, - course_name = #{courseName,jdbcType=VARCHAR}, - times = #{times,jdbcType=INTEGER}, - join_times = #{joinTimes,jdbcType=INTEGER}, - create_time = #{createTime,jdbcType=TIMESTAMP} - where t_class_id = #{tClassId,jdbcType=INTEGER} - + + update sz_sch_teacher_class + set teacher_id = #{teacherId,jdbcType=INTEGER}, + teacher_name = #{teacherName,jdbcType=VARCHAR}, + school_id = #{schoolId,jdbcType=INTEGER}, + grade = #{grade,jdbcType=INTEGER}, + class_id = #{classId,jdbcType=INTEGER}, + course_name = #{courseName,jdbcType=VARCHAR}, + times = #{times,jdbcType=INTEGER}, + join_times = #{joinTimes,jdbcType=INTEGER}, + create_time = #{createTime,jdbcType=TIMESTAMP} + where t_class_id = #{tClassId,jdbcType=INTEGER} + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/TeacherCourseMapper.xml b/cloud/search_independence/src/main/resources/mapper/TeacherCourseMapper.xml index c291392..b984e6c 100644 --- a/cloud/search_independence/src/main/resources/mapper/TeacherCourseMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/TeacherCourseMapper.xml @@ -1,99 +1,103 @@ - - - - - - - - - - - - - - - - t_class_id, school_id, grade, teacher_name, single_or_double, week, course_number, - class_id, course_name, create_time ,team - + + + + + + + + + + + + + + + + t_class_id, school_id, grade, teacher_name, single_or_double, week, course_number, + class_id, course_name, create_time ,team + - - insert into sz_sch_teacher_course (school_id, grade, - teacher_name, single_or_double, week, - course_number, class_id, course_name, - create_time,team) - values - - (#{emp.schoolId,jdbcType=INTEGER}, #{emp.grade,jdbcType=VARCHAR}, - #{emp.teacherName,jdbcType=VARCHAR}, #{emp.singleOrDouble,jdbcType=INTEGER}, #{emp.week,jdbcType=INTEGER}, - #{emp.courseNumber,jdbcType=INTEGER}, #{emp.classId,jdbcType=VARCHAR}, #{emp.courseName,jdbcType=VARCHAR}, - #{emp.createTime,jdbcType=TIMESTAMP},#{emp.team,jdbcType=VARCHAR}) - - + + insert into sz_sch_teacher_course (school_id, grade, + teacher_name, single_or_double, week, + course_number, class_id, course_name, + create_time,team) + values + + (#{emp.schoolId,jdbcType=INTEGER}, #{emp.grade,jdbcType=VARCHAR}, + #{emp.teacherName,jdbcType=VARCHAR}, #{emp.singleOrDouble,jdbcType=INTEGER}, #{emp.week,jdbcType=INTEGER}, + #{emp.courseNumber,jdbcType=INTEGER}, #{emp.classId,jdbcType=VARCHAR}, #{emp.courseName,jdbcType=VARCHAR}, + #{emp.createTime,jdbcType=TIMESTAMP},#{emp.team,jdbcType=VARCHAR}) + + - - - update sz_sch_teacher_course - set course_name = #{courseName,jdbcType=VARCHAR} , class_id = #{classId,jdbcType=VARCHAR} , grade=#{grade} - where team =#{team} and school_id = #{schoolId,jdbcType=INTEGER} - and teacher_name = #{teacherName,jdbcType=VARCHAR} - and week = #{week,jdbcType=INTEGER} - and course_number = #{courseNumber,jdbcType=INTEGER} - and single_or_double = #{singleOrDouble,jdbcType=INTEGER} - + + + update sz_sch_teacher_course + set course_name = #{courseName,jdbcType=VARCHAR} , class_id = #{classId,jdbcType=VARCHAR} , grade=#{grade} + where team =#{team} and school_id = #{schoolId,jdbcType=INTEGER} + and teacher_name = #{teacherName,jdbcType=VARCHAR} + and week = #{week,jdbcType=INTEGER} + and course_number = #{courseNumber,jdbcType=INTEGER} + and single_or_double = #{singleOrDouble,jdbcType=INTEGER} + - - update sz_sch_teacher_course - set course_name = null , class_id = null , grade= null - where team =#{team} and school_id = #{schoolId,jdbcType=INTEGER} - and teacher_name = #{teacherName} and course_name = #{courseName} - + + update sz_sch_teacher_course + set course_name = null , class_id = null , grade= null + where team =#{team} and school_id = #{schoolId,jdbcType=INTEGER} + and teacher_name = #{teacherName} and course_name = #{courseName} + - + - - - update sz_sch_teacher_course - set school_id = #{schoolId,jdbcType=INTEGER}, - grade = #{grade,jdbcType=VARCHAR}, - teacher_name = #{teacherName,jdbcType=VARCHAR}, - single_or_double = #{singleOrDouble,jdbcType=INTEGER}, - week = #{week,jdbcType=INTEGER}, - course_number = #{courseNumber,jdbcType=INTEGER}, - class_id = #{classId,jdbcType=VARCHAR}, - course_name = #{courseName,jdbcType=VARCHAR}, - create_time = #{createTime,jdbcType=TIMESTAMP} - where t_class_id = #{tClassId,jdbcType=INTEGER} - + + + update sz_sch_teacher_course + set school_id = #{schoolId,jdbcType=INTEGER}, + grade = #{grade,jdbcType=VARCHAR}, + teacher_name = #{teacherName,jdbcType=VARCHAR}, + single_or_double = #{singleOrDouble,jdbcType=INTEGER}, + week = #{week,jdbcType=INTEGER}, + course_number = #{courseNumber,jdbcType=INTEGER}, + class_id = #{classId,jdbcType=VARCHAR}, + course_name = #{courseName,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP} + where t_class_id = #{tClassId,jdbcType=INTEGER} + - + - - delete from sz_sch_teacher_course where school_id = #{schoolId} and team = #{team} - + + delete from sz_sch_teacher_course where school_id = #{schoolId} and team = #{team} + \ No newline at end of file diff --git a/cloud/search_independence/src/main/resources/mapper/TeacherMapper.xml b/cloud/search_independence/src/main/resources/mapper/TeacherMapper.xml index 18e9a4c..5574964 100644 --- a/cloud/search_independence/src/main/resources/mapper/TeacherMapper.xml +++ b/cloud/search_independence/src/main/resources/mapper/TeacherMapper.xml @@ -1,37 +1,37 @@ - - - - - - - + + + + + + + - + insert into sz_sch_teacher ( school_id , teacher_id, teacher_name) - values - - (#{emp.schoolId,jdbcType=INTEGER}, #{emp.teacherId,jdbcType=INTEGER}, #{emp.teacherName,jdbcType=VARCHAR}) - - + values + + (#{emp.schoolId,jdbcType=INTEGER}, #{emp.teacherId,jdbcType=INTEGER}, #{emp.teacherName,jdbcType=VARCHAR}) + + - + - - delete from sz_sch_teacher where school_Id =#{schoolId} - + + delete from sz_sch_teacher where school_Id =#{schoolId} + - + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java index 6fcf751..11e3b7c 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java @@ -25,19 +25,20 @@ public class AttendanceController { /** * 没有就新增,有就更新在线时间 + * * @param attendanceDto */ @RequestMapping(value = "addAttendance", method = RequestMethod.POST) - public void addAttendance(@RequestBody SZ_AttendanceDto attendanceDto){ + public void addAttendance(@RequestBody SZ_AttendanceDto attendanceDto) { SZ_AttendanceDto attendance = attendacenService.selectDevice(attendanceDto.getClint_id()); - if(attendance != null){ + if (attendance != null) { attendacenService.updateAttendance(attendance.getClint_id()); - }else { + } else { attendanceDto.setState(1); attendanceDto.setSchool_id("-1"); try { attendanceDto.setIntime(DateUtils.getToday(DateUtils.format2)); - }catch (Exception e){ + } catch (Exception e) { } attendacenService.insertAttendance(attendanceDto); @@ -58,38 +59,38 @@ public class AttendanceController { } @RequestMapping(value = "insertAttendance", method = RequestMethod.POST) - void insertAttendance(@RequestBody SZ_AttendanceDto attendanceDto){ + void insertAttendance(@RequestBody SZ_AttendanceDto attendanceDto) { attendacenService.insertAttendance(attendanceDto); } @RequestMapping(value = "updateAttendance", method = RequestMethod.GET) - void updateAttendance(@RequestParam("clientId") String clientId){ + void updateAttendance(@RequestParam("clientId") String clientId) { attendacenService.updateAttendance(clientId); } @RequestMapping(value = "selectRoomAttendance", method = RequestMethod.GET) - List selectRoomAttendance(@RequestParam("placeId") int placeId){ + List selectRoomAttendance(@RequestParam("placeId") int placeId) { return attendacenService.selectRoomAttendance(placeId); } @RequestMapping(value = "selectCloudAttendance", method = RequestMethod.GET) - List selectCloudAttendance(){ + List selectCloudAttendance() { return attendacenService.selectCloudAttendance(); } @RequestMapping(value = "selectCloudAttendanceBySchoolId", method = RequestMethod.GET) - List selectCloudAttendanceBySchoolId(@RequestParam("schoolId") int schoolId){ + List selectCloudAttendanceBySchoolId(@RequestParam("schoolId") int schoolId) { return attendacenService.selectCloudAttendanceBySchoolId(schoolId); } @RequestMapping(value = "selectByDeviceNo", method = RequestMethod.GET) - String selectByDeviceNo(@RequestParam("deviceNo") String deviceNo){ - Date date = deviceService.selectByDeviceNo(deviceNo) ; - if(date == null){ - return null ; - }else { - return DateUtils.date2String(date,DateUtils.format2); + String selectByDeviceNo(@RequestParam("deviceNo") String deviceNo) { + Date date = deviceService.selectByDeviceNo(deviceNo); + if (date == null) { + return null; + } else { + return DateUtils.date2String(date, DateUtils.format2); } } } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/KqController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/KqController.java index 3c32afc..df88863 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/KqController.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/KqController.java @@ -19,13 +19,13 @@ import java.util.*; public class KqController { @Autowired - KqService kqService ; + KqService kqService; - @RequestMapping(value = "getAllTemplate",method = RequestMethod.GET) - public List getAllTemplate(){ + @RequestMapping(value = "getAllTemplate", method = RequestMethod.GET) + public List getAllTemplate() { List list = kqService.selectKqTemplate(); List templateDtos = new ArrayList<>(); - for(KqTemplate kqTemplate : list){ + for (KqTemplate kqTemplate : list) { TemplateDto templateDto = new TemplateDto(); templateDto.setId(kqTemplate.getId()); templateDto.setTitle(kqTemplate.getTitle()); @@ -37,11 +37,11 @@ public class KqController { return templateDtos; } - @RequestMapping(value = "getAllTemplateAlarm",method = RequestMethod.GET) - public List getAllTemplateAlarm(){ + @RequestMapping(value = "getAllTemplateAlarm", method = RequestMethod.GET) + public List getAllTemplateAlarm() { List list = kqService.selectAllKqTemplate(); List templateDtos = new ArrayList<>(); - for(KqTemplate kqTemplate : list){ + for (KqTemplate kqTemplate : list) { TemplateDto templateDto = new TemplateDto(); templateDto.setId(kqTemplate.getId()); templateDto.setTitle(kqTemplate.getTitle()); @@ -53,34 +53,34 @@ public class KqController { } - @RequestMapping(value = "getTeacherList",method = RequestMethod.GET) - public List getTeacherList(@RequestParam("schoolId")int schoolId){ + @RequestMapping(value = "getTeacherList", method = RequestMethod.GET) + public List getTeacherList(@RequestParam("schoolId") int schoolId) { return kqService.selectSchoolTeacher(schoolId); } - @RequestMapping(value = "selectChamberTeacher",method = RequestMethod.GET) - public List selectChamberTeacher(@RequestParam("schoolId")int schoolId){ + @RequestMapping(value = "selectChamberTeacher", method = RequestMethod.GET) + public List selectChamberTeacher(@RequestParam("schoolId") int schoolId) { return kqService.selectChamberTeacher(schoolId); } - @RequestMapping(value = "getApp",method = RequestMethod.GET) - public AppDto getApp(@RequestParam("schoolId")int schoolId , @RequestParam("type") int type){ - Map map = new HashMap<>(); - map.put("schoolId",schoolId); - map.put("type",type); + @RequestMapping(value = "getApp", method = RequestMethod.GET) + public AppDto getApp(@RequestParam("schoolId") int schoolId, @RequestParam("type") int type) { + Map map = new HashMap<>(); + map.put("schoolId", schoolId); + map.put("type", type); return kqService.selectApp(map); } - @RequestMapping(value = "getThirdId",method = RequestMethod.GET) - public String getThirdId(@RequestParam("userId")String userId , @RequestParam("type") int type){ - Map map = new HashMap<>(); - map.put("userId",userId); - map.put("type",type+""); + @RequestMapping(value = "getThirdId", method = RequestMethod.GET) + public String getThirdId(@RequestParam("userId") String userId, @RequestParam("type") int type) { + Map map = new HashMap<>(); + map.put("userId", userId); + map.put("type", type + ""); return kqService.selectThirdId(map); } - @RequestMapping(value = "selectClassBySchoolId",method = RequestMethod.GET) - List selectClassBySchoolId(@RequestParam("schoolId") int schoolId){ + @RequestMapping(value = "selectClassBySchoolId", method = RequestMethod.GET) + List selectClassBySchoolId(@RequestParam("schoolId") int schoolId) { return kqService.selectClassBySchoolId(schoolId); } } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/RegisterPushController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/RegisterPushController.java index c948896..5a9ed99 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/RegisterPushController.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/RegisterPushController.java @@ -23,23 +23,23 @@ import java.util.Map; public class RegisterPushController { @Autowired - RegisterPushService registerPushService ; + RegisterPushService registerPushService; - @RequestMapping(value = "selectBindPushSchool",method = RequestMethod.GET) - List selectBindPushSchool(){ + @RequestMapping(value = "selectBindPushSchool", method = RequestMethod.GET) + List selectBindPushSchool() { return registerPushService.selectBindPushSchool(); } - @RequestMapping(value = "selectNotFollow",method = RequestMethod.GET) - List selectNotFollow(@RequestParam("schoolId") int schoolId){ + @RequestMapping(value = "selectNotFollow", method = RequestMethod.GET) + List selectNotFollow(@RequestParam("schoolId") int schoolId) { return registerPushService.selectNotFollow(schoolId); } - @RequestMapping(value = "selectNotBind",method = RequestMethod.GET) - List selectNotBind(@RequestParam("schoolId") int schoolId , @RequestParam("type") int type){ - Map map = new HashMap<>(); - map.put("schoolId",schoolId); - map.put("type",type); + @RequestMapping(value = "selectNotBind", method = RequestMethod.GET) + List selectNotBind(@RequestParam("schoolId") int schoolId, @RequestParam("type") int type) { + Map map = new HashMap<>(); + map.put("schoolId", schoolId); + map.put("type", type); return registerPushService.selectNotBind(map); } } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/SyncController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/SyncController.java index 5e42960..e55aafd 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/SyncController.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/SyncController.java @@ -17,79 +17,79 @@ import java.util.List; public class SyncController { @Autowired - SyncService syncService ; + SyncService syncService; - @RequestMapping(value = "selectSyncSchool",method = RequestMethod.GET) - List selectSyncSchool(){ + @RequestMapping(value = "selectSyncSchool", method = RequestMethod.GET) + List selectSyncSchool() { return syncService.selectSyncSchool(); } - @RequestMapping(value = "updateSchool",method = RequestMethod.GET) - void updateSchool(@RequestParam("schoolId") int schoolId){ + @RequestMapping(value = "updateSchool", method = RequestMethod.GET) + void updateSchool(@RequestParam("schoolId") int schoolId) { syncService.updateSchool(schoolId); } - @RequestMapping(value = "selectGroup",method = RequestMethod.GET) - List selectGroup(@RequestParam("schoolId") int schoolId){ + @RequestMapping(value = "selectGroup", method = RequestMethod.GET) + List selectGroup(@RequestParam("schoolId") int schoolId) { return syncService.selectGroup(schoolId); } - @RequestMapping(value = "selectSubject",method = RequestMethod.GET) - List selectSubject(@RequestParam("schoolId") int schoolId){ + @RequestMapping(value = "selectSubject", method = RequestMethod.GET) + List selectSubject(@RequestParam("schoolId") int schoolId) { return syncService.selectSubject(schoolId); } - @RequestMapping(value = "selectDept",method = RequestMethod.GET) - List selectDept(@RequestParam("schoolId") int schoolId){ + @RequestMapping(value = "selectDept", method = RequestMethod.GET) + List selectDept(@RequestParam("schoolId") int schoolId) { return syncService.selectDept(schoolId); } - @RequestMapping(value = "updateDept",method = RequestMethod.GET) + @RequestMapping(value = "updateDept", method = RequestMethod.GET) void updateDept(@RequestParam("id") int id) { syncService.updateDept(id); } - @RequestMapping(value = "updateUser",method = RequestMethod.GET) - void updateUser(@RequestParam("id")int id){ + @RequestMapping(value = "updateUser", method = RequestMethod.GET) + void updateUser(@RequestParam("id") int id) { syncService.updateUser(id); } - @RequestMapping(value = "updateDeptRelation",method = RequestMethod.POST) - void updateDeptRelation(@RequestBody DeptRelationDto deptRelationDto){ //1 新增 2 修改删除 - if(deptRelationDto.getSqlStatus() == 1){ + @RequestMapping(value = "updateDeptRelation", method = RequestMethod.POST) + void updateDeptRelation(@RequestBody DeptRelationDto deptRelationDto) { //1 新增 2 修改删除 + if (deptRelationDto.getSqlStatus() == 1) { syncService.insertDeptRelation(deptRelationDto); - }else { + } else { syncService.updateDeptRelation(deptRelationDto); } } - @RequestMapping(value = "selectUser",method = RequestMethod.GET) - List selectUser(@RequestParam("schoolId") int schoolId){ - return syncService.selectUser(schoolId); + @RequestMapping(value = "selectUser", method = RequestMethod.GET) + List selectUser(@RequestParam("schoolId") int schoolId) { + return syncService.selectUser(schoolId); } - @RequestMapping(value = "selectDeptByGradeId",method = RequestMethod.GET) - SyncDeptDto selectDeptByGradeId(@RequestParam("gradeId") int gradeId){ + @RequestMapping(value = "selectDeptByGradeId", method = RequestMethod.GET) + SyncDeptDto selectDeptByGradeId(@RequestParam("gradeId") int gradeId) { return syncService.selectDeptByGradeId(gradeId); } - @RequestMapping(value = "selectYxyIdByHxyId",method = RequestMethod.GET) - String selectYxyIdByHxyId(@RequestParam("hxyId") int hxyId){ + @RequestMapping(value = "selectYxyIdByHxyId", method = RequestMethod.GET) + String selectYxyIdByHxyId(@RequestParam("hxyId") int hxyId) { return syncService.selectYxyIdByHxyId(hxyId); } - @RequestMapping(value = "updateUserRelation",method = RequestMethod.POST) - void updateUserRelation(@RequestBody UserRelationDto userRelationDto){ //1 新增 2 修改删除 - if(userRelationDto.getSqlstate() == 1){ + @RequestMapping(value = "updateUserRelation", method = RequestMethod.POST) + void updateUserRelation(@RequestBody UserRelationDto userRelationDto) { //1 新增 2 修改删除 + if (userRelationDto.getSqlstate() == 1) { syncService.insertUserRelation(userRelationDto); - }else { + } else { syncService.updateUserRelation(userRelationDto); } } - @RequestMapping(value = "selectUserYxyIdByHxyId",method = RequestMethod.GET) - String selectUserYxyIdByHxyId(@RequestParam("hxyCustomerId") String hxyCustomerId){ + @RequestMapping(value = "selectUserYxyIdByHxyId", method = RequestMethod.GET) + String selectUserYxyIdByHxyId(@RequestParam("hxyCustomerId") String hxyCustomerId) { return syncService.selectUserYxyIdByHxyId(hxyCustomerId); } } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java index d3b7d9d..8e850ef 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java @@ -22,46 +22,45 @@ public class UserController { @Autowired UserService userService; - @RequestMapping(value = "insertTemperature",method = RequestMethod.POST) - int insertTemperature(@RequestBody CwStutemperaturereocrd record){ + @RequestMapping(value = "insertTemperature", method = RequestMethod.POST) + int insertTemperature(@RequestBody CwStutemperaturereocrd record) { return userService.insertTemperature(record); } - @RequestMapping(value = "selectStudentNumByStudentId",method = RequestMethod.GET) - String selectStudentNumByStudentId(@RequestParam("studentId") int studentId){ + @RequestMapping(value = "selectStudentNumByStudentId", method = RequestMethod.GET) + String selectStudentNumByStudentId(@RequestParam("studentId") int studentId) { return userService.selectStudentNumByStudentId(studentId); } - - @RequestMapping(value = "getStudent_NumWitdCode",method = RequestMethod.GET) - StudentBean getStudent_NumWitdCode(@RequestParam("studentcode") String studentcode){ + @RequestMapping(value = "getStudent_NumWitdCode", method = RequestMethod.GET) + StudentBean getStudent_NumWitdCode(@RequestParam("studentcode") String studentcode) { return userService.getStudent_NumWitdCode(studentcode); } - @RequestMapping(value = "getTeacherWithstudentcode",method = RequestMethod.GET) - StudentBean getTeacherWithstudentcode(@RequestParam("num") String num,@RequestParam("schoolId") String schoolId){ - return userService.getTeacherWithstudentcode(num,schoolId); + @RequestMapping(value = "getTeacherWithstudentcode", method = RequestMethod.GET) + StudentBean getTeacherWithstudentcode(@RequestParam("num") String num, @RequestParam("schoolId") String schoolId) { + return userService.getTeacherWithstudentcode(num, schoolId); } - @RequestMapping(value = "selectTeacherBySchoolId",method = RequestMethod.GET) - List selectTeacherBySchoolId(@RequestParam("schoolId") String schoolId){ + @RequestMapping(value = "selectTeacherBySchoolId", method = RequestMethod.GET) + List selectTeacherBySchoolId(@RequestParam("schoolId") String schoolId) { return userService.selectTeacherBySchool(Integer.valueOf(schoolId)); } - @RequestMapping(value = "selectStudentBySchoolId",method = RequestMethod.GET) - List selectStudentBySchoolId(@RequestParam("schoolId") String schoolId){ + @RequestMapping(value = "selectStudentBySchoolId", method = RequestMethod.GET) + List selectStudentBySchoolId(@RequestParam("schoolId") String schoolId) { return userService.selectStudentBySchool(Integer.valueOf(schoolId)); } - @RequestMapping(value = "selectByTeacherId",method = RequestMethod.GET) - SzVSchoolTeacher selectByTeacherId(@RequestParam("teacherId") int teacherId){ + @RequestMapping(value = "selectByTeacherId", method = RequestMethod.GET) + SzVSchoolTeacher selectByTeacherId(@RequestParam("teacherId") int teacherId) { return userService.selectByTeacherId(teacherId); } - @RequestMapping(value = "selectByStudentId",method = RequestMethod.GET) - SzVSchoolStudent selectByStudentId(@RequestParam("studentId") int studentId){ + @RequestMapping(value = "selectByStudentId", method = RequestMethod.GET) + SzVSchoolStudent selectByStudentId(@RequestParam("studentId") int studentId) { return userService.selectByStudentId(studentId); } } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/WgController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/WgController.java index 38933c6..80c1a53 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/WgController.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/WgController.java @@ -33,49 +33,49 @@ public class WgController { @Autowired WgUserSearchService wgUserSearchService; - @RequestMapping(value = "updateLinkTime",method = RequestMethod.GET) - int updateLinkTime(@RequestParam("sno") String sno){ + @RequestMapping(value = "updateLinkTime", method = RequestMethod.GET) + int updateLinkTime(@RequestParam("sno") String sno) { return deviceService.updateLinkTime(sno); } - @RequestMapping(value = "selectOutOrderId",method = RequestMethod.GET) - String selectOutOrderId(@RequestParam("type") int type, @RequestParam("insideOrderId") int insideOrderId){ - return deviceService.selectOutOrderId(type,insideOrderId); + @RequestMapping(value = "selectOutOrderId", method = RequestMethod.GET) + String selectOutOrderId(@RequestParam("type") int type, @RequestParam("insideOrderId") int insideOrderId) { + return deviceService.selectOutOrderId(type, insideOrderId); } - @RequestMapping(value = "checkLeave",method = RequestMethod.GET) - String checkLeave(@RequestParam("cardNo") String cardNo){ + @RequestMapping(value = "checkLeave", method = RequestMethod.GET) + String checkLeave(@RequestParam("cardNo") String cardNo) { return wgUserSearchService.checkLeave(cardNo); } - @RequestMapping(value = "selectSchoolBySchoolId",method = RequestMethod.GET) - SchoolDto selectSchoolBySchoolId(@RequestParam("schoolId") int schoolId){ + @RequestMapping(value = "selectSchoolBySchoolId", method = RequestMethod.GET) + SchoolDto selectSchoolBySchoolId(@RequestParam("schoolId") int schoolId) { School school = wgUserSearchService.selectSchoolBySchoolId(schoolId); return toSchoolDto(school); } - @RequestMapping(value = "selectUserByCardNum",method = RequestMethod.GET) - UserDto selectUserByCardNum(@RequestParam("cardNum") String cardNum){ + @RequestMapping(value = "selectUserByCardNum", method = RequestMethod.GET) + UserDto selectUserByCardNum(@RequestParam("cardNum") String cardNum) { User user = wgUserSearchService.selectUserByCardNum(cardNum); return toUserDto(user); } - @RequestMapping(value = "selectUpdateCardByUpdateId",method = RequestMethod.GET) - UpdateCardDto selectUpdateCardByUpdateId(@RequestParam("updateId") int updateId){ + @RequestMapping(value = "selectUpdateCardByUpdateId", method = RequestMethod.GET) + UpdateCardDto selectUpdateCardByUpdateId(@RequestParam("updateId") int updateId) { UpdateCard updateCard = wgUserSearchService.selectUpdateCardByUpdateId(updateId); return toUpdateCardDto(updateCard); } - @RequestMapping(value = "selectStudentCard",method = RequestMethod.GET) - StudentCardDto selectStudentCard(@RequestParam("cardNum") String cardNum){ + @RequestMapping(value = "selectStudentCard", method = RequestMethod.GET) + StudentCardDto selectStudentCard(@RequestParam("cardNum") String cardNum) { StudentCard studentCard = wgUserSearchService.selectStudentCard(cardNum); return toStudentCardDto(studentCard); } - private SchoolDto toSchoolDto(School school){ + private SchoolDto toSchoolDto(School school) { SchoolDto schoolDto = new SchoolDto(); - if(school != null){ + if (school != null) { schoolDto.setSchoolId(school.getSchoolId()); schoolDto.setSchoolName(school.getSchoolName()); schoolDto.setManagerUserId(school.getManagerUserId()); @@ -83,9 +83,9 @@ public class WgController { return schoolDto; } - private UserDto toUserDto(User user){ + private UserDto toUserDto(User user) { UserDto userDto = new UserDto(); - if(user != null){ + if (user != null) { userDto.setClassId(user.getClassId()); userDto.setName(user.getName()); userDto.setSchoolId(user.getSchoolId()); @@ -94,9 +94,9 @@ public class WgController { return userDto; } - private UpdateCardDto toUpdateCardDto(UpdateCard updateCard){ + private UpdateCardDto toUpdateCardDto(UpdateCard updateCard) { UpdateCardDto updateCardDto = new UpdateCardDto(); - if(updateCard != null){ + if (updateCard != null) { updateCardDto.setId(updateCard.getId()); updateCardDto.setOldCard(updateCard.getOldCard()); updateCard.setUserType(updateCard.getUserType()); @@ -104,9 +104,9 @@ public class WgController { return updateCardDto; } - private StudentCardDto toStudentCardDto(StudentCard studentCard){ + private StudentCardDto toStudentCardDto(StudentCard studentCard) { StudentCardDto studentCardDto = new StudentCardDto(); - if(studentCard != null){ + if (studentCard != null) { studentCardDto.setCardNum(studentCard.getCardNum()); studentCardDto.setCardType(studentCard.getCardType()); } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java index f154f75..3f4bb2e 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java @@ -9,11 +9,11 @@ import java.util.List; //@Repository public interface AttendaceMapper { - SZ_AttendanceDto selectDevice( String clint_id); + SZ_AttendanceDto selectDevice(String clint_id); List getAttensWithIsKaoqin(int IsKaoqin); - int insertAttendance(SZ_AttendanceDto attendanceDto) ; + int insertAttendance(SZ_AttendanceDto attendanceDto); int updateAttendance(String client_id); diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/KqTemplateMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/KqTemplateMapper.java index f05e854..5b06d0b 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/KqTemplateMapper.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/KqTemplateMapper.java @@ -24,9 +24,9 @@ public interface KqTemplateMapper { List selectChamberTeacher(int schoolId); - AppDto selectApp(Map map); + AppDto selectApp(Map map); - String selectThirdId(Map map); + String selectThirdId(Map map); List selectClassBySchoolId(int schoolId); diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/RegisterPushMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/RegisterPushMapper.java index 13de594..336a74a 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/RegisterPushMapper.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/RegisterPushMapper.java @@ -15,7 +15,7 @@ public interface RegisterPushMapper { List selectBindPushSchool(); - List selectNotFollow(int schoolId) ; + List selectNotFollow(int schoolId); - List selectNotBind(Map map); + List selectNotBind(Map map); } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/SyncMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/SyncMapper.java index b41d8ed..d4891c4 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/SyncMapper.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/SyncMapper.java @@ -16,7 +16,7 @@ public interface SyncMapper { int updateSchool(int schoolId); - List selectGroup(int schoolId) ; + List selectGroup(int schoolId); int updateDept(int id); @@ -24,7 +24,7 @@ public interface SyncMapper { List selectSubject(int schoolId); - List selectDept(int schoolId) ; + List selectDept(int schoolId); SyncDeptDto selectDeptByGradeId(int gradeId); diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java index 83634bc..fc95e51 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java @@ -18,7 +18,7 @@ public interface UserMapper { @Select("select Top(1)*\n" + "from SZ_V_School_Teacher\n" + "where num = #{num} and school_id = #{schoolId}") - StudentBean getTeacherWithstudentcode(@Param("num") String num, @Param("schoolId")String schoolId); + StudentBean getTeacherWithstudentcode(@Param("num") String num, @Param("schoolId") String schoolId); @Select("select Top(1) * from SZ_V_School_Student where studentcode = #{studentcode}") StudentBean getStudent_NumWitdCode(@Param("studentcode") String studentcode); diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceLink.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceLink.java index 14affb9..c4972cf 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceLink.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceLink.java @@ -9,9 +9,9 @@ import java.util.Date; */ public class DeviceLink { - private String deviceNo ; - private Date lastTime ; - private int isRelation ; + private String deviceNo; + private Date lastTime; + private int isRelation; public String getDeviceNo() { return deviceNo; diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceOrder.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceOrder.java index 993d31a..5217ba9 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceOrder.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/DeviceOrder.java @@ -7,8 +7,8 @@ package com.sincere.smartSearch.model; */ public class DeviceOrder { - private int type ; - private int insideOrderId ; + private int type; + private int insideOrderId; public int getType() { return type; diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqChamber.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqChamber.java index 63651cf..5203e3b 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqChamber.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqChamber.java @@ -6,8 +6,8 @@ package com.sincere.smartSearch.model; * @date 2019/12/5 0005 10:02 */ public class KqChamber { - private int id ; - private String name ; + private int id; + private String name; public int getId() { return id; diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqTemplate.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqTemplate.java index e32a455..1b3a34a 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqTemplate.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/KqTemplate.java @@ -7,11 +7,11 @@ package com.sincere.smartSearch.model; */ public class KqTemplate { - private int id ; - private String title ; - private String config ; - private int schoolId ; - private String type ; + private int id; + private String title; + private String config; + private int schoolId; + private String type; public String getTitle() { return title; diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/School.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/School.java index f98b10a..8c15793 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/School.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/School.java @@ -7,9 +7,9 @@ package com.sincere.smartSearch.model; */ public class School { - private int schoolId ; - private String schoolName ; - private int managerUserId ; + private int schoolId; + private String schoolName; + private int managerUserId; public int getManagerUserId() { return managerUserId; diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/StudentCard.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/StudentCard.java index 7e737da..6ed4a1b 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/StudentCard.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/StudentCard.java @@ -6,8 +6,8 @@ package com.sincere.smartSearch.model; * @date 2019/10/14 0014 14:50 */ public class StudentCard { - private String cardType ; - private String cardNum ; + private String cardType; + private String cardNum; public String getCardType() { return cardType; diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/UpdateCard.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/UpdateCard.java index cfa3b48..b346403 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/UpdateCard.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/UpdateCard.java @@ -6,9 +6,9 @@ package com.sincere.smartSearch.model; * @date 2019/10/14 0014 14:46 */ public class UpdateCard { - private int id ; - private int userType ; - private String oldCard ; + private int id; + private int userType; + private String oldCard; public int getId() { return id; diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/User.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/User.java index 397c576..87d378a 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/User.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/model/User.java @@ -8,9 +8,9 @@ package com.sincere.smartSearch.model; public class User { private int schoolId; - private int classId ; - private String name ; - private int studentId ; + private int classId; + private String name; + private int studentId; public int getSchoolId() { return schoolId; diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java index 59d80ea..d5965eb 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java @@ -13,7 +13,7 @@ public interface AttendacenService { List getAttensWithIsKaoqin(int IsKaoqin); - int insertAttendance(SZ_AttendanceDto attendanceDto) ; + int insertAttendance(SZ_AttendanceDto attendanceDto); int updateAttendance(String client_id); diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/KqService.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/KqService.java index 756802c..a3bfb1a 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/KqService.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/KqService.java @@ -24,9 +24,9 @@ public interface KqService { List selectChamberTeacher(int schoolId); - AppDto selectApp(Map map); + AppDto selectApp(Map map); - String selectThirdId(Map map); + String selectThirdId(Map map); List selectClassBySchoolId(int schoolId); } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/RegisterPushService.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/RegisterPushService.java index 9cd4fa8..eab336e 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/RegisterPushService.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/RegisterPushService.java @@ -15,7 +15,7 @@ public interface RegisterPushService { List selectBindPushSchool(); - List selectNotFollow(int schoolId) ; + List selectNotFollow(int schoolId); - List selectNotBind(Map map); + List selectNotBind(Map map); } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/SyncService.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/SyncService.java index d05bbf5..c0d4ef5 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/SyncService.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/SyncService.java @@ -15,7 +15,7 @@ public interface SyncService { int updateSchool(int schoolId); - List selectGroup(int schoolId) ; + List selectGroup(int schoolId); int updateDept(int id); @@ -23,7 +23,7 @@ public interface SyncService { List selectSubject(int schoolId); - List selectDept(int schoolId) ; + List selectDept(int schoolId); SyncDeptDto selectDeptByGradeId(int gradeId); diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/DeviceServiceImpl.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/DeviceServiceImpl.java index 251b919..22b499a 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/DeviceServiceImpl.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/DeviceServiceImpl.java @@ -25,12 +25,12 @@ public class DeviceServiceImpl implements DeviceService { DeviceLink deviceLink = new DeviceLink(); deviceLink.setDeviceNo(sno); deviceLink.setLastTime(new Date()); - if(deviceMapper.updateLinkTime(deviceLink) > 0){ - //已存在,更新即可 - }else { + if (deviceMapper.updateLinkTime(deviceLink) > 0) { + //已存在,更新即可 + } else { deviceMapper.insertLink(deviceLink); } - return 1 ; + return 1; } @Override diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/KqServiceImpl.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/KqServiceImpl.java index 196f37d..c31fd7b 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/KqServiceImpl.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/KqServiceImpl.java @@ -23,7 +23,7 @@ import java.util.*; public class KqServiceImpl implements KqService { @Autowired - KqTemplateMapper kqTemplateMapper ; + KqTemplateMapper kqTemplateMapper; @Override public List selectKqTemplate() { diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/RegisterPushServiceImpl.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/RegisterPushServiceImpl.java index aa41e22..aecace2 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/RegisterPushServiceImpl.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/RegisterPushServiceImpl.java @@ -19,7 +19,7 @@ import java.util.Map; public class RegisterPushServiceImpl implements RegisterPushService { @Autowired - RegisterPushMapper registerPushMapper ; + RegisterPushMapper registerPushMapper; @Override public List selectBindPushSchool() { diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/SyncServiceImpl.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/SyncServiceImpl.java index 96250e2..759692a 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/SyncServiceImpl.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/SyncServiceImpl.java @@ -17,7 +17,7 @@ import java.util.List; public class SyncServiceImpl implements SyncService { @Autowired - SyncMapper syncMapper ; + SyncMapper syncMapper; @Override public List selectSyncSchool() { diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java index 058797b..5337505 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java @@ -23,7 +23,7 @@ import java.util.List; public class UserServiceImpl implements UserService { @Autowired - UserMapper userMapper ; + UserMapper userMapper; @Autowired SzVSchoolStudentMapper szVSchoolStudentMapper; @@ -32,7 +32,7 @@ public class UserServiceImpl implements UserService { SzVSchoolTeacherMapper szVSchoolTeacherMapper; @Autowired - CwStutemperaturereocrdMapper cwStutemperaturereocrdMapper ; + CwStutemperaturereocrdMapper cwStutemperaturereocrdMapper; @Autowired CwCheckMapper cwCheckMapper; @@ -50,8 +50,8 @@ public class UserServiceImpl implements UserService { @Override - public StudentBean getTeacherWithstudentcode(String num,String schoolId) { - return userMapper.getTeacherWithstudentcode(num,schoolId); + public StudentBean getTeacherWithstudentcode(String num, String schoolId) { + return userMapper.getTeacherWithstudentcode(num, schoolId); } @Override @@ -77,20 +77,20 @@ public class UserServiceImpl implements UserService { @Override public int insertTemperature(CwStutemperaturereocrd record) { List list = cwCheckMapper.selectBySchoolId(record.getSchoolid()); - try{ + try { String today = DateUtils.getToday(DateUtils.format1); record.setType(1); - for(CwCheck cwCheck : list){ - Date begin = DateUtils.string2Date(today+ " "+ cwCheck.getBegintime()+":00",DateUtils.format2); - Date end = DateUtils.string2Date(today+ " "+ cwCheck.getEndtime()+":00",DateUtils.format2); - if(end.compareTo(record.getIntime()) == 1 && record.getIntime().compareTo(begin) == 1){ - record.setType(cwCheck.getCheckname().equals("晨检")?1:2); + for (CwCheck cwCheck : list) { + Date begin = DateUtils.string2Date(today + " " + cwCheck.getBegintime() + ":00", DateUtils.format2); + Date end = DateUtils.string2Date(today + " " + cwCheck.getEndtime() + ":00", DateUtils.format2); + if (end.compareTo(record.getIntime()) == 1 && record.getIntime().compareTo(begin) == 1) { + record.setType(cwCheck.getCheckname().equals("晨检") ? 1 : 2); } } return cwStutemperaturereocrdMapper.insert(record); - }catch (Exception e){ + } catch (Exception e) { } - return 0 ; + return 0; } } diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/WgUserSearchServiceImpl.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/WgUserSearchServiceImpl.java index b7dc49a..5e92743 100644 --- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/WgUserSearchServiceImpl.java +++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/WgUserSearchServiceImpl.java @@ -36,9 +36,9 @@ public class WgUserSearchServiceImpl implements WgUserSearchService { @Override public User selectUserByCardNum(String cardNum) { - try{ + try { return searchMapper.selectUserByCardNum(cardNum).get(0); - }catch (Exception e){ + } catch (Exception e) { } return new User(); } @@ -50,10 +50,10 @@ public class WgUserSearchServiceImpl implements WgUserSearchService { @Override public StudentCard selectStudentCard(String cardNum) { - List list = searchMapper.selectStudentCard(cardNum) ; - if(list != null && list.size() > 0){ + List list = searchMapper.selectStudentCard(cardNum); + if (list != null && list.size() > 0) { return list.get(0); - }else { + } else { return new StudentCard(); } } diff --git a/cloud/search_smartCampus/src/main/resources/application.yml b/cloud/search_smartCampus/src/main/resources/application.yml index 9662302..7115e20 100644 --- a/cloud/search_smartCampus/src/main/resources/application.yml +++ b/cloud/search_smartCampus/src/main/resources/application.yml @@ -7,9 +7,9 @@ spring: username: szjxtuser password: RQminVCJota3H1u8bBYH url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus -# username: SZJXTUSER -# password: xst200919 -# url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ + # username: SZJXTUSER + # password: xst200919 + # url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver mvc: static-path-pattern: /images/** @@ -28,7 +28,7 @@ eureka: lease-renewal-interval-in-seconds: 10 client: service-url: -# defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ + # defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/ diff --git a/cloud/search_smartCampus/src/main/resources/logback.xml b/cloud/search_smartCampus/src/main/resources/logback.xml index 11dbd29..8dbbc5d 100644 --- a/cloud/search_smartCampus/src/main/resources/logback.xml +++ b/cloud/search_smartCampus/src/main/resources/logback.xml @@ -1,60 +1,95 @@     -     +     +     - +     -     -         -         -             -             [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n) -             UTF-8 -         -     +     + +         +         + +             +             + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n) +             + UTF-8 +         + +     +     -     -         -         -             -             ${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd HH}.%i.log -             -             30 -             -             100MB -         - -         -             -             [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n -             UTF-8 -         -     -     -        -    - -    -    -    -    -    -    -    - - -    -    -    -    -    -    -        -        -    +     + +         +         + +             +             + ${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd HH}.%i.log +             +             + 30 +             +             + 100MB +         + + +         + +             +             + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n +             + UTF-8 +         + +     + +     + +         + +     + + +     +     + +     + +     + +     + +     + +     + + + +     + +     + +     + +     + +     +     + +         + +         + +     + diff --git a/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml index c1c2c23..8bf4053 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml @@ -2,7 +2,7 @@ - + @@ -43,10 +43,12 @@ diff --git a/cloud/search_smartCampus/src/main/resources/mapper/CwCheckMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/CwCheckMapper.xml index 13e0f7d..aa58d1e 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/CwCheckMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/CwCheckMapper.xml @@ -1,18 +1,18 @@ - - - - - - - - - - + + + + + + + + + + - + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/resources/mapper/CwStutemperaturereocrdMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/CwStutemperaturereocrdMapper.xml index 49e7d38..a0ba3d2 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/CwStutemperaturereocrdMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/CwStutemperaturereocrdMapper.xml @@ -1,93 +1,93 @@ - - - - - - - - - - - - - - insert into CW_StuTemperatureReocrd ( UserId, StudentId, - Name, ClassId, ClassName, - Temperature, Type, SchoolId, - Intime) - values ( #{userid,jdbcType=VARCHAR}, #{studentid,jdbcType=INTEGER}, - #{name,jdbcType=VARCHAR}, #{classid,jdbcType=INTEGER}, #{classname,jdbcType=VARCHAR}, - #{temperature,jdbcType=DECIMAL}, #{type,jdbcType=INTEGER}, #{schoolid,jdbcType=INTEGER}, - #{intime,jdbcType=TIMESTAMP}) - - - insert into CW_StuTemperatureReocrd - - - Id, - - - UserId, - - - StudentId, - - - Name, - - - ClassId, - - - ClassName, - - - Temperature, - - - Type, - - - SchoolId, - - - Intime, - - - - - #{id,jdbcType=INTEGER}, - - - #{userid,jdbcType=VARCHAR}, - - - #{studentid,jdbcType=INTEGER}, - - - #{name,jdbcType=VARCHAR}, - - - #{classid,jdbcType=INTEGER}, - - - #{classname,jdbcType=VARCHAR}, - - - #{temperature,jdbcType=DECIMAL}, - - - #{type,jdbcType=INTEGER}, - - - #{schoolid,jdbcType=INTEGER}, - - - #{intime,jdbcType=TIMESTAMP}, - - - + + + + + + + + + + + + + + insert into CW_StuTemperatureReocrd ( UserId, StudentId, + Name, ClassId, ClassName, + Temperature, Type, SchoolId, + Intime) + values ( #{userid,jdbcType=VARCHAR}, #{studentid,jdbcType=INTEGER}, + #{name,jdbcType=VARCHAR}, #{classid,jdbcType=INTEGER}, #{classname,jdbcType=VARCHAR}, + #{temperature,jdbcType=DECIMAL}, #{type,jdbcType=INTEGER}, #{schoolid,jdbcType=INTEGER}, + #{intime,jdbcType=TIMESTAMP}) + + + insert into CW_StuTemperatureReocrd + + + Id, + + + UserId, + + + StudentId, + + + Name, + + + ClassId, + + + ClassName, + + + Temperature, + + + Type, + + + SchoolId, + + + Intime, + + + + + #{id,jdbcType=INTEGER}, + + + #{userid,jdbcType=VARCHAR}, + + + #{studentid,jdbcType=INTEGER}, + + + #{name,jdbcType=VARCHAR}, + + + #{classid,jdbcType=INTEGER}, + + + #{classname,jdbcType=VARCHAR}, + + + #{temperature,jdbcType=DECIMAL}, + + + #{type,jdbcType=INTEGER}, + + + #{schoolid,jdbcType=INTEGER}, + + + #{intime,jdbcType=TIMESTAMP}, + + + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/resources/mapper/DeviceMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/DeviceMapper.xml index a1de416..755075d 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/DeviceMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/DeviceMapper.xml @@ -1,21 +1,22 @@ - + - - update AC_DeviceLink set LastTime =#{lastTime} where DeviceNo = #{deviceNo} - + + update AC_DeviceLink set LastTime =#{lastTime} where DeviceNo = #{deviceNo} + - - insert into AC_DeviceLink(DeviceNo,LastTime,IsRelation) - values (#{deviceNo},#{lastTime},0) - + + insert into AC_DeviceLink(DeviceNo,LastTime,IsRelation) + values (#{deviceNo},#{lastTime},0) + - + - + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/resources/mapper/KqTemplateMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/KqTemplateMapper.xml index b0de398..30c2df8 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/KqTemplateMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/KqTemplateMapper.xml @@ -2,7 +2,7 @@ - + @@ -11,16 +11,17 @@ @@ -59,10 +60,10 @@ diff --git a/cloud/search_smartCampus/src/main/resources/mapper/RegisterPushMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/RegisterPushMapper.xml index 6d88799..8a79ca8 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/RegisterPushMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/RegisterPushMapper.xml @@ -1,50 +1,52 @@ - + - - - - - - - - - + + + + + + + + + - - - - + + + + - + SELECT SZ_V_School_Student.school_id , SZ_V_School_Student.ParentMobile FROM SZ_V_School_Student WHERE not + EXISTS + (SELECT NULL FROM SZ_V_School_Parent WHERE SZ_V_School_Parent.class_id = SZ_V_School_Student.class_id AND SZ_V_School_Parent.parent_mobile = SZ_V_School_Student.ParentMobile - ) - and school_id = #{schoolId} - + ) + and school_id = #{schoolId} + - + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml index b88749f..48dc42f 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml @@ -1,102 +1,107 @@ - - - - - - - - - - - - update HS_SchoolRelated set IsAllPush = 1 where SchoolId_XX = #{schoolId} - - - - - - - - - - - - - - - - - - - - - - - - - - update HS_TeaGroupUpdate set yxy_is_new = 1 where ID = #{id} - - - - update HS_StudentUpdateCard set Yxy_IsNew = 1 where ID = #{id} - - - - - - - - - - - - - - - - - insert into YXT_DeptRelation (hxyDeptId,yxyDeptId,usertype,updateTime,createTime,state) - values (#{hxyDeptId},#{yxyDeptId},#{userType},GETDATE(),GETDATE(),#{state}) - - - - update YXT_DeptRelation set updateTime = GETDATE() , state = #{state} where hxyDeptId = #{hxyDeptId} - - - - - - - insert into YXT_UserRelation (hxyCustomerId,yxyUserId,userType,updateTime,createTime,state) - values (#{hxyCustomerId},#{yxyUserId},#{userType},GETDATE(),GETDATE(),#{state}) - - - - update YXT_UserRelation set updateTime = GETDATE() , state = #{state} where hxyCustomerId = #{hxyCustomerId} - - - + + + + + + + + + + + + update HS_SchoolRelated set IsAllPush = 1 where SchoolId_XX = #{schoolId} + + + + + + + + + + + + + + + + + + + + + + + + + + update HS_TeaGroupUpdate set yxy_is_new = 1 where ID = #{id} + + + + update HS_StudentUpdateCard set Yxy_IsNew = 1 where ID = #{id} + + + + + + + + + + + + + + + + + insert into YXT_DeptRelation (hxyDeptId,yxyDeptId,usertype,updateTime,createTime,state) + values (#{hxyDeptId},#{yxyDeptId},#{userType},GETDATE(),GETDATE(),#{state}) + + + + update YXT_DeptRelation set updateTime = GETDATE() , state = #{state} where hxyDeptId = #{hxyDeptId} + + + + + + + insert into YXT_UserRelation (hxyCustomerId,yxyUserId,userType,updateTime,createTime,state) + values (#{hxyCustomerId},#{yxyUserId},#{userType},GETDATE(),GETDATE(),#{state}) + + + + update YXT_UserRelation set updateTime = GETDATE() , state = #{state} where hxyCustomerId = #{hxyCustomerId} + + + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolStudentMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolStudentMapper.xml index f98a0f9..d374c4b 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolStudentMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolStudentMapper.xml @@ -1,201 +1,201 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - insert into SZ_V_School_Student (school_id, class_id, student_id, - user_id, student_num, name, - num, photo, ismonitor, - class_state, role_state, modifystate, - mobile, class_name, student_type, - matrikelnummer, studentcode, sex, - ParentMobile, othername, activetime, - active, pass) - values (#{schoolId,jdbcType=INTEGER}, #{classId,jdbcType=INTEGER}, #{studentId,jdbcType=INTEGER}, - #{userId,jdbcType=VARCHAR}, #{studentNum,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, - #{num,jdbcType=VARCHAR}, #{photo,jdbcType=VARCHAR}, #{ismonitor,jdbcType=INTEGER}, - #{classState,jdbcType=INTEGER}, #{roleState,jdbcType=INTEGER}, #{modifystate,jdbcType=CHAR}, - #{mobile,jdbcType=VARCHAR}, #{className,jdbcType=VARCHAR}, #{studentType,jdbcType=INTEGER}, - #{matrikelnummer,jdbcType=VARCHAR}, #{studentcode,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, - #{parentmobile,jdbcType=VARCHAR}, #{othername,jdbcType=VARCHAR}, #{activetime,jdbcType=TIMESTAMP}, - #{active,jdbcType=INTEGER}, #{pass,jdbcType=VARCHAR}) - - - insert into SZ_V_School_Student - - - school_id, - - - class_id, - - - student_id, - - - user_id, - - - student_num, - - - name, - - - num, - - - photo, - - - ismonitor, - - - class_state, - - - role_state, - - - modifystate, - - - mobile, - - - class_name, - - - student_type, - - - matrikelnummer, - - - studentcode, - - - sex, - - - ParentMobile, - - - othername, - - - activetime, - - - active, - - - pass, - - - - - #{schoolId,jdbcType=INTEGER}, - - - #{classId,jdbcType=INTEGER}, - - - #{studentId,jdbcType=INTEGER}, - - - #{userId,jdbcType=VARCHAR}, - - - #{studentNum,jdbcType=VARCHAR}, - - - #{name,jdbcType=VARCHAR}, - - - #{num,jdbcType=VARCHAR}, - - - #{photo,jdbcType=VARCHAR}, - - - #{ismonitor,jdbcType=INTEGER}, - - - #{classState,jdbcType=INTEGER}, - - - #{roleState,jdbcType=INTEGER}, - - - #{modifystate,jdbcType=CHAR}, - - - #{mobile,jdbcType=VARCHAR}, - - - #{className,jdbcType=VARCHAR}, - - - #{studentType,jdbcType=INTEGER}, - - - #{matrikelnummer,jdbcType=VARCHAR}, - - - #{studentcode,jdbcType=VARCHAR}, - - - #{sex,jdbcType=VARCHAR}, - - - #{parentmobile,jdbcType=VARCHAR}, - - - #{othername,jdbcType=VARCHAR}, - - - #{activetime,jdbcType=TIMESTAMP}, - - - #{active,jdbcType=INTEGER}, - - - #{pass,jdbcType=VARCHAR}, - - - + + insert into SZ_V_School_Student (school_id, class_id, student_id, + user_id, student_num, name, + num, photo, ismonitor, + class_state, role_state, modifystate, + mobile, class_name, student_type, + matrikelnummer, studentcode, sex, + ParentMobile, othername, activetime, + active, pass) + values (#{schoolId,jdbcType=INTEGER}, #{classId,jdbcType=INTEGER}, #{studentId,jdbcType=INTEGER}, + #{userId,jdbcType=VARCHAR}, #{studentNum,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, + #{num,jdbcType=VARCHAR}, #{photo,jdbcType=VARCHAR}, #{ismonitor,jdbcType=INTEGER}, + #{classState,jdbcType=INTEGER}, #{roleState,jdbcType=INTEGER}, #{modifystate,jdbcType=CHAR}, + #{mobile,jdbcType=VARCHAR}, #{className,jdbcType=VARCHAR}, #{studentType,jdbcType=INTEGER}, + #{matrikelnummer,jdbcType=VARCHAR}, #{studentcode,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, + #{parentmobile,jdbcType=VARCHAR}, #{othername,jdbcType=VARCHAR}, #{activetime,jdbcType=TIMESTAMP}, + #{active,jdbcType=INTEGER}, #{pass,jdbcType=VARCHAR}) + + + insert into SZ_V_School_Student + + + school_id, + + + class_id, + + + student_id, + + + user_id, + + + student_num, + + + name, + + + num, + + + photo, + + + ismonitor, + + + class_state, + + + role_state, + + + modifystate, + + + mobile, + + + class_name, + + + student_type, + + + matrikelnummer, + + + studentcode, + + + sex, + + + ParentMobile, + + + othername, + + + activetime, + + + active, + + + pass, + + + + + #{schoolId,jdbcType=INTEGER}, + + + #{classId,jdbcType=INTEGER}, + + + #{studentId,jdbcType=INTEGER}, + + + #{userId,jdbcType=VARCHAR}, + + + #{studentNum,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{num,jdbcType=VARCHAR}, + + + #{photo,jdbcType=VARCHAR}, + + + #{ismonitor,jdbcType=INTEGER}, + + + #{classState,jdbcType=INTEGER}, + + + #{roleState,jdbcType=INTEGER}, + + + #{modifystate,jdbcType=CHAR}, + + + #{mobile,jdbcType=VARCHAR}, + + + #{className,jdbcType=VARCHAR}, + + + #{studentType,jdbcType=INTEGER}, + + + #{matrikelnummer,jdbcType=VARCHAR}, + + + #{studentcode,jdbcType=VARCHAR}, + + + #{sex,jdbcType=VARCHAR}, + + + #{parentmobile,jdbcType=VARCHAR}, + + + #{othername,jdbcType=VARCHAR}, + + + #{activetime,jdbcType=TIMESTAMP}, + + + #{active,jdbcType=INTEGER}, + + + #{pass,jdbcType=VARCHAR}, + + + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolTeacherMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolTeacherMapper.xml index 7b99280..d1c7ee8 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolTeacherMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/SzVSchoolTeacherMapper.xml @@ -1,155 +1,155 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - - insert into SZ_V_School_Teacher (school_id, class_id, teacher_id, - user_id, name, face, - num, teacher_num, teacher_mobile, - mobile, class_state, role_state, - IsKaoQin, OpenId, pass, - DingUserId, QiYeHaoUserId) - values (#{schoolId,jdbcType=INTEGER}, #{classId,jdbcType=INTEGER}, #{teacherId,jdbcType=INTEGER}, - #{userId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{face,jdbcType=VARCHAR}, - #{num,jdbcType=VARCHAR}, #{teacherNum,jdbcType=VARCHAR}, #{teacherMobile,jdbcType=VARCHAR}, - #{mobile,jdbcType=VARCHAR}, #{classState,jdbcType=INTEGER}, #{roleState,jdbcType=INTEGER}, - #{iskaoqin,jdbcType=INTEGER}, #{openid,jdbcType=VARCHAR}, #{pass,jdbcType=VARCHAR}, - #{dinguserid,jdbcType=VARCHAR}, #{qiyehaouserid,jdbcType=VARCHAR}) - - - insert into SZ_V_School_Teacher - - - school_id, - - - class_id, - - - teacher_id, - - - user_id, - - - name, - - - face, - - - num, - - - teacher_num, - - - teacher_mobile, - - - mobile, - - - class_state, - - - role_state, - - - IsKaoQin, - - - OpenId, - - - pass, - - - DingUserId, - - - QiYeHaoUserId, - - - - - #{schoolId,jdbcType=INTEGER}, - - - #{classId,jdbcType=INTEGER}, - - - #{teacherId,jdbcType=INTEGER}, - - - #{userId,jdbcType=VARCHAR}, - - - #{name,jdbcType=VARCHAR}, - - - #{face,jdbcType=VARCHAR}, - - - #{num,jdbcType=VARCHAR}, - - - #{teacherNum,jdbcType=VARCHAR}, - - - #{teacherMobile,jdbcType=VARCHAR}, - - - #{mobile,jdbcType=VARCHAR}, - - - #{classState,jdbcType=INTEGER}, - - - #{roleState,jdbcType=INTEGER}, - - - #{iskaoqin,jdbcType=INTEGER}, - - - #{openid,jdbcType=VARCHAR}, - - - #{pass,jdbcType=VARCHAR}, - - - #{dinguserid,jdbcType=VARCHAR}, - - - #{qiyehaouserid,jdbcType=VARCHAR}, - - - + + insert into SZ_V_School_Teacher (school_id, class_id, teacher_id, + user_id, name, face, + num, teacher_num, teacher_mobile, + mobile, class_state, role_state, + IsKaoQin, OpenId, pass, + DingUserId, QiYeHaoUserId) + values (#{schoolId,jdbcType=INTEGER}, #{classId,jdbcType=INTEGER}, #{teacherId,jdbcType=INTEGER}, + #{userId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{face,jdbcType=VARCHAR}, + #{num,jdbcType=VARCHAR}, #{teacherNum,jdbcType=VARCHAR}, #{teacherMobile,jdbcType=VARCHAR}, + #{mobile,jdbcType=VARCHAR}, #{classState,jdbcType=INTEGER}, #{roleState,jdbcType=INTEGER}, + #{iskaoqin,jdbcType=INTEGER}, #{openid,jdbcType=VARCHAR}, #{pass,jdbcType=VARCHAR}, + #{dinguserid,jdbcType=VARCHAR}, #{qiyehaouserid,jdbcType=VARCHAR}) + + + insert into SZ_V_School_Teacher + + + school_id, + + + class_id, + + + teacher_id, + + + user_id, + + + name, + + + face, + + + num, + + + teacher_num, + + + teacher_mobile, + + + mobile, + + + class_state, + + + role_state, + + + IsKaoQin, + + + OpenId, + + + pass, + + + DingUserId, + + + QiYeHaoUserId, + + + + + #{schoolId,jdbcType=INTEGER}, + + + #{classId,jdbcType=INTEGER}, + + + #{teacherId,jdbcType=INTEGER}, + + + #{userId,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{face,jdbcType=VARCHAR}, + + + #{num,jdbcType=VARCHAR}, + + + #{teacherNum,jdbcType=VARCHAR}, + + + #{teacherMobile,jdbcType=VARCHAR}, + + + #{mobile,jdbcType=VARCHAR}, + + + #{classState,jdbcType=INTEGER}, + + + #{roleState,jdbcType=INTEGER}, + + + #{iskaoqin,jdbcType=INTEGER}, + + + #{openid,jdbcType=VARCHAR}, + + + #{pass,jdbcType=VARCHAR}, + + + #{dinguserid,jdbcType=VARCHAR}, + + + #{qiyehaouserid,jdbcType=VARCHAR}, + + + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml index 394226c..8403aab 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml @@ -1,9 +1,9 @@ - + - select student_num from SZ_V_School_Student where student_id = #{studentId} - + \ No newline at end of file diff --git a/cloud/search_smartCampus/src/main/resources/mapper/WgUserSearchMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/WgUserSearchMapper.xml index 6d20256..e819925 100644 --- a/cloud/search_smartCampus/src/main/resources/mapper/WgUserSearchMapper.xml +++ b/cloud/search_smartCampus/src/main/resources/mapper/WgUserSearchMapper.xml @@ -1,55 +1,55 @@ - + + - - - - - - + + + + + - select school_id , school_name , manageuser_id from SZ_School where school_id = #{schoolId} - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - + + + + \ No newline at end of file diff --git a/cloud/server1/src/main/java/com/sincere/server1/FileUtils.java b/cloud/server1/src/main/java/com/sincere/server1/FileUtils.java index 327b2fb..e246e91 100644 --- a/cloud/server1/src/main/java/com/sincere/server1/FileUtils.java +++ b/cloud/server1/src/main/java/com/sincere/server1/FileUtils.java @@ -12,7 +12,7 @@ public class FileUtils { public static String checkFail = "检测失败.txt"; public static String checkSuc = "检测成功.txt"; - public static String device_login="设备登录id.txt"; + public static String device_login = "设备登录id.txt"; private static FileUtils fileUtils; private String filePath = "./log/";//日志记录目录 @@ -57,10 +57,10 @@ public class FileUtils { String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); - File path = new File(filePath+date); - if (!path.exists())path.mkdirs(); + File path = new File(filePath + date); + if (!path.exists()) path.mkdirs(); - File logPath = new File(filePath+date, fileName); + File logPath = new File(filePath + date, fileName); try { // System.out.println("logPath:" + logPath.getAbsolutePath()); diff --git a/cloud/server1/src/main/java/com/sincere/server1/listener/EurekaInstanceCanceledListener.java b/cloud/server1/src/main/java/com/sincere/server1/listener/EurekaInstanceCanceledListener.java index 523796e..a57b360 100644 --- a/cloud/server1/src/main/java/com/sincere/server1/listener/EurekaInstanceCanceledListener.java +++ b/cloud/server1/src/main/java/com/sincere/server1/listener/EurekaInstanceCanceledListener.java @@ -38,7 +38,7 @@ public class EurekaInstanceCanceledListener implements ApplicationListener { if (null != instance && instance.getInstanceId().equals(event.getServerId())) { System.out.println("服务:" + instance.getAppName() + " 挂啦。。。"); // // TODO: 2017/9/3 扩展消息提醒 邮件、手机短信、微信等 - FileUtils.getInstance().writeLogs("服务:" + instance.getAppName() + " 挂啦。。。","服务监控"); + FileUtils.getInstance().writeLogs("服务:" + instance.getAppName() + " 挂啦。。。", "服务监控"); } }); @@ -50,23 +50,23 @@ public class EurekaInstanceCanceledListener implements ApplicationListener { if (applicationEvent instanceof EurekaInstanceRegisteredEvent) { EurekaInstanceRegisteredEvent event = (EurekaInstanceRegisteredEvent) applicationEvent; - if (null!=event){ + if (null != event) { System.out.println("服务:" + event.getInstanceInfo().getAppName() + " 注册成功啦。。。"); - FileUtils.getInstance().writeLogs("服务:" +event.getInstanceInfo().getAppName() + " 注册成功啦。。。","服务注册监控"); - }else System.out.println("服务EurekaInstanceRegisteredEvent"); + FileUtils.getInstance().writeLogs("服务:" + event.getInstanceInfo().getAppName() + " 注册成功啦。。。", "服务注册监控"); + } else System.out.println("服务EurekaInstanceRegisteredEvent"); } if (applicationEvent instanceof EurekaInstanceRenewedEvent) { EurekaInstanceRenewedEvent event = (EurekaInstanceRenewedEvent) applicationEvent; - if (null!=event){ + if (null != event) { System.out.println("心跳检测服务:" + event.getInstanceInfo().getAppName() + "。。"); - FileUtils.getInstance().writeLogs("心跳检测服务:" +event.getInstanceInfo().getAppName() + "。。","服务心跳监控"); - }else { + FileUtils.getInstance().writeLogs("心跳检测服务:" + event.getInstanceInfo().getAppName() + "。。", "服务心跳监控"); + } else { System.out.println("心跳检测服务EurekaInstanceRenewedEvent"); } } if (applicationEvent instanceof EurekaRegistryAvailableEvent) { System.out.println("服务 Aualiable。。"); - FileUtils.getInstance().writeLogs("服务 Aualiable。。","服务Aualiable"); + FileUtils.getInstance().writeLogs("服务 Aualiable。。", "服务Aualiable"); } } diff --git a/cloud/server1/src/main/resources/bootstrap.yml b/cloud/server1/src/main/resources/bootstrap.yml index 2dca0e9..13010df 100644 --- a/cloud/server1/src/main/resources/bootstrap.yml +++ b/cloud/server1/src/main/resources/bootstrap.yml @@ -6,10 +6,10 @@ server: #服务名称 spring: application: - name: eureka-server1 + name: eureka-server1 main: - allow-bean-definition-overriding: true - + allow-bean-definition-overriding: true + management: endpoints: diff --git a/cloud/server1/src/main/view/templates/eureka/header.ftl b/cloud/server1/src/main/view/templates/eureka/header.ftl index d6584bd..68bc87a 100644 --- a/cloud/server1/src/main/view/templates/eureka/header.ftl +++ b/cloud/server1/src/main/view/templates/eureka/header.ftl @@ -1,26 +1,27 @@ <#import "/spring.ftl" as spring /> - diff --git a/cloud/server1/src/main/view/templates/eureka/lastn.ftl b/cloud/server1/src/main/view/templates/eureka/lastn.ftl index 8ee23d1..22afcf9 100644 --- a/cloud/server1/src/main/view/templates/eureka/lastn.ftl +++ b/cloud/server1/src/main/view/templates/eureka/lastn.ftl @@ -3,69 +3,86 @@ - - + + + 注册中心-事件 - - + + - + - <#include "header.ftl"> +<#include "header.ftl"> -
- <#include "navbar.ftl"> +
+ <#include "navbar.ftl">
-
- - - - - - <#if lastNCanceled?has_content> - <#list lastNCanceled as entry> - - - <#else> - - - -
租约时间戳
${entry.date?datetime}${entry.id}
没有可用的资源
-
-
- - - - - - <#if lastNRegistered?has_content> - <#list lastNRegistered as entry> - - - <#else> - - - -
租约时间戳
${entry.date?datetime}${entry.id}
没有可用的资源
-
-
+
+ + + + + + + + + <#if lastNCanceled?has_content> + <#list lastNCanceled as entry> + + + + + + <#else> + + + + + +
租约时间戳
${entry.date?datetime}${entry.id}
没有可用的资源
+
+
+ + + + + + + + + <#if lastNRegistered?has_content> + <#list lastNRegistered as entry> + + + + + + <#else> + + + + + +
租约时间戳
${entry.date?datetime}${entry.id}
没有可用的资源
+
+
-
- - + - + }) + + diff --git a/cloud/server1/src/main/view/templates/eureka/navbar.ftl b/cloud/server1/src/main/view/templates/eureka/navbar.ftl index a4f7eb2..92a42a4 100644 --- a/cloud/server1/src/main/view/templates/eureka/navbar.ftl +++ b/cloud/server1/src/main/view/templates/eureka/navbar.ftl @@ -1,62 +1,63 @@

系统状态

-
- - <#if amazonInfo??> - - - - - - - - - - - - - - - - - - - - - -
服务注册和发现AMI: ${amiId!}
空间${availabilityZone!}
示例Id${instanceId!}
环境${environment!}
数据中心${datacenter!}
-
-
- - - - - - - - - - - - - - - - - - - - - -
当前时间${currentTime}
运行${upTime}
启用租约到期时间${registry.leaseExpirationEnabled?c}
续订阈值${registry.numOfRenewsPerMinThreshold}
续订 (最后一分钟)${registry.numOfRenewsInLastMin}
-
+
+ + <#if amazonInfo??> + + + + + + + + + + + + + + + + + + + + + +
服务注册和发现AMI: ${amiId!}
空间${availabilityZone!}
示例Id${instanceId!}
环境${environment!}
数据中心${datacenter!}
+
+
+ + + + + + + + + + + + + + + + + + + + + +
当前时间${currentTime}
运行${upTime}
启用租约到期时间${registry.leaseExpirationEnabled?c}
续订阈值${registry.numOfRenewsPerMinThreshold}
续订 (最后一分钟)${registry.numOfRenewsInLastMin}
+
<#if isBelowRenewThresold> <#if !registry.selfPreservationModeEnabled>

续订小于阈值。自保存模式已关闭。如果出现网络/其他问题, 这可能不会保护实例过期。

<#else> -

紧急!注册中心可能不正确地验证身份, 当他们没有的情况下。续订小于阈值, 因此实例不会过期, 只是为了安全起见。

+

紧急!注册中心可能不正确地验证身份, 当他们没有的情况下。续订小于阈值, 因此实例不会过期, + 只是为了安全起见。

<#elseif !registry.selfPreservationModeEnabled>

自保存模式已关闭。如果出现网络/其他问题, 这可能不会保护实例过期。

@@ -64,8 +65,8 @@

服务副本

diff --git a/cloud/server1/src/main/view/templates/eureka/status.ftl b/cloud/server1/src/main/view/templates/eureka/status.ftl index 41027eb..23240f3 100644 --- a/cloud/server1/src/main/view/templates/eureka/status.ftl +++ b/cloud/server1/src/main/view/templates/eureka/status.ftl @@ -3,8 +3,9 @@ - - + + + @@ -14,100 +15,116 @@ - + - - <#include "header.ftl"> -
- <#include "navbar.ftl"> -

当前注册的服务实例

- - - + +<#include "header.ftl"> +
+ <#include "navbar.ftl"> +

当前注册的服务实例

+
应用申请可用性区域状态
+ + + + + + + - <#if apps?has_content> + <#if apps?has_content> <#list apps as app> - - - - - - + + + + + + - <#else> - - + <#else> + + + + -
应用申请可用性区域状态
${app.name} - <#list app.amiCounts as amiCount> - ${amiCount.key} (${amiCount.value})<#if amiCount_has_next>, - - - <#list app.zoneCounts as zoneCount> - ${zoneCount.key} (${zoneCount.value})<#if zoneCount_has_next>, - - - <#list app.instanceInfos as instanceInfo> - <#if instanceInfo.isNotUp> - - - ${instanceInfo.status} (${instanceInfo.instances?size}) - - <#if instanceInfo.isNotUp> - - - <#list instanceInfo.instances as instance> - <#if instance.isHref> - ${instance.id} - <#else> - ${instance.id} - <#if instance_has_next>, - - -
${app.name} + <#list app.amiCounts as amiCount> + ${amiCount.key} (${amiCount.value})<#if amiCount_has_next>, + + + <#list app.zoneCounts as zoneCount> + ${zoneCount.key} (${zoneCount.value})<#if zoneCount_has_next>, + + + <#list app.instanceInfos as instanceInfo> + <#if instanceInfo.isNotUp> + + + ${instanceInfo.status} (${instanceInfo.instances?size}) - + <#if instanceInfo.isNotUp> + + + <#list instanceInfo.instances as instance> + <#if instance.isHref> + ${instance.id} + <#else> + ${instance.id} + <#if instance_has_next>, + + +
没有可用的实例
没有可用的实例
+ -

一般信息

+

一般信息

- +
- + + + + - <#list statusInfo.generalStats?keys as stat> + <#list statusInfo.generalStats?keys as stat> - + + - - <#list statusInfo.applicationStats?keys as stat> + + <#list statusInfo.applicationStats?keys as stat> - + + - + -
名称
名称
${stat}${statusInfo.generalStats[stat]!""}${stat}${statusInfo.generalStats[stat]!""}
${stat}${statusInfo.applicationStats[stat]!""}${stat}${statusInfo.applicationStats[stat]!""}
+ -

示例信息

+

示例信息

- +
- + + + + - <#list instanceInfo?keys as key> + <#list instanceInfo?keys as key> - + + - + -
名称
名称
${key}${instanceInfo[key]!""}${key}${instanceInfo[key]!""}
-
- - - + + + + + diff --git a/cloud/server2/src/main/java/com/sincere/server2/FileUtils.java b/cloud/server2/src/main/java/com/sincere/server2/FileUtils.java index 6bf042d..766bd02 100644 --- a/cloud/server2/src/main/java/com/sincere/server2/FileUtils.java +++ b/cloud/server2/src/main/java/com/sincere/server2/FileUtils.java @@ -12,7 +12,7 @@ public class FileUtils { public static String checkFail = "检测失败.txt"; public static String checkSuc = "检测成功.txt"; - public static String device_login="设备登录id.txt"; + public static String device_login = "设备登录id.txt"; private static FileUtils fileUtils; private String filePath = "./log/";//日志记录目录 @@ -57,10 +57,10 @@ public class FileUtils { String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); - File path = new File(filePath+date); - if (!path.exists())path.mkdirs(); + File path = new File(filePath + date); + if (!path.exists()) path.mkdirs(); - File logPath = new File(filePath+date, fileName); + File logPath = new File(filePath + date, fileName); try { // System.out.println("logPath:" + logPath.getAbsolutePath()); diff --git a/cloud/server2/src/main/java/com/sincere/server2/listener/EurekaInstanceCanceledListener.java b/cloud/server2/src/main/java/com/sincere/server2/listener/EurekaInstanceCanceledListener.java index f937f3e..f2beddb 100644 --- a/cloud/server2/src/main/java/com/sincere/server2/listener/EurekaInstanceCanceledListener.java +++ b/cloud/server2/src/main/java/com/sincere/server2/listener/EurekaInstanceCanceledListener.java @@ -38,7 +38,7 @@ public class EurekaInstanceCanceledListener implements ApplicationListener { if (null != instance && instance.getInstanceId().equals(event.getServerId())) { System.out.println("服务:" + instance.getAppName() + " 挂啦。。。"); // // TODO: 2017/9/3 扩展消息提醒 邮件、手机短信、微信等 - FileUtils.getInstance().writeLogs("服务:" + instance.getAppName() + " 挂啦。。。","服务监控"); + FileUtils.getInstance().writeLogs("服务:" + instance.getAppName() + " 挂啦。。。", "服务监控"); } }); @@ -50,23 +50,23 @@ public class EurekaInstanceCanceledListener implements ApplicationListener { if (applicationEvent instanceof EurekaInstanceRegisteredEvent) { EurekaInstanceRegisteredEvent event = (EurekaInstanceRegisteredEvent) applicationEvent; - if (null!=event){ + if (null != event) { System.out.println("服务:" + event.getInstanceInfo().getAppName() + " 注册成功啦。。。"); - FileUtils.getInstance().writeLogs("服务:" +event.getInstanceInfo().getAppName() + " 注册成功啦。。。","服务注册监控"); - }else System.out.println("服务EurekaInstanceRegisteredEvent"); + FileUtils.getInstance().writeLogs("服务:" + event.getInstanceInfo().getAppName() + " 注册成功啦。。。", "服务注册监控"); + } else System.out.println("服务EurekaInstanceRegisteredEvent"); } if (applicationEvent instanceof EurekaInstanceRenewedEvent) { EurekaInstanceRenewedEvent event = (EurekaInstanceRenewedEvent) applicationEvent; - if (null!=event){ + if (null != event) { System.out.println("心跳检测服务:" + event.getInstanceInfo().getAppName() + "。。"); - FileUtils.getInstance().writeLogs("心跳检测服务:" +event.getInstanceInfo().getAppName() + "。。","服务心跳监控"); - }else { + FileUtils.getInstance().writeLogs("心跳检测服务:" + event.getInstanceInfo().getAppName() + "。。", "服务心跳监控"); + } else { System.out.println("心跳检测服务EurekaInstanceRenewedEvent"); } } if (applicationEvent instanceof EurekaRegistryAvailableEvent) { System.out.println("服务 Aualiable。。"); - FileUtils.getInstance().writeLogs("服务 Aualiable。。","服务Aualiable"); + FileUtils.getInstance().writeLogs("服务 Aualiable。。", "服务Aualiable"); } } diff --git a/cloud/server2/src/main/resources/bootstrap.yml b/cloud/server2/src/main/resources/bootstrap.yml index 1e9132d..8e411ac 100644 --- a/cloud/server2/src/main/resources/bootstrap.yml +++ b/cloud/server2/src/main/resources/bootstrap.yml @@ -6,10 +6,10 @@ server: #服务名称 spring: application: - name: eureka-server2 + name: eureka-server2 main: - allow-bean-definition-overriding: true - + allow-bean-definition-overriding: true + management: endpoints: diff --git a/cloud/server2/src/main/view/templates/eureka/header.ftl b/cloud/server2/src/main/view/templates/eureka/header.ftl index d6584bd..68bc87a 100644 --- a/cloud/server2/src/main/view/templates/eureka/header.ftl +++ b/cloud/server2/src/main/view/templates/eureka/header.ftl @@ -1,26 +1,27 @@ <#import "/spring.ftl" as spring /> - diff --git a/cloud/server2/src/main/view/templates/eureka/lastn.ftl b/cloud/server2/src/main/view/templates/eureka/lastn.ftl index 8ee23d1..22afcf9 100644 --- a/cloud/server2/src/main/view/templates/eureka/lastn.ftl +++ b/cloud/server2/src/main/view/templates/eureka/lastn.ftl @@ -3,69 +3,86 @@ - - + + + 注册中心-事件 - - + + - + - <#include "header.ftl"> +<#include "header.ftl"> -
- <#include "navbar.ftl"> +
+ <#include "navbar.ftl">
-
- - - - - - <#if lastNCanceled?has_content> - <#list lastNCanceled as entry> - - - <#else> - - - -
租约时间戳
${entry.date?datetime}${entry.id}
没有可用的资源
-
-
- - - - - - <#if lastNRegistered?has_content> - <#list lastNRegistered as entry> - - - <#else> - - - -
租约时间戳
${entry.date?datetime}${entry.id}
没有可用的资源
-
-
+
+ + + + + + + + + <#if lastNCanceled?has_content> + <#list lastNCanceled as entry> + + + + + + <#else> + + + + + +
租约时间戳
${entry.date?datetime}${entry.id}
没有可用的资源
+
+
+ + + + + + + + + <#if lastNRegistered?has_content> + <#list lastNRegistered as entry> + + + + + + <#else> + + + + + +
租约时间戳
${entry.date?datetime}${entry.id}
没有可用的资源
+
+
-
- - + - + }) + + diff --git a/cloud/server2/src/main/view/templates/eureka/navbar.ftl b/cloud/server2/src/main/view/templates/eureka/navbar.ftl index a4f7eb2..92a42a4 100644 --- a/cloud/server2/src/main/view/templates/eureka/navbar.ftl +++ b/cloud/server2/src/main/view/templates/eureka/navbar.ftl @@ -1,62 +1,63 @@

系统状态

-
- - <#if amazonInfo??> - - - - - - - - - - - - - - - - - - - - - -
服务注册和发现AMI: ${amiId!}
空间${availabilityZone!}
示例Id${instanceId!}
环境${environment!}
数据中心${datacenter!}
-
-
- - - - - - - - - - - - - - - - - - - - - -
当前时间${currentTime}
运行${upTime}
启用租约到期时间${registry.leaseExpirationEnabled?c}
续订阈值${registry.numOfRenewsPerMinThreshold}
续订 (最后一分钟)${registry.numOfRenewsInLastMin}
-
+
+ + <#if amazonInfo??> + + + + + + + + + + + + + + + + + + + + + +
服务注册和发现AMI: ${amiId!}
空间${availabilityZone!}
示例Id${instanceId!}
环境${environment!}
数据中心${datacenter!}
+
+
+ + + + + + + + + + + + + + + + + + + + + +
当前时间${currentTime}
运行${upTime}
启用租约到期时间${registry.leaseExpirationEnabled?c}
续订阈值${registry.numOfRenewsPerMinThreshold}
续订 (最后一分钟)${registry.numOfRenewsInLastMin}
+
<#if isBelowRenewThresold> <#if !registry.selfPreservationModeEnabled>

续订小于阈值。自保存模式已关闭。如果出现网络/其他问题, 这可能不会保护实例过期。

<#else> -

紧急!注册中心可能不正确地验证身份, 当他们没有的情况下。续订小于阈值, 因此实例不会过期, 只是为了安全起见。

+

紧急!注册中心可能不正确地验证身份, 当他们没有的情况下。续订小于阈值, 因此实例不会过期, + 只是为了安全起见。

<#elseif !registry.selfPreservationModeEnabled>

自保存模式已关闭。如果出现网络/其他问题, 这可能不会保护实例过期。

@@ -64,8 +65,8 @@

服务副本

diff --git a/cloud/server2/src/main/view/templates/eureka/status.ftl b/cloud/server2/src/main/view/templates/eureka/status.ftl index 41027eb..23240f3 100644 --- a/cloud/server2/src/main/view/templates/eureka/status.ftl +++ b/cloud/server2/src/main/view/templates/eureka/status.ftl @@ -3,8 +3,9 @@ - - + + + @@ -14,100 +15,116 @@ - + - - <#include "header.ftl"> -
- <#include "navbar.ftl"> -

当前注册的服务实例

- - - + +<#include "header.ftl"> +
+ <#include "navbar.ftl"> +

当前注册的服务实例

+
应用申请可用性区域状态
+ + + + + + + - <#if apps?has_content> + <#if apps?has_content> <#list apps as app> - - - - - - + + + + + + - <#else> - - + <#else> + + + + -
应用申请可用性区域状态
${app.name} - <#list app.amiCounts as amiCount> - ${amiCount.key} (${amiCount.value})<#if amiCount_has_next>, - - - <#list app.zoneCounts as zoneCount> - ${zoneCount.key} (${zoneCount.value})<#if zoneCount_has_next>, - - - <#list app.instanceInfos as instanceInfo> - <#if instanceInfo.isNotUp> - - - ${instanceInfo.status} (${instanceInfo.instances?size}) - - <#if instanceInfo.isNotUp> - - - <#list instanceInfo.instances as instance> - <#if instance.isHref> - ${instance.id} - <#else> - ${instance.id} - <#if instance_has_next>, - - -
${app.name} + <#list app.amiCounts as amiCount> + ${amiCount.key} (${amiCount.value})<#if amiCount_has_next>, + + + <#list app.zoneCounts as zoneCount> + ${zoneCount.key} (${zoneCount.value})<#if zoneCount_has_next>, + + + <#list app.instanceInfos as instanceInfo> + <#if instanceInfo.isNotUp> + + + ${instanceInfo.status} (${instanceInfo.instances?size}) - + <#if instanceInfo.isNotUp> + + + <#list instanceInfo.instances as instance> + <#if instance.isHref> + ${instance.id} + <#else> + ${instance.id} + <#if instance_has_next>, + + +
没有可用的实例
没有可用的实例
+ -

一般信息

+

一般信息

- +
- + + + + - <#list statusInfo.generalStats?keys as stat> + <#list statusInfo.generalStats?keys as stat> - + + - - <#list statusInfo.applicationStats?keys as stat> + + <#list statusInfo.applicationStats?keys as stat> - + + - + -
名称
名称
${stat}${statusInfo.generalStats[stat]!""}${stat}${statusInfo.generalStats[stat]!""}
${stat}${statusInfo.applicationStats[stat]!""}${stat}${statusInfo.applicationStats[stat]!""}
+ -

示例信息

+

示例信息

- +
- + + + + - <#list instanceInfo?keys as key> + <#list instanceInfo?keys as key> - + + - + -
名称
名称
${key}${instanceInfo[key]!""}${key}${instanceInfo[key]!""}
-
- - - + + + + + diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/Swagger2.java b/cloud/user_search/src/main/java/com/sincere/userSearch/Swagger2.java index 9d4bbe8..7709175 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/Swagger2.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/Swagger2.java @@ -22,7 +22,7 @@ import java.util.List; public class Swagger2 { @Bean - public Docket createRestApi() { + public Docket createRestApi() { ParameterBuilder ticketPar = new ParameterBuilder(); List pars = new ArrayList(); ticketPar.name("X-Authorization").description("user token") @@ -41,12 +41,13 @@ public class Swagger2 { .build().globalOperationParameters(pars); } - private ApiInfo apiInfo() { + + private ApiInfo apiInfo() { return new ApiInfoBuilder() - .title("Spring Boot中使用Swagger2构建RESTful APIs") - .description("接口文档") - .termsOfServiceUrl("") + .title("Spring Boot中使用Swagger2构建RESTful APIs") + .description("接口文档") + .termsOfServiceUrl("") .version("1.0") - .build(); - } + .build(); + } } diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/access/MemberFilter.java b/cloud/user_search/src/main/java/com/sincere/userSearch/access/MemberFilter.java index ca6f839..e3a83dd 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/access/MemberFilter.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/access/MemberFilter.java @@ -13,26 +13,26 @@ import java.io.IOException; @WebFilter(urlPatterns = "/user/*") public class MemberFilter implements Filter { - private static String token_string = "X-Authorization" ; + private static String token_string = "X-Authorization"; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper(req); - UserInfo userInfo = new UserInfo() ; + UserInfo userInfo = new UserInfo(); String token = req.getHeader(token_string); if (StringUtils.isNotBlank(token)) { - try{ + try { String userId = TokenUtils.validToken(token); userInfo.setUserId(userId); requestWrapper.addObject(userInfo); chain.doFilter(requestWrapper, response); - }catch (ResultException e){ + } catch (ResultException e) { chain.doFilter(requestWrapper, response); } - }else { + } else { chain.doFilter(requestWrapper, response); } } diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/access/ParameterRequestWrapper.java b/cloud/user_search/src/main/java/com/sincere/userSearch/access/ParameterRequestWrapper.java index 8191811..276562e 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/access/ParameterRequestWrapper.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/access/ParameterRequestWrapper.java @@ -13,7 +13,7 @@ import java.util.*; */ public class ParameterRequestWrapper extends HttpServletRequestWrapper { - private Map params = new HashMap(); + private Map params = new HashMap(); @SuppressWarnings("unchecked") @@ -23,8 +23,9 @@ public class ParameterRequestWrapper extends HttpServletRequestWrapper { //将参数表,赋予给当前的Map以便于持有request中的参数 this.params.putAll(request.getParameterMap()); } + //重载一个构造方法 - public ParameterRequestWrapper(HttpServletRequest request , Map extendParams) { + public ParameterRequestWrapper(HttpServletRequest request, Map extendParams) { this(request); addAllParameters(extendParams);//这里将扩展参数写入参数表 } @@ -68,32 +69,34 @@ public class ParameterRequestWrapper extends HttpServletRequestWrapper { } else if (v instanceof String[]) { return (String[]) v; } else if (v instanceof String) { - return new String[] { (String) v }; + return new String[]{(String) v}; } else { - return new String[] { v.toString() }; + return new String[]{v.toString()}; } } - public void addAllParameters(MapotherParams) {//增加多个参数 - for(Map.Entryentry : otherParams.entrySet()) { - addParameter(entry.getKey() , entry.getValue()); + public void addAllParameters(Map otherParams) {//增加多个参数 + for (Map.Entry entry : otherParams.entrySet()) { + addParameter(entry.getKey(), entry.getValue()); } } - public void addParameter(String name , Object value) {//增加参数 - if(value != null) { - if(value instanceof String[]) { - params.put(name , (String[])value); - }else if(value instanceof String) { - params.put(name , new String[] {(String)value}); - }else { - params.put(name , new String[] {String.valueOf(value)}); + public void addParameter(String name, Object value) {//增加参数 + if (value != null) { + if (value instanceof String[]) { + params.put(name, (String[]) value); + } else if (value instanceof String) { + params.put(name, new String[]{(String) value}); + } else { + params.put(name, new String[]{String.valueOf(value)}); } } } - /** 简单封装,请根据需求改进 */ + /** + * 简单封装,请根据需求改进 + */ public void addObject(Object obj) { Class clazz = obj.getClass(); Method[] methods = clazz.getMethods(); diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/controller/UserController.java b/cloud/user_search/src/main/java/com/sincere/userSearch/controller/UserController.java index 019b7be..92ee8ae 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/controller/UserController.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/controller/UserController.java @@ -25,54 +25,54 @@ import java.util.List; public class UserController { @Autowired - UserService userService ; + UserService userService; /** * 获取钉钉angenId的接口 EM_QYHApply */ @ApiOperation("获取智能校卫agentid") - @RequestMapping(value = "getZNXWWebApp" , method = RequestMethod.POST) - public BaseVo getZNXWWebApp(@RequestBody ZnxwReqVo znxwReqVo){ - BaseVo result = new BaseVo<>() ; - ZnxwRepVo data = userService.selectAgentId(znxwReqVo) ; + @RequestMapping(value = "getZNXWWebApp", method = RequestMethod.POST) + public BaseVo getZNXWWebApp(@RequestBody ZnxwReqVo znxwReqVo) { + BaseVo result = new BaseVo<>(); + ZnxwRepVo data = userService.selectAgentId(znxwReqVo); result.setData(data); - return result ; + return result; } /** * 用户类型 0-班主任; 1-任课老师; 2-学生; 3-家长; 10-学校管理员; */ @ApiOperation("根据userId 获取用户信息") - @RequestMapping(value = "getUserInfo" , method = RequestMethod.POST) - public BaseVo getUserInfo(@RequestBody UserInfoReqVo userInfoReqVo , HttpServletRequest request){ - String userId = getToken(request) ; - BaseVo result = new BaseVo<>() ; - Info info = new Info() ; - if(userInfoReqVo.getUserType() == 2){ + @RequestMapping(value = "getUserInfo", method = RequestMethod.POST) + public BaseVo getUserInfo(@RequestBody UserInfoReqVo userInfoReqVo, HttpServletRequest request) { + String userId = getToken(request); + BaseVo result = new BaseVo<>(); + Info info = new Info(); + if (userInfoReqVo.getUserType() == 2) { //学生 List studentInfos = new ArrayList<>(); studentInfos.add(userService.selectStudentInfo(userId)); info.setStudentInfos(studentInfos); - }else if(userInfoReqVo.getUserType() == 3){ + } else if (userInfoReqVo.getUserType() == 3) { //家长 info.setParentInfos(userService.selectParentInfo(userId)); - }else { + } else { //教师 info.setTeacherInfos(userService.selectTeacherInfo(userId)); } result.setData(info); - return result ; + return result; } - private String getToken(HttpServletRequest request){ + private String getToken(HttpServletRequest request) { String token = request.getHeader("X-Authorization"); - try{ - String userId = TokenUtils.validToken(token) ; - return userId ; - }catch (ResultException e){ + try { + String userId = TokenUtils.validToken(token); + return userId; + } catch (ResultException e) { System.out.println(e.getMessage()); } - return null ; + return null; } } diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/mapper/UserMapper.java b/cloud/user_search/src/main/java/com/sincere/userSearch/mapper/UserMapper.java index 9a9ae28..3fb474c 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/mapper/UserMapper.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/mapper/UserMapper.java @@ -8,13 +8,13 @@ import java.util.List; public interface UserMapper { - List selectTeacherInfo(String userId) ; + List selectTeacherInfo(String userId); - StudentInfo selectStudentInfo(String userId) ; + StudentInfo selectStudentInfo(String userId); - StudentInfo selectParentInfo(int studentId) ; + StudentInfo selectParentInfo(int studentId); - List selectChildrenId(String userId) ; + List selectChildrenId(String userId); List selectTeacherGroup(Integer teacherId); } diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/model/StudentInfo.java b/cloud/user_search/src/main/java/com/sincere/userSearch/model/StudentInfo.java index db1321d..efc82ac 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/model/StudentInfo.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/model/StudentInfo.java @@ -2,22 +2,22 @@ package com.sincere.userSearch.model; public class StudentInfo { - private String userId ; - private int studentId ; - private String studentName ; - private int schoolId ; - private String schoolName ; - private String face ; - private String pass ; - private String otherName ; - private String studentCode ; - private int classId ; - private String className ; - - private String parentUserId ; - private String parentMobile ; - private String parentPass ; - private String parentName ; + private String userId; + private int studentId; + private String studentName; + private int schoolId; + private String schoolName; + private String face; + private String pass; + private String otherName; + private String studentCode; + private int classId; + private String className; + + private String parentUserId; + private String parentMobile; + private String parentPass; + private String parentName; public String getUserId() { return userId; diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherClassInfo.java b/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherClassInfo.java index df97bbe..63750c5 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherClassInfo.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherClassInfo.java @@ -2,14 +2,14 @@ package com.sincere.userSearch.model; public class TeacherClassInfo { - private int classId ; - private String className ; - private String subjectId ; - private String subjectName ; - private int userType ; - private int teacherId ; - private String grade ; - private String gradeName ; + private int classId; + private String className; + private String subjectId; + private String subjectName; + private int userType; + private int teacherId; + private String grade; + private String gradeName; public int getClassId() { return classId; diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherGroup.java b/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherGroup.java index 5b02958..c82d04f 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherGroup.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherGroup.java @@ -2,8 +2,8 @@ package com.sincere.userSearch.model; public class TeacherGroup { - private String num ; - private String groupName ; + private String num; + private String groupName; public String getNum() { return num; diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherInfo.java b/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherInfo.java index 88d160c..1310303 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherInfo.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/model/TeacherInfo.java @@ -4,18 +4,18 @@ import java.util.List; public class TeacherInfo { - private String userId ; - private int sex ; - private String userName ; - private String mobile ; - private int schoolId ; - private String schoolName ; - private String face ; - private String pass ; - private List userTypes ; - private String teacherNum ; - private List groups ; - private List classInfos ; + private String userId; + private int sex; + private String userName; + private String mobile; + private int schoolId; + private String schoolName; + private String face; + private String pass; + private List userTypes; + private String teacherNum; + private List groups; + private List classInfos; public int getSex() { return sex; diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/service/UserService.java b/cloud/user_search/src/main/java/com/sincere/userSearch/service/UserService.java index 6ce9c18..3e77a49 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/service/UserService.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/service/UserService.java @@ -11,10 +11,10 @@ public interface UserService { ZnxwRepVo selectAgentId(ZnxwReqVo znxwReqVo); - List selectTeacherInfo(String userId) ; + List selectTeacherInfo(String userId); - StudentInfo selectStudentInfo(String userId) ; + StudentInfo selectStudentInfo(String userId); - List selectParentInfo(String userId) ; + List selectParentInfo(String userId); } diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/service/impl/UserServiceImpl.java b/cloud/user_search/src/main/java/com/sincere/userSearch/service/impl/UserServiceImpl.java index a55559f..5495b10 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/service/impl/UserServiceImpl.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/service/impl/UserServiceImpl.java @@ -20,10 +20,10 @@ import java.util.List; public class UserServiceImpl implements UserService { @Autowired - QyhApplyMapper qyhApplyMapper ; + QyhApplyMapper qyhApplyMapper; @Autowired - UserMapper userMapper ; + UserMapper userMapper; @Override public ZnxwRepVo selectAgentId(ZnxwReqVo znxwReqVo) { @@ -33,59 +33,59 @@ public class UserServiceImpl implements UserService { @Override public List selectTeacherInfo(String userId) { List teacherInfos = userMapper.selectTeacherInfo(userId); - for(TeacherInfo teacherInfo : teacherInfos ){ - List teacherClassInfos = new ArrayList<>() ; - for(TeacherClassInfo classInfo : teacherInfo.getClassInfos()){ - if(classInfo.getClassId() != 0){ + for (TeacherInfo teacherInfo : teacherInfos) { + List teacherClassInfos = new ArrayList<>(); + for (TeacherClassInfo classInfo : teacherInfo.getClassInfos()) { + if (classInfo.getClassId() != 0) { teacherClassInfos.add(classInfo); } } List userTypes = new ArrayList<>(); - for(TeacherClassInfo info : teacherClassInfos){ - if(!userTypes.contains(info.getUserType())){ + for (TeacherClassInfo info : teacherClassInfos) { + if (!userTypes.contains(info.getUserType())) { userTypes.add(info.getUserType()); } } teacherInfo.setUserTypes(userTypes); try { List list = userMapper.selectTeacherGroup(teacherInfo.getClassInfos().get(0).getTeacherId()); - if(list != null && list.size() > 0){ - teacherInfo.setTeacherNum(list.get(0).getNum()+""); + if (list != null && list.size() > 0) { + teacherInfo.setTeacherNum(list.get(0).getNum() + ""); List groups = new ArrayList<>(); - for(TeacherGroup group : list){ + for (TeacherGroup group : list) { groups.add(group.getGroupName()); } teacherInfo.setGroups(groups); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } teacherInfo.setClassInfos(teacherClassInfos); } - return teacherInfos ; + return teacherInfos; } @Override public StudentInfo selectStudentInfo(String userId) { StudentInfo studentInfo = userMapper.selectStudentInfo(userId); - if(studentInfo != null){ - StudentInfo parent = userMapper.selectParentInfo(studentInfo.getStudentId()) ; + if (studentInfo != null) { + StudentInfo parent = userMapper.selectParentInfo(studentInfo.getStudentId()); studentInfo.setParentMobile(parent.getParentMobile()); studentInfo.setParentName(parent.getParentName()); studentInfo.setParentPass(parent.getParentPass()); studentInfo.setParentUserId(parent.getParentUserId()); - return studentInfo ; + return studentInfo; } - return null ; + return null; } @Override public List selectParentInfo(String userId) { - List children = userMapper.selectChildrenId(userId) ; + List children = userMapper.selectChildrenId(userId); List patentInfo = new ArrayList<>(); - for(String child : children){ + for (String child : children) { StudentInfo studentInfo = selectStudentInfo(child); - if(studentInfo != null){ + if (studentInfo != null) { patentInfo.add(studentInfo); } } diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/BaseVo.java b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/BaseVo.java index f996cdd..c661f03 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/BaseVo.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/BaseVo.java @@ -2,9 +2,9 @@ package com.sincere.userSearch.vo; public class BaseVo { - private String message ; - private boolean status ; - private T data ; + private String message; + private boolean status; + private T data; public String getMessage() { return message; @@ -31,6 +31,6 @@ public class BaseVo { } public BaseVo() { - this.status = true ; + this.status = true; } } diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/UserInfo.java b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/UserInfo.java index a3e69ad..10ab55e 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/UserInfo.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/UserInfo.java @@ -2,7 +2,7 @@ package com.sincere.userSearch.vo; public class UserInfo { - private String userId ; + private String userId; public String getUserId() { return userId; diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/Info.java b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/Info.java index e715d8c..65ac63e 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/Info.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/Info.java @@ -7,9 +7,9 @@ import java.util.List; public class Info { - private List teacherInfos ; - private List parentInfos ; - private List studentInfos ; + private List teacherInfos; + private List parentInfos; + private List studentInfos; public List getTeacherInfos() { return teacherInfos; diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/ZnxwRepVo.java b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/ZnxwRepVo.java index af5a382..de9c8ed 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/ZnxwRepVo.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/ZnxwRepVo.java @@ -2,8 +2,8 @@ package com.sincere.userSearch.vo.rep; public class ZnxwRepVo { - private String agentId ; - private String schoolName ; + private String agentId; + private String schoolName; public String getAgentId() { return agentId; diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/UserInfoReqVo.java b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/UserInfoReqVo.java index 364649a..29a045e 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/UserInfoReqVo.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/UserInfoReqVo.java @@ -1,7 +1,7 @@ package com.sincere.userSearch.vo.req; public class UserInfoReqVo { - private int userType ; // 2:学生;3:家长;其他都是老师 + private int userType; // 2:学生;3:家长;其他都是老师 public int getUserType() { return userType; diff --git a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/ZnxwReqVo.java b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/ZnxwReqVo.java index eb7b584..07e6e4c 100644 --- a/cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/ZnxwReqVo.java +++ b/cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/ZnxwReqVo.java @@ -2,8 +2,8 @@ package com.sincere.userSearch.vo.req; public class ZnxwReqVo { - private int schoolId ; - private int type ; + private int schoolId; + private int type; public int getSchoolId() { return schoolId; diff --git a/cloud/user_search/src/main/resources/logback.xml b/cloud/user_search/src/main/resources/logback.xml index 826d9a9..c2dcdad 100644 --- a/cloud/user_search/src/main/resources/logback.xml +++ b/cloud/user_search/src/main/resources/logback.xml @@ -1,60 +1,95 @@     -     +     +     - +     -     -         -         -             -             [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n) -             UTF-8 -         -     +     + +         +         + +             +             + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n) +             + UTF-8 +         + +     +     -     -         -         -             -             ${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}.%i.log -             -             30 -             -             100MB -         - -         -             -             [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n -             UTF-8 -         -     -     -        -    - -    -    -    -    -    -    -    - - -    -    -    -    -    -    -        -        -    +     + +         +         + +             +             + ${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}.%i.log +             +             + 30 +             +             + 100MB +         + + +         + +             +             + [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n +             + UTF-8 +         + +     + +     + +         + +     + + +     +     + +     + +     + +     + +     + +     + + + +     + +     + +     + +     + +     +     + +         + +         + +     + diff --git a/cloud/user_search/src/main/resources/mapper/QyhApplyMapper.xml b/cloud/user_search/src/main/resources/mapper/QyhApplyMapper.xml index 3db0e66..8a6513f 100644 --- a/cloud/user_search/src/main/resources/mapper/QyhApplyMapper.xml +++ b/cloud/user_search/src/main/resources/mapper/QyhApplyMapper.xml @@ -3,11 +3,12 @@ - - + + diff --git a/cloud/user_search/src/main/resources/mapper/UserMapper.xml b/cloud/user_search/src/main/resources/mapper/UserMapper.xml index 59f1ff2..b05d81f 100644 --- a/cloud/user_search/src/main/resources/mapper/UserMapper.xml +++ b/cloud/user_search/src/main/resources/mapper/UserMapper.xml @@ -23,16 +23,19 @@ @@ -41,14 +44,14 @@ @@ -66,7 +69,7 @@ @@ -76,17 +79,16 @@ - select sz_user.user_id , sz_user.name ,sz_user.pass ,sz_user.mobile from sz_user where user_id = ( - select user_id from sz_userRole where customerid = - (select parent_id from SZ_SPRole where student_id = #{studentId})) + select user_id from sz_userRole where customerid = + (select parent_id from SZ_SPRole where student_id = #{studentId})) - diff --git a/cloud/weigeng/pom.xml b/cloud/weigeng/pom.xml index e18ef3c..de57310 100644 --- a/cloud/weigeng/pom.xml +++ b/cloud/weigeng/pom.xml @@ -13,10 +13,10 @@ weigeng Demo project for Spring Boot - - - - + + + + diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/Swagger2.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/Swagger2.java index 03089f0..95686c2 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/Swagger2.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/Swagger2.java @@ -16,7 +16,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; public class Swagger2 { @Bean - public Docket createRestApi() { + public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enableUrlTemplating(true) @@ -27,12 +27,13 @@ public class Swagger2 { .build(); } - private ApiInfo apiInfo() { + + private ApiInfo apiInfo() { return new ApiInfoBuilder() - .title("Spring Boot中使用Swagger2构建RESTful APIs") - .description("接口文档") - .termsOfServiceUrl("") + .title("Spring Boot中使用Swagger2构建RESTful APIs") + .description("接口文档") + .termsOfServiceUrl("") .version("1.0") - .build(); - } + .build(); + } } diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1200.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1200.java index 821ee25..63e6e01 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1200.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1200.java @@ -17,7 +17,7 @@ import org.springframework.stereotype.Component; public class Watch1200 extends WatchServer implements ApplicationRunner { @Autowired - SmFeign smFeign ; + SmFeign smFeign; @Autowired XaFeign xaFeign; @@ -29,9 +29,9 @@ public class Watch1200 extends WatchServer implements ApplicationRunner { listen1200.start(); } - class Listen1200 extends Thread{ + class Listen1200 extends Thread { - private Watch1200 watch1200 ; + private Watch1200 watch1200; public Watch1200 getWatch1200() { return watch1200; @@ -54,7 +54,7 @@ public class Watch1200 extends WatchServer implements ApplicationRunner { @Override public void run() { super.run(); - this.watch1200.listen(smFeign,xaFeign); + this.watch1200.listen(smFeign, xaFeign); } } diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1300.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1300.java index 2c61f46..05ea4c4 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1300.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/Watch1300.java @@ -17,7 +17,7 @@ import org.springframework.stereotype.Component; public class Watch1300 extends WatchServer implements ApplicationRunner { @Autowired - SmFeign smFeign ; + SmFeign smFeign; @Autowired XaFeign xaFeign; @@ -29,9 +29,9 @@ public class Watch1300 extends WatchServer implements ApplicationRunner { listen1300.start(); } - class Listen1300 extends Thread{ + class Listen1300 extends Thread { - private Watch1300 watch1300 ; + private Watch1300 watch1300; public Watch1300 getWatch1300() { return watch1300; @@ -54,7 +54,7 @@ public class Watch1300 extends WatchServer implements ApplicationRunner { @Override public void run() { super.run(); - this.watch1300.listen(smFeign,xaFeign); + this.watch1300.listen(smFeign, xaFeign); } } diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/controller/WgController.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/controller/WgController.java index 153ba6c..d0aec82 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/controller/WgController.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/controller/WgController.java @@ -47,33 +47,33 @@ public class WgController { XaFeign xaFeign; @Autowired - Watch1200 watch1200 ; + Watch1200 watch1200; @Autowired - Watch1300 watch1300 ; + Watch1300 watch1300; - public ChannelHandlerContext getContext(long sno){ - ChannelHandlerContext context1200 = watch1200.getContext(sno) ; - ChannelHandlerContext context1300 = watch1300.getContext(sno) ; - if(context1200 == null){ + public ChannelHandlerContext getContext(long sno) { + ChannelHandlerContext context1200 = watch1200.getContext(sno); + ChannelHandlerContext context1300 = watch1300.getContext(sno); + if (context1200 == null) { return context1300; - }else { - return context1200 ; + } else { + return context1200; } } - public DatagramPacket getPacket(long sno){ - DatagramPacket packet1200 = watch1200.getPacket(sno); - DatagramPacket packet1300 = watch1300.getPacket(sno); - if(packet1200 == null){ - return packet1300 ; - }else { - return packet1200 ; + public DatagramPacket getPacket(long sno) { + DatagramPacket packet1200 = watch1200.getPacket(sno); + DatagramPacket packet1300 = watch1300.getPacket(sno); + if (packet1200 == null) { + return packet1300; + } else { + return packet1200; } } - @RequestMapping(value = "openDoor1" , method = RequestMethod.GET) - public void openDoor1(){ + @RequestMapping(value = "openDoor1", method = RequestMethod.GET) + public void openDoor1() { OpenDoorVo openDoorVo = new OpenDoorVo(); openDoorVo.setId(1); openDoorVo.setSn(253163272); @@ -82,8 +82,8 @@ public class WgController { this.openDoor(openDoorVo); } - @RequestMapping(value = "openDoor2" , method = RequestMethod.GET) - public void openDoor2(){ + @RequestMapping(value = "openDoor2", method = RequestMethod.GET) + public void openDoor2() { OpenDoorVo openDoorVo = new OpenDoorVo(); openDoorVo.setId(1); openDoorVo.setSn(253160793); @@ -92,72 +92,72 @@ public class WgController { this.openDoor(openDoorVo); } - @RequestMapping(value = "setTime" , method = RequestMethod.GET) - public void setTime(long sn){ - WatchServer.setTime(xaFeign,getContext(sn),getPacket(sn),sn,"48"); + @RequestMapping(value = "setTime", method = RequestMethod.GET) + public void setTime(long sn) { + WatchServer.setTime(xaFeign, getContext(sn), getPacket(sn), sn, "48"); } @ApiOperation("远程开门") - @RequestMapping(value = "openDoor" , method = RequestMethod.POST) + @RequestMapping(value = "openDoor", method = RequestMethod.POST) public boolean openDoor(@RequestBody OpenDoorVo openDoorVo) { - String functionId = smFeign.selectOutOrderId(openDoorVo.getType(),openDoorVo.getId()); - long messageId = WatchServer.openDoor(xaFeign,getContext(openDoorVo.getSn()),getPacket(openDoorVo.getSn()),openDoorVo.getSn(),functionId,openDoorVo.getDoorNo(),null); + String functionId = smFeign.selectOutOrderId(openDoorVo.getType(), openDoorVo.getId()); + long messageId = WatchServer.openDoor(xaFeign, getContext(openDoorVo.getSn()), getPacket(openDoorVo.getSn()), openDoorVo.getSn(), functionId, openDoorVo.getDoorNo(), null); SendMessageDto message = getResult(messageId); - if(message.getCorrect() == 1){ - Log_orderSuccess.info("web端远程开门成功!") ; - }else { - Log_orderFail.info("远程开门失败") ; + if (message.getCorrect() == 1) { + Log_orderSuccess.info("web端远程开门成功!"); + } else { + Log_orderFail.info("远程开门失败"); } - return message.getCorrect() == 1 ; + return message.getCorrect() == 1; } @ApiOperation("设置考勤时段") - @RequestMapping(value = "setAttendanceTime" , method = RequestMethod.POST) - public boolean setAttendanceTime(@RequestBody AttendanceTimeVo attendanceTimeVo){ - String functionId = smFeign.selectOutOrderId(attendanceTimeVo.getType(),attendanceTimeVo.getId()); - List result = WatchServer.SetAttendanceTime(xaFeign,getContext(attendanceTimeVo.getSn()),getPacket(attendanceTimeVo.getSn()),attendanceTimeVo.getSn(),functionId,attendanceTimeVo.getShiduan(), - attendanceTimeVo.getStart(),attendanceTimeVo.getEnd(),attendanceTimeVo.getIsMonday(),attendanceTimeVo.getIsTuesday(), - attendanceTimeVo.getIsWednesday(),attendanceTimeVo.getIsThursday(),attendanceTimeVo.getIsFriday(), - attendanceTimeVo.getIsSaturday(),attendanceTimeVo.getIsWeekend(),attendanceTimeVo.getShiqu()); - boolean isSuccess = true ; - for(Long messageId : result){ + @RequestMapping(value = "setAttendanceTime", method = RequestMethod.POST) + public boolean setAttendanceTime(@RequestBody AttendanceTimeVo attendanceTimeVo) { + String functionId = smFeign.selectOutOrderId(attendanceTimeVo.getType(), attendanceTimeVo.getId()); + List result = WatchServer.SetAttendanceTime(xaFeign, getContext(attendanceTimeVo.getSn()), getPacket(attendanceTimeVo.getSn()), attendanceTimeVo.getSn(), functionId, attendanceTimeVo.getShiduan(), + attendanceTimeVo.getStart(), attendanceTimeVo.getEnd(), attendanceTimeVo.getIsMonday(), attendanceTimeVo.getIsTuesday(), + attendanceTimeVo.getIsWednesday(), attendanceTimeVo.getIsThursday(), attendanceTimeVo.getIsFriday(), + attendanceTimeVo.getIsSaturday(), attendanceTimeVo.getIsWeekend(), attendanceTimeVo.getShiqu()); + boolean isSuccess = true; + for (Long messageId : result) { SendMessageDto message = getResult(messageId); - if(message.getCorrect() == 1){ - Log_orderSuccess.info("设备"+attendanceTimeVo.getSn()+"时段"+attendanceTimeVo.getShiduan()+"!!设置成功"); - }else { - Log_orderFail.info("设备"+attendanceTimeVo.getSn()+"时段"+attendanceTimeVo.getShiduan()+"!!设置失败"); - isSuccess = false ; + if (message.getCorrect() == 1) { + Log_orderSuccess.info("设备" + attendanceTimeVo.getSn() + "时段" + attendanceTimeVo.getShiduan() + "!!设置成功"); + } else { + Log_orderFail.info("设备" + attendanceTimeVo.getSn() + "时段" + attendanceTimeVo.getShiduan() + "!!设置失败"); + isSuccess = false; } } return isSuccess; } @ApiOperation("单个卡号的权限添加或修改") - @RequestMapping(value = "setSignalCardInfo" , method = RequestMethod.POST) - public boolean setSignalCardInfo(@RequestBody SignalCardInfoVo signalCardInfoVo){ - String functionId = smFeign.selectOutOrderId(signalCardInfoVo.getType(),signalCardInfoVo.getId()); + @RequestMapping(value = "setSignalCardInfo", method = RequestMethod.POST) + public boolean setSignalCardInfo(@RequestBody SignalCardInfoVo signalCardInfoVo) { + String functionId = smFeign.selectOutOrderId(signalCardInfoVo.getType(), signalCardInfoVo.getId()); String cardNo = initCardNo(signalCardInfoVo.getCardNo()); - long messageId = WatchServer.SetSignalCardInfo(xaFeign,getContext(signalCardInfoVo.getSn()),getPacket(signalCardInfoVo.getSn()),signalCardInfoVo.getSn(),functionId,cardNo, - signalCardInfoVo.getShiduan(),signalCardInfoVo.getStartTime(),signalCardInfoVo.getEndTime()); + long messageId = WatchServer.SetSignalCardInfo(xaFeign, getContext(signalCardInfoVo.getSn()), getPacket(signalCardInfoVo.getSn()), signalCardInfoVo.getSn(), functionId, cardNo, + signalCardInfoVo.getShiduan(), signalCardInfoVo.getStartTime(), signalCardInfoVo.getEndTime()); SendMessageDto message = getResult(messageId); UserDto user = smFeign.selectUserByCardNum(cardNo); StudentCardDto studentCard = smFeign.selectStudentCard(cardNo); SchoolDto school = smFeign.selectSchoolBySchoolId(user.getSchoolId()); UpdateCardDto updateCard = smFeign.selectUpdateCardByUpdateId(signalCardInfoVo.getUpdateId()); - if(message.getCorrect() == 1){ - Log_orderSuccess.info("设备"+signalCardInfoVo.getSn()+"时段"+signalCardInfoVo.getShiduan()+"卡号"+cardNo+"!!设置成功"); - SendSuccessDto sendSuccess = new SendSuccessDto(user,school,studentCard,updateCard); - sendSuccess.setDeviceId(signalCardInfoVo.getSn()+""); + if (message.getCorrect() == 1) { + Log_orderSuccess.info("设备" + signalCardInfoVo.getSn() + "时段" + signalCardInfoVo.getShiduan() + "卡号" + cardNo + "!!设置成功"); + SendSuccessDto sendSuccess = new SendSuccessDto(user, school, studentCard, updateCard); + sendSuccess.setDeviceId(signalCardInfoVo.getSn() + ""); sendSuccess.setShiduan(signalCardInfoVo.getShiduan()); sendSuccess.setCardNum(cardNo); sendSuccess.setUpdateId(signalCardInfoVo.getUpdateId()); sendSuccess.setOpenFlag(1); sendSuccess.setStatus(1); xaFeign.insertSendSuccess(sendSuccess); - }else { - Log_orderFail.info("设备"+signalCardInfoVo.getSn()+"时段"+signalCardInfoVo.getShiduan()+"卡号"+cardNo+"!!设置失败"); - SendFailDto sendFail = new SendFailDto(user,school,studentCard,updateCard); - sendFail.setDeviceId(signalCardInfoVo.getSn()+""); + } else { + Log_orderFail.info("设备" + signalCardInfoVo.getSn() + "时段" + signalCardInfoVo.getShiduan() + "卡号" + cardNo + "!!设置失败"); + SendFailDto sendFail = new SendFailDto(user, school, studentCard, updateCard); + sendFail.setDeviceId(signalCardInfoVo.getSn() + ""); sendFail.setShiduan(signalCardInfoVo.getShiduan()); sendFail.setCardNum(cardNo); sendFail.setUpdateId(signalCardInfoVo.getUpdateId()); @@ -172,89 +172,89 @@ public class WgController { @ApiOperation("清除单个卡号权限") - @RequestMapping(value = "clearSinglePower" , method = RequestMethod.POST) - public boolean clearSinglePower(@RequestBody CardInfo cardInfo){ - String functionId = smFeign.selectOutOrderId(cardInfo.getType(),cardInfo.getId()); + @RequestMapping(value = "clearSinglePower", method = RequestMethod.POST) + public boolean clearSinglePower(@RequestBody CardInfo cardInfo) { + String functionId = smFeign.selectOutOrderId(cardInfo.getType(), cardInfo.getId()); String cardNo = initCardNo(cardInfo.getCardNo()); - long messageId = WatchServer.clearSinglePower(xaFeign,getContext(cardInfo.getSn()),getPacket(cardInfo.getSn()),cardInfo.getSn(),functionId,cardNo); + long messageId = WatchServer.clearSinglePower(xaFeign, getContext(cardInfo.getSn()), getPacket(cardInfo.getSn()), cardInfo.getSn(), functionId, cardNo); SendMessageDto message = getResult(messageId); - if(message.getCorrect() == 1){ - Log_orderSuccess.info("卡号"+cardNo+"清除权限成功"); + if (message.getCorrect() == 1) { + Log_orderSuccess.info("卡号" + cardNo + "清除权限成功"); SendSuccessDto sendSuccess = new SendSuccessDto(); sendSuccess.setCardNum(cardNo); - sendSuccess.setDeviceId(cardInfo.getSn()+""); + sendSuccess.setDeviceId(cardInfo.getSn() + ""); xaFeign.updateSendSuccess(sendSuccess); - }else { - Log_orderFail.info("卡号"+cardNo+"清除权限失败"); + } else { + Log_orderFail.info("卡号" + cardNo + "清除权限失败"); } - return message.getCorrect() == 1 ; + return message.getCorrect() == 1; } @ApiOperation("清除全部权限") - @RequestMapping(value = "clearAllPower" , method = RequestMethod.POST) - public boolean clearAllPower(@RequestBody CleanShiDuanVo cleanShiDuanVo){ - String functionId = smFeign.selectOutOrderId(cleanShiDuanVo.getType(),cleanShiDuanVo.getId()); - long messageId = WatchServer.clearAllPower(xaFeign,getContext(cleanShiDuanVo.getSn()),getPacket(cleanShiDuanVo.getSn()),cleanShiDuanVo.getSn(),functionId); + @RequestMapping(value = "clearAllPower", method = RequestMethod.POST) + public boolean clearAllPower(@RequestBody CleanShiDuanVo cleanShiDuanVo) { + String functionId = smFeign.selectOutOrderId(cleanShiDuanVo.getType(), cleanShiDuanVo.getId()); + long messageId = WatchServer.clearAllPower(xaFeign, getContext(cleanShiDuanVo.getSn()), getPacket(cleanShiDuanVo.getSn()), cleanShiDuanVo.getSn(), functionId); SendMessageDto message = getResult(messageId); - if(message.getCorrect() == 1){ - Log_orderSuccess.info("设备"+cleanShiDuanVo.getSn()+"清除权限成功"); + if (message.getCorrect() == 1) { + Log_orderSuccess.info("设备" + cleanShiDuanVo.getSn() + "清除权限成功"); SendSuccessDto sendSuccess = new SendSuccessDto(); - sendSuccess.setDeviceId(cleanShiDuanVo.getSn()+""); + sendSuccess.setDeviceId(cleanShiDuanVo.getSn() + ""); xaFeign.updateSendSuccess(sendSuccess); - }else { - Log_orderFail.info("设备"+cleanShiDuanVo.getSn()+"清除权限失败"); + } else { + Log_orderFail.info("设备" + cleanShiDuanVo.getSn() + "清除权限失败"); } - return message.getCorrect() == 1 ; + return message.getCorrect() == 1; } @ApiOperation("清除时段") - @RequestMapping(value = "clearShiDuan" , method = RequestMethod.POST) - public boolean clearShiDuan(@RequestBody CleanShiDuanVo cleanShiDuanVo){ - String functionId = smFeign.selectOutOrderId(cleanShiDuanVo.getType(),cleanShiDuanVo.getId()); - long messageId = WatchServer.clearShiDuan(xaFeign,getContext(cleanShiDuanVo.getSn()),getPacket(cleanShiDuanVo.getSn()),cleanShiDuanVo.getSn(),functionId); + @RequestMapping(value = "clearShiDuan", method = RequestMethod.POST) + public boolean clearShiDuan(@RequestBody CleanShiDuanVo cleanShiDuanVo) { + String functionId = smFeign.selectOutOrderId(cleanShiDuanVo.getType(), cleanShiDuanVo.getId()); + long messageId = WatchServer.clearShiDuan(xaFeign, getContext(cleanShiDuanVo.getSn()), getPacket(cleanShiDuanVo.getSn()), cleanShiDuanVo.getSn(), functionId); SendMessageDto sendMessage = getResult(messageId); - if(sendMessage.getCorrect() == 1){ - Log_orderSuccess.info("设备"+cleanShiDuanVo.getSn()+"时段清除成功"); - }else { - Log_orderFail.info("设备"+cleanShiDuanVo.getSn()+"时段清除失败"); + if (sendMessage.getCorrect() == 1) { + Log_orderSuccess.info("设备" + cleanShiDuanVo.getSn() + "时段清除成功"); + } else { + Log_orderFail.info("设备" + cleanShiDuanVo.getSn() + "时段清除失败"); } return sendMessage.getCorrect() == 1; } @ApiOperation("查询单个卡号 权限") - @RequestMapping(value = "searchPower" , method = RequestMethod.POST) - public boolean searchPower(@RequestBody CardInfo cardInfo){ - String functionId = smFeign.selectOutOrderId(cardInfo.getType(),cardInfo.getId()); + @RequestMapping(value = "searchPower", method = RequestMethod.POST) + public boolean searchPower(@RequestBody CardInfo cardInfo) { + String functionId = smFeign.selectOutOrderId(cardInfo.getType(), cardInfo.getId()); String cardNo = initCardNo(cardInfo.getCardNo()); - long messageId = WatchServer.searchPower(xaFeign,getContext(cardInfo.getSn()),getPacket(cardInfo.getSn()),cardInfo.getSn(),functionId,cardNo); + long messageId = WatchServer.searchPower(xaFeign, getContext(cardInfo.getSn()), getPacket(cardInfo.getSn()), cardInfo.getSn(), functionId, cardNo); SendMessageDto sendMessage = getResult(messageId); - if(sendMessage.getCorrect() == 1){ - Log_orderSuccess.info("设备"+cardInfo.getSn()+"卡号"+cardNo+"查询权限成功"); - }else { - Log_orderFail.info("设备"+cardInfo.getSn()+"卡号"+cardNo+"查询权限失败"); + if (sendMessage.getCorrect() == 1) { + Log_orderSuccess.info("设备" + cardInfo.getSn() + "卡号" + cardNo + "查询权限成功"); + } else { + Log_orderFail.info("设备" + cardInfo.getSn() + "卡号" + cardNo + "查询权限失败"); } return sendMessage.getCorrect() == 1; } - @RequestMapping(value = "watch" , method = RequestMethod.GET) - public int watch(){ - return 1 ; + @RequestMapping(value = "watch", method = RequestMethod.GET) + public int watch() { + return 1; } - private SendMessageDto getResult(long messageId){ - try{ + private SendMessageDto getResult(long messageId) { + try { Thread.sleep(300); - }catch (Exception e){ + } catch (Exception e) { } return xaFeign.selectById(messageId); } - private String initCardNo(String cardNo){ - while (cardNo.length() < 8){ - cardNo = "0" + cardNo ; + private String initCardNo(String cardNo) { + while (cardNo.length() < 8) { + cardNo = "0" + cardNo; } - return cardNo ; + return cardNo; } } diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/feign/SmFeign.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/feign/SmFeign.java index 3bd6bb0..0bcf728 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/feign/SmFeign.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/feign/SmFeign.java @@ -17,24 +17,24 @@ import org.springframework.web.bind.annotation.RequestParam; @FeignClient("smartCampusSearch") public interface SmFeign { - @RequestMapping(value = "/sm/wg/updateLinkTime",method = RequestMethod.GET) + @RequestMapping(value = "/sm/wg/updateLinkTime", method = RequestMethod.GET) int updateLinkTime(@RequestParam("sno") String sno); - @RequestMapping(value = "/sm/wg/selectOutOrderId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/wg/selectOutOrderId", method = RequestMethod.GET) String selectOutOrderId(@RequestParam("type") int type, @RequestParam("insideOrderId") int insideOrderId); - @RequestMapping(value = "/sm/wg/checkLeave",method = RequestMethod.GET) + @RequestMapping(value = "/sm/wg/checkLeave", method = RequestMethod.GET) String checkLeave(@RequestParam("cardNo") String cardNo); - @RequestMapping(value = "/sm/wg/selectSchoolBySchoolId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/wg/selectSchoolBySchoolId", method = RequestMethod.GET) SchoolDto selectSchoolBySchoolId(@RequestParam("schoolId") int schoolId); - @RequestMapping(value = "/sm/wg/selectUserByCardNum",method = RequestMethod.GET) + @RequestMapping(value = "/sm/wg/selectUserByCardNum", method = RequestMethod.GET) UserDto selectUserByCardNum(@RequestParam("cardNum") String cardNum); - @RequestMapping(value = "/sm/wg/selectUpdateCardByUpdateId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/wg/selectUpdateCardByUpdateId", method = RequestMethod.GET) UpdateCardDto selectUpdateCardByUpdateId(@RequestParam("updateId") int updateId); - @RequestMapping(value = "/sm/wg/selectStudentCard",method = RequestMethod.GET) + @RequestMapping(value = "/sm/wg/selectStudentCard", method = RequestMethod.GET) StudentCardDto selectStudentCard(@RequestParam("cardNum") String cardNum); } diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/feign/XaFeign.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/feign/XaFeign.java index eb9836c..bbb891c 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/feign/XaFeign.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/feign/XaFeign.java @@ -15,33 +15,33 @@ import org.springframework.web.bind.annotation.RequestParam; @FeignClient("xiaoanSearch") public interface XaFeign { - @RequestMapping(value = "/xa/wg/checkIn",method = RequestMethod.POST) + @RequestMapping(value = "/xa/wg/checkIn", method = RequestMethod.POST) CheckOutDto checkIn(@RequestBody CheckInDto checkInDto); - @RequestMapping(value = "/xa/wg/insertMessage",method = RequestMethod.POST) + @RequestMapping(value = "/xa/wg/insertMessage", method = RequestMethod.POST) long insertMessage(@RequestBody SendMessageDto sendMessageDto); - @RequestMapping(value = "/xa/wg/selectById",method = RequestMethod.GET) + @RequestMapping(value = "/xa/wg/selectById", method = RequestMethod.GET) SendMessageDto selectById(@RequestParam("id") long id); - @RequestMapping(value = "/xa/wg/selectMessage",method = RequestMethod.GET) - SendMessageDto selectMessage(@RequestParam("deviceId") String deviceId, @RequestParam("index") long index,@RequestParam("functionId") String functionId); + @RequestMapping(value = "/xa/wg/selectMessage", method = RequestMethod.GET) + SendMessageDto selectMessage(@RequestParam("deviceId") String deviceId, @RequestParam("index") long index, @RequestParam("functionId") String functionId); - @RequestMapping(value = "/xa/wg/updateMessage",method = RequestMethod.GET) + @RequestMapping(value = "/xa/wg/updateMessage", method = RequestMethod.GET) int updateMessage(@RequestParam("id") long id, @RequestParam("result") String result, @RequestParam("correct") int correct); - @RequestMapping(value = "/xa/wg/insertPassFail",method = RequestMethod.POST) + @RequestMapping(value = "/xa/wg/insertPassFail", method = RequestMethod.POST) int insertPassFail(@RequestBody PassFailDto passFailDto); - @RequestMapping(value = "/xa/wg/insertSendSuccess",method = RequestMethod.POST) + @RequestMapping(value = "/xa/wg/insertSendSuccess", method = RequestMethod.POST) int insertSendSuccess(@RequestBody SendSuccessDto sendSuccessDto); - @RequestMapping(value = "/xa/wg/insertSendFail",method = RequestMethod.POST) + @RequestMapping(value = "/xa/wg/insertSendFail", method = RequestMethod.POST) int insertSendFail(@RequestBody SendFailDto sendFailDto); - @RequestMapping(value = "/xa/wg/deleteSendFail",method = RequestMethod.POST) + @RequestMapping(value = "/xa/wg/deleteSendFail", method = RequestMethod.POST) int deleteSendFail(@RequestBody SendFailDto sendFailDto); - @RequestMapping(value = "/xa/wg/deleteSendFail",method = RequestMethod.POST) + @RequestMapping(value = "/xa/wg/deleteSendFail", method = RequestMethod.POST) int updateSendSuccess(@RequestBody SendSuccessDto sendSuccessDto); } diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/UdpServerHandler.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/UdpServerHandler.java index 17afb5c..d44f0b3 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/UdpServerHandler.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/UdpServerHandler.java @@ -24,30 +24,30 @@ public class UdpServerHandler extends SimpleChannelInboundHandler queue; - private Map channelMap ; - private Map packetMap ; + private Map channelMap; + private Map packetMap; - public UdpServerHandler(Queue queue , Map channelMap , Map packetMap) { + public UdpServerHandler(Queue queue, Map channelMap, Map packetMap) { super(); this.queue = queue; this.channelMap = channelMap; - this.packetMap = packetMap ; + this.packetMap = packetMap; } @Override - protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet){ - try{ - i++ ; - String time = DateUtils.date2String(new Date() , DateUtils.format3); - if(!dateTime.equals(time)){ - Log_heartBeat.info("------------------------"+packet.recipient().getPort()+"访问次数" + i); - dateTime = time ; - i = 1 ; + protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) { + try { + i++; + String time = DateUtils.date2String(new Date(), DateUtils.format3); + if (!dateTime.equals(time)) { + Log_heartBeat.info("------------------------" + packet.recipient().getPort() + "访问次数" + i); + dateTime = time; + i = 1; } ByteBuf buf = packet.copy().content(); byte[] validBytes = new byte[buf.readableBytes()]; @@ -55,13 +55,13 @@ public class UdpServerHandler extends SimpleChannelInboundHandler 127){ - i = i-256 ; + public static Byte toFunctionHex(String message) { + Integer i = Integer.valueOf(message); + if (i > 127) { + i = i - 256; } - return Byte.valueOf(i+""); + return Byte.valueOf(i + ""); } //短报文 转化 message 16进制 要先转16 在转byte - public static Byte toHex(String message){ - Integer i = Integer.valueOf(message,16) ; - if(i > 127){ - i = i-256 ; + public static Byte toHex(String message) { + Integer i = Integer.valueOf(message, 16); + if (i > 127) { + i = i - 256; } - return Byte.valueOf(i+""); + return Byte.valueOf(i + ""); } - public static String getCardNo(byte[] buff, int start, int len){ - String cardNo = "" ; - for(int i = start ; i < start+len ; i++){ + public static String getCardNo(byte[] buff, int start, int len) { + String cardNo = ""; + for (int i = start; i < start + len; i++) { cardNo += byte2Hex(buff[i]); } return cardNo; } - public static String byte2Hex(byte b){ - int i = b ; - if( b < 0){ - i = b + 256 ; + public static String byte2Hex(byte b) { + int i = b; + if (b < 0) { + i = b + 256; } - String result = Integer.toHexString(i).toUpperCase() ; - if(result.length() == 1){ - result = "0"+result; + String result = Integer.toHexString(i).toUpperCase(); + if (result.length() == 1) { + result = "0" + result; } return result; } @@ -48,8 +48,7 @@ public class WGUtils { //4字节转成整型数(低位前, 高位后) public static int byteToInt(byte[] buff, int start, int len) { int val = 0; - for (int i = 0; i < len && i < 4; i++) - { + for (int i = 0; i < len && i < 4; i++) { long lng = buff[i + start]; val += (lng << (8 * i)); } @@ -59,8 +58,7 @@ public class WGUtils { //4字节转成整型数(低位前, 高位后) public static long byteToLong(byte[] buff, int start, int len) { long val = 0; - for (int i = 0; i < len && i < 4; i++) - { + for (int i = 0; i < len && i < 4; i++) { long lng = buff[i + start]; val += (lng << (8 * i)); } @@ -69,11 +67,11 @@ public class WGUtils { //获取Hex值, 主要用于日期时间格式 public static byte getHex(int val) { - return (byte)((val % 10) + (((val -(val % 10)) / 10)%10) *16); + return (byte) ((val % 10) + (((val - (val % 10)) / 10) % 10) * 16); } - public static String getReasonDetailChinese(int Reason){ + public static String getReasonDetailChinese(int Reason) { if (Reason > 45) { return ""; } @@ -83,51 +81,51 @@ public class WGUtils { return RecordDetails[(Reason - 1) * 4 + 3]; //中文信息 } - public static String RecordDetails[] = { - "1","SwipePass","Swipe","刷卡开门", - "2","SwipePass","Swipe Close","刷卡关", - "3","SwipePass","Swipe Open","刷卡开", - "4","SwipePass","Swipe Limited Times","刷卡开门(带限次)", - "5","SwipeNOPass","Denied Access: PC Control","刷卡禁止通过: 电脑控制", - "6","SwipeNOPass","Denied Access: No PRIVILEGE","刷卡禁止通过: 没有权限", - "7","SwipeNOPass","Denied Access: Wrong PASSWORD","刷卡禁止通过: 密码不对", - "8","SwipeNOPass","Denied Access: AntiBack","刷卡禁止通过: 反潜回", - "9","SwipeNOPass","Denied Access: More Cards","刷卡禁止通过: 多卡", - "10","SwipeNOPass","Denied Access: First Card Open","刷卡禁止通过: 首卡", - "11","SwipeNOPass","Denied Access: Door Set NC","刷卡禁止通过: 门为常闭", - "12","SwipeNOPass","Denied Access: InterLock","刷卡禁止通过: 互锁", - "13","SwipeNOPass","Denied Access: Limited Times","刷卡禁止通过: 受刷卡次数限制", - "14","SwipeNOPass","Denied Access: Limited Person Indoor","刷卡禁止通过: 门内人数限制", - "15","SwipeNOPass","Denied Access: Invalid Timezone","刷卡禁止通过: 卡过期或不在有效时段", - "16","SwipeNOPass","Denied Access: In Order","刷卡禁止通过: 按顺序进出限制", - "17","SwipeNOPass","Denied Access: SWIPE GAP LIMIT","刷卡禁止通过: 刷卡间隔约束", - "18","SwipeNOPass","Denied Access","刷卡禁止通过: 原因不明", - "19","SwipeNOPass","Denied Access: Limited Times","刷卡禁止通过: 刷卡次数限制", - "20","ValidEvent","Push Button","按钮开门", - "21","ValidEvent","Push Button Open","按钮开", - "22","ValidEvent","Push Button Close","按钮关", - "23","ValidEvent","Door Open","门打开[门磁信号]", - "24","ValidEvent","Door Closed","门关闭[门磁信号]", - "25","ValidEvent","Super Password Open Door","超级密码开门", - "26","ValidEvent","Super Password Open","超级密码开", - "27","ValidEvent","Super Password Close","超级密码关", - "28","Warn","Controller Power On","控制器上电", - "29","Warn","Controller Reset","控制器复位", - "30","Warn","Push Button Invalid: Disable","按钮不开门: 按钮禁用", - "31","Warn","Push Button Invalid: Forced Lock","按钮不开门: 强制关门", - "32","Warn","Push Button Invalid: Not On Line","按钮不开门: 门不在线", - "33","Warn","Push Button Invalid: InterLock","按钮不开门: 互锁", - "34","Warn","Threat","胁迫报警", - "35","Warn","Threat Open","胁迫报警开", - "36","Warn","Threat Close","胁迫报警关", - "37","Warn","Open too long","门长时间未关报警[合法开门后]", - "38","Warn","Forced Open","强行闯入报警", - "39","Warn","Fire","火警", - "40","Warn","Forced Close","强制关门", - "41","Warn","Guard Against Theft","防盗报警", - "42","Warn","7*24Hour Zone","烟雾煤气温度报警", - "43","Warn","Emergency Call","紧急呼救报警", - "44","RemoteOpen","Remote Open Door","操作员远程开门", - "45","RemoteOpen","Remote Open Door By USB Reader","发卡器确定发出的远程开门" + public static String RecordDetails[] = { + "1", "SwipePass", "Swipe", "刷卡开门", + "2", "SwipePass", "Swipe Close", "刷卡关", + "3", "SwipePass", "Swipe Open", "刷卡开", + "4", "SwipePass", "Swipe Limited Times", "刷卡开门(带限次)", + "5", "SwipeNOPass", "Denied Access: PC Control", "刷卡禁止通过: 电脑控制", + "6", "SwipeNOPass", "Denied Access: No PRIVILEGE", "刷卡禁止通过: 没有权限", + "7", "SwipeNOPass", "Denied Access: Wrong PASSWORD", "刷卡禁止通过: 密码不对", + "8", "SwipeNOPass", "Denied Access: AntiBack", "刷卡禁止通过: 反潜回", + "9", "SwipeNOPass", "Denied Access: More Cards", "刷卡禁止通过: 多卡", + "10", "SwipeNOPass", "Denied Access: First Card Open", "刷卡禁止通过: 首卡", + "11", "SwipeNOPass", "Denied Access: Door Set NC", "刷卡禁止通过: 门为常闭", + "12", "SwipeNOPass", "Denied Access: InterLock", "刷卡禁止通过: 互锁", + "13", "SwipeNOPass", "Denied Access: Limited Times", "刷卡禁止通过: 受刷卡次数限制", + "14", "SwipeNOPass", "Denied Access: Limited Person Indoor", "刷卡禁止通过: 门内人数限制", + "15", "SwipeNOPass", "Denied Access: Invalid Timezone", "刷卡禁止通过: 卡过期或不在有效时段", + "16", "SwipeNOPass", "Denied Access: In Order", "刷卡禁止通过: 按顺序进出限制", + "17", "SwipeNOPass", "Denied Access: SWIPE GAP LIMIT", "刷卡禁止通过: 刷卡间隔约束", + "18", "SwipeNOPass", "Denied Access", "刷卡禁止通过: 原因不明", + "19", "SwipeNOPass", "Denied Access: Limited Times", "刷卡禁止通过: 刷卡次数限制", + "20", "ValidEvent", "Push Button", "按钮开门", + "21", "ValidEvent", "Push Button Open", "按钮开", + "22", "ValidEvent", "Push Button Close", "按钮关", + "23", "ValidEvent", "Door Open", "门打开[门磁信号]", + "24", "ValidEvent", "Door Closed", "门关闭[门磁信号]", + "25", "ValidEvent", "Super Password Open Door", "超级密码开门", + "26", "ValidEvent", "Super Password Open", "超级密码开", + "27", "ValidEvent", "Super Password Close", "超级密码关", + "28", "Warn", "Controller Power On", "控制器上电", + "29", "Warn", "Controller Reset", "控制器复位", + "30", "Warn", "Push Button Invalid: Disable", "按钮不开门: 按钮禁用", + "31", "Warn", "Push Button Invalid: Forced Lock", "按钮不开门: 强制关门", + "32", "Warn", "Push Button Invalid: Not On Line", "按钮不开门: 门不在线", + "33", "Warn", "Push Button Invalid: InterLock", "按钮不开门: 互锁", + "34", "Warn", "Threat", "胁迫报警", + "35", "Warn", "Threat Open", "胁迫报警开", + "36", "Warn", "Threat Close", "胁迫报警关", + "37", "Warn", "Open too long", "门长时间未关报警[合法开门后]", + "38", "Warn", "Forced Open", "强行闯入报警", + "39", "Warn", "Fire", "火警", + "40", "Warn", "Forced Close", "强制关门", + "41", "Warn", "Guard Against Theft", "防盗报警", + "42", "Warn", "7*24Hour Zone", "烟雾煤气温度报警", + "43", "Warn", "Emergency Call", "紧急呼救报警", + "44", "RemoteOpen", "Remote Open Door", "操作员远程开门", + "45", "RemoteOpen", "Remote Open Door By USB Reader", "发卡器确定发出的远程开门" }; } diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WatchServer.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WatchServer.java index d382d43..2cda9c4 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WatchServer.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WatchServer.java @@ -39,61 +39,61 @@ public class WatchServer { private List snoList = new ArrayList<>(); private List indexList = new ArrayList<>(); private Queue queue = new LinkedList<>(); - private Map channelMap = new ConcurrentHashMap<>() ; - private Map packetMap = new ConcurrentHashMap<>(); + private Map channelMap = new ConcurrentHashMap<>(); + private Map packetMap = new ConcurrentHashMap<>(); - public void watchPort(int port){ + public void watchPort(int port) { try { Bootstrap b = new Bootstrap(); EventLoopGroup group = new NioEventLoopGroup(); b.group(group) .channel(NioDatagramChannel.class) .option(ChannelOption.SO_BROADCAST, true) - .handler(new UdpServerHandler(queue,channelMap,packetMap)); + .handler(new UdpServerHandler(queue, channelMap, packetMap)); b.bind(port).sync().channel(); } catch (InterruptedException e) { Log_orderSuccess.info("绑定接收服务器失败...."); e.printStackTrace(); } - Log_orderSuccess.info("绑定接收服务器成功....:"+port); + Log_orderSuccess.info("绑定接收服务器成功....:" + port); } - public void listen(SmFeign smFeign, XaFeign xaFeign){ + public void listen(SmFeign smFeign, XaFeign xaFeign) { long recordIndex = 0; - while(true) { + while (true) { if (!queue.isEmpty()) { byte[] recvBuff; synchronized (queue) { - recvBuff= queue.poll(); + recvBuff = queue.poll(); } try { - if (recvBuff[1]== 0x20) { + if (recvBuff[1] == 0x20) { long sn = WgUdpCommShort.getLongByByte(recvBuff, 4, 4); - smFeign.updateLinkTime(sn+""); - Log_heartBeat.info("设备"+sn); - boolean isExist = true ; + smFeign.updateLinkTime(sn + ""); + Log_heartBeat.info("设备" + sn); + boolean isExist = true; long recordIndexGet = WgUdpCommShort.getLongByByte(recvBuff, 8, 4); - if(snoList.indexOf(sn) >= 0){ + if (snoList.indexOf(sn) >= 0) { int number = snoList.indexOf(sn); recordIndex = indexList.get(number); - indexList.set(number,recordIndexGet); - }else { + indexList.set(number, recordIndexGet); + } else { snoList.add(sn); - recordIndex = 0 ; + recordIndex = 0; indexList.add(recordIndexGet); - System.out.println("设备"+sn+"上线"); - isExist = false ; + System.out.println("设备" + sn + "上线"); + isExist = false; } - if(isExist){ + if (isExist) { if (recordIndex < recordIndexGet || (recordIndexGet - recordIndex) < -5) { - watching(recvBuff,xaFeign,smFeign); + watching(recvBuff, xaFeign, smFeign); } } - }else { - push(recvBuff,xaFeign); + } else { + push(recvBuff, xaFeign); } - }catch (Exception e){ + } catch (Exception e) { } } else { @@ -107,7 +107,7 @@ public class WatchServer { } } - private void watching(byte[] recv , XaFeign xaFeign , SmFeign smFeign){ + private void watching(byte[] recv, XaFeign xaFeign, SmFeign smFeign) { long res = 0; //8-11 记录的索引号 //(=0表示没有记录) 4 0x00000000 @@ -145,48 +145,48 @@ public class WatchServer { int reason = recv[27]; if (recordType == 0) { Log_orderSuccess.info(String.format("索引位={0} 无记录", recordIndex)); - }else if (recordType == 0xff) { + } else if (recordType == 0xff) { Log_orderSuccess.info("指定索引位的记录已被覆盖掉了,请使用索引0, 取回最早一条记录的索引值"); } else if (recordType == 1) { long sno = 0; sno = WgUdpCommShort.getLongByByte(recv, 4, 4);//解析设备号 String msg = "索引位=" + recordIndex + ",卡号=" + cardNo - +"进出=" + (recordDoorNO == 1 ? "出门" : "进门") + + "进出=" + (recordDoorNO == 1 ? "出门" : "进门") + ",有效=" + (recordValid == 1 ? "通过" : "禁止") + ",时间=" + recordTime + ",描述=" + WGUtils.getReasonDetailChinese(reason) + ""; Log_orderSuccess.info("控制器:" + sno + msg); - if(recordValid == 1) { + if (recordValid == 1) { //有效刷卡调考勤存储过程 CheckInDto checkIn = new CheckInDto(); - checkIn.setDeviceId(sno+""); + checkIn.setDeviceId(sno + ""); checkIn.setCardNo(cardNo); checkIn.setFunNo(8); checkIn.setFlag(recordDoorNO == 1 ? 1 : 0); checkIn.setCheckTime(recordTime); CheckOutDto checkOutDto = xaFeign.checkIn(checkIn); - if(checkOutDto.getIsSuccess() == 1){ + if (checkOutDto.getIsSuccess() == 1) { //考勤成功 - Log_kaoInfo.info("考勤成功!,设备:"+sno+"卡号:"+cardNo+"方向:"+(recordDoorNO == 1 ? "出门" : "进门")+"______"+ recordTime); - }else { + Log_kaoInfo.info("考勤成功!,设备:" + sno + "卡号:" + cardNo + "方向:" + (recordDoorNO == 1 ? "出门" : "进门") + "______" + recordTime); + } else { //考勤失败 - Log_orderFail.error("考勤失败!,设备:"+sno+"卡号:"+cardNo + "---"+ checkOutDto.getOut()); + Log_orderFail.error("考勤失败!,设备:" + sno + "卡号:" + cardNo + "---" + checkOutDto.getOut()); } - }else { + } else { //判断是否请假 String studentNum = smFeign.checkLeave(cardNo); if (StringUtils.isNotBlank(studentNum)) { int outOf = recordDoorNO == 1 ? 1 : 0; //远程开门 - WatchServer.openDoor(xaFeign,channelMap.get(sno),packetMap.get(sno),sno,"64",recordDoorNO,cardNo); - Log_orderSuccess.info("请假开门成功"+cardNo); + WatchServer.openDoor(xaFeign, channelMap.get(sno), packetMap.get(sno), sno, "64", recordDoorNO, cardNo); + Log_orderSuccess.info("请假开门成功" + cardNo); } else { //没有请假不做任何处理,则是刷卡异常,入库 UserDto user = smFeign.selectUserByCardNum(cardNo); PassFailDto passFail = new PassFailDto(); passFail.setCardNum(cardNo); - passFail.setDeviceId(sno+""); + passFail.setDeviceId(sno + ""); passFail.setDirection((recordDoorNO == 1 ? "出门" : "进门")); passFail.setResultIntro(WGUtils.getReasonDetailChinese(reason)); passFail.setInTime(DateUtils.string2Date(recordTime, DateUtils.format2)); @@ -198,82 +198,82 @@ public class WatchServer { } } - private void push(byte[] recv , XaFeign xaFeign){ + private void push(byte[] recv, XaFeign xaFeign) { long index = WgUdpCommShort.getXidOfCommand(recv); long sno = WgUdpCommShort.getLongByByte(recv, 4, 4); String functionId = WGUtils.byte2Hex(recv[1]); - SendMessageDto sendMessage = xaFeign.selectMessage(sno+"",index,functionId); - if(sendMessage != null){ - if(recv[8] == 1){ + SendMessageDto sendMessage = xaFeign.selectMessage(sno + "", index, functionId); + if (sendMessage != null) { + if (recv[8] == 1) { sendMessage.setCorrect(1); - }else { + } else { sendMessage.setCorrect(0); } StringBuffer result = new StringBuffer(); - for(byte b : recv){ + for (byte b : recv) { result.append(WGUtils.byte2Hex(b)).append("-"); } - sendMessage.setResult(result.toString().substring(0,result.toString().length()-1)); - xaFeign.updateMessage(sendMessage.getId(),sendMessage.getResult(),sendMessage.getCorrect()); + sendMessage.setResult(result.toString().substring(0, result.toString().length() - 1)); + xaFeign.updateMessage(sendMessage.getId(), sendMessage.getResult(), sendMessage.getCorrect()); } } - public ChannelHandlerContext getContext(long sno){ - return channelMap.get(sno) ; + public ChannelHandlerContext getContext(long sno) { + return channelMap.get(sno); } - public DatagramPacket getPacket(long sno){ + public DatagramPacket getPacket(long sno) { return packetMap.get(sno); } //远程开门 - public static long openDoor(XaFeign xaFeign , ChannelHandlerContext context , DatagramPacket packet , - long sno , String outsideOrderId, int doorNo , String cardNo){ + public static long openDoor(XaFeign xaFeign, ChannelHandlerContext context, DatagramPacket packet, + long sno, String outsideOrderId, int doorNo, String cardNo) { WgUdpCommShort pkt = new WgUdpCommShort(); pkt.iDevSn = sno; - try{ - int doorNO =doorNo; + try { + int doorNO = doorNo; pkt.Reset(); pkt.functionID = WGUtils.toFunctionHex(outsideOrderId); - pkt.data[0] =(byte) (doorNO & 0xff); - if(StringUtils.isNotBlank(cardNo)){ - pkt.data[20] = WGUtils.toHex(cardNo.substring(0,2)); - pkt.data[21] = WGUtils.toHex(cardNo.substring(2,4)); - pkt.data[22] = WGUtils.toHex(cardNo.substring(4,6)); - pkt.data[23] = WGUtils.toHex(cardNo.substring(6,8)); + pkt.data[0] = (byte) (doorNO & 0xff); + if (StringUtils.isNotBlank(cardNo)) { + pkt.data[20] = WGUtils.toHex(cardNo.substring(0, 2)); + pkt.data[21] = WGUtils.toHex(cardNo.substring(2, 4)); + pkt.data[22] = WGUtils.toHex(cardNo.substring(4, 6)); + pkt.data[23] = WGUtils.toHex(cardNo.substring(6, 8)); } byte[] bytes = pkt.toByte(); long index = WgUdpCommShort.getXidOfCommand(bytes); - long result = insert(xaFeign,sno+"",outsideOrderId,cardNo,index,bytes); - pkt.run(context,packet,bytes); - return result ; - }catch (Exception e){ + long result = insert(xaFeign, sno + "", outsideOrderId, cardNo, index, bytes); + pkt.run(context, packet, bytes); + return result; + } catch (Exception e) { Log_error.error(e.toString()); } return 0L; } //重置控制板时间 - public static long setTime(XaFeign xaFeign , ChannelHandlerContext context , DatagramPacket packet , long sno , String outsideOrderId){ + public static long setTime(XaFeign xaFeign, ChannelHandlerContext context, DatagramPacket packet, long sno, String outsideOrderId) { WgUdpCommShort pkt = new WgUdpCommShort(); pkt.iDevSn = sno; - try{ + try { pkt.Reset(); pkt.functionID = WGUtils.toFunctionHex(outsideOrderId); Calendar cal = (Calendar.getInstance()); - pkt.data[0] = WGUtils.toHex(String.valueOf(cal.get(Calendar.YEAR)).substring(0,2)); - pkt.data[1] = WGUtils.toHex(String.valueOf(cal.get(Calendar.YEAR)).substring(2,4)); - pkt.data[2] = WGUtils.toHex(String.valueOf(cal.get(Calendar.MONTH)+1)); - pkt.data[3] = WGUtils.toHex(String.valueOf(cal.get(Calendar.DATE)-1)); - pkt.data[4] =WGUtils.toHex(String.valueOf(cal.get(Calendar.HOUR_OF_DAY))); - pkt.data[5] =WGUtils.toHex(String.valueOf(cal.get(Calendar.MINUTE))); + pkt.data[0] = WGUtils.toHex(String.valueOf(cal.get(Calendar.YEAR)).substring(0, 2)); + pkt.data[1] = WGUtils.toHex(String.valueOf(cal.get(Calendar.YEAR)).substring(2, 4)); + pkt.data[2] = WGUtils.toHex(String.valueOf(cal.get(Calendar.MONTH) + 1)); + pkt.data[3] = WGUtils.toHex(String.valueOf(cal.get(Calendar.DATE) - 1)); + pkt.data[4] = WGUtils.toHex(String.valueOf(cal.get(Calendar.HOUR_OF_DAY))); + pkt.data[5] = WGUtils.toHex(String.valueOf(cal.get(Calendar.MINUTE))); pkt.data[6] = WGUtils.toHex(String.valueOf(cal.get(Calendar.SECOND))); byte[] bytes = pkt.toByte(); long index = WgUdpCommShort.getXidOfCommand(bytes); - long result = insert(xaFeign,sno+"",outsideOrderId,null,index,bytes); - pkt.run(context,packet,bytes); - return result ; - }catch (Exception e){ + long result = insert(xaFeign, sno + "", outsideOrderId, null, index, bytes); + pkt.run(context, packet, bytes); + return result; + } catch (Exception e) { Log_error.error(e.toString()); } return 0L; @@ -281,35 +281,35 @@ public class WatchServer { //设置考勤时段 - public static List SetAttendanceTime(XaFeign xaFeign , ChannelHandlerContext context , DatagramPacket packet , long sno ,String outsideOrderId, int shiduan , Date begin ,Date end , - int isMonDay ,int isTuesDay , int isWednesDay ,int isThursDay , int isFriday , - int isSaturDay , int isWeekend , String shiqu){ + public static List SetAttendanceTime(XaFeign xaFeign, ChannelHandlerContext context, DatagramPacket packet, long sno, String outsideOrderId, int shiduan, Date begin, Date end, + int isMonDay, int isTuesDay, int isWednesDay, int isThursDay, int isFriday, + int isSaturDay, int isWeekend, String shiqu) { List resultList = new ArrayList<>(); WgUdpCommShort pkt = new WgUdpCommShort(); pkt.iDevSn = sno; - try{ + try { pkt.Reset(); pkt.functionID = WGUtils.toFunctionHex(outsideOrderId); String[] shiQuArray = shiqu.split(","); - int shiDuanCount = shiQuArray.length / 6 ; - for (int i = 0; i < shiDuanCount; i++){ + int shiDuanCount = shiQuArray.length / 6; + for (int i = 0; i < shiDuanCount; i++) { if (i == 0) { - pkt.data[0] = WGUtils.toHex(shiduan+""); + pkt.data[0] = WGUtils.toHex(shiduan + ""); } else { - pkt.data[0] = WGUtils.toHex((shiduan+20*i)+""); + pkt.data[0] = WGUtils.toHex((shiduan + 20 * i) + ""); } Calendar c = Calendar.getInstance(); c.setTime(begin); //开始时间 20 19 01 01 - pkt.data[1] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(0,2)); - pkt.data[2] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(2,4)); - pkt.data[3] = WGUtils.toHex(String.valueOf(c.get(Calendar.MONTH)+1)); + pkt.data[1] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(0, 2)); + pkt.data[2] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(2, 4)); + pkt.data[3] = WGUtils.toHex(String.valueOf(c.get(Calendar.MONTH) + 1)); pkt.data[4] = WGUtils.toHex(String.valueOf(c.get(Calendar.DATE))); //结束时间 c.setTime(end); - pkt.data[5] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(0,2)); - pkt.data[6] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(2,4)); - pkt.data[7] = WGUtils.toHex(String.valueOf(c.get(Calendar.MONTH)+1)); + pkt.data[5] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(0, 2)); + pkt.data[6] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(2, 4)); + pkt.data[7] = WGUtils.toHex(String.valueOf(c.get(Calendar.MONTH) + 1)); pkt.data[8] = WGUtils.toHex(String.valueOf(c.get(Calendar.DATE))); //星期几 有效 pkt.data[9] = WGUtils.toHex(String.valueOf(isMonDay)); @@ -341,7 +341,7 @@ public class WatchServer { //需要链接时段 if (i != shiDuanCount - 1) { //只要不是最后一个时段 - pkt.data[28] = WGUtils.toHex((shiduan+20*(i+1)+"")); + pkt.data[28] = WGUtils.toHex((shiduan + 20 * (i + 1) + "")); } else { pkt.data[28] = 0; } @@ -350,159 +350,159 @@ public class WatchServer { } byte[] bytes = pkt.toByte(); long index = WgUdpCommShort.getXidOfCommand(bytes); - long result = insert(xaFeign,sno+"",outsideOrderId,null,index,bytes); - pkt.run(context,packet,bytes); + long result = insert(xaFeign, sno + "", outsideOrderId, null, index, bytes); + pkt.run(context, packet, bytes); resultList.add(result); } - return resultList ; - }catch (Exception e){ + return resultList; + } catch (Exception e) { Log_error.error(e.toString()); } return resultList; } //设置权限 - public static long SetSignalCardInfo(XaFeign xaFeign , ChannelHandlerContext context , DatagramPacket packet , long sno , String outsideOrderId, String cardNo , int shiduan , Date begin , Date end){ + public static long SetSignalCardInfo(XaFeign xaFeign, ChannelHandlerContext context, DatagramPacket packet, long sno, String outsideOrderId, String cardNo, int shiduan, Date begin, Date end) { WgUdpCommShort pkt = new WgUdpCommShort(); pkt.iDevSn = sno; - try{ + try { pkt.Reset(); pkt.functionID = WGUtils.toFunctionHex(outsideOrderId); pkt.iDevSn = sno; //0D D7 37 00 - pkt.data[0] = WGUtils.toHex(cardNo.substring(0,2)); - pkt.data[1] = WGUtils.toHex(cardNo.substring(2,4)); - pkt.data[2] = WGUtils.toHex(cardNo.substring(4,6)); - pkt.data[3] = WGUtils.toHex(cardNo.substring(6,8)); + pkt.data[0] = WGUtils.toHex(cardNo.substring(0, 2)); + pkt.data[1] = WGUtils.toHex(cardNo.substring(2, 4)); + pkt.data[2] = WGUtils.toHex(cardNo.substring(4, 6)); + pkt.data[3] = WGUtils.toHex(cardNo.substring(6, 8)); //20 10 01 01 起始日期: 2010年01月01日 (必须大于2001年) Calendar c = Calendar.getInstance(); c.setTime(begin); - pkt.data[4] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(0,2)); - pkt.data[5] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(2,4)); - pkt.data[6] = WGUtils.toHex(String.valueOf(c.get(Calendar.MONTH)+1)); + pkt.data[4] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(0, 2)); + pkt.data[5] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(2, 4)); + pkt.data[6] = WGUtils.toHex(String.valueOf(c.get(Calendar.MONTH) + 1)); pkt.data[7] = WGUtils.toHex(String.valueOf(c.get(Calendar.DATE))); //20 29 12 31 截止日期: 2029年12月31日 c.setTime(end); - pkt.data[8] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(0,2)); - pkt.data[9] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(2,4)); - pkt.data[10] = WGUtils.toHex(String.valueOf(c.get(Calendar.MONTH)+1)); + pkt.data[8] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(0, 2)); + pkt.data[9] = WGUtils.toHex(String.valueOf(c.get(Calendar.YEAR)).substring(2, 4)); + pkt.data[10] = WGUtils.toHex(String.valueOf(c.get(Calendar.MONTH) + 1)); pkt.data[11] = WGUtils.toHex(String.valueOf(c.get(Calendar.DATE))); //01 允许通过 一号门 [对单门, 双门, 四门控制器有效] - pkt.data[12] = WGUtils.toHex(shiduan+""); + pkt.data[12] = WGUtils.toHex(shiduan + ""); //01 允许通过 二号门 [对双门, 四门控制器有效] - pkt.data[13] = WGUtils.toHex(shiduan+""); + pkt.data[13] = WGUtils.toHex(shiduan + ""); //01 允许通过 三号门 [对四门控制器有效] - pkt.data[14] = WGUtils.toHex(shiduan+""); + pkt.data[14] = WGUtils.toHex(shiduan + ""); //01 允许通过 四号门 [对四门控制器有效] - pkt.data[15] = WGUtils.toHex(shiduan+""); + pkt.data[15] = WGUtils.toHex(shiduan + ""); byte[] bytes = pkt.toByte(); long index = WgUdpCommShort.getXidOfCommand(bytes); - long result = insert(xaFeign,sno+"",outsideOrderId,cardNo,index,bytes); - pkt.run(context,packet,bytes); - return result ; - }catch (Exception e){ + long result = insert(xaFeign, sno + "", outsideOrderId, cardNo, index, bytes); + pkt.run(context, packet, bytes); + return result; + } catch (Exception e) { Log_error.error(e.toString()); } return 0l; } //删除单张卡权限 - public static long clearSinglePower(XaFeign xaFeign , ChannelHandlerContext context , DatagramPacket packet , long sno ,String outsideOrderId, String cardNo){ + public static long clearSinglePower(XaFeign xaFeign, ChannelHandlerContext context, DatagramPacket packet, long sno, String outsideOrderId, String cardNo) { WgUdpCommShort pkt = new WgUdpCommShort(); pkt.iDevSn = sno; - try{ + try { pkt.Reset(); pkt.functionID = WGUtils.toFunctionHex(outsideOrderId); pkt.iDevSn = sno; - pkt.data[0] = WGUtils.toHex(cardNo.substring(0,2)); - pkt.data[1] = WGUtils.toHex(cardNo.substring(2,4)); - pkt.data[2] = WGUtils.toHex(cardNo.substring(4,6)); - pkt.data[3] = WGUtils.toHex(cardNo.substring(6,8)); + pkt.data[0] = WGUtils.toHex(cardNo.substring(0, 2)); + pkt.data[1] = WGUtils.toHex(cardNo.substring(2, 4)); + pkt.data[2] = WGUtils.toHex(cardNo.substring(4, 6)); + pkt.data[3] = WGUtils.toHex(cardNo.substring(6, 8)); byte[] bytes = pkt.toByte(); long index = WgUdpCommShort.getXidOfCommand(bytes); - long result = insert(xaFeign,sno+"",outsideOrderId,cardNo,index,bytes); - pkt.run(context,packet,bytes); - return result ; - }catch (Exception e){ + long result = insert(xaFeign, sno + "", outsideOrderId, cardNo, index, bytes); + pkt.run(context, packet, bytes); + return result; + } catch (Exception e) { Log_error.error(e.toString()); } return 0l; } //删除全部权限 - public static long clearAllPower(XaFeign xaFeign , ChannelHandlerContext context , DatagramPacket packet , long sno ,String outsideOrderId){ + public static long clearAllPower(XaFeign xaFeign, ChannelHandlerContext context, DatagramPacket packet, long sno, String outsideOrderId) { WgUdpCommShort pkt = new WgUdpCommShort(); pkt.iDevSn = sno; - try{ + try { pkt.Reset(); pkt.functionID = WGUtils.toFunctionHex(outsideOrderId); pkt.iDevSn = sno; - pkt.data[0] = (byte) 0x55 ; - pkt.data[1] = (byte) 0xAA ; - pkt.data[2] = (byte) 0xAA ; - pkt.data[3] = (byte) 0x55 ; + pkt.data[0] = (byte) 0x55; + pkt.data[1] = (byte) 0xAA; + pkt.data[2] = (byte) 0xAA; + pkt.data[3] = (byte) 0x55; byte[] bytes = pkt.toByte(); long index = WgUdpCommShort.getXidOfCommand(bytes); - long result = insert(xaFeign,sno+"",outsideOrderId,null,index,bytes); - pkt.run(context,packet,bytes); - return result ; - }catch (Exception e){ + long result = insert(xaFeign, sno + "", outsideOrderId, null, index, bytes); + pkt.run(context, packet, bytes); + return result; + } catch (Exception e) { Log_error.error(e.toString()); } return 0l; } //查询卡权限 - public static long searchPower(XaFeign xaFeign , ChannelHandlerContext context , DatagramPacket packet , long sno ,String outsideOrderId, String cardNo){ + public static long searchPower(XaFeign xaFeign, ChannelHandlerContext context, DatagramPacket packet, long sno, String outsideOrderId, String cardNo) { WgUdpCommShort pkt = new WgUdpCommShort(); pkt.iDevSn = sno; - try{ + try { pkt.Reset(); pkt.functionID = WGUtils.toFunctionHex(outsideOrderId); pkt.iDevSn = sno; - pkt.data[0] = WGUtils.toHex(cardNo.substring(0,2)); - pkt.data[1] = WGUtils.toHex(cardNo.substring(2,4)); - pkt.data[2] = WGUtils.toHex(cardNo.substring(4,6)); - pkt.data[3] = WGUtils.toHex(cardNo.substring(6,8)); + pkt.data[0] = WGUtils.toHex(cardNo.substring(0, 2)); + pkt.data[1] = WGUtils.toHex(cardNo.substring(2, 4)); + pkt.data[2] = WGUtils.toHex(cardNo.substring(4, 6)); + pkt.data[3] = WGUtils.toHex(cardNo.substring(6, 8)); byte[] bytes = pkt.toByte(); long index = WgUdpCommShort.getXidOfCommand(bytes); - long result = insert(xaFeign,sno+"",outsideOrderId,cardNo,index,bytes); - pkt.run(context,packet,bytes); - return result ; - }catch (Exception e){ + long result = insert(xaFeign, sno + "", outsideOrderId, cardNo, index, bytes); + pkt.run(context, packet, bytes); + return result; + } catch (Exception e) { Log_error.error(e.toString()); } return 0l; } //删除时段 - public static long clearShiDuan(XaFeign xaFeign , ChannelHandlerContext context , DatagramPacket packet , long sno , String outsideOrderId){ + public static long clearShiDuan(XaFeign xaFeign, ChannelHandlerContext context, DatagramPacket packet, long sno, String outsideOrderId) { WgUdpCommShort pkt = new WgUdpCommShort(); pkt.iDevSn = sno; - try{ + try { pkt.Reset(); pkt.functionID = WGUtils.toFunctionHex(outsideOrderId); pkt.iDevSn = sno; - pkt.data[0] = (byte) 0x55 ; - pkt.data[1] = (byte) 0xAA ; - pkt.data[2] = (byte) 0xAA ; - pkt.data[3] = (byte) 0x55 ; + pkt.data[0] = (byte) 0x55; + pkt.data[1] = (byte) 0xAA; + pkt.data[2] = (byte) 0xAA; + pkt.data[3] = (byte) 0x55; byte[] bytes = pkt.toByte(); long index = WgUdpCommShort.getXidOfCommand(bytes); - long result = insert(xaFeign,sno+"",outsideOrderId,null,index,bytes); - pkt.run(context,packet,bytes); - return result ; - }catch (Exception e){ + long result = insert(xaFeign, sno + "", outsideOrderId, null, index, bytes); + pkt.run(context, packet, bytes); + return result; + } catch (Exception e) { Log_error.error(e.toString()); } return 0l; } - private static long insert(XaFeign xaFeign , String sn ,String functionId , String cardNo , long index , byte[] recv){ + private static long insert(XaFeign xaFeign, String sn, String functionId, String cardNo, long index, byte[] recv) { StringBuffer send = new StringBuffer(); - for(byte b : recv){ + for (byte b : recv) { send.append(WGUtils.byte2Hex(b)).append("-"); } SendMessageDto sendMessage = new SendMessageDto(); @@ -511,7 +511,7 @@ public class WatchServer { sendMessage.setIndex(index); sendMessage.setCardNo(cardNo); sendMessage.setCreateTime(new Date()); - sendMessage.setSend(send.toString().substring(0,send.toString().length()-1)); + sendMessage.setSend(send.toString().substring(0, send.toString().length() - 1)); xaFeign.insertMessage(sendMessage); return sendMessage.getId(); } diff --git a/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WgUdpCommShort.java b/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WgUdpCommShort.java index 4f076c2..d74355f 100644 --- a/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WgUdpCommShort.java +++ b/cloud/weigeng/src/main/java/com/sincere/weigeng/utils/WgUdpCommShort.java @@ -6,103 +6,97 @@ import io.netty.channel.socket.DatagramPacket; public class WgUdpCommShort { //短报文协议 - public static final int WGPacketSize = 64; //报文长度 - public static final byte Type = 0x17; //2015-04-30 08:50:29 0x19; //类型 - public static final int ControllerPort = 60000; //控制器端口 - public static final long SpecialFlag = 0x55AAAA55; //特殊标识 防止误操作 - - public static byte[] longToByte(long number) { - byte[] b = new byte[8]; - for (int i = 0; i < 8; i++) { - b[i] = (byte) (number % 256); - number >>= 8; - } - return b; + public static final int WGPacketSize = 64; //报文长度 + public static final byte Type = 0x17; //2015-04-30 08:50:29 0x19; //类型 + public static final int ControllerPort = 60000; //控制器端口 + public static final long SpecialFlag = 0x55AAAA55; //特殊标识 防止误操作 + + public static byte[] longToByte(long number) { + byte[] b = new byte[8]; + for (int i = 0; i < 8; i++) { + b[i] = (byte) (number % 256); + number >>= 8; + } + return b; + } + + //从字节转换为 long型数据, 最大长度为8字节 低位在前, 高位在后... + //bytlen (1--8), 不在此范围则返回 -1 + public static long getLongByByte(byte[] data, int startIndex, int bytlen) { + long ret = -1; + if ((bytlen >= 1) && (bytlen <= 8)) { + ret = getIntByByte(data[startIndex + bytlen - 1]); + for (int i = 1; i < bytlen; i++) { + ret <<= 8; + ret += getIntByByte(data[startIndex + bytlen - 1 - i]); + } + } + return ret; } - //从字节转换为 long型数据, 最大长度为8字节 低位在前, 高位在后... - //bytlen (1--8), 不在此范围则返回 -1 - public static long getLongByByte(byte[] data,int startIndex,int bytlen) - { - long ret =-1; - if ((bytlen >=1) && (bytlen <=8)) - { - ret = getIntByByte(data[startIndex + bytlen-1]); - for (int i=1; i= WGPacketSize) - { + if (cmd.length >= WGPacketSize) { ret = getLongByByte(cmd, 40, 4); } return ret; } - public WgUdpCommShort() - { - Reset(); - } - public void Reset() //数据复位 - { - for(int i=0; i - + @@ -19,7 +19,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -32,7 +33,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -45,7 +47,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -58,7 +61,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -78,7 +82,8 @@ %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n - + 1 ${logPath}/infoError/${PROJECT_NAME}.%d{yyyy-MM-dd}.log @@ -105,14 +110,15 @@ -        - - - - +         + + + + + - + \ No newline at end of file diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java b/cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java index 5018fff..9084059 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/AttApplication.java @@ -15,7 +15,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication public class AttApplication { -// public static void main(String[] args) { + // public static void main(String[] args) { // SpringApplication.run(AttApplication.class, args); // } public static void main(String[] args) { diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java b/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java index 4dcbca2..519d530 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/Swagger2.java @@ -16,7 +16,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; public class Swagger2 { @Bean - public Docket createRestApi() { + public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enableUrlTemplating(true) @@ -27,12 +27,13 @@ public class Swagger2 { .build(); } - private ApiInfo apiInfo() { + + private ApiInfo apiInfo() { return new ApiInfoBuilder() - .title("Spring Boot中使用Swagger2构建RESTful APIs") - .description("接口文档") - .termsOfServiceUrl("") + .title("Spring Boot中使用Swagger2构建RESTful APIs") + .description("接口文档") + .termsOfServiceUrl("") .version("1.0") - .build(); - } + .build(); + } } diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java b/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java index 1c688af..ae68193 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java @@ -43,80 +43,80 @@ public class AttPushController { private static final Logger Log_kaoInfo = LoggerUtils.Logger(LogName.kaoInfo); private static Map> cmdMap = new HashMap<>(); - private static Map cmdOrderMap = new HashMap<>(); + private static Map cmdOrderMap = new HashMap<>(); - private static String pwd = "22222222-6faf-48uh-a5a9-447ec68bfe2f" ; - private static String account = "yueqingzhijiao" ; + private static String pwd = "22222222-6faf-48uh-a5a9-447ec68bfe2f"; + private static String account = "yueqingzhijiao"; @Autowired ScFeign scFeign; @Autowired - XaFeign xaFeign ; + XaFeign xaFeign; - @RequestMapping(value = "sendUser/{roomId}" , method = RequestMethod.GET) - public void sendUser(@PathVariable int roomId){ + @RequestMapping(value = "sendUser/{roomId}", method = RequestMethod.GET) + public void sendUser(@PathVariable int roomId) { JSONObject object = new JSONObject(); - object.put("PageIndex",1); - object.put("roomId",roomId); - object.put("pageSize",9999); - JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom",object.toJSONString()); - JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList") ; + object.put("PageIndex", 1); + object.put("roomId", roomId); + object.put("pageSize", 9999); + JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom", object.toJSONString()); + JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList"); List order = new ArrayList<>(); List attendanceList = scFeign.selectRoomAttendance(roomId); - for(String attendance : attendanceList){ - for(int i = 0 ; i < array.size() ; i++){ + for (String attendance : attendanceList) { + for (int i = 0; i < array.size(); i++) { JSONObject student = (JSONObject) array.get(i); UserOrderVo vo = new UserOrderVo(); vo.setStudentId((Integer) student.get("studentid")); vo.setStudentName((String) student.get("name")); - int number = 1 ; - try{ - number = cmdOrderMap.get(attendance) ; - }catch (Exception e){ + int number = 1; + try { + number = cmdOrderMap.get(attendance); + } catch (Exception e) { } vo.setNumber(number); - number++ ; - cmdOrderMap.put(attendance,number) ; - if(vo.getStudentId() != 0){ + number++; + cmdOrderMap.put(attendance, number); + if (vo.getStudentId() != 0) { order.add(vo.toString()); } } - cmdMap.put(attendance,order); + cmdMap.put(attendance, order); } } - @RequestMapping(value = "sendFinger/{roomId}" , method = RequestMethod.GET) - public void sendFinger(@PathVariable int roomId){ + @RequestMapping(value = "sendFinger/{roomId}", method = RequestMethod.GET) + public void sendFinger(@PathVariable int roomId) { JSONObject object = new JSONObject(); - object.put("PageIndex",1); - object.put("roomId",roomId); - object.put("pageSize",9999); - JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom",object.toJSONString()); - JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList") ; + object.put("PageIndex", 1); + object.put("roomId", roomId); + object.put("pageSize", 9999); + JSONObject result = HttpClientUtils.httpPostJson("http://campus.myjxt.com/api/Room/GetListPageRoom", object.toJSONString()); + JSONArray array = (JSONArray) ((JSONObject) result.get("data")).get("roomList"); List order = new ArrayList<>(); List attendanceList = scFeign.selectRoomAttendance(roomId); - for(String attendance : attendanceList){ - for(int i = 0 ; i < array.size() ; i++){ + for (String attendance : attendanceList) { + for (int i = 0; i < array.size(); i++) { JSONObject student = (JSONObject) array.get(i); FingerOrderVo vo = new FingerOrderVo(); - int number = 1 ; - try{ - number = cmdOrderMap.get(attendance) ; - }catch (Exception e){ + int number = 1; + try { + number = cmdOrderMap.get(attendance); + } catch (Exception e) { } vo.setNumber(number); - vo.setOrder(xaFeign.selectFinger((Integer)student.get("studentid"))); - number++ ; - cmdOrderMap.put(attendance,number) ; - if(StringUtils.isNotBlank(vo.getOrder())){ + vo.setOrder(xaFeign.selectFinger((Integer) student.get("studentid"))); + number++; + cmdOrderMap.put(attendance, number); + if (StringUtils.isNotBlank(vo.getOrder())) { order.add(vo.toString()); } } - cmdMap.put(attendance,order); + cmdMap.put(attendance, order); } } @@ -124,28 +124,28 @@ public class AttPushController { * 1,设备通完电以后第一个发送到后台的请求 * 格式为 /iclock/cdata?options=all&language=xxxx&pushver=xxxx */ - @RequestMapping(value="/cdata",params = {"options","language","pushver"},method = RequestMethod.GET) - public void init(String SN, String options, String language, String pushver, HttpServletRequest request , - @RequestParam(required = false) String PushOptionsFlag, HttpServletResponse response){ + @RequestMapping(value = "/cdata", params = {"options", "language", "pushver"}, method = RequestMethod.GET) + public void init(String SN, String options, String language, String pushver, HttpServletRequest request, + @RequestParam(required = false) String PushOptionsFlag, HttpServletResponse response) { try { - if(cmdMap.get(SN) == null){ - cmdMap.put(SN,new ArrayList<>()); - cmdOrderMap.put(SN,1); + if (cmdMap.get(SN) == null) { + cmdMap.put(SN, new ArrayList<>()); + cmdOrderMap.put(SN, 1); } - if(scFeign.selectAttendaceWithId(SN) == null){ + if (scFeign.selectAttendaceWithId(SN) == null) { SZ_AttendanceDto attendanceDto = new SZ_AttendanceDto(); attendanceDto.setClint_id(SN); attendanceDto.setClint_type("24"); attendanceDto.setIp(request.getRemoteAddr()); attendanceDto.setPort(request.getRemotePort()); - attendanceDto.setIntime(DateUtils.date2String(new Date(),DateUtils.format2)); + attendanceDto.setIntime(DateUtils.date2String(new Date(), DateUtils.format2)); attendanceDto.setSchool_id("-1"); attendanceDto.setState(1); scFeign.insertAttendance(attendanceDto); - }else { + } else { scFeign.updateAttendance(SN); } - String initOptions = initOptions(SN,PushOptionsFlag); + String initOptions = initOptions(SN, PushOptionsFlag); response.getWriter().write(initOptions);//返回成功以后设备会发送心跳请求 } catch (IOException e) { e.printStackTrace(); @@ -156,18 +156,18 @@ public class AttPushController { * 2,心跳请求,会从服务器拿到命令返回 给设备 */ @RequestMapping("/getrequest") - public void heartBeat(String SN, HttpServletResponse response){ + public void heartBeat(String SN, HttpServletResponse response) { scFeign.updateAttendance(SN); StringBuffer sb = new StringBuffer("OK"); - List cmds = cmdMap.get(SN); - if(cmds==null){//等于空说明从来没加载过,如果初始化加载过了,此时应该不为Null 只是size为0 + List cmds = cmdMap.get(SN); + if (cmds == null) {//等于空说明从来没加载过,如果初始化加载过了,此时应该不为Null 只是size为0 cmds = new ArrayList<>(); - cmdMap.put(SN,cmds); - cmdOrderMap.put(SN,1); + cmdMap.put(SN, cmds); + cmdOrderMap.put(SN, 1); } - if(cmds!=null&&cmds.size()>0){ - sb.setLength(0);//如果有命令就不返回OK了 - cmds.stream().forEach(cmd->sb.append(cmd).append("\r\n\r\n")); + if (cmds != null && cmds.size() > 0) { + sb.setLength(0);//如果有命令就不返回OK了 + cmds.stream().forEach(cmd -> sb.append(cmd).append("\r\n\r\n")); } try { @@ -184,8 +184,8 @@ public class AttPushController { * 这个请求,服务器只能返回OK,不可以返回命令 */ @RequestMapping("/ping") - public void ping(HttpServletResponse response){ - System.out.println("考勤机心跳请求大量进来了......ping"+new SimpleDateFormat("HH:mm:ss").format(new Date())); + public void ping(HttpServletResponse response) { + System.out.println("考勤机心跳请求大量进来了......ping" + new SimpleDateFormat("HH:mm:ss").format(new Date())); try { response.getWriter().write("OK"); } catch (IOException e) { @@ -197,20 +197,20 @@ public class AttPushController { * 4,设备端处理完命令以后会发送该请求,告诉服务器命令的处理结果 */ @RequestMapping("/devicecmd") - public void handleCmd(String SN, @RequestBody String data, HttpServletResponse response){ + public void handleCmd(String SN, @RequestBody String data, HttpServletResponse response) { //判断data 清空map List cmdList = cmdMap.get(SN); String[] returnList = data.split("\n"); - if(returnList.length > 0 && cmdList.size() > 0){ - for(String message : returnList){ - String number = message.substring(message.indexOf("=")+1,message.indexOf("&")); - String result = message.substring(message.indexOf("=",message.indexOf("&"))+1,message.indexOf("&",message.indexOf("&")+1)); - if(result.equals("0")){ + if (returnList.length > 0 && cmdList.size() > 0) { + for (String message : returnList) { + String number = message.substring(message.indexOf("=") + 1, message.indexOf("&")); + String result = message.substring(message.indexOf("=", message.indexOf("&")) + 1, message.indexOf("&", message.indexOf("&") + 1)); + if (result.equals("0")) { Iterator it = cmdList.iterator(); while (((Iterator) it).hasNext()) { String b = it.next(); - if (b.contains("C:"+number)) { - Log_orderSuccess.info("指令成功=========="+b); + if (b.contains("C:" + number)) { + Log_orderSuccess.info("指令成功==========" + b); it.remove(); } } @@ -233,19 +233,19 @@ public class AttPushController { request.setCharacterEncoding("gbk"); String data = ""; ByteArrayOutputStream bos = null; - byte[] b= new byte[1024]; + byte[] b = new byte[1024]; try { InputStream is = request.getInputStream(); bos = new ByteArrayOutputStream(); int len = 0; - while((len=is.read(b))!=-1){ - bos.write(b,0,len); + while ((len = is.read(b)) != -1) { + bos.write(b, 0, len); } - data = new String(bos.toByteArray(),"gbk"); + data = new String(bos.toByteArray(), "gbk"); } catch (IOException e) { e.printStackTrace(); } - if("ATTLOG".equals(table)){ + if ("ATTLOG".equals(table)) { String[] list = data.split("\t"); String cardNo = scFeign.selectStudentNumByStudentId(Integer.valueOf(list[0])); cardNo = new BigInteger(cardNo, 16).toString(); @@ -262,17 +262,17 @@ public class AttPushController { String jsonResult = JSON.toJSONString(attendanceInfoBean); String urlHXY = "http://campus.myjxt.com/api/XiaoAnCommon/SendHXY"; JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult); - if ((int) jsonObject.get("status") == 1){ + if ((int) jsonObject.get("status") == 1) { Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo); - }else { + } else { Log_orderFail.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString()); } } - if("OPERLOG".equals(table)){ + if ("OPERLOG".equals(table)) { //操作日志 - if(data.substring(0,3).contains("FP")){ + if (data.substring(0, 3).contains("FP")) { //添加指纹 - String studentId = data.substring(data.indexOf("=")+1,data.indexOf("\t",data.indexOf("="))); + String studentId = data.substring(data.indexOf("=") + 1, data.indexOf("\t", data.indexOf("="))); String order = data.substring(3); FingerDto fingerDto = new FingerDto(); fingerDto.setOrderMsg(order); @@ -290,13 +290,14 @@ public class AttPushController { /** * 设备通电以后连接到服务器,需要返回的初始化参数 + * * @param sn * @param PushOptionsFlag * @return */ - private String initOptions(String sn,String PushOptionsFlag) { + private String initOptions(String sn, String PushOptionsFlag) { StringBuffer devOptions = new StringBuffer(); - devOptions.append("GET OPTION FROM: "+sn); + devOptions.append("GET OPTION FROM: " + sn); // + "\nStamp=" + devInfo.devInfoJson.getString("Stamp") devOptions.append("\nATTLOGStamp=0"); devOptions.append("\nOPERLOGStamp=0"); @@ -320,9 +321,8 @@ public class AttPushController { // 11 工作号码 // 12 比对照片 devOptions.append("\nTransFlag=111111111111");// 1-12二进制位 分别代表以上含义 - System.out.println("PushOptionsFlag============="+PushOptionsFlag); - if (PushOptionsFlag!=null&&PushOptionsFlag.equals("1")) - { + System.out.println("PushOptionsFlag=============" + PushOptionsFlag); + if (PushOptionsFlag != null && PushOptionsFlag.equals("1")) { // 支持参数单独获取的才要把需要获取的参数回传给设备 modifeid by max 20170926 devOptions.append("\nPushOptions=RegDeviceType,FingerFunOn,FaceFunOn,FPVersion,FaceVersion,NetworkType,HardwareId3,HardwareId5,HardwareId56,LicenseStatus3,LicenseStatus5,LicenseStatus56"); } diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java index 179342e..90692d5 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java @@ -23,13 +23,13 @@ public interface ScFeign { @RequestMapping(value = "attendance/updateAttendance", method = RequestMethod.GET) void updateAttendance(@RequestParam("clientId") String clientId); - @RequestMapping(value = "attendance/selectAttendaceWithId" , method = RequestMethod.GET) + @RequestMapping(value = "attendance/selectAttendaceWithId", method = RequestMethod.GET) SZ_AttendanceDto selectAttendaceWithId(@RequestParam("clint_id") String clint_id); @RequestMapping(value = "attendance/selectRoomAttendance", method = RequestMethod.GET) List selectRoomAttendance(@RequestParam("placeId") int placeId); - @RequestMapping(value = "/sm/user/selectStudentNumByStudentId",method = RequestMethod.GET) + @RequestMapping(value = "/sm/user/selectStudentNumByStudentId", method = RequestMethod.GET) String selectStudentNumByStudentId(@RequestParam("studentId") int studentId); diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java index 761b4ba..1710e4a 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/XaFeign.java @@ -15,9 +15,9 @@ import org.springframework.web.bind.annotation.RequestParam; @FeignClient("xiaoanSearch") public interface XaFeign { - @RequestMapping(value = "/xa/zk/insertFinger",method = RequestMethod.POST) + @RequestMapping(value = "/xa/zk/insertFinger", method = RequestMethod.POST) int insertFinger(@RequestBody FingerDto fingerDto); - @RequestMapping(value = "/xa/zk/selectFinger",method = RequestMethod.GET) + @RequestMapping(value = "/xa/zk/selectFinger", method = RequestMethod.GET) String selectFinger(@RequestParam("studentId") int studentId); } diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/vo/FingerOrderVo.java b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/FingerOrderVo.java index 82b1ff6..1d1339c 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/vo/FingerOrderVo.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/FingerOrderVo.java @@ -2,14 +2,15 @@ package com.sincere.att.vo; /** * 下发 指纹命令 + * * @author chen * @version 1.0 * @date 2019/12/31 0031 15:39 */ public class FingerOrderVo { - private int number ; - private String order ; + private int number; + private String order; public int getNumber() { return number; @@ -29,6 +30,6 @@ public class FingerOrderVo { @Override public String toString() { - return "C:"+this.number+":DATA UPDATE FINGERTMP "+this.order+"\r\n\r\n"; + return "C:" + this.number + ":DATA UPDATE FINGERTMP " + this.order + "\r\n\r\n"; } } diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java index 1c60f80..8d1ce43 100644 --- a/cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java +++ b/cloud/zkAttendance/src/main/java/com/sincere/att/vo/UserOrderVo.java @@ -2,15 +2,16 @@ package com.sincere.att.vo; /** * 下发用户 指令 + * * @author chen * @version 1.0 * @date 2019/12/31 0031 9:08 */ public class UserOrderVo { - private String studentName ; - private int number ; - private int studentId ; + private String studentName; + private int number; + private int studentId; public int getNumber() { return number; @@ -38,6 +39,6 @@ public class UserOrderVo { @Override public String toString() { - return "C:"+this.number+":DATA UPDATE USERINFO PIN="+this.studentId+"\tName="+this.studentName+"\tPasswd=\tCard=\tPri=0\r\n\r\n"; + return "C:" + this.number + ":DATA UPDATE USERINFO PIN=" + this.studentId + "\tName=" + this.studentName + "\tPasswd=\tCard=\tPri=0\r\n\r\n"; } } diff --git a/cloud/zkAttendance/src/main/resources/logback.xml b/cloud/zkAttendance/src/main/resources/logback.xml index 02e9fb0..0a0fc68 100644 --- a/cloud/zkAttendance/src/main/resources/logback.xml +++ b/cloud/zkAttendance/src/main/resources/logback.xml @@ -1,7 +1,7 @@ - + @@ -19,7 +19,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -32,7 +33,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -45,7 +47,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -58,7 +61,8 @@ %d{yyyy-MM-dd HH:mm:ss} -%msg%n - + 1 @@ -78,7 +82,8 @@ %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n - + 1 ${logPath}/infoError/${PROJECT_NAME}.%d{yyyy-MM-dd}.log @@ -105,14 +110,15 @@ -        - - - - +         + + + + + - + \ No newline at end of file -- libgit2 0.21.0