Browse Source

wip:代码调整

fuwencai 5 months ago
parent
commit
5ecbe97213

+ 1 - 1
newuserGet/README.MD

@@ -13,7 +13,7 @@ link: "mysql:datagroup:Dgrpdb#2024@36@tcp(192.168.3.149:4000)/jianyu_subjectdb_t
 ```
 ### 数据库说明
 - pub_tags  注册时间标签和行为标签 
-- Call_Accounting 因为没有单独的测试环境,149:4000(Call_Accounting)是正式环境,所以在测试环境新建了Call_Accounting_test,往`voice_record`这个表添加信息模拟通话记录
+- Call_Accounting 因为没有单独的测试环境,149:4000(Call_Accounting)是正式环境,所以在测试环境(192.168.3.14:4000)新建了Call_Accounting_test,往`voice_record`这个表添加信息模拟通话记录
 - jianyu_subjectdb 测试环境是:jianyu_subjectdb_test ,可以往这个表添加信息模拟跟进状态:dwd_f_crm_clue_info
 
 ## 配置

+ 13 - 0
newuserSend/go.mod

@@ -4,6 +4,7 @@ go 1.18
 
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20250208012652-ed633bf76e1b
+	github.com/gogf/gf/contrib/drivers/mysql/v2 v2.8.3
 	github.com/gogf/gf/v2 v2.8.3
 )
 
@@ -15,19 +16,31 @@ require (
 	github.com/fsnotify/fsnotify v1.7.0 // indirect
 	github.com/go-logr/logr v1.4.2 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
+	github.com/go-sql-driver/mysql v1.7.1 // indirect
+	github.com/go-stack/stack v1.8.0 // indirect
+	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gorilla/websocket v1.5.3 // indirect
 	github.com/grokify/html-strip-tags-go v0.1.0 // indirect
+	github.com/klauspost/compress v1.13.6 // indirect
 	github.com/magiconair/properties v1.8.9 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mattn/go-runewidth v0.0.16 // indirect
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
+	github.com/pkg/errors v0.9.1 // indirect
 	github.com/rivo/uniseg v0.4.7 // indirect
+	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
+	github.com/xdg-go/scram v1.0.2 // indirect
+	github.com/xdg-go/stringprep v1.0.2 // indirect
+	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
+	go.mongodb.org/mongo-driver v1.9.1 // indirect
 	go.opentelemetry.io/otel v1.24.0 // indirect
 	go.opentelemetry.io/otel/metric v1.24.0 // indirect
 	go.opentelemetry.io/otel/sdk v1.24.0 // indirect
 	go.opentelemetry.io/otel/trace v1.24.0 // indirect
+	golang.org/x/crypto v0.30.0 // indirect
 	golang.org/x/net v0.32.0 // indirect
+	golang.org/x/sync v0.10.0 // indirect
 	golang.org/x/sys v0.28.0 // indirect
 	golang.org/x/text v0.21.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect

+ 18 - 0
newuserSend/go.sum

@@ -69,8 +69,13 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
+github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
+github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogf/gf/contrib/drivers/mysql/v2 v2.8.3 h1:RtoBg5HWACFrgIrFkpzH94kxSd5EWefNAq5k6olNY6c=
+github.com/gogf/gf/contrib/drivers/mysql/v2 v2.8.3/go.mod h1:elZjckHRCejwml5Kdx2zfhOUDiAV3r5i4BgXcKAeH00=
 github.com/gogf/gf/v2 v2.8.3 h1:h9Px3lqJnnH6It0AqHRz4/1hx0JmvaSf1IvUir5x1rA=
 github.com/gogf/gf/v2 v2.8.3/go.mod h1:n++xPYGUUMadw6IygLEgGZqc6y6DRLrJKg5kqCrPLWY=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
@@ -94,6 +99,7 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
 github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -130,6 +136,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -169,6 +176,7 @@ github.com/olivere/elastic/v7 v7.0.22/go.mod h1:VDexNy9NjmtAkrjNoI7tImv7FR4tf5zU
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -209,11 +217,16 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
+github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
 github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
+github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w=
 github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
+github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc=
 github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
 github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g=
+github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -221,6 +234,7 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
 go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
 go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
 go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
+go.mongodb.org/mongo-driver v1.9.1 h1:m078y9v7sBItkt1aaoe2YlvWEXcD263e1a4E1fBrJ1c=
 go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
 go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
 go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
@@ -246,6 +260,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.30.0 h1:RwoQn3GkWiMkzlX562cLB7OxWvjH1L8xutO2WoJcRoY=
+golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -287,6 +303,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=

+ 13 - 15
newuserSend/internal/logic/task.go

@@ -33,32 +33,36 @@ func Task(ctx context.Context) {
 		g.Log().Error(ctx, "获取发送内容失败", err)
 		return
 	}
+	today := fmt.Sprintf("%s 00:00:00", gtime.Date())
 	// 遍历规则
 	for i := 0; i < len(sendContent); i++ {
 		g.Log().Infof(ctx, "开始处理第%v个发送规则:id-%v 内容id:%v \n", i, sendContent[i].RuleId, sendContent[i].Id)
 
 		// 查询总数
-		count, err := dao.NewUserSendLog.Ctx(ctx).Where("rule_id=? and state=? and create_time>?", sendContent[i].RuleId, 0).Count()
+		count, err := dao.NewUserSendLog.Ctx(ctx).Where("rule_id=? and state=? and create_time>=?", sendContent[i].RuleId, 0, today).Count()
 		if err != nil {
 			g.Log().Error(ctx, "获取待发送用户失败", sendContent[i].RuleId, err)
 			continue
 		}
-		g.Log().Info(ctx, "规则%v-获取待发送用户数量-%v", sendContent[i].RuleId, count)
+		g.Log().Infof(ctx, "规则%v-获取待发送用户数量-%v", sendContent[i].RuleId, count)
 		if count == 0 {
 			continue
 		}
 		userList := []entity.NewUserSendLog{}
 		for j := 0; j < count; j += 200 {
 			// 查跟进规则查询要发送的用户
-			err := dao.NewUserSendLog.Ctx(ctx).Where("rule_id=? and state=?", sendContent[i].RuleId, 0).Limit(200).Scan(&userList)
+			err := dao.NewUserSendLog.Ctx(ctx).Where("rule_id=? and state=? and create_time>=?", sendContent[i].RuleId, 0, today).Limit(200).Scan(&userList)
 			if err != nil {
 				g.Log().Error(ctx, "获取待发送用户失败", sendContent[i].RuleId, err)
 				break
 			}
 			// 发送消息
 			sendMsg(ctx, sendContent[i], userList)
+			g.Log().Infof(ctx, "发送第%v个发送规则:id-%v 内容id:%v 批次:%v-%v\n", i, sendContent[i].RuleId, sendContent[i].Id, j, j+200)
 			updateState(ctx, userList)
 		}
+		g.Log().Infof(ctx, "处理完成第%v个发送规则:id-%v 内容id:%v \n", i, sendContent[i].RuleId, sendContent[i].Id)
+
 	}
 
 }
@@ -76,29 +80,23 @@ func sendMsg(ctx context.Context, content entity.NewUserSendContent, sendUserLis
 
 func sms(ctx context.Context, content entity.NewUserSendContent, sendUserList []entity.NewUserSendLog) {
 	// 处理短信请求数据
-	varmap := map[string]interface{}{}
+	vardata := []string{}
 	if content.SmsVar != "" {
 		smsvars := strings.Split(content.SmsVar, ",")
 		for i := 0; i < len(smsvars); i++ {
 			switch smsvars[i] {
 			case consts.SmsVarMonth:
-				varmap[smsvars[i]] = gtime.Now().Month()
+				vardata = append(vardata, fmt.Sprint(gtime.Now().Month()))
 			case consts.SmsVarYear:
-				varmap[smsvars[i]] = gtime.Now().Year()
+				vardata = append(vardata, fmt.Sprint(gtime.Now().Year()))
 			}
 		}
 	}
-	records := []utility.SmsRecord{}
 	for i := 0; i < len(sendUserList); i++ {
-		r := utility.SmsRecord{
-			Mobile: sendUserList[i].Phone,
-		}
-		if len(varmap) > 0 {
-			r.TpContent = &varmap
-		}
-		records = append(records, r)
+		utility.NewSMSDao(sendUserList[i].Phone, vardata, content.SmsId).SendMsgBySMS(ctx)
 	}
-	utility.SendSms(ctx, records, content.SmsId)
+	//g.Log().Info(ctx, "sms 发送完成:",sendUserList,content.RuleId)
+
 }
 
 func siteMsg(ctx context.Context, content entity.NewUserSendContent, sendUserList []entity.NewUserSendLog) {

+ 2 - 3
newuserSend/main.go

@@ -2,6 +2,7 @@ package main
 
 import (
 	"context"
+	_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/os/gcron"
 	"github.com/gogf/gf/v2/os/gctx"
@@ -14,8 +15,6 @@ func main() {
 		err error
 		ctx = gctx.New()
 	)
-	//logic.Task(ctx)
-	//
 	taskRun := g.Cfg().MustGet(ctx, "task.taskRun").Bool()
 	if taskRun {
 		cronStr := g.Cfg().MustGet(ctx, "task.cron").String()
@@ -24,7 +23,7 @@ func main() {
 			logic.Task(ctx)
 			g.Log().Print(ctx, "end")
 
-		})
+		}, "newusersend")
 		if err != nil {
 			panic(err)
 		}

+ 29 - 0
newuserSend/manifest/config/config.yaml

@@ -0,0 +1,29 @@
+# https://goframe.org/docs/web/server-config-file-template
+server:
+  address: ":8000"
+  openapiPath: "/api.json"
+  swaggerPath: "/swagger"
+
+# https://goframe.org/docs/core/glog-config
+logger:
+  level: "all"
+  stdout: true
+
+# https://goframe.org/docs/core/gdb-config-file
+database:
+  default:
+    link: "mysql:root:=PDT49#80Z!RVv52_z@tcp(192.168.3.14:4000)/jianyu"
+siteMsg:
+  addr: "https://web-qmx_admin.jydev.jianyu360.com/api/admin/"
+  action: "/message/sendMessageApi"
+  callPlatform: "newusersend"
+  msgType: 1
+task:
+  taskRun: true
+  firstRun: true
+  cron: "# 0 10 * * 1-5"  #周一到周五 每天10点执行一次
+#  cron: "# 0 10 * * 1-5"
+sms:
+  Mark: jy@wz
+  ProductId: 0
+  rpc: "192.168.3.149:932"

+ 28 - 45
newuserSend/utility/sms.go

@@ -1,61 +1,44 @@
 package utility
 
 import (
+	"app.yhyue.com/moapp/jybase/sms"
 	"context"
-	"crypto/md5"
-	"encoding/hex"
-	"encoding/json"
+	"fmt"
 	"github.com/gogf/gf/v2/frame/g"
-	"strconv"
-	"time"
+	"github.com/gogf/gf/v2/os/gctx"
 )
 
-const (
-	sendsmsUrl = "https://api-shss.zthysms.com/v2/sendSmsTp"
+var (
+	productId = 0
+	markKey   = ""
+	rpcaddr   = ""
 )
 
-// todo 有空再优化
-
-// 短信发送参数
-type SmsRecord struct {
-	Mobile    string                  `json:"mobile"`              // 手机号
-	TpContent *map[string]interface{} `json:"tpContent,omitempty"` // 短信模板 变量
+func init() {
+	markKey = g.Cfg().MustGet(gctx.New(), "sms.Mark").String()
+	productId = g.Cfg().MustGet(gctx.New(), "sms.ProductId").Int()
+	rpcaddr = g.Cfg().MustGet(gctx.New(), "sms.rpc").String()
 }
 
-func SendSms(ctx context.Context, records []SmsRecord, tpId int) error {
-	sendsmsUrl := g.Cfg().MustGet(ctx, "sms.sendUrl").String()
-	signature := g.Cfg().MustGet(ctx, "sms.signature").String()
-	username := g.Cfg().MustGet(ctx, "sms.username").String()
-	password := g.Cfg().MustGet(ctx, "sms.password").String()
-	tkey := int32(time.Now().Unix())
-	//int类型转为string
-	tKey := strconv.Itoa(int(tkey))
-	pwd := EnMd5(EnMd5(password) + tKey)
-	data := map[string]interface{}{"username": username,
-		"password":  pwd,
-		"tKey":      tKey,
-		"signature": signature,
-		"tpId":      tpId,
-		"records":   records}
-	marshal, err := json.Marshal(data)
+type SMSDao struct {
+	Phone  string
+	Params []string
+	Index  int
+}
 
-	if err != nil {
-		g.Log().Error(ctx, "sendSms marshal err:", err)
-		return err
+func NewSMSDao(phone string, params []string, index int) *SMSDao {
+	return &SMSDao{
+		Phone:  phone,
+		Params: params,
+		Index:  index,
 	}
-	_, err = g.Client().Post(ctx, sendsmsUrl, string(marshal))
-	if err != nil {
-		g.Log().Error(ctx, "sendSms post err:", err)
-		return err
-	}
-	return nil
 }
-func EnMd5(mstr string) string {
-
-	data := []byte(mstr)
-	md5obj := md5.New()
-	md5obj.Write(data)
-	passowrd := md5obj.Sum(nil)
-	return hex.EncodeToString(passowrd)
 
+func (s *SMSDao) SendMsgBySMS(ctx context.Context) (err error) {
+	var params []string
+	mark := fmt.Sprintf("%d%s%d", productId, markKey, s.Index)
+	params = s.Params
+	params = append(params, mark)
+	sms.SendSms(rpcaddr, "", s.Phone, params...)
+	return
 }