hikvision.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. package service
  2. import (
  3. "city_chips/internal/model"
  4. "city_chips/internal/repository"
  5. "city_chips/pkg/helper/hikvisionOpenAPIGo"
  6. "encoding/json"
  7. "errors"
  8. "strings"
  9. "github.com/spf13/viper"
  10. //"github.com/zxbit2011/hikvisionOpenAPIGo"
  11. )
  12. type HikvisionService interface {
  13. Hikvision(url string, body map[string]any, timeout int) (hikvisionOpenAPIGo.Result, error)
  14. DeviceResource(Device string) (error, model.DeviceResource)
  15. GetRegionsRoot() (error, model.RegionsRoot)
  16. GetRegionsSubRegions(pageNo, pageSize string) (error, model.RegionsSubRegions)
  17. GetVqdByIndexCodes(pageNo, pageSize string, indexCodes []string) (error, model.VqdList)
  18. GetCameraOnline(regionId, includeSubNode, status, pageNo, pageSize string, indexCodes []string) (error, model.CameraOnline)
  19. GetRecordList(beginTime, endTime, pageNo, pageSize string, indexCodes []string) (error, model.RecordList)
  20. GetCamerasList(pageNo, pageSize string) (error, model.Cameras)
  21. GetVisitingRecords(receptionistId, receptionistName, visitorName, pageNo, pageSize string) (error, model.VisitingRecords)
  22. GetVisitorTypeInfo(pageNo, pageSize string) (error, model.VisitorTypeInfo)
  23. GetAppointmentRecords(receptionistId, visitorName, phoneNo, pageNo, pageSize string) (error, model.VisitorTypeInfo)
  24. GetVisitorTypeList() (error, model.VisitorTypeList)
  25. GetTurnoverSearch(pageNo, pageSize string) (error, model.TurnoverSearch)
  26. GetcameraSearch(pageNo, pageSize, name string) (error, hikvisionOpenAPIGo.Result)
  27. GetDoorSearch(pageNo, pageSize, name string, doorIndexCodes []string) (error, hikvisionOpenAPIGo.Result)
  28. GetDoorStates(pageNo, pageSize string, indexCodes []string) (error, hikvisionOpenAPIGo.Result)
  29. GetAcsDeviceSearch(pageNo, pageSize, name string) (error, hikvisionOpenAPIGo.Result)
  30. GetManualCapture(cameraIndexCode string) (error, hikvisionOpenAPIGo.Result)
  31. GetAcsDoorStates(indexCodes []string) (error, hikvisionOpenAPIGo.Result)
  32. GetDoorDoControl(doorIndexCodes []string, controlType int) (error, hikvisionOpenAPIGo.Result)
  33. GetEventLogs(pageNo, pageSize, srcType, startTime, endTime, srcName string, eventType int) (error, hikvisionOpenAPIGo.Result)
  34. }
  35. func NewHikvisionService(service *Service, hikvisionRepository repository.HikvisionRepository, conf *viper.Viper) HikvisionService {
  36. return &hikvisionService{
  37. Service: service,
  38. hikvisionRepository: hikvisionRepository,
  39. conf: conf,
  40. }
  41. }
  42. type hikvisionService struct {
  43. *Service
  44. hikvisionRepository repository.HikvisionRepository
  45. conf *viper.Viper
  46. }
  47. // Hikvision 海康威视对接
  48. func (s *hikvisionService) Hikvision(url string, body map[string]any, timeout int) (hikvisionOpenAPIGo.Result, error) {
  49. config := hikvisionOpenAPIGo.HKConfig{
  50. Ip: s.conf.GetString("hikvision.Ip"),
  51. Port: s.conf.GetInt("hikvision.Port"),
  52. AppKey: s.conf.GetString("hikvision.AppKey"),
  53. Secret: s.conf.GetString("hikvision.Secret"),
  54. IsHttps: s.conf.GetBool("hikvision.IsHttps"),
  55. }
  56. result, err := config.HttpPost(url, body, timeout)
  57. return result, err
  58. }
  59. // DeviceResource 根据设备类型获取设备资源
  60. func (s *hikvisionService) DeviceResource(Device string) (error, model.DeviceResource) {
  61. var deviceResource model.DeviceResource
  62. m := make(map[string]any)
  63. m["pageNo"] = "1"
  64. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  65. m["resourceType"] = Device
  66. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.deviceResource"), m, 15)
  67. if err != nil {
  68. return errors.New("获取设备资源失败"), deviceResource
  69. }
  70. if hikvision.Code != "0" {
  71. return errors.New("获取设备资源失败"), deviceResource
  72. }
  73. marshalString, err := json.Marshal(hikvision)
  74. if err != nil {
  75. return errors.New("json序列化失败"), deviceResource
  76. }
  77. err = json.Unmarshal(marshalString, &deviceResource)
  78. if err != nil {
  79. return errors.New("json反序列化失败"), deviceResource
  80. }
  81. return nil, deviceResource
  82. }
  83. // GetRegionsRoot 获取根目录资源信息
  84. func (s *hikvisionService) GetRegionsRoot() (error, model.RegionsRoot) {
  85. var regionsRoot model.RegionsRoot
  86. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.regionsRoot"), nil, 15)
  87. if err != nil {
  88. return errors.New("获取根目录资源失败"), regionsRoot
  89. }
  90. if hikvision.Code != "0" {
  91. return errors.New("获取根目录资源失败"), regionsRoot
  92. }
  93. marshalString, err := json.Marshal(hikvision)
  94. if err != nil {
  95. return errors.New("json序列化失败"), regionsRoot
  96. }
  97. err = json.Unmarshal(marshalString, &regionsRoot)
  98. if err != nil {
  99. return errors.New("json反序列化失败"), regionsRoot
  100. }
  101. return nil, regionsRoot
  102. }
  103. // GetRegionsSubRegions 获取子目录资源信息
  104. func (s *hikvisionService) GetRegionsSubRegions(pageNo, pageSize string) (error, model.RegionsSubRegions) {
  105. var regionsSubRegions model.RegionsSubRegions
  106. m := make(map[string]any)
  107. if pageNo != "" {
  108. m["pageNo"] = pageNo
  109. } else {
  110. m["pageNo"] = "1"
  111. }
  112. if pageSize != "" {
  113. m["pageSize"] = pageSize
  114. } else {
  115. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  116. }
  117. m["parentIndexCode"] = "0"
  118. m["resourceType"] = "0"
  119. m["cascadeFlag"] = "0"
  120. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.regionsSubRegions"), m, 15)
  121. if err != nil {
  122. return errors.New("获取子目录资源信息失败"), regionsSubRegions
  123. }
  124. if hikvision.Code != "0" {
  125. return errors.New("获取子目录资源信息失败"), regionsSubRegions
  126. }
  127. marshalString, err := json.Marshal(hikvision)
  128. if err != nil {
  129. return errors.New("json序列化失败"), regionsSubRegions
  130. }
  131. err = json.Unmarshal(marshalString, &regionsSubRegions)
  132. if err != nil {
  133. return errors.New("json反序列化失败"), regionsSubRegions
  134. }
  135. return nil, regionsSubRegions
  136. }
  137. // GetVqdByIndexCodes 根据监控点列表查询视频质量诊断结果
  138. func (s *hikvisionService) GetVqdByIndexCodes(pageNo, pageSize string, indexCodes []string) (error, model.VqdList) {
  139. var vqdlist model.VqdList
  140. // 获取门禁状态
  141. m := make(map[string]any)
  142. if pageNo != "" {
  143. m["pageNo"] = pageNo
  144. } else {
  145. m["pageNo"] = "1"
  146. }
  147. if pageSize != "" {
  148. m["pageSize"] = pageSize
  149. } else {
  150. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  151. }
  152. m["indexCodes"] = strings.Join(indexCodes, ",")
  153. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.vqdList"), m, 15)
  154. if err != nil {
  155. return errors.New("获取视频质量诊断信息失败"), vqdlist
  156. }
  157. if hikvision.Code != "0" {
  158. return errors.New("获取视频质量诊断失败"), vqdlist
  159. }
  160. marshalString, err := json.Marshal(hikvision)
  161. if err != nil {
  162. return errors.New("json序列化失败"), vqdlist
  163. }
  164. err = json.Unmarshal(marshalString, &vqdlist)
  165. if err != nil {
  166. return errors.New("json反序列化失败"), vqdlist
  167. }
  168. return nil, vqdlist
  169. }
  170. // GetCameraOnline 获取监控点在线状态
  171. //
  172. // regionId string false 区域编号,可从查询区域列表v2接口获取返回参数indexCode
  173. // includeSubNode string false 是否包含下级,1包含,0不包含(若regionId为空,则该参数不起作用)
  174. // indexCodes string[] false 监控点编码集,最大500,查询监控点列表接口获取返回参数cameraIndexCode
  175. // status string false 状态,1-在线,0-离线,-1-未检测
  176. func (s *hikvisionService) GetCameraOnline(regionId, includeSubNode, status, pageNo, pageSize string, indexCodes []string) (error, model.CameraOnline) {
  177. var cameraOnline model.CameraOnline
  178. // 获取门禁状态
  179. m := make(map[string]any)
  180. if pageNo != "" {
  181. m["pageNo"] = pageNo
  182. } else {
  183. m["pageNo"] = "1"
  184. }
  185. if pageSize != "" {
  186. m["pageSize"] = pageSize
  187. } else {
  188. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  189. }
  190. if regionId != "" {
  191. m["regionId"] = regionId
  192. }
  193. if includeSubNode != "" {
  194. m["includeSubNode"] = includeSubNode
  195. }
  196. if status != "" {
  197. m["status"] = status
  198. }
  199. if len(indexCodes) > 0 {
  200. m["indexCodes"] = strings.Join(indexCodes, ",")
  201. }
  202. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.getCameraOnline"), m, 15)
  203. if err != nil {
  204. return errors.New("获取监控点在线状态信息失败"), cameraOnline
  205. }
  206. if hikvision.Code != "0" {
  207. return errors.New("获取监控点在线状态失败"), cameraOnline
  208. }
  209. marshalString, err := json.Marshal(hikvision)
  210. if err != nil {
  211. return errors.New("json序列化失败"), cameraOnline
  212. }
  213. err = json.Unmarshal(marshalString, &cameraOnline)
  214. if err != nil {
  215. return errors.New("json反序列化失败"), cameraOnline
  216. }
  217. return nil, cameraOnline
  218. }
  219. // GetRecordList 根据监控点列表查询录像完整性结果
  220. // pageNo integer true 当前页码,0 < pageNo
  221. // pageSize integer true 分页大小,0<pageSize≤1000
  222. // beginTime string true 录像开始日期,IOS8601格式
  223. // endTime string true 录像结束日期,IOS8601格式
  224. // indexCodes string[] true 监控点编号集,
  225. // 查询监控点列表接口获取返回参数cameraIndexCode
  226. func (s *hikvisionService) GetRecordList(beginTime, endTime, pageNo, pageSize string, indexCodes []string) (error, model.RecordList) {
  227. var recordList model.RecordList
  228. // 获取门禁状态
  229. m := make(map[string]any)
  230. if pageNo != "" {
  231. m["pageNo"] = pageNo
  232. } else {
  233. m["pageNo"] = "1"
  234. }
  235. if pageSize != "" {
  236. m["pageSize"] = pageSize
  237. } else {
  238. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  239. }
  240. m["beginTime"] = beginTime
  241. m["endTime"] = endTime
  242. if len(indexCodes) > 0 {
  243. m["indexCodes"] = strings.Join(indexCodes, ",")
  244. }
  245. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.recordList"), m, 15)
  246. if err != nil {
  247. return errors.New("获取监控点列表查询录像完整性失败"), recordList
  248. }
  249. if hikvision.Code != "0" {
  250. return errors.New("获取监控点列表查询录像完整性失败"), recordList
  251. }
  252. marshalString, err := json.Marshal(hikvision)
  253. if err != nil {
  254. return errors.New("json序列化失败"), recordList
  255. }
  256. err = json.Unmarshal(marshalString, &recordList)
  257. if err != nil {
  258. return errors.New("json反序列化失败"), recordList
  259. }
  260. return nil, recordList
  261. }
  262. // GetCamerasList 分页获取监控点资源
  263. func (s *hikvisionService) GetCamerasList(pageNo, pageSize string) (error, model.Cameras) {
  264. var cameras model.Cameras
  265. // 获取门禁状态
  266. m := make(map[string]any)
  267. if pageNo != "" {
  268. m["pageNo"] = pageNo
  269. } else {
  270. m["pageNo"] = "1"
  271. }
  272. if pageSize != "" {
  273. m["pageSize"] = pageSize
  274. } else {
  275. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  276. }
  277. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.cameras"), m, 15)
  278. if err != nil {
  279. return errors.New("获取监控点列表查询录像完整性失败"), cameras
  280. }
  281. if hikvision.Code != "0" {
  282. return errors.New("获取监控点列表查询录像完整性失败"), cameras
  283. }
  284. marshalString, err := json.Marshal(hikvision)
  285. if err != nil {
  286. return errors.New("json序列化失败"), cameras
  287. }
  288. err = json.Unmarshal(marshalString, &cameras)
  289. if err != nil {
  290. return errors.New("json反序列化失败"), cameras
  291. }
  292. return nil, cameras
  293. }
  294. // GetVisitingRecords 查询访客来访记录v2
  295. // receptionistId 被访人唯一标识
  296. // receptionistName 被访人姓名
  297. // visitorName 访客名称
  298. func (s *hikvisionService) GetVisitingRecords(receptionistId, receptionistName, visitorName, pageNo, pageSize string) (error, model.VisitingRecords) {
  299. var visitingRecords model.VisitingRecords
  300. // 获取门禁状态
  301. m := make(map[string]any)
  302. if pageNo != "" {
  303. m["pageNo"] = pageNo
  304. } else {
  305. m["pageNo"] = "1"
  306. }
  307. if pageSize != "" {
  308. m["pageSize"] = pageSize
  309. } else {
  310. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  311. }
  312. if receptionistId != "" {
  313. m["receptionistId"] = receptionistId
  314. }
  315. if receptionistName != "" {
  316. m["receptionistName"] = receptionistName
  317. }
  318. if visitorName != "" {
  319. m["visitorName"] = visitorName
  320. }
  321. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.visitingRecords"), m, 15)
  322. if err != nil {
  323. return errors.New("获取查询访客来访记录失败"), visitingRecords
  324. }
  325. if hikvision.Code != "0" {
  326. return errors.New("获取查询访客来访记录失败"), visitingRecords
  327. }
  328. marshalString, err := json.Marshal(hikvision)
  329. if err != nil {
  330. return errors.New("json序列化失败"), visitingRecords
  331. }
  332. err = json.Unmarshal(marshalString, &visitingRecords)
  333. if err != nil {
  334. return errors.New("json反序列化失败"), visitingRecords
  335. }
  336. return nil, visitingRecords
  337. }
  338. // GetVisitorTypeInfo 查询访客类型
  339. func (s *hikvisionService) GetVisitorTypeInfo(pageNo, pageSize string) (error, model.VisitorTypeInfo) {
  340. var visitorTypeInfo model.VisitorTypeInfo
  341. // 获取门禁状态
  342. m := make(map[string]any)
  343. if pageNo != "" {
  344. m["pageNo"] = pageNo
  345. } else {
  346. m["pageNo"] = "1"
  347. }
  348. if pageSize != "" {
  349. m["pageSize"] = pageSize
  350. } else {
  351. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  352. }
  353. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.visitorTypeInfo"), m, 15)
  354. if err != nil {
  355. return errors.New("获取查询访客类型失败"), visitorTypeInfo
  356. }
  357. if hikvision.Code != "0" {
  358. return errors.New("获取查询访客类型失败"), visitorTypeInfo
  359. }
  360. marshalString, err := json.Marshal(hikvision)
  361. if err != nil {
  362. return errors.New("json序列化失败"), visitorTypeInfo
  363. }
  364. err = json.Unmarshal(marshalString, &visitorTypeInfo)
  365. if err != nil {
  366. return errors.New("json反序列化失败"), visitorTypeInfo
  367. }
  368. return nil, visitorTypeInfo
  369. }
  370. // GetAppointmentRecords 查询预约记录v2
  371. // receptionistId 被访人唯一标识
  372. // visitorName 访客名称
  373. // phoneNo 手机号码
  374. func (s *hikvisionService) GetAppointmentRecords(receptionistId, visitorName, phoneNo, pageNo, pageSize string) (error, model.VisitorTypeInfo) {
  375. var visitorTypeInfo model.VisitorTypeInfo
  376. // 获取门禁状态
  377. m := make(map[string]any)
  378. if pageNo != "" {
  379. m["pageNo"] = pageNo
  380. } else {
  381. m["pageNo"] = "1"
  382. }
  383. if pageSize != "" {
  384. m["pageSize"] = pageSize
  385. } else {
  386. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  387. }
  388. if receptionistId != "" {
  389. m["receptionistId"] = receptionistId
  390. }
  391. if visitorName != "" {
  392. m["visitorName"] = visitorName
  393. }
  394. if phoneNo != "" {
  395. m["phoneNo"] = phoneNo
  396. }
  397. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.visitorTypeInfo"), m, 15)
  398. if err != nil {
  399. return errors.New("获取查询预约记录失败"), visitorTypeInfo
  400. }
  401. if hikvision.Code != "0" {
  402. return errors.New("获取查询预约记录失败"), visitorTypeInfo
  403. }
  404. marshalString, err := json.Marshal(hikvision)
  405. if err != nil {
  406. return errors.New("json序列化失败"), visitorTypeInfo
  407. }
  408. err = json.Unmarshal(marshalString, &visitorTypeInfo)
  409. if err != nil {
  410. return errors.New("json反序列化失败"), visitorTypeInfo
  411. }
  412. return nil, visitorTypeInfo
  413. }
  414. // GetVisitorTypeList 查询全部访客类型
  415. func (s *hikvisionService) GetVisitorTypeList() (error, model.VisitorTypeList) {
  416. var visitorTypeList model.VisitorTypeList
  417. // 获取门禁状态
  418. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.visitorTypeInfo"), nil, 15)
  419. if err != nil {
  420. return errors.New("获取访客类型失败"), visitorTypeList
  421. }
  422. if hikvision.Code != "0" {
  423. return errors.New("获取访客类型失败"), visitorTypeList
  424. }
  425. marshalString, err := json.Marshal(hikvision)
  426. if err != nil {
  427. return errors.New("json序列化失败"), visitorTypeList
  428. }
  429. err = json.Unmarshal(marshalString, &visitorTypeList)
  430. if err != nil {
  431. return errors.New("json反序列化失败"), visitorTypeList
  432. }
  433. return nil, visitorTypeList
  434. }
  435. // GetTurnoverSearch 查询访客出入事件
  436. func (s *hikvisionService) GetTurnoverSearch(pageNo, pageSize string) (error, model.TurnoverSearch) {
  437. var turnoverSearch model.TurnoverSearch
  438. m := make(map[string]any)
  439. if pageNo != "" {
  440. m["pageNo"] = pageNo
  441. } else {
  442. m["pageNo"] = "1"
  443. }
  444. if pageSize != "" {
  445. m["pageSize"] = pageSize
  446. } else {
  447. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  448. }
  449. // 获取门禁状态
  450. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.turnoverSearch"), m, 15)
  451. if err != nil {
  452. return errors.New("获取访客出入事件失败"), turnoverSearch
  453. }
  454. if hikvision.Code != "0" {
  455. return errors.New("获取访客出入事件失败"), turnoverSearch
  456. }
  457. marshalString, err := json.Marshal(hikvision)
  458. if err != nil {
  459. return errors.New("json序列化失败"), turnoverSearch
  460. }
  461. err = json.Unmarshal(marshalString, &turnoverSearch)
  462. if err != nil {
  463. return errors.New("json反序列化失败"), turnoverSearch
  464. }
  465. return nil, turnoverSearch
  466. }
  467. // GetCameraSearch 获取摄像头列表
  468. func (s *hikvisionService) GetcameraSearch(pageNo, pageSize, name string) (error, hikvisionOpenAPIGo.Result) {
  469. //var cameraSearch model.CameraSearch
  470. m := make(map[string]any)
  471. if pageNo != "" {
  472. m["pageNo"] = pageNo
  473. } else {
  474. m["pageNo"] = "1"
  475. }
  476. if pageSize != "" {
  477. m["pageSize"] = pageSize
  478. } else {
  479. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  480. }
  481. if name != "" {
  482. m["name"] = name
  483. }
  484. // 获取门禁状态
  485. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.cameraSearch"), m, 15)
  486. if err != nil {
  487. return errors.New("获取摄像头列表失败"), hikvisionOpenAPIGo.Result{}
  488. }
  489. if hikvision.Code != "0" {
  490. return errors.New("获取摄像头列表失败"), hikvisionOpenAPIGo.Result{}
  491. }
  492. return nil, hikvision
  493. }
  494. // GetDoorSearch 获取门禁列表
  495. func (s *hikvisionService) GetDoorSearch(pageNo, pageSize, name string, doorIndexCodes []string) (error, hikvisionOpenAPIGo.Result) {
  496. //var cameraSearch model.CameraSearch
  497. m := make(map[string]any)
  498. if pageNo != "" {
  499. m["pageNo"] = pageNo
  500. } else {
  501. m["pageNo"] = "1"
  502. }
  503. if pageSize != "" {
  504. m["pageSize"] = pageSize
  505. } else {
  506. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  507. }
  508. if name != "" {
  509. m["name"] = name
  510. }
  511. if len(doorIndexCodes) != 0 {
  512. m["doorIndexCodes"] = doorIndexCodes
  513. }
  514. // 获取门禁状态
  515. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.doorSearch"), m, 15)
  516. if err != nil {
  517. return errors.New("获取门禁点列表失败"), hikvisionOpenAPIGo.Result{}
  518. }
  519. if hikvision.Code != "0" {
  520. return errors.New("获取门禁点列表失败"), hikvisionOpenAPIGo.Result{}
  521. }
  522. return nil, hikvision
  523. }
  524. // GetDoorStates 获取门禁设备状态
  525. func (s *hikvisionService) GetDoorStates(pageNo, pageSize string, indexCodes []string) (error, hikvisionOpenAPIGo.Result) {
  526. //var cameraSearch model.CameraSearch
  527. m := make(map[string]any)
  528. if pageNo != "" {
  529. m["pageNo"] = pageNo
  530. } else {
  531. m["pageNo"] = "1"
  532. }
  533. if pageSize != "" {
  534. m["pageSize"] = pageSize
  535. } else {
  536. m["pageSize"] = "10"
  537. }
  538. if len(indexCodes) != 0 {
  539. m["indexCodes"] = indexCodes
  540. }
  541. // 获取门禁状态
  542. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.doorStates"), m, 15)
  543. if err != nil {
  544. return errors.New("获取门禁点状态失败"), hikvisionOpenAPIGo.Result{}
  545. }
  546. if hikvision.Code != "0" {
  547. return errors.New("获取门禁点状态失败"), hikvisionOpenAPIGo.Result{}
  548. }
  549. return nil, hikvision
  550. }
  551. // GetAcsDoorStates 查询门禁点状态
  552. func (s *hikvisionService) GetAcsDoorStates(indexCodes []string) (error, hikvisionOpenAPIGo.Result) {
  553. //var cameraSearch model.CameraSearch
  554. m := make(map[string]any)
  555. if len(indexCodes) != 0 {
  556. m["doorIndexCodes"] = indexCodes
  557. }
  558. // 获取门禁状态
  559. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.acsdoorstates"), m, 15)
  560. if err != nil {
  561. return errors.New("获取门禁点状态失败"), hikvisionOpenAPIGo.Result{}
  562. }
  563. if hikvision.Code != "0" {
  564. return errors.New("获取门禁点状态失败"), hikvisionOpenAPIGo.Result{}
  565. }
  566. return nil, hikvision
  567. }
  568. // GetAcsDeviceSearch 获取门禁设备列表
  569. func (s *hikvisionService) GetAcsDeviceSearch(pageNo, pageSize, name string) (error, hikvisionOpenAPIGo.Result) {
  570. //var cameraSearch model.CameraSearch
  571. m := make(map[string]any)
  572. if pageNo != "" {
  573. m["pageNo"] = pageNo
  574. } else {
  575. m["pageNo"] = "1"
  576. }
  577. if pageSize != "" {
  578. m["pageSize"] = pageSize
  579. } else {
  580. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  581. }
  582. if name != "" {
  583. m["name"] = name
  584. }
  585. // 获取门禁状态
  586. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.acsDeviceSearch"), m, 15)
  587. if err != nil {
  588. return errors.New("获取门禁设备列表失败"), hikvisionOpenAPIGo.Result{}
  589. }
  590. if hikvision.Code != "0" {
  591. return errors.New("获取门禁设备列表失败"), hikvisionOpenAPIGo.Result{}
  592. }
  593. return nil, hikvision
  594. }
  595. // GetManualCapture 手动抓图
  596. func (s *hikvisionService) GetManualCapture(cameraIndexCode string) (error, hikvisionOpenAPIGo.Result) {
  597. //var cameraSearch model.CameraSearch
  598. m := make(map[string]any)
  599. if cameraIndexCode != "" {
  600. m["cameraIndexCode"] = cameraIndexCode
  601. }
  602. // 获取门禁状态
  603. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.manualCapture"), m, 15)
  604. if err != nil {
  605. return errors.New("手动抓图失败"), hikvisionOpenAPIGo.Result{}
  606. }
  607. if hikvision.Code != "0" {
  608. return errors.New("手动抓图失败"), hikvisionOpenAPIGo.Result{}
  609. }
  610. return nil, hikvision
  611. }
  612. // GetDoorDoControl 门禁点控制
  613. func (s *hikvisionService) GetDoorDoControl(doorIndexCodes []string, controlType int) (error, hikvisionOpenAPIGo.Result) {
  614. //var cameraSearch model.CameraSearch
  615. m := make(map[string]any)
  616. if len(doorIndexCodes) != 0 {
  617. m["doorIndexCodes"] = doorIndexCodes
  618. } else {
  619. return errors.New("请选择门禁点"), hikvisionOpenAPIGo.Result{}
  620. }
  621. m["controlType"] = controlType
  622. // 获取门禁状态
  623. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.doorDoControl"), m, 15)
  624. if err != nil {
  625. return errors.New("门禁点控制失败"), hikvisionOpenAPIGo.Result{}
  626. }
  627. if hikvision.Code != "0" {
  628. return errors.New("门禁点控制失败"), hikvisionOpenAPIGo.Result{}
  629. }
  630. return nil, hikvision
  631. }
  632. // GetEventLogs 入侵报警事件日志查询v2
  633. func (s *hikvisionService) GetEventLogs(pageNo, pageSize, srcType, startTime, endTime, srcName string, eventType int) (error, hikvisionOpenAPIGo.Result) {
  634. //var cameraSearch model.CameraSearch
  635. m := make(map[string]any)
  636. if pageNo != "" {
  637. m["pageNo"] = pageNo
  638. } else {
  639. m["pageNo"] = "1"
  640. }
  641. if pageSize != "" {
  642. m["pageSize"] = pageSize
  643. } else {
  644. m["pageSize"] = s.conf.GetString("hikvision.pageSize")
  645. }
  646. if srcType != "" {
  647. m["srcType"] = srcType
  648. }
  649. if startTime != "" {
  650. m["startTime"] = startTime
  651. }
  652. if endTime != "" {
  653. m["endTime"] = endTime
  654. }
  655. if srcName != "" {
  656. m["srcName"] = srcName
  657. }
  658. if eventType != 0 {
  659. m["eventType"] = eventType
  660. }
  661. // 获取门禁状态
  662. hikvision, err := s.Hikvision(s.conf.GetString("hikvision.api.eventLogs"), m, 15)
  663. if err != nil {
  664. return errors.New("入侵报警事件日志查询失败"), hikvisionOpenAPIGo.Result{}
  665. }
  666. if hikvision.Code != "0" {
  667. return errors.New("入侵报警事件日志查询失败"), hikvisionOpenAPIGo.Result{}
  668. }
  669. return nil, hikvision
  670. }