package controllers import ( "basic.com/pubsub/protomsg.git" "basic.com/valib/bhomeclient.git" "basic.com/valib/bhomedbapi.git" "basic.com/valib/logger.git" "encoding/json" "strconv" "strings" "vamicro/sync-service/models" "vamicro/sync-service/service" "vamicro/sync-service/vo" ) type CameraPolygonController struct { } // @Summary 根据cameraId查询摄像机多边形 // @Description 根据cameraId查询摄像机多边形 // @Accept json // @Produce json // @Tags 摄像机多边形 // @Param cameraId query string true "摄像机id" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}" // @Router /data/api-v/polygon/findByCameraId [get] func (cpc CameraPolygonController) FindByCameraId(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { cameraId := c.Query("cameraId") if cameraId == "" { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } var sv service.CameraPolygonService voInfo := sv.FindByCameraId(cameraId) return &bhomeclient.Reply{ Success: true, Data: voInfo} } type CPN struct { models.CameraPolygon CameraName string `json:"camera_name"` } // @Summary 查找所有多边形,返回的是数据库的结构 // @Description 查找所有多边形,返回的是数据库的结构 // @Produce json // @Tags 摄像机多边形 // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}" // @Router /data/api-v/polygon/findAll [get] func (cpc CameraPolygonController) FindAll(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply{ m := make(map[string]string) idNameM := make(map[string]string) var cameraE models.Camera cams, _ := cameraE.FindAll() if cams ==nil { cams = make([]models.Camera,0) } var stackApi bhomedbapi.FileStackApi flag, stackList := stackApi.FindAllDoingStacks() if flag && stackList !=nil { for _,f :=range stackList { cams = append(cams, models.Camera{ Id: f.Id, Name: f.Name, }) } } for _,c :=range cams { idNameM[c.Id] = c.Name } var model models.CameraPolygon polygons := model.FindAll() var result []CPN var arr []CPN //全部区域 for _,p :=range polygons { if nn,exist := idNameM[p.CameraId];exist { me := models.CameraPolygon{ Id: p.CameraId, CameraId: p.CameraId, Name: models.CAMERAPOLYGON_AREA_ALL, Polygon: "", DirectionLine: "", Type: models.TYPE_POLYGON, DefenceState: 1, } cpn := CPN{} cpn.CameraPolygon = me cpn.CameraName = nn if _,ok := m[p.CameraId];!ok { arr = append(arr, cpn) } m[p.CameraId] = p.CameraId } cpR := CPN{} cpR.CameraPolygon = p if rName, ex := idNameM[p.CameraId];ex { cpR.CameraName = rName } result = append(result, cpR) } if cams != nil { for _,cam :=range cams { if _,ok := m[cam.Id];!ok { m[cam.Id] = cam.Id me := models.CameraPolygon{ Id: cam.Id, CameraId: cam.Id, Name: models.CAMERAPOLYGON_AREA_ALL, Polygon: "", DirectionLine: "", Type: models.TYPE_POLYGON, DefenceState: 1, } cpn := CPN{} cpn.CameraPolygon = me if nn,exist := idNameM[cam.Id];exist { cpn.CameraName = nn } arr = append(arr, cpn) } } } result = append(result, arr...)//每一个摄像机都有一个默认的全部区域 return &bhomeclient.Reply{ Success: true, Data: result} } // @Summary 添加或更新摄像机多边形 // @Description 添加或更新摄像机多边形 // @Accept json // @Produce json // @Tags 摄像机多边形 // @Param cameraPolygon body vo.CameraPolygonVo true "摄像机区域结构体,必填" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}" // @Router /data/api-v/polygon/save [post] func (cpc CameraPolygonController) Save(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply{ var cPolygon vo.CameraPolygonVo if err := c.BindJSON(&cPolygon);err !=nil { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } if cPolygon.CameraId == "" { return &bhomeclient.Reply{ Success: false, Msg: "摄像机id不能为空"} } var sv service.CameraPolygonService delS, delF := sv.Save(cPolygon) var msg ="" if len(delS) >0 { msg += "删除成功:"+strings.Join(delS,",") } if len(delF) >0 { if msg !=""{ msg +=";删除失败:"+strings.Join(delF,",") } else { msg +="删除失败:"+strings.Join(delF,",") } } if msg ==""{ msg = "保存成功" } logger.Debug("polygon=>Save.msg:",msg) return &bhomeclient.Reply{ Success: true, Data: msg} } // @Summary 根据多边形id更新布撤防状态 // @Description 根据多边形id更新布撤防状态 // @Produce json // @Tags 摄像机多边形 // @Param polygonId query string true "多边形id" // @Param defence_state query int true "布撤防状态(0:撤销,1:布防)" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}" // @Router /data/api-v/polygon/updateDefenceStateByPolygonId [get] func (cpc CameraPolygonController)UpdateDefenceStateByPolygonId(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { polygonId := c.Query("polygonId")//多边形id defenceState,err := strconv.Atoi(c.Query("defence_state"))//布撤防状态 logger.Debug("polygonId:", polygonId) logger.Debug("defence_state:",defenceState) if err !=nil || polygonId=="" || (defenceState !=0 && defenceState !=1){ return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } var model models.CameraPolygon if model.UpdateDefenceStateByPolygonId(polygonId,defenceState) { cpc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_CameraPolygon, polygonId, protomsg.DbAction_Update, "") return &bhomeclient.Reply{ Success: true, Msg: "更新成功"} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } // @Summary 根据摄像机id更新布撤防状态 // @Description 根据摄像机id更新布撤防状态 // @Produce json // @Tags 摄像机多边形 // @Param cameraId query string true "摄像机id" // @Param defence_state query int true "布撤防状态(0:撤销,1:布防)" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}" // @Router /data/api-v/polygon/updateDefenceStateByCameraId [get] func (cpc CameraPolygonController)UpdateDefenceStateByCameraId(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { cameraId := c.Query("cameraId")//多边形id defenceState,err := strconv.Atoi(c.Query("defence_state"))//布撤防状态 if err !=nil || cameraId=="" || (defenceState !=0 && defenceState !=1){ return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } var model models.CameraPolygon if model.UpdateDefenceStateByCameraId(cameraId,defenceState) { cpc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_CameraPolygon, "", protomsg.DbAction_Update, "") return &bhomeclient.Reply{ Success: true, Msg: "更新成功"} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } func (cpc CameraPolygonController) addDbChangeMsg(bk bhomeclient.Broker, tChanged protomsg.TableChanged,id string,action protomsg.DbAction,info string){ dbMsg := protomsg.DbChangeMessage{ Table:tChanged, Id:id, Action:action, Info: info, } pb,_ := json.Marshal(dbMsg) bk.Publish(service.ProcName, pb) }