gate.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660
  1. package v1
  2. import (
  3. "git.getensh.com/common/gopkgs/logger"
  4. "git.getensh.com/common/gopkgs/tasker/httptasker"
  5. "git.getensh.com/common/gopkgs/util"
  6. "github.com/gin-gonic/gin"
  7. "go.uber.org/zap"
  8. "net/http"
  9. "property-applete-gateway/errors"
  10. param_v1 "property-applete-gateway/param/v1"
  11. "property-applete-gateway/pb"
  12. "property-applete-gateway/pb/v1"
  13. "property-applete-gateway/utils"
  14. )
  15. //
  16. // @Summary 门禁列表
  17. // @Description 门禁列表
  18. // @Tags 门禁
  19. // @Accept json
  20. // @Produce json
  21. // @Param token header string true " "
  22. // @Param page query int false " "
  23. // @Param page_size query int false " "
  24. // @Param garden_id query int false "小区id"
  25. // @Success 200 {object} v1.GateListResponse
  26. // @Failure 500 {object} base.HTTPError
  27. // @Router /api/v1/gate [get]
  28. func (c *Controller) GateList(ctx *gin.Context) {
  29. // 解析参数
  30. req := &param_v1.GateListRequest{}
  31. parseParamTask := func() error {
  32. err := util.ShouldBind(ctx, &req.Header, nil, &req.GateListQuery, nil)
  33. if err != nil {
  34. logger.Error("func",
  35. zap.String("call", "util.ShouldBind"),
  36. zap.String("error", err.Error()))
  37. return errors.ParamsError
  38. }
  39. return nil
  40. }
  41. // 业务处理
  42. handleServiceTask := func() error {
  43. tokenInfo, err := utils.GetSubjectValue(ctx)
  44. if err != nil {
  45. return err
  46. }
  47. resp := param_v1.GateListResponse{}
  48. rpcReq := &v1.GateListRequest{
  49. Page:req.Page,
  50. PageSize:req.PageSize,
  51. GardenId:tokenInfo.GardenId,
  52. }
  53. rpcRsp, err := pb.Device.GateList(ctx, rpcReq)
  54. if err != nil {
  55. s, _ := json.MarshalToString(req)
  56. logger.Error("func",
  57. zap.String("call", "Device.GateList"),
  58. zap.String("params", s),
  59. zap.String("error", err.Error()))
  60. return errors.ErrorTransForm(err)
  61. }
  62. if rpcRsp.List == nil {
  63. rpcRsp.List = make([]*v1.GateItem, 0)
  64. }
  65. resp.Data = *rpcRsp
  66. ctx.JSON(http.StatusOK, resp)
  67. return nil
  68. }
  69. // 执行任务
  70. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  71. }
  72. //
  73. // @Summary 门禁起停用
  74. // @Description 门禁起停用
  75. // @Tags 门禁
  76. // @Accept json
  77. // @Produce json
  78. // @Param token header string true " "
  79. // @Param body body v1.GateEnableBody true " "
  80. // @Success 200 {object} v1.GateEnableResponse
  81. // @Failure 500 {object} base.HTTPError
  82. // @Router /api/v1/gate/enable [put]
  83. func (c *Controller) GateEnable(ctx *gin.Context) {
  84. // 解析参数
  85. req := &param_v1.GateEnableRequest{}
  86. parseParamTask := func() error {
  87. err := util.ShouldBind(ctx, &req.Header, nil, nil, &req.GateEnableBody)
  88. if err != nil {
  89. logger.Error("func",
  90. zap.String("call", "util.ShouldBind"),
  91. zap.String("error", err.Error()))
  92. return errors.ParamsError
  93. }
  94. return nil
  95. }
  96. // 业务处理
  97. handleServiceTask := func() error {
  98. tokenInfo, err := utils.GetSubjectValue(ctx)
  99. if err != nil {
  100. return err
  101. }
  102. resp := param_v1.GateEnableResponse{}
  103. rpcReq := &v1.GateEnableRequest{
  104. DeviceId:req.DeviceId,
  105. Enable:req.Enable,
  106. GardenId:tokenInfo.GardenId,
  107. }
  108. _, err = pb.Device.GateEnable(ctx, rpcReq)
  109. if err != nil {
  110. s, _ := json.MarshalToString(req)
  111. logger.Error("func",
  112. zap.String("call", "pb.Device.GateEnable"),
  113. zap.String("params", s),
  114. zap.String("error", err.Error()))
  115. return errors.ErrorTransForm(err)
  116. }
  117. ctx.JSON(http.StatusOK, resp)
  118. return nil
  119. }
  120. // 执行任务
  121. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  122. }
  123. //
  124. // @Summary 门禁配置进场场和位置
  125. // @Description 门禁配置进场场和位置
  126. // @Tags 门禁
  127. // @Accept json
  128. // @Produce json
  129. // @Param token header string true " "
  130. // @Param body body v1.GateSetBody true " "
  131. // @Success 200 {object} v1.GateSetResponse
  132. // @Failure 500 {object} base.HTTPError
  133. // @Router /api/v1/gate/set [put]
  134. func (c *Controller) GateSet(ctx *gin.Context) {
  135. // 解析参数
  136. req := &param_v1.GateSetRequest{}
  137. parseParamTask := func() error {
  138. err := util.ShouldBind(ctx, &req.Header, nil, nil, &req.GateSetBody)
  139. if err != nil {
  140. logger.Error("func",
  141. zap.String("call", "util.ShouldBind"),
  142. zap.String("error", err.Error()))
  143. return errors.ParamsError
  144. }
  145. return nil
  146. }
  147. // 业务处理
  148. handleServiceTask := func() error {
  149. tokenInfo, err := utils.GetSubjectValue(ctx)
  150. if err != nil {
  151. return err
  152. }
  153. resp := param_v1.GateSetResponse{}
  154. rpcReq := &v1.GateSetRequest{
  155. DeviceId:req.DeviceId,
  156. GardenId:tokenInfo.GardenId,
  157. Location:req.Location,
  158. Direction:req.Direction,
  159. }
  160. _, err = pb.Device.GateSet(ctx, rpcReq)
  161. if err != nil {
  162. s, _ := json.MarshalToString(req)
  163. logger.Error("func",
  164. zap.String("call", "pb.Device.GateSet"),
  165. zap.String("params", s),
  166. zap.String("error", err.Error()))
  167. return errors.ErrorTransForm(err)
  168. }
  169. ctx.JSON(http.StatusOK, resp)
  170. return nil
  171. }
  172. // 执行任务
  173. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  174. }
  175. //
  176. // @Summary 门禁白名单添加
  177. // @Description 门禁白名单添加
  178. // @Tags 门禁
  179. // @Accept json
  180. // @Produce json
  181. // @Param token header string true " "
  182. // @Param body body v1.GateWhiteAddBody true " "
  183. // @Success 200 {object} v1.GateWhiteAddResponse
  184. // @Failure 500 {object} base.HTTPError
  185. // @Router /api/v1/gate/white [post]
  186. func (c *Controller) GateWhiteAdd(ctx *gin.Context) {
  187. // 解析参数
  188. req := &param_v1.GateWhiteAddRequest{}
  189. parseParamTask := func() error {
  190. err := util.ShouldBind(ctx, &req.Header, nil, nil, &req.GateWhiteAddBody)
  191. if err != nil {
  192. logger.Error("func",
  193. zap.String("call", "util.ShouldBind"),
  194. zap.String("error", err.Error()))
  195. return errors.ParamsError
  196. }
  197. return nil
  198. }
  199. // 业务处理
  200. handleServiceTask := func() error {
  201. resp := param_v1.GateWhiteAddResponse{}
  202. rpcReq := &v1.GateWhiteAddRequest{
  203. DeviceId:req.DeviceId,
  204. HouseholdUids:req.HouseholdUids,
  205. }
  206. if len(req.CardInfo) > 0 {
  207. rpcReq.CardInfo = []*v1.GateCardInfo{}
  208. for _, v := range req.CardInfo {
  209. rpcReq.CardInfo = append(rpcReq.CardInfo, &v1.GateCardInfo{CardNumber:v.CardNumber, CardOwner:v.CardOwner})
  210. }
  211. }
  212. _, err := pb.Device.GateWhiteAdd(ctx, rpcReq)
  213. if err != nil {
  214. s, _ := json.MarshalToString(req)
  215. logger.Error("func",
  216. zap.String("call", "pb.DeviceGateWhiteAdd"),
  217. zap.String("params", s),
  218. zap.String("error", err.Error()))
  219. return errors.ErrorTransForm(err)
  220. }
  221. ctx.JSON(http.StatusOK, resp)
  222. return nil
  223. }
  224. // 执行任务
  225. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  226. }
  227. //
  228. // @Summary 门禁白名单删除
  229. // @Description 门禁白名单添加
  230. // @Tags 门禁
  231. // @Accept json
  232. // @Produce json
  233. // @Param token header string true " "
  234. // @Param id query int true "白名单id"
  235. // @Success 200 {object} v1.GateWhiteDelResponse
  236. // @Failure 500 {object} base.HTTPError
  237. // @Router /api/v1/gate/white [delete]
  238. func (c *Controller) GateWhiteDel(ctx *gin.Context) {
  239. // 解析参数
  240. req := &param_v1.GateWhiteDelRequest{}
  241. parseParamTask := func() error {
  242. err := util.ShouldBind(ctx, &req.Header, nil, &req.GateWhiteDelQuery, nil)
  243. if err != nil {
  244. logger.Error("func",
  245. zap.String("call", "util.ShouldBind"),
  246. zap.String("error", err.Error()))
  247. return errors.ParamsError
  248. }
  249. return nil
  250. }
  251. // 业务处理
  252. handleServiceTask := func() error {
  253. resp := param_v1.GateWhiteDelResponse{}
  254. rpcReq := &v1.GateWhiteDelRequest{
  255. Id:req.Id,
  256. }
  257. _, err := pb.Device.GateWhiteDel(ctx, rpcReq)
  258. if err != nil {
  259. s, _ := json.MarshalToString(req)
  260. logger.Error("func",
  261. zap.String("call", "pb.Device.GateWhiteDel"),
  262. zap.String("params", s),
  263. zap.String("error", err.Error()))
  264. return errors.ErrorTransForm(err)
  265. }
  266. ctx.JSON(http.StatusOK, resp)
  267. return nil
  268. }
  269. // 执行任务
  270. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  271. }
  272. //
  273. // @Summary 白名单列表(用户)
  274. // @Description 白名单列表(用户)
  275. // @Tags 门禁
  276. // @Accept json
  277. // @Produce json
  278. // @Param token header string true " "
  279. // @Param page query int false " "
  280. // @Param page_size query int false " "
  281. // @Param device_id query int true "设备id"
  282. // @Success 200 {object} v1.GateWhiteHouseholdListResponse
  283. // @Failure 500 {object} base.HTTPError
  284. // @Router /api/v1/gate/white/household [get]
  285. func (c *Controller) GateWhiteHouseholdList(ctx *gin.Context) {
  286. // 解析参数
  287. req := &param_v1.GateWhiteHouseholdListRequest{}
  288. parseParamTask := func() error {
  289. err := util.ShouldBind(ctx, &req.Header, nil, &req.GateWhiteHouseholdListQuery, nil)
  290. if err != nil {
  291. logger.Error("func",
  292. zap.String("call", "util.ShouldBind"),
  293. zap.String("error", err.Error()))
  294. return errors.ParamsError
  295. }
  296. return nil
  297. }
  298. // 业务处理
  299. handleServiceTask := func() error {
  300. resp := param_v1.GateWhiteHouseholdListResponse{}
  301. rpcReq := &v1.GateWhiteHouseholdListRequest{
  302. Page:req.Page,
  303. PageSize:req.PageSize,
  304. DeviceId:req.DeviceId,
  305. }
  306. rpcRsp, err := pb.Device.GateWhiteHouseholdList(ctx, rpcReq)
  307. if err != nil {
  308. s, _ := json.MarshalToString(req)
  309. logger.Error("func",
  310. zap.String("call", "Device.GateWhiteHouseholdList"),
  311. zap.String("params", s),
  312. zap.String("error", err.Error()))
  313. return errors.ErrorTransForm(err)
  314. }
  315. if rpcRsp.List == nil {
  316. rpcRsp.List = make([]*v1.GateWhiteHouseholdItem, 0)
  317. }
  318. resp.Data = *rpcRsp
  319. ctx.JSON(http.StatusOK, resp)
  320. return nil
  321. }
  322. // 执行任务
  323. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  324. }
  325. //
  326. // @Summary 白名单列表(ic卡)
  327. // @Description 白名单列表(ic卡)
  328. // @Tags 门禁
  329. // @Accept json
  330. // @Produce json
  331. // @Param token header string true " "
  332. // @Param page query int false " "
  333. // @Param page_size query int false " "
  334. // @Param device_id query int true "设备id"
  335. // @Success 200 {object} v1.GateWhiteCardListResponse
  336. // @Failure 500 {object} base.HTTPError
  337. // @Router /api/v1/gate/white/card [get]
  338. func (c *Controller) GateWhiteCardList(ctx *gin.Context) {
  339. // 解析参数
  340. req := &param_v1.GateWhiteCardListRequest{}
  341. parseParamTask := func() error {
  342. err := util.ShouldBind(ctx, &req.Header, nil, &req.GateWhiteCardListQuery, nil)
  343. if err != nil {
  344. logger.Error("func",
  345. zap.String("call", "util.ShouldBind"),
  346. zap.String("error", err.Error()))
  347. return errors.ParamsError
  348. }
  349. return nil
  350. }
  351. // 业务处理
  352. handleServiceTask := func() error {
  353. resp := param_v1.GateWhiteCardListResponse{}
  354. rpcReq := &v1.GateWhiteCardListRequest{
  355. Page:req.Page,
  356. PageSize:req.PageSize,
  357. DeviceId:req.DeviceId,
  358. }
  359. rpcRsp, err := pb.Device.GateWhiteCardList(ctx, rpcReq)
  360. if err != nil {
  361. s, _ := json.MarshalToString(req)
  362. logger.Error("func",
  363. zap.String("call", "Device.GateWhiteCardList"),
  364. zap.String("params", s),
  365. zap.String("error", err.Error()))
  366. return errors.ErrorTransForm(err)
  367. }
  368. if rpcRsp.List == nil {
  369. rpcRsp.List = make([]*v1.GateWhiteCardItem, 0)
  370. }
  371. resp.Data = *rpcRsp
  372. ctx.JSON(http.StatusOK, resp)
  373. return nil
  374. }
  375. // 执行任务
  376. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  377. }
  378. //
  379. // @Summary 操作记录
  380. // @Description 操作记录
  381. // @Tags 门禁
  382. // @Accept json
  383. // @Produce json
  384. // @Param token header string true " "
  385. // @Param page query int false " "
  386. // @Param page_size query int false " "
  387. // @Param device_id query int true "设备id"
  388. // @Success 200 {object} v1.GateCommandListResponse
  389. // @Failure 500 {object} base.HTTPError
  390. // @Router /api/v1/gate/command [get]
  391. func (c *Controller) GateCommandList(ctx *gin.Context) {
  392. // 解析参数
  393. req := &param_v1.GateCommandListRequest{}
  394. parseParamTask := func() error {
  395. err := util.ShouldBind(ctx, &req.Header, nil, &req.GateCommandListQuery, nil)
  396. if err != nil {
  397. logger.Error("func",
  398. zap.String("call", "util.ShouldBind"),
  399. zap.String("error", err.Error()))
  400. return errors.ParamsError
  401. }
  402. return nil
  403. }
  404. // 业务处理
  405. handleServiceTask := func() error {
  406. resp := param_v1.GateCommandListResponse{}
  407. rpcReq := &v1.GateCommandListRequest{
  408. Page:req.Page,
  409. PageSize:req.PageSize,
  410. DeviceId:req.DeviceId,
  411. }
  412. rpcRsp, err := pb.Device.GateCommandList(ctx, rpcReq)
  413. if err != nil {
  414. s, _ := json.MarshalToString(req)
  415. logger.Error("func",
  416. zap.String("call", "Device.GateCommandList"),
  417. zap.String("params", s),
  418. zap.String("error", err.Error()))
  419. return errors.ErrorTransForm(err)
  420. }
  421. if rpcRsp.List == nil {
  422. rpcRsp.List = make([]*v1.GateCommandItem, 0)
  423. }
  424. resp.Data = *rpcRsp
  425. ctx.JSON(http.StatusOK, resp)
  426. return nil
  427. }
  428. // 执行任务
  429. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  430. }
  431. //
  432. // @Summary 门禁远程开门
  433. // @Description 门禁远程开门
  434. // @Tags 门禁
  435. // @Accept json
  436. // @Produce json
  437. // @Param token header string true " "
  438. // @Param body body v1.GateOpenBody true " "
  439. // @Success 200 {object} v1.GateOpenResponse
  440. // @Failure 500 {object} base.HTTPError
  441. // @Router /api/v1/gate/command/open [post]
  442. func (c *Controller) GateOpen(ctx *gin.Context) {
  443. // 解析参数
  444. req := &param_v1.GateOpenRequest{}
  445. parseParamTask := func() error {
  446. err := util.ShouldBind(ctx, &req.Header, nil, nil, &req.GateOpenBody)
  447. if err != nil {
  448. logger.Error("func",
  449. zap.String("call", "util.ShouldBind"),
  450. zap.String("error", err.Error()))
  451. return errors.ParamsError
  452. }
  453. return nil
  454. }
  455. // 业务处理
  456. handleServiceTask := func() error {
  457. resp := param_v1.GateOpenResponse{}
  458. rpcReq := &v1.GateCommandAddRequest{
  459. DeviceId:req.DeviceId,
  460. CmdCode:1,
  461. }
  462. _, err := pb.Device.GateCommandAdd(ctx, rpcReq)
  463. if err != nil {
  464. s, _ := json.MarshalToString(rpcReq)
  465. logger.Error("func",
  466. zap.String("call", "pb.GateCommandAdd"),
  467. zap.String("params", s),
  468. zap.String("error", err.Error()))
  469. return errors.ErrorTransForm(err)
  470. }
  471. ctx.JSON(http.StatusOK, resp)
  472. return nil
  473. }
  474. // 执行任务
  475. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  476. }
  477. //
  478. // @Summary 门禁重启设备
  479. // @Description 门禁重启设备
  480. // @Tags 门禁
  481. // @Accept json
  482. // @Produce json
  483. // @Param token header string true " "
  484. // @Param body body v1.GateRestartBody true " "
  485. // @Success 200 {object} v1.GateRestartResponse
  486. // @Failure 500 {object} base.HTTPError
  487. // @Router /api/v1/gate/command/restart [post]
  488. func (c *Controller) GateRestart(ctx *gin.Context) {
  489. // 解析参数
  490. req := &param_v1.GateRestartRequest{}
  491. parseParamTask := func() error {
  492. err := util.ShouldBind(ctx, &req.Header, nil, nil, &req.GateRestartBody)
  493. if err != nil {
  494. logger.Error("func",
  495. zap.String("call", "util.ShouldBind"),
  496. zap.String("error", err.Error()))
  497. return errors.ParamsError
  498. }
  499. return nil
  500. }
  501. // 业务处理
  502. handleServiceTask := func() error {
  503. resp := param_v1.GateRestartResponse{}
  504. rpcReq := &v1.GateCommandAddRequest{
  505. DeviceId:req.DeviceId,
  506. CmdCode:2,
  507. }
  508. _, err := pb.Device.GateCommandAdd(ctx, rpcReq)
  509. if err != nil {
  510. s, _ := json.MarshalToString(rpcReq)
  511. logger.Error("func",
  512. zap.String("call", "pb.GateCommandAdd"),
  513. zap.String("params", s),
  514. zap.String("error", err.Error()))
  515. return errors.ErrorTransForm(err)
  516. }
  517. ctx.JSON(http.StatusOK, resp)
  518. return nil
  519. }
  520. // 执行任务
  521. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  522. }
  523. //
  524. // @Summary 门禁手动同步白名单
  525. // @Description 门禁手动同步白名单
  526. // @Tags 门禁
  527. // @Accept json
  528. // @Produce json
  529. // @Param token header string true " "
  530. // @Param body body v1.GateWhiteSyncBody true " "
  531. // @Success 200 {object} v1.GateWhiteSyncResponse
  532. // @Failure 500 {object} base.HTTPError
  533. // @Router /api/v1/gate/white/sync [put]
  534. func (c *Controller) GateWhiteSync(ctx *gin.Context) {
  535. // 解析参数
  536. req := &param_v1.GateWhiteSyncRequest{}
  537. parseParamTask := func() error {
  538. err := util.ShouldBind(ctx, &req.Header, nil, nil, &req.GateWhiteSyncBody)
  539. if err != nil {
  540. logger.Error("func",
  541. zap.String("call", "util.ShouldBind"),
  542. zap.String("error", err.Error()))
  543. return errors.ParamsError
  544. }
  545. return nil
  546. }
  547. // 业务处理
  548. handleServiceTask := func() error {
  549. resp := param_v1.GateWhiteSyncResponse{}
  550. rpcReq := &v1.GateWhiteSyncRequest{
  551. DeviceId:req.DeviceId,
  552. }
  553. _, err := pb.Device.GateWhiteSync(ctx, rpcReq)
  554. if err != nil {
  555. s, _ := json.MarshalToString(rpcReq)
  556. logger.Error("func",
  557. zap.String("call", "pb.GateWhiteSync"),
  558. zap.String("params", s),
  559. zap.String("error", err.Error()))
  560. return errors.ErrorTransForm(err)
  561. }
  562. ctx.JSON(http.StatusOK, resp)
  563. return nil
  564. }
  565. // 执行任务
  566. httptasker.Exec(ctx, parseParamTask, handleServiceTask)
  567. }