From 585eb0e0ded1ce2b2b45c1ef3ab102ba659acfb7 Mon Sep 17 00:00:00 2001 From: suyl <770236076@qq.com> Date: Thu, 1 Jul 2021 11:12:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BF=AE=E6=94=B9=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=89=93=E5=8D=B0=E6=9C=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/print.go | 60 ++++++++++++++ business/model/dao/dao_print.go | 26 ++++++ business/model/error_code.go | 7 +- business/model/print.go | 4 + controllers/api_controller.go | 143 ++++++++++++++++++++++++++------ controllers/controllers.go | 13 ++- 6 files changed, 224 insertions(+), 29 deletions(-) create mode 100644 business/jxstore/cms/print.go diff --git a/business/jxstore/cms/print.go b/business/jxstore/cms/print.go new file mode 100644 index 000000000..41df7eaa7 --- /dev/null +++ b/business/jxstore/cms/print.go @@ -0,0 +1,60 @@ +package cms + +import ( + "fmt" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" +) + +func AddPrinter(appID int, printNo, printKey, name string) (err error) { + var ( + db = dao.GetDB() + ) + //看有没有重复的 + if printers, _ := dao.GetPrinters(db, appID, printNo); len(printers) > 0 { + return fmt.Errorf("此应用已经绑定了该打印机!print_no : %v", printNo) + } + printer := &model.Printer{ + AppID: appID, + PrintNo: printNo, + PrintKey: printKey, + Name: name, + Status: model.PrinterStatusNormal, + } + dao.WrapAddIDCULDEntity(printer, "") + if err = dao.CreateEntity(db, printer); err != nil { + return err + } + return err +} + +func DelPrinter(appID int, printNo string) (err error) { + var ( + db = dao.GetDB() + ) + //看有没有 + if printers, _ := dao.GetPrinters(db, appID, printNo); len(printers) == 0 { + return fmt.Errorf("该应用下未找到该打印机!print_no : %v", printNo) + } else { + if _, err = dao.DeleteEntity(db, printers[0]); err != nil { + return err + } + } + return err +} + +func UpdatePrinter(appID int, printNo, name string) (err error) { + var ( + db = dao.GetDB() + ) + //看有没有 + if printers, _ := dao.GetPrinters(db, appID, printNo); len(printers) == 0 { + return fmt.Errorf("该应用下未找到该打印机!print_no : %v", printNo) + } else { + printers[0].Name = name + if _, err = dao.UpdateEntity(db, printers[0], "Name"); err != nil { + return err + } + } + return err +} diff --git a/business/model/dao/dao_print.go b/business/model/dao/dao_print.go index 07a0cc0fc..f56ac205b 100644 --- a/business/model/dao/dao_print.go +++ b/business/model/dao/dao_print.go @@ -1 +1,27 @@ package dao + +import ( + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" +) + +func GetPrinters(db *DaoDB, appID int, printNo string) (printers []*model.Printer, err error) { + sql := ` + SELECT * + FROM printer + WHERE 1 = 1 AND deleted_at = ? + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + } + if appID != 0 { + sql += " AND app_id = ?" + sqlParams = append(sqlParams, appID) + } + if printNo != "" { + sql += " AND print_no = ?" + sqlParams = append(sqlParams, printNo) + } + err = GetRows(db, &printers, sql, sqlParams) + return printers, err +} diff --git a/business/model/error_code.go b/business/model/error_code.go index 04303f97a..86c5d8565 100644 --- a/business/model/error_code.go +++ b/business/model/error_code.go @@ -11,10 +11,11 @@ const ( ErrCodeJsonSyncErr = "-105" - ErrCodeOpenAPIParamErrMethod = "1001" //参数错误,method - ErrCodeOpenAPIParamErrTimeStamp = "1002" //参数错误,timestamp + ErrCodeOpenAPIParamErrMethod = "-1001" //参数错误,method + ErrCodeOpenAPIParamErrTimeStamp = "-1002" //参数错误,timestamp + ErrCodeOpenAPIParamErrSign = "-1003" //参数错误,sign - ErrCodeOpenAPIParamErrNormal = "1000" //api非通用参数错误 + ErrCodeOpenAPIParamErrNormal = "-1000" //api非通用参数错误 ) var ( diff --git a/business/model/print.go b/business/model/print.go index f5aa879de..998a42701 100644 --- a/business/model/print.go +++ b/business/model/print.go @@ -1,5 +1,9 @@ package model +const ( + PrinterStatusNormal = 0 //正常 +) + type Printer struct { ModelIDCULD diff --git a/controllers/api_controller.go b/controllers/api_controller.go index 4e637d858..c06995407 100644 --- a/controllers/api_controller.go +++ b/controllers/api_controller.go @@ -1,15 +1,18 @@ package controllers import ( - "encoding/json" + "crypto/md5" "fmt" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego/server/web" "net/url" "reflect" + "strings" + "time" ) type ApiController struct { @@ -23,9 +26,16 @@ const ( keySign = "sign" ) +const ( + keyPrintNo = "print_no" + keyPrintKey = "print_key" + keyName = "name" + keyStatus = "status" + keyOrderNo = "order_no" +) + var ( routerMap map[string]reflect.Value - textChan chan string ) func Init() { @@ -60,16 +70,19 @@ func (c *ApiController) CallOpenAPI() { accessID = utils.GetUUID() requireParams []string dataMap = make(map[string]interface{}) - //now = time.Now().Unix() + now = time.Now().Unix() parms, result []reflect.Value urls url.Values + app = &model.Apps{} + db = dao.GetDB() ) var ( - appID, sign, method string - //timestamp int64 + appID int + sign, method string + timestamp int64 ) //判断必传参数是否传入begin - if appID = c.GetString(keyAppID); appID == "" { + if appID, err = c.GetInt(keyAppID); err != nil { requireParams = append(requireParams, keyAppID) } if method = c.GetString(keyMethod); method == "" { @@ -78,9 +91,9 @@ func (c *ApiController) CallOpenAPI() { if sign = c.GetString(keySign); sign == "" { requireParams = append(requireParams, keySign) } - //if timestamp, err = c.GetInt64("timestamp"); err != nil { - // requireParams = append(requireParams, "timestamp") - //} + if timestamp, err = c.GetInt64(keyTimestamp); err != nil { + requireParams = append(requireParams, keyTimestamp) + } if len(requireParams) > 0 { err = buildParamRequiredErr(requireParams) } @@ -89,26 +102,43 @@ func (c *ApiController) CallOpenAPI() { goto end } //判断timestamp传入是否正确begin - //if len(utils.Int64ToStr(timestamp)) != len(utils.Int64ToStr(now)) { - // err = buildTimestampParamErr() - // errCode = model.ErrCodeOpenAPIParamErrTimeStamp - //} - //if now-timestamp < 5 { - // err = buildTimestampParamErr() - // errCode = model.ErrCodeOpenAPIParamErrTimeStamp - //} + if len(utils.Int64ToStr(timestamp)) != len(utils.Int64ToStr(now)) { + err = buildTimestampParamErr() + errCode = model.ErrCodeOpenAPIParamErrTimeStamp + } + if now-timestamp < 5 { + err = buildTimestampParamErr() + errCode = model.ErrCodeOpenAPIParamErrTimeStamp + } //判断timestamp传入是否正确end if err != nil { goto end } - //判断app_id和sign匹配begin - + //判断app_id和sign匹配begin ,sign = app_id + app_key + timestamp的MD5加密 + app.ID = appID + if err = dao.GetEntity(db, app); err != nil { + goto end + } else { + if app.Status != model.UserStatusNormal { + errCode = model.ErrCodeGeneralFailed + err = fmt.Errorf("很抱歉您的应用已失效!") + goto end + } + appKey := app.AppKey + signOrigin := fmt.Sprintf("%x", md5.Sum([]byte(utils.Int2Str(appID)+appKey+utils.Int64ToStr(timestamp)))) + if strings.Compare(sign, signOrigin) != 0 { + errCode = model.ErrCodeOpenAPIParamErrSign + err = buildMethodParamSign() + goto end + } + } //判断app_id和sign匹配end //call urls, _ = c.Input() dataMap = utils.URLValues2Map(urls) delete(dataMap, keyMethod) delete(dataMap, keyTimestamp) + delete(dataMap, keySign) parms = []reflect.Value{reflect.ValueOf(dataMap)} if routerMap[method] == reflect.ValueOf(nil) { errCode = model.ErrCodeOpenAPIParamErrMethod @@ -143,12 +173,75 @@ success: } } -func (c *ApiController) AddPrint(dataMap map[string]interface{}) (data, errCode string, err error) { - if dataMap[keySign].(string) != "222" { - return "", errCode, buildParamErr(keySign) +func (c *ApiController) AddPrinter(dataMap map[string]interface{}) (data, errCode string, err error) { + var ( + printNo, printKey, name string + appID int + ) + if _, ok := dataMap[keyPrintNo].(string); !ok { + return buildParamErrCodeAndErr(keyPrintNo) + } else { + if printNo = dataMap[keyPrintNo].(string); printNo == "" { + return buildParamErrCodeAndErr(keyPrintNo) + } } - data2, err := json.Marshal(dataMap) - return string(data2), errCode, err + if _, ok := dataMap[keyPrintKey].(string); !ok { + return buildParamErrCodeAndErr(keyPrintKey) + } else { + if printKey = dataMap[keyPrintKey].(string); printKey == "" { + return buildParamErrCodeAndErr(keyPrintKey) + } + } + appID = dataMap[keyAppID].(int) + name = dataMap[keyName].(string) + if err = cms.AddPrinter(appID, printNo, printKey, name); err != nil { + return "", model.ErrCodeGeneralFailed, err + } + return "", errCode, err +} + +func (c *ApiController) DelPrinter(dataMap map[string]interface{}) (data, errCode string, err error) { + var ( + printNo string + appID int + ) + if _, ok := dataMap[keyPrintNo].(string); !ok { + return buildParamErrCodeAndErr(keyPrintNo) + } else { + if printNo = dataMap[keyPrintNo].(string); printNo == "" { + return buildParamErrCodeAndErr(keyPrintNo) + } + } + appID = dataMap[keyAppID].(int) + if err = cms.DelPrinter(appID, printNo); err != nil { + return "", model.ErrCodeGeneralFailed, err + } + return "", errCode, err +} +func (c *ApiController) UpdatePrinter(dataMap map[string]interface{}) (data, errCode string, err error) { + var ( + printNo, name string + appID int + ) + if _, ok := dataMap[keyPrintNo].(string); !ok { + return buildParamErrCodeAndErr(keyPrintNo) + } else { + if printNo = dataMap[keyPrintNo].(string); printNo == "" { + return buildParamErrCodeAndErr(keyPrintNo) + } + } + if _, ok := dataMap[keyName].(string); !ok { + return buildParamErrCodeAndErr(keyName) + } else { + if name = dataMap[keyName].(string); name == "" { + return buildParamErrCodeAndErr(keyName) + } + } + appID = dataMap[keyAppID].(int) + if err = cms.UpdatePrinter(appID, printNo, name); err != nil { + return "", model.ErrCodeGeneralFailed, err + } + return "", errCode, err } func (c *ApiController) DoPrint(dataMap map[string]interface{}) (data, errCode string, err error) { @@ -169,7 +262,7 @@ func (c *ApiController) DoPrint(dataMap map[string]interface{}) (data, errCode s } dao.WrapAddIDCULDEntity(printMsg, "") if err = dao.CreateEntity(db, printMsg); err != nil { - return data, errCode, err + return data, model.ErrCodeGeneralFailed, err } return data, errCode, err } diff --git a/controllers/controllers.go b/controllers/controllers.go index a9a2856f9..f76a725bc 100644 --- a/controllers/controllers.go +++ b/controllers/controllers.go @@ -1,6 +1,9 @@ package controllers -import "fmt" +import ( + "fmt" + "git.rosy.net.cn/jx-callback/business/model" +) type CallResult struct { Code string `json:"code"` @@ -21,10 +24,18 @@ func buildParamRequiredErr(str []string) (err error) { return fmt.Errorf(msg) } +func buildParamErrCodeAndErr(str string) (data, errCode string, err error) { + return data, model.ErrCodeOpenAPIParamErrNormal, fmt.Errorf("参数[%s]错误,请传入正确的值!", str) +} + func buildParamErr(str string) (err error) { return fmt.Errorf("参数[%s]错误,请传入正确的值!", str) } +func buildMethodParamSign() (err error) { + return fmt.Errorf("参数['sign']校验失败,请传入正确的值!") +} + func buildMethodParamErr() (err error) { return fmt.Errorf("参数['method']错误,请传入正确的值!") }