From f99c218b1b24707ecc4602893f845f5e6f3c6fc1 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Mon, 24 Jul 2023 08:40:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=91=E9=80=81=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/dao/logSms.go | 60 +++++++++++++++++++++ api/model/logSms.go | 38 +++++++++++++ config.yaml | 7 ++- config/config.go | 1 + config/dysms.go | 6 +++ extend/aliyun/dysms.go | 118 +++++++++++++++++++++++++++++++++++++++++ go.mod | 19 +++++++ go.sum | 39 ++++++++++++++ 8 files changed, 287 insertions(+), 1 deletion(-) create mode 100644 api/dao/logSms.go create mode 100644 api/model/logSms.go create mode 100644 config/dysms.go diff --git a/api/dao/logSms.go b/api/dao/logSms.go new file mode 100644 index 0000000..38fb1b8 --- /dev/null +++ b/api/dao/logSms.go @@ -0,0 +1,60 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type LogSms struct { +} + +// GetLogSmsById 获取短信数据-短信id +func (r *LogSms) GetLogSmsById(hospitalId int64) (m *model.LogSms, err error) { + err = global.Db.First(&m, hospitalId).Error + if err != nil { + return nil, err + } + return m, nil +} + +func (r *LogSms) GetLogSmsListByPhone(phone int64) (m []*model.LogSms, err error) { + err = global.Db.Where("phone = ?", phone).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddLogSms 新增短信 +func (r *LogSms) AddLogSms(tx *gorm.DB, model *model.LogSms) (*model.LogSms, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// AddLogSmsUnTransaction 新增短信-无事物 +func (r *LogSms) AddLogSmsUnTransaction(model *model.LogSms) (*model.LogSms, error) { + if err := global.Db.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetLogSmsList 获取短信列表 +func (r *LogSms) GetLogSmsList(maps interface{}) (m []*model.LogSms, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteLogSmsById 删除短信-短信id +func (r *LogSms) DeleteLogSmsById(tx *gorm.DB, logId int64) error { + if err := tx.Delete(&model.LogSms{}, logId).Error; err != nil { + return err + } + return nil +} diff --git a/api/model/logSms.go b/api/model/logSms.go new file mode 100644 index 0000000..59c5a55 --- /dev/null +++ b/api/model/logSms.go @@ -0,0 +1,38 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// LogSms 日志-短信发送表 +type LogSms struct { + LogId int64 `gorm:"column:log_id;type:bigint(19);primary_key;comment:主键id" json:"log_id"` + Type int `gorm:"column:type;type:tinyint(1);comment:类型(1:短信 2:邮件);NOT NULL" json:"type"` + Status int `gorm:"column:status;type:tinyint(1);default:1;comment:状态(1:发送成功 2:发送失败)" json:"status"` + Phone string `gorm:"column:phone;type:varchar(20);comment:手机号" json:"phone"` + TemplateCode string `gorm:"column:template_code;type:varchar(20);comment:模版code" json:"template_code"` + ThirdCode string `gorm:"column:third_code;type:varchar(100);comment:第三方编码" json:"third_code"` + SceneDesc string `gorm:"column:scene_desc;type:varchar(255);comment:场景描述" json:"scene_desc"` + Remarks string `gorm:"column:remarks;type:varchar(255);comment:备注" json:"remarks"` + Model +} + +func (m *LogSms) TableName() string { + return "gdxz_log_sms" +} + +func (m *LogSms) BeforeCreate(tx *gorm.DB) error { + if m.LogId == 0 { + m.LogId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/config.yaml b/config.yaml index 479798a..a0128ed 100644 --- a/config.yaml +++ b/config.yaml @@ -50,4 +50,9 @@ im: im-app-id: 1400798221 im-secret: fc45ab469ca632a700166973d87b3a6f56a855cb92d7cffb54e4d37135c097da im-base-url: https://console.tim.qq.com/ - im-token: NDc5MzExMDMxMDY2NDMxNDg5L \ No newline at end of file + im-token: NDc5MzExMDMxMDY2NDMxNDg5L + +# [阿里大鱼短信] +dysms: + dysms-access-key: LTAI4GGygjsKhyBwvvC3CghV + dysms-access-secret: rcx7lO9kQxG10m8NqNPEfEtT9IS8EI \ No newline at end of file diff --git a/config/config.go b/config/config.go index ab19a80..4ed9b2e 100644 --- a/config/config.go +++ b/config/config.go @@ -13,4 +13,5 @@ type Config struct { Snowflake int64 `mapstructure:"snowflake" json:"snowflake" yaml:"snowflake"` CaOnline CaOnline `mapstructure:"ca-online" json:"ca-online" yaml:"ca-online"` Im Im `mapstructure:"im" json:"im" yaml:"im"` + Dysms Dysms `mapstructure:"dysms" json:"dysms" yaml:"dysms"` } diff --git a/config/dysms.go b/config/dysms.go new file mode 100644 index 0000000..7d02d49 --- /dev/null +++ b/config/dysms.go @@ -0,0 +1,6 @@ +package config + +type Dysms struct { + DysmsAccessKey string `mapstructure:"dysms-access-key" json:"dysms-access-key" yaml:"dysms-access-key"` + DysmsAccessSecret string `mapstructure:"dysms-access-secret" json:"dysms-access-secret" yaml:"dysms-access-secret"` +} diff --git a/extend/aliyun/dysms.go b/extend/aliyun/dysms.go index 42321ed..8782dec 100644 --- a/extend/aliyun/dysms.go +++ b/extend/aliyun/dysms.go @@ -1,2 +1,120 @@ // Package aliyun 短信 package aliyun + +import ( + "encoding/json" + "errors" + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" + util "github.com/alibabacloud-go/tea-utils/v2/service" + "github.com/alibabacloud-go/tea/tea" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/model" + "hospital-admin-api/config" +) + +func createClient() (_result *dysmsapi20170525.Client, _err error) { + accessKeyId := config.C.Dysms.DysmsAccessKey + accessKeySecret := config.C.Dysms.DysmsAccessSecret + + openapiConfig := &openapi.Config{ + // 必填,您的 AccessKey ID + AccessKeyId: &accessKeyId, + // 必填,您的 AccessKey Secret + AccessKeySecret: &accessKeySecret, + } + // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi + openapiConfig.Endpoint = tea.String("dysmsapi.aliyuncs.com") + _result = &dysmsapi20170525.Client{} + _result, _err = dysmsapi20170525.NewClient(openapiConfig) + return _result, _err +} + +// SendSms 发送短信 +func SendSms(phoneNumber, templateCode, sceneDesc string, templateParam map[string]interface{}) error { + client, err := createClient() + if err != nil { + return err + } + + params, err := json.Marshal(templateParam) + if err != nil { + return err + } + + sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ + PhoneNumbers: tea.String(phoneNumber), + SignName: tea.String("肝胆相照"), + TemplateCode: tea.String(templateCode), + TemplateParam: tea.String(string(params)), + } + + tryErr := func() (e error) { + defer func() { + if r := tea.Recover(recover()); r != nil { + e = r + } + }() + + // 初始化运行时配置。 + runtime := &util.RuntimeOptions{} + // 读取超时 + runtime.SetReadTimeout(10000) + // 连接超时 + runtime.SetConnectTimeout(5000) + + // 复制代码运行请自行打印 API 的返回值 + response, err := client.SendSms(sendSmsRequest) + if err != nil { + return err + } + + if response.Body == nil { + return errors.New("短信发送失败") + } + + if response.Body.Code != nil && *response.Body.Code != "OK" { + if response.Body.Message != nil { + return errors.New(*response.Body.Message) + } + } + + // 检测唯一值返回 + if response.Body.RequestId == nil { + if response.Body.Message != nil { + return errors.New(*response.Body.Message) + } + } + + // 记录log + logSms := &model.LogSms{ + Type: 1, + Status: 1, + Phone: phoneNumber, + TemplateCode: templateCode, + ThirdCode: *response.Body.RequestId, + SceneDesc: sceneDesc, + Remarks: string(params), + } + + logSmsDao := dao.LogSms{} + _, _ = logSmsDao.AddLogSmsUnTransaction(logSms) + + return nil + }() + + if tryErr != nil { + var sdkError = &tea.SDKError{} + if t, ok := tryErr.(*tea.SDKError); ok { + sdkError = t + } else { + sdkError.Message = tea.String(tryErr.Error()) + } + // 如有需要,请打印 error + _, err = util.AssertAsString(sdkError.Message) + if err != nil { + return err + } + } + return err +} diff --git a/go.mod b/go.mod index e6be5e8..952e7a9 100644 --- a/go.mod +++ b/go.mod @@ -19,13 +19,31 @@ require ( ) require ( + github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect + github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4 // indirect + github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 // indirect + github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect + github.com/alibabacloud-go/facebody-20191230 v1.1.12 // indirect + github.com/alibabacloud-go/openapi-util v0.1.0 // indirect + github.com/alibabacloud-go/openplatform-20191219 v1.1.5 // indirect + github.com/alibabacloud-go/tea v1.1.19 // indirect + github.com/alibabacloud-go/tea-fileform v1.1.0 // indirect + github.com/alibabacloud-go/tea-oss-sdk v1.1.0 // indirect + github.com/alibabacloud-go/tea-oss-utils v1.1.0 // indirect + github.com/alibabacloud-go/tea-rpc v1.3.3 // indirect + github.com/alibabacloud-go/tea-rpc-utils v1.1.2 // indirect + github.com/alibabacloud-go/tea-utils v1.3.5 // indirect + github.com/alibabacloud-go/tea-utils/v2 v2.0.3 // indirect + github.com/alibabacloud-go/tea-xml v1.1.2 // indirect github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible // indirect + github.com/aliyun/credentials-go v1.1.2 // indirect github.com/bitly/go-simplejson v0.5.1 // indirect github.com/bwmarrin/snowflake v0.3.0 // indirect github.com/bytedance/sonic v1.9.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/clbanning/mxj/v2 v2.5.5 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c // indirect @@ -59,6 +77,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/tencentcloud/tencentcloud-sdk-go v3.0.233+incompatible // indirect + github.com/tjfoc/gmsm v1.3.2 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect golang.org/x/arch v0.3.0 // indirect diff --git a/go.sum b/go.sum index b26a22f..d90211a 100644 --- a/go.sum +++ b/go.sum @@ -38,25 +38,61 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4 h1:7Q2FEyqxeZeIkwYMwRC3uphxV4i7O2eV4ETe21d6lS4= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50= github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6 h1:UTl97mt2qfavxveqCkaVg4tKaZUPzA9RKbFIRaIdtdg= github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6/go.mod h1:UWpcGrWwTbES9QW7OQ7xDffukMJ/l7lzioixIz8+lgY= +github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q= github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= +github.com/alibabacloud-go/facebody-20191230 v1.1.12 h1:FQ45N0Tks6MvCezdFIc/ZL8ZhtAEJ6Pi1RLJmv7CS/s= +github.com/alibabacloud-go/facebody-20191230 v1.1.12/go.mod h1:u/DWpOyFof4FxMomUBCcdvkLBBBV1aBRhZFhSddO294= github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/openapi-util v0.1.0 h1:0z75cIULkDrdEhkLWgi9tnLe+KhAFE/r5Pb3312/eAY= github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/openplatform-20191219 v1.1.5 h1:NQdRXirBxoNrI9MbaaTxbHJKsUS+uga1inKMAcnuFPI= +github.com/alibabacloud-go/openplatform-20191219 v1.1.5/go.mod h1:GfQnFm82wfSsJ0a+bETDqPW64tXUzcw2u2o2i7OacH8= github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg= github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.10/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.19 h1:Xroq0M+pr0mC834Djj3Fl4ZA8+GGoA0i7aWse1vmgf4= github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea-fileform v1.1.0 h1:Qt33K9WCaONMhSetPWquog/QAk0xp9zB2uuhK8/gnyc= +github.com/alibabacloud-go/tea-fileform v1.1.0/go.mod h1:1seBx6+yrLZ5GFYrb8O1EnHvih1wXajQNE5TQNkhLd4= +github.com/alibabacloud-go/tea-oss-sdk v1.1.0 h1:LX6XDD9E5AGgIh9IrNMIcaUOUJE8nz8DaV9FiB2/Ewc= +github.com/alibabacloud-go/tea-oss-sdk v1.1.0/go.mod h1:xpyYJtYKYzJB7JBKyTxoYEfPxcvONfOU/gAjBFeQzRc= +github.com/alibabacloud-go/tea-oss-utils v1.1.0 h1:y65crjjcZ2Pbb6UZtC2deuIZHDVTS3IaDWE7M9nVLRc= +github.com/alibabacloud-go/tea-oss-utils v1.1.0/go.mod h1:PFCF12e9yEKyBUIn7X1IrF/pNjvxgkHy0CgxX4+xRuY= +github.com/alibabacloud-go/tea-rpc v1.1.3/go.mod h1:uwhvnxPK69jcAYkVyP1WCFhTh1oVLiibUseSUpC7L8g= +github.com/alibabacloud-go/tea-rpc v1.1.7/go.mod h1:FU//dNbNYv1jSz1BGj6Sc3Co0IrbWsCnPiB/e1YnvgQ= +github.com/alibabacloud-go/tea-rpc v1.3.3 h1:NZJtukZouR0jpN0dWeBB5bMZdVvTyRPyISxc/hfOALo= +github.com/alibabacloud-go/tea-rpc v1.3.3/go.mod h1:zwKwxuf92liNsPcLOxPdrkvR5Dq6jtX2du6qx8FT094= +github.com/alibabacloud-go/tea-rpc-utils v1.1.0/go.mod h1:rxGY+fLbm3Fj3oJpeU0hBTmz52Ux50nm7JL01tyPv9c= +github.com/alibabacloud-go/tea-rpc-utils v1.1.1/go.mod h1:V5HdNi6Xdn0JMpgVhQ19vsFAS51tydr7BqcJtuXH1Yw= +github.com/alibabacloud-go/tea-rpc-utils v1.1.2 h1:ZTfFREnP2q9D49T2J/1jYYOndepGdrUOgm/JR8/bIQ0= +github.com/alibabacloud-go/tea-rpc-utils v1.1.2/go.mod h1:V5HdNi6Xdn0JMpgVhQ19vsFAS51tydr7BqcJtuXH1Yw= +github.com/alibabacloud-go/tea-utils v1.1.0/go.mod h1:kx2tz0XYhq6igVQCHhCPmOQK4r5LXK0rJUJxiS3VvPg= +github.com/alibabacloud-go/tea-utils v1.3.0/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils v1.3.4/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils v1.3.5 h1:NqtVd9PlYqrFDG8cjXn5eCxMo1Qi1gbhN7DA2vptD7w= +github.com/alibabacloud-go/tea-utils v1.3.5/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4= +github.com/alibabacloud-go/tea-utils/v2 v2.0.3 h1:6OM8vm/6pjQg1a7zc3QNMviaoumnhImRi5V84CnuFkc= github.com/alibabacloud-go/tea-utils/v2 v2.0.3/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ= +github.com/alibabacloud-go/tea-xml v1.1.0/go.mod h1:V/VlXBTCRN0OBvIjtaIXdpU6YAbyofXrIRWCfQ7u47U= +github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M= github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible h1:KpbJFXwhVeuxNtBJ74MCGbIoaBok2uZvkD7QXp2+Wis= github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/aliyun/credentials-go v1.1.0/go.mod h1:ZXrrxv386Mj6z8NpihLKpexQE550m7j3LlyCvYub9aE= +github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY= github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= github.com/bitly/go-simplejson v0.5.1 h1:xgwPbetQScXt1gh9BmoJ6j9JMr3TElvuIyjR8pgdoow= github.com/bitly/go-simplejson v0.5.1/go.mod h1:YOPVLzCfwK14b4Sff3oP1AmGhI9T9Vsg84etUnlyp+Q= @@ -74,6 +110,7 @@ github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583j github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E= github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -290,6 +327,7 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/tencentcloud/tencentcloud-sdk-go v3.0.233+incompatible h1:q+D/Y9jla3afgsIihtyhwyl0c2W+eRWNM9ohVwPiiPw= github.com/tencentcloud/tencentcloud-sdk-go v3.0.233+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4= +github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= @@ -480,6 +518,7 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=