hikvision.go 23 KB

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