diff --git a/go.mod b/go.mod index 74d5cdc..3222dae 100644 --- a/go.mod +++ b/go.mod @@ -4,19 +4,19 @@ go 1.19 require ( github.com/go-redis/redis v6.15.9+incompatible + github.com/gorilla/websocket v1.5.0 github.com/pkg/sftp v1.13.5 github.com/sirupsen/logrus v1.9.0 - golang.org/x/crypto v0.6.0 + golang.org/x/crypto v0.7.0 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/natefinch/lumberjack.v2 v2.2.1 gorm.io/driver/sqlserver v1.4.2 - gorm.io/gorm v1.24.5 + gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11 ) require ( github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/kr/fs v0.1.0 // indirect @@ -24,6 +24,6 @@ require ( github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.26.0 // indirect github.com/stretchr/testify v1.8.1 // indirect - golang.org/x/sys v0.5.0 // indirect + golang.org/x/sys v0.6.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect ) diff --git a/go.sum b/go.sum index ed0cf51..744a3fb 100644 --- a/go.sum +++ b/go.sum @@ -99,8 +99,8 @@ golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20221005025214-4161e89ecf1b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -111,7 +111,7 @@ golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -132,16 +132,16 @@ golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -180,5 +180,5 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/sqlserver v1.4.2 h1:nMtEeKqv2R/vv9FoHUFWfXfP6SskAgRar0TPlZV1stk= gorm.io/driver/sqlserver v1.4.2/go.mod h1:XHwBuB4Tlh7DqO0x7Ema8dmyWsQW7wi38VQOAFkrbXY= gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= -gorm.io/gorm v1.24.5 h1:g6OPREKqqlWq4kh/3MCQbZKImeB9e6Xgc4zD+JgNZGE= -gorm.io/gorm v1.24.5/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= +gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11 h1:9qNbmu21nNThCNnF5i2R3kw2aL27U8ZwbzccNjOmW0g= +gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= diff --git a/iniDataForLinux b/iniDataForLinux index 6dfebff..e43717e 100755 Binary files a/iniDataForLinux and b/iniDataForLinux differ diff --git a/iniDataForMacOs b/iniDataForMacOs index 394c234..3227776 100755 Binary files a/iniDataForMacOs and b/iniDataForMacOs differ diff --git a/main.go b/main.go index fd6ea2f..6d2dc9b 100644 --- a/main.go +++ b/main.go @@ -52,11 +52,12 @@ func init() { go startWebSocket() // 启动 WebSocket 服务,使用协程方式运行 applogger.Info(fmt.Sprintf("程序启动,加载%s环境,尝试执行...", env)) go downloadDecompression() // 启动立即执行一次数据下载、处理 + go queryBatchState() } func main() { ticker := time.NewTicker(time.Duration(taskTime) * time.Minute) // 数据下载、处理 - ticker_merge := time.NewTicker(time.Minute) //名单合并 + ticker_merge := time.NewTicker(5 * time.Minute) //名单合并 defer ticker.Stop() defer ticker_merge.Stop() @@ -69,7 +70,9 @@ func main() { case <-ticker_merge.C: iniLog() - fmt.Print("尝试执行名单合并...\n") + fmt.Print("查询批次状态...\n") + queryBatchState() + } } } @@ -889,11 +892,90 @@ func batchDataInsert(fileName string, lastCallKeys map[string]bool, excludedFile applogger.Info(fmt.Sprintf("%s(数据包)执行时间:%s 插入数据:%d条 过滤数数:%d条", fileName, elapsed, count, bi)) return 0 } else { //如果没有查询到批次信息,跳过处理 + applogger.Error(fmt.Sprintf("未查询到批次数据,文件名:%s,截取批次标识:%s", fileName, dataFileName)) return -1 } } } +func queryBatchState() { + db, _ := connectToDB() + + var batches []Batch + if err := db.Where("status NOT IN (?)", []int{6, 8}).Find(&batches).Error; err != nil { + applogger.Error(fmt.Sprintf("查询批次状态失败:%s", err)) + } else { + for _, batch := range batches { + sf := SmsFinish{Sid: batch.Sid, Token: token} + sfJson, _ := json.Marshal(sf) + url := "http://www.wemediacn.net/webservice/BatchService?service=sms.querybatchstate" + resp, err := http.Post(url, "application/json; charset=utf-8", strings.NewReader(string(sfJson))) + if err != nil { + applogger.Error(fmt.Sprintf("查询批次状态失败:%s", err)) + } else { + // 解析响应数据 + var retobj map[string]interface{} + err = json.NewDecoder(resp.Body).Decode(&retobj) + if err != nil { + fmt.Println(err) + } + jsonStr, err := json.Marshal(retobj) + if err != nil { + fmt.Println(err) + } + fmt.Printf("查询批次信息API 返回:%s\n", string(jsonStr)) + fmt.Print("\n") + fmt.Print("\n") + code := int(retobj["code"].(float64)) + if code == 0 { + status := uint(retobj["state"].(float64)) + if batch.Status != status || status == 5 { + fmt.Println(batch) + fmt.Print("\n") + fmt.Print("状态不一致或者发送中,更新状态\n") + updates := map[string]interface{}{ + "status": status, + } + if endTime, ok := retobj["endTime"].(string); ok { + if endTimeTime, err := time.Parse("2006-01-02 15:04:05", endTime); err == nil { + updates["end_time"] = &endTimeTime + } + } else { + updates["end_time"] = nil + } + if endTime, ok := retobj["startTime"].(string); ok { + if endTimeTime, err := time.Parse("2006-01-02 15:04:05", endTime); err == nil { + updates["startTime"] = &endTimeTime + } + } else { + updates["startTime"] = nil + } + if mc, ok := retobj["mc"].(float64); ok { + updates["mc"] = int(mc) + } + if rc, ok := retobj["rc"].(float64); ok { + updates["rc"] = int(rc) + } + if sc, ok := retobj["sc"].(float64); ok { + updates["sc"] = int(sc) + } + fmt.Print("\n") + fmt.Print(updates) + fmt.Print("\n") + fmt.Print("\n") + if err := db.Model(&batch).Updates(updates).Error; err != nil { + applogger.Error(fmt.Sprintf("修改批次状态失败:%s", err)) + } + } + } else { + applogger.Error(fmt.Sprintf("查询批次状态失败返回不为0:%s", string(jsonStr))) + } + } + defer resp.Body.Close() + } + } +} + func connectToDB() (*gorm.DB, error) { dsn := "sqlserver://" + dbUser + ":" + dbPassword + "@" + dbAddress + "?database=" + dbName + "&charset=utf8mb4" var db *gorm.DB @@ -1117,12 +1199,17 @@ type Batch struct { CommunicationName string `gorm:"type:varchar(255)"` TargetsMember uint `gorm:"type:int"` TemplateID uint - Content string `gorm:"type:text"` - CreatedAt time.Time `gorm:"default:getdate()"` - UpdatedAt time.Time `gorm:"default:getdate()"` - Status uint `gorm:"type:int"` - DataFileName string `gorm:"type:text"` - Sid int `gorm:"type:int"` + Content string `gorm:"type:text"` + CreatedAt time.Time `gorm:"default:getdate()"` + UpdatedAt time.Time `gorm:"default:getdate()"` + Status uint `gorm:"type:int"` + DataFileName string `gorm:"type:text"` + Sid int `gorm:"type:int"` + EndTime *time.Time `gorm:"column:end_time"` + StartTime *time.Time `gorm:"column:start_time"` + MC *int `gorm:"column:mc"` + RC *int `gorm:"column:rc"` + SC *int `gorm:"column:sc"` } type BatcheData struct {