package controllers import ( "github.com/kataras/iris/v12/mvc" "strconv" "time" "xps/cache" "xps/constant" "xps/service" "xps/viewmodels" ) type ApiGatewayController struct { Base Service service.XGatewayService } func (c *ApiGatewayController) BeforeActivation(b mvc.BeforeActivation) { b.Handle("GET", "/{objectCode:string}/{oamCode:string}", "Get" ) b.Handle("GET", "/GenerateParams/{objectCode:string}/{oamCode:string}", "GenerateParams" ) b.Handle("POST", "/{objectCode:string}/{oamCode:string}", "Post" ) b.Handle("PUT", "/{objectCode:string}/{oamCode:string}", "Put" ) b.Handle("PATCH", "/{objectCode:string}/{oamCode:string}", "Patch" ) b.Handle("DELETE", "/{objectCode:string}/{oamCode:string}", "Delete" ) } func (c *ApiGatewayController) HandleParamRule(ruleId int64) interface{} { var result interface{} if ruleId == constant.BIZ_RULE_NEW_ID { } else if ruleId == constant.BIZ_RULE_CUR_DATETIME { result = time.Now() } else if ruleId == constant.BIZ_RULE_CUR_DATE { result = time.Now() } else if ruleId == constant.BIZ_RULE_CUR_USER_ID { result = c.GetCurUserId() } else if ruleId == constant.BIZ_RULE_CUR_USER_NAME { result = c.GetCurUserName() } else if ruleId == constant.BIZ_RULE_CUR_USER_POSITION_ID { result = c.GetCurUserPositionId() } else if ruleId == constant.BIZ_RULE_CUR_USER_POSITION_NAME { result = c.GetCurUserPositionName() } else if ruleId == constant.BIZ_RULE_CUR_USER_GROUP_ID { result = c.GetCurUserGroupId() } else if ruleId == constant.BIZ_RULE_CUR_USER_GROUP_NAME { result = c.GetCurUserGroupName() } return result } func (c *ApiGatewayController) buildUrlParams(objectCode, oamCode string) ([]viewmodels.QueryParam, error) { oamParams, err1 := cache.GetBizObjectOAMParams(objectCode, oamCode) if err1 != nil { return nil, err1 } urlParams := c.Ctx.URLParams() queryParams := make([]viewmodels.QueryParam, 0) for _, oamParam := range oamParams { paramValueCode := oamParam.ParamValue paramType := oamParam.ParamType var paramValue interface{} isRuled := oamParam.IsRuled if isRuled > 0 { paramValue := c.HandleParamRule(oamParam.RuleId) param := viewmodels.QueryParam{ LogicalOperator: oamParam.LogicalOperator, Name: oamParam.ParamName, CompareOperator: oamParam.CompareOperator, Type: oamParam.ParamType, Value: paramValue, } queryParams = append(queryParams, param) } else if urlVal, ok := urlParams[paramValueCode]; ok { if paramType == constant.DATA_TYPE_INT { ret, err := strconv.Atoi(urlVal) if err != nil { return nil, err } paramValue = ret } else if paramType == constant.DATA_TYPE_VARCHAR { paramValue = urlVal } else if paramType == constant.DATA_TYPE_DECIMAL { ret, err := strconv.ParseFloat(urlVal, 64) if err != nil { return nil, err } paramValue = ret } else if paramType == constant.DATA_TYPE_DATE { paramValue = urlVal } else if paramType == constant.DATA_TYPE_DATETIME { paramValue = urlVal } param := viewmodels.QueryParam{ LogicalOperator: oamParam.LogicalOperator, Name: oamParam.ParamName, CompareOperator: oamParam.CompareOperator, Type: oamParam.ParamType, Value: paramValue, } queryParams = append(queryParams, param) } } return queryParams, nil } func (c *ApiGatewayController) GenerateParams(objectCode, oamCode string)*JsonResult { data, err := c.Service.GenerateParams(objectCode, oamCode) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("获取成功", data) } } func (c *ApiGatewayController) Get(objectCode, oamCode string)*JsonResult { oamInfo, err1 := cache.GetApiData(objectCode, oamCode) if err1 != nil { return ResultErr(err1.Error(), nil) } params, err2 := c.buildUrlParams(objectCode, oamCode) if err2 != nil { return ResultErr(err2.Error(), nil) } oamType := oamInfo.OamType if oamType == constant.OAM_GET_ONE { data, err := c.Service.Get(objectCode, oamCode, params) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("获取成功", data) } } if oamType == constant.OAM_GET_LIST{ data, err := c.Service.GetList(objectCode, oamCode, params) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("获取成功", data) } } if oamType == constant.OAM_GET_PAGE { page := c.Ctx.URLParamIntDefault("page", 0) if page <= 0 { page = 1 } limit := c.Ctx.URLParamIntDefault("limit", 0) if limit <= 0 { limit = 10 } data, err := c.Service.GetPage(objectCode, oamCode, params, page, limit) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("获取成功", data) } } return ResultErr("方法不存在", nil) } func (c *ApiGatewayController) Post(objectCode, oamCode string)*JsonResult { m, err := c.GetJsonData() if err != nil { return ResultErr(err.Error(), nil) } userInfo := &viewmodels.CurUserInfo{ UserId: c.GetCurUserId(), UserName: c.GetCurUserName(), PositionId: c.GetCurUserPositionId(), PositionName: c.GetCurUserPositionName(), GroupId: c.GetCurUserGroupId(), GroupName: c.GetCurUserGroupName(), } err = c.Service.Create(objectCode, oamCode, m, userInfo) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("创建成功", nil) } } func (c *ApiGatewayController) Put(objectCode, oamCode string)*JsonResult { m, err := c.GetJsonData() if err != nil { return ResultErr(err.Error(), nil) } userInfo := &viewmodels.CurUserInfo{ UserId: c.GetCurUserId(), UserName: c.GetCurUserName(), PositionId: c.GetCurUserPositionId(), PositionName: c.GetCurUserPositionName(), GroupId: c.GetCurUserGroupId(), GroupName: c.GetCurUserGroupName(), } err = c.Service.Update(objectCode, oamCode, m, userInfo) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("更新成功", nil) } } func (c *ApiGatewayController) Patch(objectCode, oamCode string)*JsonResult { m, err := c.GetJsonData() if err != nil { return ResultErr(err.Error(), nil) } userInfo := &viewmodels.CurUserInfo{ UserId: c.GetCurUserId(), UserName: c.GetCurUserName(), PositionId: c.GetCurUserPositionId(), PositionName: c.GetCurUserPositionName(), GroupId: c.GetCurUserGroupId(), GroupName: c.GetCurUserGroupName(), } err = c.Service.Patch(objectCode, oamCode, m, userInfo) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("更新成功", nil) } } func (c *ApiGatewayController) Delete(objectCode, oamCode string)*JsonResult { m, err := c.GetJsonData() if err != nil { return ResultErr(err.Error(), nil) } userInfo := &viewmodels.CurUserInfo{ UserId: c.GetCurUserId(), UserName: c.GetCurUserName(), PositionId: c.GetCurUserPositionId(), PositionName: c.GetCurUserPositionName(), GroupId: c.GetCurUserGroupId(), GroupName: c.GetCurUserGroupName(), } err = c.Service.Delete(objectCode, oamCode, m, userInfo) if err != nil { return ResultErr(err.Error(), nil) } else { return ResultOk("删除成功", nil) } }