package controller import ( "fmt" "github.com/gin-gonic/gin" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/vo/result" neFetchlink "be.ems/src/modules/network_element/fetch_link" "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" ) // 实例化控制层 NeLicenseController 结构体 var NewNeLicense = &NeLicenseController{ neLicenseService: neService.NewNeLicense, neInfoService: neService.NewNeInfo, } // 网元授权激活请求 // // PATH /license type NeLicenseController struct { neLicenseService *neService.NeLicense // 网元授权激活服务 neInfoService *neService.NeInfo // 网元信息服务 } // 网元授权激活列表 // // GET /list // // @Tags network_element/license // @Accept json // @Produce json // @Param neType query string true "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC) // @Param neId query string true "NE ID" default(001) // @Success 200 {object} object "Response Results" // @Security TokenAuth // @Summary Net Element License Activation List // @Description Net Element License Activation List // @Router /ne/license/list [get] func (s *NeLicenseController) List(c *gin.Context) { querys := ctx.QueryMap(c) data := s.neLicenseService.SelectPage(querys) // 过滤屏蔽授权文件 rows := data["rows"].([]model.NeLicense) arr := &rows for i := range *arr { (*arr)[i].ActivationRequestCode = "-" (*arr)[i].LicensePath = "-" } c.JSON(200, result.Ok(data)) } // 网元授权激活信息 // // GET /:licenseId func (s *NeLicenseController) Info(c *gin.Context) { language := ctx.AcceptLanguage(c) licenseId := c.Param("licenseId") if licenseId == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } neLicense := s.neLicenseService.SelectById(licenseId) if neLicense.ID != licenseId { // 没有可访问网元授权激活数据! c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } c.JSON(200, result.OkData(neLicense)) } // 网元neType和neID查询 // // GET /byTypeAndID // // @Tags network_element/license // @Accept json // @Produce json // @Param neType query string true "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC) // @Param neId query string true "NE ID" default(001) // @Success 200 {object} object "Response Results" // @Security TokenAuth // @Summary Network element neType and neID queries // @Description Network element neType and neID queries // @Router /ne/license/byTypeAndID [get] func (s *NeLicenseController) NeTypeAndID(c *gin.Context) { language := ctx.AcceptLanguage(c) var querys struct { NeType string `form:"neType" binding:"required"` NeId string `form:"neId" binding:"required"` } if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } neLicense := s.neLicenseService.SelectByNeTypeAndNeID(querys.NeType, querys.NeId) if neLicense.NeId != querys.NeId { // 没有可访问网元授权激活数据! c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } c.JSON(200, result.OkData(neLicense)) } // 网元授权激活授权申请码 // // GET /code // // @Tags network_element/license // @Accept json // @Produce json // @Param neType query string true "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC) // @Param neId query string true "NE ID" default(001) // @Success 200 {object} object "Response Results" // @Security TokenAuth // @Summary Network Element License Activation License Application Code // @Description Network Element License Activation License Application Code // @Router /ne/license/code [get] func (s *NeLicenseController) Code(c *gin.Context) { language := ctx.AcceptLanguage(c) var querys struct { NeType string `form:"neType" binding:"required"` NeId string `form:"neId" binding:"required"` } if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } // 检查是否存在授权记录 neLicense := s.neLicenseService.SelectByNeTypeAndNeID(querys.NeType, querys.NeId) if neLicense.NeId != querys.NeId { // 没有可访问网元授权激活数据! c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } // 更新授权码 code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) neLicense.ActivationRequestCode = code if licensePath != "" { neLicense.LicensePath = licensePath } else { neLicense.SerialNum = "" neLicense.ExpiryDate = "" neLicense.Status = "0" } neLicense.UpdateBy = ctx.LoginUserToUserName(c) s.neLicenseService.Update(neLicense) c.JSON(200, result.OkData(code)) } // 网元授权激活授权文件替换 // // POST /change // // @Tags network_element/license // @Accept json // @Produce json // @Param data body object true "Request Param" // @Success 200 {object} object "Response Results" // @Security TokenAuth // @Summary Network element authorization activation status // @Description Network element authorization activation status // @Router /ne/license/change [post] func (s *NeLicenseController) Change(c *gin.Context) { language := ctx.AcceptLanguage(c) var body model.NeLicense err := c.ShouldBindBodyWithJSON(&body) if err != nil || body.LicensePath == "" { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } // 检查是否存在授权记录 neLicense := s.neLicenseService.SelectByNeTypeAndNeID(body.NeType, body.NeId) if neLicense.NeId != body.NeId { // 没有可访问网元授权激活数据! c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } // 更新授权记录 if body.Remark != "" { neLicense.Remark = body.Remark } neLicense.LicensePath = body.LicensePath neLicense.Status = "0" neLicense.UpdateBy = ctx.LoginUserToUserName(c) upRows := s.neLicenseService.Update(neLicense) if upRows > 0 { // 进行上传替换 err = s.neLicenseService.UploadLicense(body) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return } c.JSON(200, result.Ok(nil)) return } c.JSON(200, result.Err(nil)) } // 网元授权激活状态 // // GET /state // // @Tags network_element/license // @Accept json // @Produce json // @Param neType query string true "NE Type" Enums(IMS,AMF,AUSF,UDM,SMF,PCF,NSSF,NRF,UPF,MME,CBC,OMC,SGWC) // @Param neId query string true "NE ID" default(001) // @Success 200 {object} object "Response Results" // @Security TokenAuth // @Summary Network element authorization activation status // @Description Network element authorization activation status // @Router /ne/license/state [get] func (s *NeLicenseController) State(c *gin.Context) { language := ctx.AcceptLanguage(c) var querys struct { NeType string `form:"neType" binding:"required"` NeId string `form:"neId" binding:"required"` } if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } // 检查是否存在授权记录 neLicense := s.neLicenseService.SelectByNeTypeAndNeID(querys.NeType, querys.NeId) if neLicense.NeId != querys.NeId { // 没有可访问网元授权激活数据! c.JSON(200, result.ErrMsg(i18n.TKey(language, "neLicense.noData"))) return } // 查询网元获取IP获取网元状态 neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(neLicense.NeType, neLicense.NeId) if neInfo.NeId != neLicense.NeId || neInfo.IP == "" { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } if neState, err := neFetchlink.NeState(neInfo); err == nil && neState["sn"] != nil { neLicense.Status = "1" neLicense.SerialNum = fmt.Sprint(neState["sn"]) neLicense.ExpiryDate = fmt.Sprint(neState["expire"]) neLicense.Capability = fmt.Sprint(neState["capability"]) code, licensePath := s.neLicenseService.ReadLicenseInfo(neLicense) neLicense.ActivationRequestCode = code neLicense.LicensePath = licensePath } else { neLicense.Status = "0" } // 更新授权信息 neLicense.UpdateBy = ctx.LoginUserToUserName(c) s.neLicenseService.Update(neLicense) if neLicense.Status == "1" { c.JSON(200, result.OkData(map[string]string{ "sn": neLicense.SerialNum, "expire": neLicense.ExpiryDate, })) return } c.JSON(200, result.ErrMsg(fmt.Sprintf("%s service status exception", neLicense.NeType))) }