Эх сурвалжийг харах

feat:添加新增系统用户接口

Roc 3 жил өмнө
parent
commit
a6792f22aa

+ 67 - 4
controllers/base_auth.go

@@ -2,12 +2,15 @@ package controllers
 
 import (
 	"crypto/md5"
+	"encoding/json"
 	"errors"
 	"fmt"
+	"github.com/shopspring/decimal"
 	"hongze/hongze_open_api/models/custom"
 	"hongze/hongze_open_api/models/tables/open_api_user"
 	"hongze/hongze_open_api/utils"
 	"math"
+	"reflect"
 	"sort"
 	"strconv"
 	"strings"
@@ -43,6 +46,9 @@ func (c *BaseAuth) Prepare() {
 
 		//请求类型
 		contentType := c.Ctx.Request.Header.Get("content-type")
+		//fmt.Println("contentType:", contentType)
+		//fmt.Println("c.Ctx.Input.RequestBody:", string(c.Ctx.Input.RequestBody))
+
 		switch contentType {
 		case "multipart/form-data":
 			//文件最大5M
@@ -53,16 +59,43 @@ func (c *BaseAuth) Prepare() {
 				//c.Abort()
 				return
 			}
-		default:
+			params := c.Ctx.Request.Form
+			signData = convertParam(params)
+		case "application/x-www-form-urlencoded":
 			err := c.Ctx.Request.ParseForm()
 			if err != nil {
 				c.FailWithMessage(fmt.Sprintf("获取参数失败,%v", err))
 				return
 			}
+			params := c.Ctx.Request.Form
+			signData = convertParam(params)
+		case "application/json":
+			//var v interface{}
+			params := make(map[string]interface{})
+			err := json.Unmarshal(c.Ctx.Input.RequestBody, &params)
+			if err != nil {
+				// handle error
+				//fmt.Println("err json:", err)
+				c.FailWithMessage(fmt.Sprintf("获取参数失败,%v", err))
+				return
+			}
+			//fmt.Println("params:", params)
+
+			signData = convertParamInterface(params)
+			//tmpV := v.(map[string]string)
+			//fmt.Println("tmpV:", tmpV)
+			//fmt.Sprintln("list type is v%", tmpV["list"])
+		default: //正常应该是其他方式获取解析的,暂时这么处理吧
+			err := c.Ctx.Request.ParseForm()
+			if err != nil {
+				c.FailWithMessage(fmt.Sprintf("获取参数失败,%v", err))
+				return
+			}
+			params := c.Ctx.Request.Form
+			signData = convertParam(params)
 		}
-		params := c.Ctx.Request.Form
-		signData = convertParam(params)
 	}
+	//fmt.Println("signData:", signData)
 
 	//页码数
 	var startSize int
@@ -104,6 +137,36 @@ func convertParam(params map[string][]string) (signData map[string]string) {
 	return signData
 }
 
+//将请求传入的数据格式转换成签名需要的格式(目前只能处理简单的类型,数组、对象暂不支持)
+func convertParamInterface(params map[string]interface{}) (signData map[string]string) {
+	signData = make(map[string]string)
+	for key := range params {
+		val := ``
+		//fmt.Println("key", key, ";val:", params[key], ";type:", reflect.TypeOf(params[key]))
+		//signData[key] = params[key][0]
+		tmpVal := params[key]
+		switch reflect.TypeOf(tmpVal).Kind() {
+		case reflect.String:
+			val = fmt.Sprint(tmpVal)
+		case reflect.Int, reflect.Int16, reflect.Int64, reflect.Int32, reflect.Int8:
+			val = fmt.Sprint(tmpVal)
+		case reflect.Uint, reflect.Uint32, reflect.Uint16, reflect.Uint8, reflect.Uint64:
+			val = fmt.Sprint(tmpVal)
+		case reflect.Bool:
+			val = fmt.Sprint(tmpVal)
+		case reflect.Float64:
+			decimalNum := decimal.NewFromFloat(tmpVal.(float64))
+			val = decimalNum.String()
+			//val = strconv.FormatFloat(tmpVal.(float64), 'E', -1, 64) //float64
+		case reflect.Float32:
+			decimalNum := decimal.NewFromFloat32(tmpVal.(float32))
+			val = decimalNum.String()
+		}
+		signData[key] = val
+	}
+	return signData
+}
+
 //请求参数签名校验
 func checkSign(postData map[string]string, ip string) (err error) {
 	isSandbox := postData["is_sandbox"]
@@ -168,7 +231,7 @@ func checkSign(postData map[string]string, ip string) (err error) {
 
 	//先取出除sign外的所有的提交的参数key
 	var keys []string
-	for k, _ := range postData {
+	for k := range postData {
 		if k != "sign" {
 			keys = append(keys, k)
 		}

+ 1 - 0
go.mod

@@ -9,6 +9,7 @@ require (
 	github.com/go-sql-driver/mysql v1.6.0
 	github.com/rdlucklib/rdluck_tools v1.0.3
 	github.com/satori/go.uuid v1.2.0 // indirect
+	github.com/shopspring/decimal v1.3.1
 	golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect
 	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
 )

+ 2 - 0
go.sum

@@ -156,6 +156,8 @@ github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
+github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
+github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
 github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
 github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
 github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=

+ 2 - 0
models/db_init.go

@@ -3,6 +3,7 @@ package models
 import (
 	_ "github.com/go-sql-driver/mysql"
 	"github.com/rdlucklib/rdluck_tools/orm"
+	"hongze/hongze_open_api/models/tables/admin"
 	"hongze/hongze_open_api/models/tables/company"
 	"hongze/hongze_open_api/models/tables/open_api_user"
 	"hongze/hongze_open_api/models/tables/wx_user"
@@ -31,6 +32,7 @@ func init() {
 		new(open_api_user.OpenApiUser), //开放API用户表
 		new(company.Company),           //company客户表
 		new(wx_user.WxUser),            //微信用户表
+		new(admin.Admin),               //系统用户表
 	)
 
 }

+ 5 - 3
models/request/admin/admin.go

@@ -1,6 +1,8 @@
 package admin
 
-type LoginReq struct {
-	Username string `description:"账号"`
-	Password string `description:"密码"`
+// CreateUserReq 新增用户的结构体
+type CreateUserReq struct {
+	Mobile   string `description:"手机号" json:"mobile"`
+	RealName string `description:"用户真实姓名" json:"real_name"`
+	RoleType int    `description:"角色类型,枚举值。1:ficc研究员;2:权益研究员;3:ficc销售;4:权益销售" json:"role_type"`
 }

+ 9 - 0
routers/commentsRouter_controllers.go

@@ -7,6 +7,15 @@ import (
 
 func init() {
 
+    beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:Admin"] = append(beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:Admin"],
+        beego.ControllerComments{
+            Method: "Create",
+            Router: "/create",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:CompanyUser"] = append(beego.GlobalControllerRouter["hongze/hongze_open_api/controllers:CompanyUser"],
         beego.ControllerComments{
             Method: "GetUserReportList",

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
routers/router.go


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
swagger/swagger.json


+ 73 - 28
swagger/swagger.yml

@@ -1,12 +1,13 @@
 swagger: "2.0"
 info:
   title: 弘则开放API接口
-  description: 这是弘则开放API接口文档 <br/><br/><b>1、参数格式与调用方式:</b><br/>(1)接口传输的所有参数使用 UTF8
-    编码格式,包括签名。接口调用方式请以接口定义的方式进行调用。<br/>(2)接口地址(测试):http://8.136.199.33:8608/api/<br/><br/><b>2、公共参数:</b><br/><table
-    style="text-align:center"><tr><td style="border:1px solid">参数名</td><td style="border:1px
-    solid">类型</td><td style="border:1px solid">是否必传</td><td style="border:1px solid">说明</td><tr><td
-    style="border:1px solid">appid</td><td style="border:1px solid">string</td><td
-    style="border:1px solid">是</td><td style="border:1px solid">开放平台给分配的appid</td></tr></tr><tr><td
+  description: '这是弘则开放API接口文档 <br/><br/><b>1、参数格式与调用方式:</b><br/>(1)接口传输的所有参数使用 UTF8
+    编码格式,包括签名。接口调用方式请以接口定义的方式进行调用。<br/>(2)接口地址(测试):http://8.136.199.33:8608/api/<br/>(3)如果是POST请求,那么header头请以Content-Type:
+    application/json的方式请求<br/><br/><b>2、公共参数:</b><br/><table style="text-align:center"><tr><td
+    style="border:1px solid">参数名</td><td style="border:1px solid">类型</td><td style="border:1px
+    solid">是否必传</td><td style="border:1px solid">说明</td><tr><td style="border:1px
+    solid">appid</td><td style="border:1px solid">string</td><td style="border:1px
+    solid">是</td><td style="border:1px solid">开放平台给分配的appid</td></tr></tr><tr><td
     style="border:1px solid">nonce_str</td><td style="border:1px solid">string</td><td
     style="border:1px solid">是</td><td style="border:1px solid">随机字符串,最大32位长度,26位大小写字母a,b…z和数字组成</td></tr><tr><td
     style="border:1px solid">timestamp</td><td style="border:1px solid">int</td><td
@@ -28,7 +29,7 @@ info:
     style="text-align:center"><tr><td style="border:1px solid">200</td><td style="border:1px
     solid">正常响应码</td></tr> <tr><td style="border:1px solid">400</td><td style="border:1px
     solid">业务处理失败响应码</td></tr> <tr><td style="border:1px solid">401</td><td style="border:1px
-    solid">参数签名异常,检查下签名是否正常</td></tr></table>
+    solid">参数签名异常,检查下签名是否正常</td></tr></table>'
   version: 1.0.0
   contact:
     email: pyan@hzinsights.com
@@ -82,8 +83,8 @@ paths:
     get:
       tags:
       - report
-      description: 获取报告列表
-      operationId: ReportController.获取报告列表接口
+      description: 获取章节详情
+      operationId: ReportControllerCommon.获取章节详情接口
       parameters:
       - in: query
         name: ResearchReportTypeId
@@ -104,8 +105,8 @@ paths:
     get:
       tags:
       - report
-      description: 获取报告列表
-      operationId: ReportController.获取报告列表接口
+      description: 获取报告详情
+      operationId: ReportControllerCommon.获取报告详情
       parameters:
       - in: query
         name: research_report_id
@@ -162,13 +163,41 @@ paths:
           description: ""
           schema:
             $ref: '#/definitions/report.ReportListResp'
+  /sys_user/create:
+    post:
+      tags:
+      - sys_user
+      description: 创建系统用户
+      operationId: Admin.创建系统用户
+      parameters:
+      - in: body
+        name: request
+        description: type json string
+        required: true
+        schema:
+          $ref: '#/definitions/admin.CreateUserReq'
+      responses:
+        "200":
+          description: 创建成功
 definitions:
+  admin.CreateUserReq:
+    title: CreateUserReq
+    type: object
+    properties:
+      mobile:
+        description: 手机号
+        type: string
+      real_name:
+        description: 用户真实姓名
+        type: string
+      role_type:
+        description: 角色类型,枚举值。1:ficc研究员;2:权益研究员;3:ficc销售;4:权益销售
+        type: integer
+        format: int64
   company_report_permission.ResearchReportTypeContent:
     title: ResearchReportTypeContent
     type: object
     properties:
-      ResearchReportTypeTitle:
-        type: string
       content:
         description: 内容
         type: string
@@ -194,6 +223,9 @@ definitions:
         description: 研究报告内容id
         type: integer
         format: int64
+      research_report_type_title:
+        description: 标题
+        type: string
       sort:
         description: 排序
         type: integer
@@ -202,18 +234,6 @@ definitions:
     title: ResearchReportTypeInfo
     type: object
     properties:
-      ResearchReportID:
-        description: 报告id
-        type: integer
-        format: int64
-      ResearchReportTypeID:
-        description: 研究报告id
-        type: integer
-        format: int64
-      TypeID:
-        description: 分类id
-        type: integer
-        format: int64
       banner_url:
         description: banner url
         type: string
@@ -224,9 +244,23 @@ definitions:
       report_chapter_type_name:
         description: 章节名称
         type: string
+      research_report_id:
+        description: 报告id
+        type: integer
+        format: int64
+      research_report_type_id:
+        description: 研究报告id
+        type: integer
+        format: int64
       research_report_type_title:
         description: 研究报告标题
         type: string
+      type:
+        type: string
+      type_id:
+        description: 分类id
+        type: integer
+        format: int64
   company_report_permission.ResearchReportTypeList:
     title: ResearchReportTypeList
     type: object
@@ -342,9 +376,6 @@ definitions:
     title: ResearchReport
     type: object
     properties:
-      ResearchReportID:
-        type: integer
-        format: int64
       author:
         type: string
       createdTime:
@@ -367,6 +398,9 @@ definitions:
         format: int64
       reportVariety:
         type: string
+      research_report_id:
+        type: integer
+        format: int64
       researchReportDate:
         type: string
         format: datetime
@@ -415,6 +449,10 @@ definitions:
           $ref: '#/definitions/company_report_permission.ResearchReportTypeContent'
       research_report_type_info:
         $ref: '#/definitions/company_report_permission.ResearchReportTypeInfo'
+      research_report_type_list:
+        type: array
+        items:
+          $ref: '#/definitions/company_report_permission.ResearchReportTypeList'
   tables.ViewReportList:
     title: ViewReportList
     type: object
@@ -479,3 +517,10 @@ tags:
 - name: report
   description: |
     报告模块
+- name: report
+  description: |
+    报告模块
+- name: sys_user
+  description: |
+    Admin
+    系统用户模块

+ 8 - 0
utils/common.go

@@ -740,3 +740,11 @@ func GetLocalIP() (ip string, err error) {
 	}
 	return
 }
+
+// TrimStr 移除字符串中的空格
+func TrimStr(str string) (str2 string) {
+	if str == "" {
+		return str
+	}
+	return strings.Replace(str, " ", "", -1)
+}

+ 110 - 3
utils/config.go

@@ -89,8 +89,115 @@ func init() {
 		ReportAppid = "VH2ou4EKlYZz58Uj"                  //Appid
 		ReportSecret = "Q6Y5vwmx1IAA9OPkobl8qWvrnV7dGJ4k" //AppSecret
 	}
+
+	//初始化系统用户角色map集合
+	initRoleType()
+}
+
+type RoleType struct {
+	RoleId         int    `json:"role_id"`
+	RoleName       string `json:"role_name"`
+	RoleType       string `json:"role_type"`
+	RoleTypeCode   string `json:"role_type_code"`
+	Role           string `json:"role"`
+	DepartmentId   int    `json:"department_id"`
+	DepartmentName string `json:"department_name"`
+	GroupId        int    `json:"group_id"`
+	GroupName      string `json:"group_name"`
 }
 
-//http://webapi.brilliantstart.cn/api/
-//http://webapi.brilliantstart.cn/swagger/
-//http://139.196.122.219:8603/swagger/
+var RoleTypeMap = map[int]RoleType{}
+
+func initRoleType() {
+	if RunMode == "release" {
+		RoleTypeMap[1] = RoleType{
+			RoleId:         6,
+			RoleName:       "ficc研究员",
+			RoleType:       "ficc研究员",
+			RoleTypeCode:   "researcher",
+			Role:           "researcher",
+			DepartmentId:   1,
+			DepartmentName: "FICC研究部",
+			GroupId:        8,
+			GroupName:      "无",
+		}
+		RoleTypeMap[2] = RoleType{
+			RoleId:         10,
+			RoleName:       "权益研究员",
+			RoleType:       "权益研究员",
+			RoleTypeCode:   "rai_researcher",
+			Role:           "researcher",
+			DepartmentId:   5,
+			DepartmentName: "权益销售部",
+			GroupId:        17,
+			GroupName:      "无",
+		}
+		RoleTypeMap[3] = RoleType{
+			RoleId:         4,
+			RoleName:       "ficc销售",
+			RoleType:       "ficc销售",
+			RoleTypeCode:   "ficc_seller",
+			Role:           "sales",
+			DepartmentId:   2,
+			DepartmentName: "ficc销售部",
+			GroupId:        9,
+			GroupName:      "无",
+		}
+		RoleTypeMap[4] = RoleType{
+			RoleId:         5,
+			RoleName:       "权益销售",
+			RoleType:       "权益销售",
+			RoleTypeCode:   "rai_seller",
+			Role:           "sales",
+			DepartmentId:   5,
+			DepartmentName: "权益销售部",
+			GroupId:        17,
+			GroupName:      "无",
+		}
+	} else {
+		RoleTypeMap[1] = RoleType{
+			RoleId:         6,
+			RoleName:       "ficc研究员",
+			RoleType:       "ficc研究员",
+			RoleTypeCode:   "researcher",
+			Role:           "researcher",
+			DepartmentId:   1,
+			DepartmentName: "FICC研究部",
+			GroupId:        8,
+			GroupName:      "无",
+		}
+		RoleTypeMap[2] = RoleType{
+			RoleId:         10,
+			RoleName:       "权益研究员",
+			RoleType:       "权益研究员",
+			RoleTypeCode:   "rai_researcher",
+			Role:           "researcher",
+			DepartmentId:   5,
+			DepartmentName: "权益销售部-王芳",
+			GroupId:        17,
+			GroupName:      "无",
+		}
+		RoleTypeMap[3] = RoleType{
+			RoleId:         4,
+			RoleName:       "ficc销售",
+			RoleType:       "ficc销售",
+			RoleTypeCode:   "ficc_seller",
+			Role:           "sales",
+			DepartmentId:   2,
+			DepartmentName: "ficc销售部",
+			GroupId:        9,
+			GroupName:      "无",
+		}
+		RoleTypeMap[4] = RoleType{
+			RoleId:         5,
+			RoleName:       "权益销售",
+			RoleType:       "权益销售",
+			RoleTypeCode:   "rai_seller",
+			Role:           "sales",
+			DepartmentId:   5,
+			DepartmentName: "权益销售部-王芳",
+			GroupId:        17,
+			GroupName:      "无",
+		}
+	}
+}

+ 5 - 0
utils/constants.go

@@ -95,3 +95,8 @@ var PermissionAllClassifyArr = [...]string{"宏观经济", "化工产业", "黑
 const (
 	key = "zDeESsxsXuionhqSLZYHWcDJ" //全局加密KEY
 )
+
+//缓存key
+const (
+	CACHE_KEY_ADMIN = "calendar:admin:list" //系统用户列表缓存key
+)

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно