From f4b6516b4da98101bcfe34b2262fcc9161172ca2 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 17 Sep 2019 16:02:44 +0800 Subject: [PATCH] =?UTF-8?q?+=20=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=93=8D=E4=BD=9C=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/cms.go | 50 ++++++++++++++++++++++++--- business/jxstore/cms/cms_test.go | 9 +++++ business/jxutils/jxutils.go | 31 +++++++++++++++++ business/model/api_config.go | 2 ++ business/model/common.go | 20 ++++------- business/model/dao/common.go | 23 ++++++++++++ controllers/cms.go | 21 +++++++++-- globals/beegodb/beegodb.go | 1 + routers/commentsRouter_controllers.go | 9 +++++ 9 files changed, 147 insertions(+), 19 deletions(-) create mode 100644 business/model/dao/common.go diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 2e8ad0f10..5aa6154da 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -103,10 +103,7 @@ func GetServiceInfo(ctx *jxcontext.Context) interface{} { func GetQiniuUploadToken(ctx *jxcontext.Context, suffix, hashCode string) (upTokenInfo map[string]interface{}, err error) { imgURL := "" if hashCode != "" { - db := dao.GetDB() - if skuName, err := dao.GetSkuNameByHashCode(db, hashCode); err == nil { - imgURL = skuName.Img - } + imgURL, _ = GetDataResource(ctx, hashCode) } putPolicy := storage.PutPolicy{ @@ -123,6 +120,51 @@ func GetQiniuUploadToken(ctx *jxcontext.Context, suffix, hashCode string) (upTok return upTokenInfo, err } +func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, hashCode string) (dataRes *model.DataResource, err error) { + if model.ValideMimeTypes[mimeType] == 0 { + return nil, fmt.Errorf("MIME type:%s非法", mimeType) + } + dataRes = &model.DataResource{ + Name: name, + HashCode: hashCode, + ResoureType: mimeType, + MainURL: resourceURL, + } + vendorID := jxutils.GuessDataResourceVendor(resourceURL) + switch vendorID { + case model.VendorIDQiNiuCloud: + dataRes.QiniuURL = resourceURL + case model.VendorIDEBAI: + dataRes.EbaiURL = resourceURL + case model.VendorIDMTWM: + dataRes.MtwmURL = resourceURL + } + + dao.WrapAddIDCULEntity(dataRes, ctx.GetUserName()) + if err = dao.CreateEntity(dao.GetDB(), dataRes); err != nil { + dataRes = nil + } + return dataRes, err +} + +func GetDataResource(ctx *jxcontext.Context, hashCode string) (resourceURL string, err error) { + db := dao.GetDB() + dataRes, err := dao.GetDataResource(db, hashCode, "") + if err != nil { + if dao.IsNoRowsError(err) { + skuName, err2 := dao.GetSkuNameByHashCode(db, hashCode) + if err = err2; err == nil { + resourceURL = skuName.Img + } else if dao.IsNoRowsError(err) { + err = nil + } + } + } else { + resourceURL = dataRes.MainURL + } + return resourceURL, err +} + func GetPlaces(ctx *jxcontext.Context, keyword string, includeDisabled bool, params map[string]interface{}) ([]*model.Place, error) { sql := ` SELECT * diff --git a/business/jxstore/cms/cms_test.go b/business/jxstore/cms/cms_test.go index 8ff644fc3..c874fdc6f 100644 --- a/business/jxstore/cms/cms_test.go +++ b/business/jxstore/cms/cms_test.go @@ -4,6 +4,7 @@ import ( "fmt" "testing" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/globals/api2" "git.rosy.net.cn/jx-callback/globals/testinit" @@ -27,3 +28,11 @@ func TestGetQiniuUploadToken(t *testing.T) { } fmt.Print(token) } + +func TestGetDataResource(t *testing.T) { + dataRes, err := GetDataResource(jxcontext.AdminCtx, "1D3E4A8259F359FB4CF47D541843950D") + if err != nil { + t.Fatal(err) + } + t.Log(utils.Format4Output(dataRes, false)) +} diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 1366dd7da..4ea6c2da8 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -27,6 +27,21 @@ import ( var ( routinePool *routinepool.Pool skuNamePat *regexp.Regexp + + resourceTypeMap = map[int][]string{ + model.VendorIDQiNiuCloud: []string{ + "image.jxc4.com", + }, + model.VendorIDJD: []string{ + "img30.360buyimg.com", + }, + model.VendorIDMTWM: []string{ + "", + }, + model.VendorIDEBAI: []string{ + "image-star.elemecdn.com", + }, + } ) type OrderSkuList []*model.OrderSku @@ -692,3 +707,19 @@ func GetAuthType4Vendor(vendorID int) (authType string) { } return authType } + +func GuessDataResourceVendor(resourceURL string) (vendorID int) { + vendorID = -1 + for tmpVendorID, urlList := range resourceTypeMap { + for _, v := range urlList { + if strings.Index(resourceURL, "//"+v) >= 0 { + vendorID = tmpVendorID + break + } + } + if vendorID >= 0 { + break + } + } + return vendorID +} diff --git a/business/model/api_config.go b/business/model/api_config.go index 65b682864..3ec830c3e 100644 --- a/business/model/api_config.go +++ b/business/model/api_config.go @@ -72,6 +72,8 @@ var ( VendorIDXiaoWM: "XiaoWM", VendorIDYiLianYun: "Yilianyun", VendorIDZhongWu: "ZhongWu", + + VendorIDQiNiuCloud: "Qiniu", } VendorTypeName = map[int]string{ diff --git a/business/model/common.go b/business/model/common.go index 5745c8662..6f1f886c3 100644 --- a/business/model/common.go +++ b/business/model/common.go @@ -13,19 +13,13 @@ var ( type DataResource struct { ModelIDCUL - HashCode string `orm:"size(48);unique" json:"hash_code"` - ResoureType string // 资料的mime type + HashCode string `orm:"size(48);unique" json:"hashCode"` - Name string `orm:"size(48)" json:"name"` + ResoureType string `orm:"size(48)" json:"resoureType"` // 资料的mime type + Name string `orm:"size(48);index" json:"name"` - MainURL string - QiniuURL string - EbaiURL string - MtwmURL string -} - -func (*DataResource) TableUnique() [][]string { - return [][]string{ - []string{"HashCode", "ResoureType"}, - } + MainURL string `orm:"size(1024);column(main_url);index" json:"mainURL"` + QiniuURL string `orm:"size(1024);column(qiniu_url);index" json:"qiniuURL"` + EbaiURL string `orm:"size(1024);column(ebai_url);index" json:"ebaiURL"` + MtwmURL string `orm:"size(1024);column(mtwm_url);index" json:"mtwmURL"` } diff --git a/business/model/dao/common.go b/business/model/dao/common.go new file mode 100644 index 000000000..6c01fdadb --- /dev/null +++ b/business/model/dao/common.go @@ -0,0 +1,23 @@ +package dao + +import ( + "git.rosy.net.cn/jx-callback/business/model" +) + +func GetDataResource(db *DaoDB, hashCode, fullURL string) (dataRes *model.DataResource, err error) { + sql := ` + SELECT t1.* + FROM data_resource t1 + WHERE 1 = 1` + sqlParams := []interface{}{} + if hashCode != "" { + sql += " AND t1.hash_code = ?" + sqlParams = append(sqlParams, hashCode) + } + if fullURL != "" { + sql += " AND (t1.main_url = ? OR t1.qiniu_url = ? OR t1.ebai_url = ? OR t1.mtwm_url = ?)" + sqlParams = append(sqlParams, fullURL, fullURL, fullURL, fullURL) + } + err = GetRow(db, &dataRes, sql, sqlParams...) + return dataRes, err +} diff --git a/controllers/cms.go b/controllers/cms.go index 325f588de..94dcd24dd 100644 --- a/controllers/cms.go +++ b/controllers/cms.go @@ -17,7 +17,7 @@ type CmsController struct { // @Title 得到地点(省,城市,区)信息 // @Description 得到地点(省,城市,区)信息。 -// @Param token header string true "认证token"// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" +// @Param token header string true "认证token" // @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" // @Param parentCode query int false "上级地点code,这个指的是国家标准CODE(中国为:100000,北京为:110000,北京市为:110100),不是数据库中的ID" // @Param level query int false "地点级别:省为1,市为2,区为3,注意直辖市也要分省与市级" @@ -104,6 +104,23 @@ func (c *CmsController) GetQiniuUploadToken() { }) } +// @Title 注册数据资源 +// @Description 注册数据资源 +// @Param token header string true "认证token" +// @Param hashCode formData string true "md5" +// @Param resourceURL formData string true "资源URL" +// @Param mimeType formData string true "资源MIME类型,当前只支持:image/jpeg,image/png,video/mpeg,video/mp4" +// @Param name formData string faslse "资源名" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /RegisterDataResource [post] +func (c *CmsController) RegisterDataResource() { + c.callRegisterDataResource(func(params *tCmsRegisterDataResourceParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.RegisterDataResource(params.Ctx, params.Name, params.ResourceURL, params.MimeType, params.HashCode) + return retVal, "", err + }) +} + // @Title 根据坐标得到区码 // @Description 根据坐标得到区码,坐标都为火星坐标(有些市是没有区的,比如东莞,这种情况下返回的区码是一个假的区域,即市的编码加上9000000) // @Param token header string true "认证token" @@ -295,4 +312,4 @@ func (c *CmsController) CreateQrOrBarCode() { retVal, err = jxutils.CreateQrOrBarCode(params.Width, params.Height, params.Codetype, params.SrcData) return retVal, "", err }) -} \ No newline at end of file +} diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index 70da7febd..dded52e0e 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -56,6 +56,7 @@ func Init() { orm.RegisterModel(&model.SensitiveWord{}) orm.RegisterModel(&model.StoreScore{}) orm.RegisterModel(&model.FoodRecipe{}, &model.FoodRecipeStep{}, &model.FoodRecipeItem{}, &model.FoodRecipeItemChoice{}, &model.FoodRecipeUser{}) + orm.RegisterModel(&model.DataResource{}) // create table orm.RunSyncdb("default", false, true) diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 45e453cf0..0ae93a495 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -385,6 +385,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"], + beego.ControllerComments{ + Method: "RegisterDataResource", + Router: `/RegisterDataResource`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"], beego.ControllerComments{ Method: "SendMsg2Somebody",