89 lines
2.2 KiB
Go
89 lines
2.2 KiB
Go
package http
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"go-common/app/admin/main/up/service"
|
|
"go-common/library/ecode"
|
|
"go-common/library/log"
|
|
"go-common/library/net/http/blademaster"
|
|
"io/ioutil"
|
|
)
|
|
|
|
// service的函数原型
|
|
type serviceFunc func(context context.Context, arg interface{}) (res interface{}, err error)
|
|
|
|
// 由于不支持泛型,写得比较难看
|
|
// 很多重复的代码用下面来代替
|
|
func httpQueryFunc(arg interface{}, sfunc serviceFunc, description string) (httpFunc func(c *blademaster.Context)) {
|
|
httpFunc = func(c *blademaster.Context) {
|
|
//var arg = new(upcrmmodel.ScoreQueryUpHistoryArgs)
|
|
var res interface{}
|
|
var err error
|
|
var errMsg string
|
|
switch {
|
|
default:
|
|
if err = c.Bind(arg); err != nil {
|
|
log.Error("%s, request argument bind fail, err=%v", description, err)
|
|
errMsg = fmt.Sprintf("wrong argument, %s", err.Error())
|
|
err = ecode.RequestErr
|
|
break
|
|
}
|
|
|
|
var scoreRes, e = sfunc(c, arg)
|
|
err = e
|
|
if e != nil {
|
|
errMsg = err.Error()
|
|
log.Error("%s query fail, req=%+v, err=%+v", description, arg, err)
|
|
break
|
|
}
|
|
log.Info("%s query ok, req=%+v, result=%+v", description, arg, scoreRes)
|
|
res = scoreRes
|
|
}
|
|
|
|
if err != nil {
|
|
service.BmHTTPErrorWithMsg(c, err, errMsg)
|
|
} else {
|
|
c.JSON(res, err)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func httpPostFunc(arg interface{}, sfunc serviceFunc, description string) (httpFunc func(c *blademaster.Context)) {
|
|
httpFunc = func(c *blademaster.Context) {
|
|
//var arg = new(upcrmmodel.ScoreQueryUpHistoryArgs)
|
|
var res interface{}
|
|
var err error
|
|
var errMsg string
|
|
switch {
|
|
default:
|
|
respBody, _ := ioutil.ReadAll(c.Request.Body)
|
|
if err = json.Unmarshal(respBody, arg); err != nil {
|
|
log.Error("%s, json unmarshal fail, err=%v", description, err)
|
|
errMsg = fmt.Sprintf("wrong argument, %s", err.Error())
|
|
err = ecode.RequestErr
|
|
break
|
|
}
|
|
|
|
scoreRes, e := sfunc(c, arg)
|
|
err = e
|
|
if e != nil {
|
|
errMsg = err.Error()
|
|
log.Error("%s query fail, req=%+v, err=%+v", description, arg, err)
|
|
break
|
|
}
|
|
log.Info("%s query ok, req=%+v, result=%+v", description, arg, scoreRes)
|
|
res = scoreRes
|
|
}
|
|
|
|
if err != nil {
|
|
service.BmHTTPErrorWithMsg(c, err, errMsg)
|
|
} else {
|
|
c.JSON(res, err)
|
|
}
|
|
}
|
|
return
|
|
}
|