Commit bc71375f authored by 陈子龙's avatar 陈子龙

工单推送短信

parent 201e533d
...@@ -42,6 +42,7 @@ type Config struct { ...@@ -42,6 +42,7 @@ type Config struct {
SmsAccessKeyId string SmsAccessKeyId string
SmsAccessSecret string SmsAccessSecret string
SmsTemplateLogin string SmsTemplateLogin string
SmsWorkOrderTemplate string
SmsSignName string SmsSignName string
AweRestURL string AweRestURL string
......
...@@ -83,6 +83,7 @@ func initConfig() { ...@@ -83,6 +83,7 @@ func initConfig() {
SmsAccessKeyId: util.SetEnvStr("SMS_ACCESS_KEY", "LTAI4GBcVubRjzX7ABPcHnhB"), // 短信key SmsAccessKeyId: util.SetEnvStr("SMS_ACCESS_KEY", "LTAI4GBcVubRjzX7ABPcHnhB"), // 短信key
SmsAccessSecret: util.SetEnvStr("SMS_ACCESS_SECRET", "dYE2dtABFOqYtK1ijcrits0yedHkw7"), // 短信secret SmsAccessSecret: util.SetEnvStr("SMS_ACCESS_SECRET", "dYE2dtABFOqYtK1ijcrits0yedHkw7"), // 短信secret
SmsTemplateLogin: util.SetEnvStr("SMS_TEMPLATE_LOGIN", "SMS_212925130"), // 短信验证码模板 SmsTemplateLogin: util.SetEnvStr("SMS_TEMPLATE_LOGIN", "SMS_212925130"), // 短信验证码模板
SmsWorkOrderTemplate: util.SetEnvStr("SMS_TEMPLATE_LOGIN", "SMS_462020767"), // 短信工单下发模板
SmsSignName: util.SetEnvStr("SMS_SIGN_NAME", "比格数据"), // 签名 SmsSignName: util.SetEnvStr("SMS_SIGN_NAME", "比格数据"), // 签名
AweRestURL: util.SetEnvStr("AWE_REST_URL", "http://awecloud-rest/awecloud/rest"), // awecloud-rest AweRestURL: util.SetEnvStr("AWE_REST_URL", "http://awecloud-rest/awecloud/rest"), // awecloud-rest
KubernetesToken: util.SetEnvStr("AWE_REST_K8S_TOKEN", "eyJhbGciOiJSUzI1NiIsImtpZCI6InJ1alJzNEVGamN5UC0wRU1rS1BKQ0JZVUtNNWpzR0t2bmlrSlJhY2Q3R00ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJiZWFnbGUtc3lzdGVtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InJvb3QiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicm9vdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjRlMDM0OTI3LTc0ZTMtNDQ5Yy1hN2RlLWExMGE3MjU1NGYyMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpiZWFnbGUtc3lzdGVtOnJvb3QifQ.YPLE_E2kIeo-YFQtKScBt5p4KhnniJF9n3iWN2i9UMYS06lIsq2-2wBrgON-YsJihWJupYyDQRiZ9h8bUWTrQzhnpsnuJ_aUclKyAw3QOT9rjvZhJp7qP--27dmdspSHncKtvIiprWE7UTUKzvF33WsMB0fSYFqYXOggNFMoT-fXmWwUXjgar3op0iOl3c3deJ_GeBzFyLSHEuGM7OVdjU8032aUmTen0Kji_P1yB4-O3Iqd0OdVs33BQy_tycjbxhQ8TDEpqrqhLnXjAwJCprLDEpFMx7ODZbjB9Wmuns8yJhaRDxTO47rTME7ZIAxjZ-zLR_QybtW97rlwnUTaNw"), // k8s token KubernetesToken: util.SetEnvStr("AWE_REST_K8S_TOKEN", "eyJhbGciOiJSUzI1NiIsImtpZCI6InJ1alJzNEVGamN5UC0wRU1rS1BKQ0JZVUtNNWpzR0t2bmlrSlJhY2Q3R00ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJiZWFnbGUtc3lzdGVtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InJvb3QiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicm9vdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjRlMDM0OTI3LTc0ZTMtNDQ5Yy1hN2RlLWExMGE3MjU1NGYyMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpiZWFnbGUtc3lzdGVtOnJvb3QifQ.YPLE_E2kIeo-YFQtKScBt5p4KhnniJF9n3iWN2i9UMYS06lIsq2-2wBrgON-YsJihWJupYyDQRiZ9h8bUWTrQzhnpsnuJ_aUclKyAw3QOT9rjvZhJp7qP--27dmdspSHncKtvIiprWE7UTUKzvF33WsMB0fSYFqYXOggNFMoT-fXmWwUXjgar3op0iOl3c3deJ_GeBzFyLSHEuGM7OVdjU8032aUmTen0Kji_P1yB4-O3Iqd0OdVs33BQy_tycjbxhQ8TDEpqrqhLnXjAwJCprLDEpFMx7ODZbjB9Wmuns8yJhaRDxTO47rTME7ZIAxjZ-zLR_QybtW97rlwnUTaNw"), // k8s token
......
...@@ -29,6 +29,7 @@ func InitWorkOrderRouter(e *gin.Engine) { ...@@ -29,6 +29,7 @@ func InitWorkOrderRouter(e *gin.Engine) {
manage.GET("/details", controller.DetailsWorkOrderManage) // 详情 manage.GET("/details", controller.DetailsWorkOrderManage) // 详情
manage.GET("/list", controller.ListWorkOrderManage) // 列表 manage.GET("/list", controller.ListWorkOrderManage) // 列表
manage.POST("/push", controller.PushWorkOrderManage) // 手动下发 manage.POST("/push", controller.PushWorkOrderManage) // 手动下发
} }
//业务工单列表 //业务工单列表
......
...@@ -468,8 +468,7 @@ func ExecAnsible(id, taskId int, value string) { ...@@ -468,8 +468,7 @@ func ExecAnsible(id, taskId int, value string) {
//return //return
} }
} }
err = redis.HDel(conf.TaskExecLog, strconv.Itoa(id)) redis.HDel(conf.TaskExecLog, strconv.Itoa(id))
conf.Logger.Error("del redis err", zap.Error(err))
redis.HDel(conf.AutoExecHistory, strconv.Itoa(id)) redis.HDel(conf.AutoExecHistory, strconv.Itoa(id))
} }
...@@ -3,6 +3,7 @@ package service ...@@ -3,6 +3,7 @@ package service
import ( import (
"errors" "errors"
"fmt" "fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi"
json "github.com/json-iterator/go" json "github.com/json-iterator/go"
"github.com/wanghuiyt/ding" "github.com/wanghuiyt/ding"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/entity" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/entity"
...@@ -11,6 +12,8 @@ import ( ...@@ -11,6 +12,8 @@ import (
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/client" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/client"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/resp" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/resp"
"go.uber.org/zap"
"strings"
"time" "time"
) )
...@@ -356,25 +359,29 @@ func (w *WorkOrderManageSvc) PushWorkOrderManage(req request.PushWorkOrderReq) ( ...@@ -356,25 +359,29 @@ func (w *WorkOrderManageSvc) PushWorkOrderManage(req request.PushWorkOrderReq) (
switch req.PushObj.PushMethod { switch req.PushObj.PushMethod {
case 1: case 1:
//发送钉钉消息 //发送钉钉消息
err = WorkOrderPushDingTalkMsg(workOrder.OrderName, workOrder.OrderLevel, phones) err = w.WorkOrderPushDingTalkMsg(workOrder.OrderName, workOrder.OrderLevel, phones)
if err != nil { if err != nil {
session.Rollback()
return return
} }
case 2: case 2:
//发送短信 //发送短信
err = WorkOrderPushNoteMsg(workOrder.OrderName, workOrder.OrderLevel, phones) err = w.WorkOrderPushNoteMsg(workOrder.OrderName, phones, workOrder.OrderLevel)
if err != nil { if err != nil {
session.Rollback()
return return
} }
case 3: case 3:
//发送钉钉消息 //发送钉钉消息
err = WorkOrderPushDingTalkMsg(workOrder.OrderName, workOrder.OrderLevel, phones) err = w.WorkOrderPushDingTalkMsg(workOrder.OrderName, workOrder.OrderLevel, phones)
if err != nil { if err != nil {
session.Rollback()
return return
} }
//发送短信 //发送短信
err = WorkOrderPushNoteMsg(workOrder.OrderName, workOrder.OrderLevel, phones) err = w.WorkOrderPushNoteMsg(workOrder.OrderName, phones, workOrder.OrderLevel)
if err != nil { if err != nil {
session.Rollback()
return return
} }
} }
...@@ -641,7 +648,7 @@ func (w *WorkOrderManageSvc) ListWorkOrderMe(req request.ListWorkOrderReq) (tota ...@@ -641,7 +648,7 @@ func (w *WorkOrderManageSvc) ListWorkOrderMe(req request.ListWorkOrderReq) (tota
} }
// WorkOrderPushDingTalkMsg 推送钉钉消息 // WorkOrderPushDingTalkMsg 推送钉钉消息
func WorkOrderPushDingTalkMsg(orderName string, orderLevel int, phones []string) (err error) { func (w *WorkOrderManageSvc) WorkOrderPushDingTalkMsg(orderName string, orderLevel int, phones []string) (err error) {
d := ding.Webhook{ d := ding.Webhook{
AccessToken: conf.Options.OrderDingTalkAccessToken, //"203fe1644b446bba0a34e6e622c523d39ee9916fdad94b9c64224449f659e20b", AccessToken: conf.Options.OrderDingTalkAccessToken, //"203fe1644b446bba0a34e6e622c523d39ee9916fdad94b9c64224449f659e20b",
Secret: conf.Options.OrderDingTalkSecret, //"SECa73d8372e336451c9daf29a99f750ee1bdd170c1dab910eab9cd06d729a831b7", Secret: conf.Options.OrderDingTalkSecret, //"SECa73d8372e336451c9daf29a99f750ee1bdd170c1dab910eab9cd06d729a831b7",
...@@ -658,16 +665,51 @@ func WorkOrderPushDingTalkMsg(orderName string, orderLevel int, phones []string) ...@@ -658,16 +665,51 @@ func WorkOrderPushDingTalkMsg(orderName string, orderLevel int, phones []string)
} }
//有一条工单需要您处理:工单类型:【业务工单】 工单名称:【$工单名称】 工单等级:【$工单等级】 //有一条工单需要您处理:工单类型:【业务工单】 工单名称:【$工单名称】 工单等级:【$工单等级】
err = d.SendMessageText("有一条工单需要您处理:\n工单类型:【业务工单】\n工单名称:【"+orderName+"】\n工单等级:【"+orderLevels+"】", phones...) err = d.SendMessageText("您有一条业务工单需要处理:工单名称:"+orderName+",工单等级:"+orderLevels+",请及时前往智能运维平台处理!", phones...)
if err != nil { if err != nil {
err = resp.FAIL.ErrorDetail(err)
return return
} }
return return
} }
// WorkOrderPushNoteMsg 推送短信消息 // WorkOrderPushNoteMsg 推送工单短信消息
func WorkOrderPushNoteMsg(orderName string, orderLevel int, phone []string) (err error) { func (w *WorkOrderManageSvc) WorkOrderPushNoteMsg(orderName string, phone []string, orderLevel int) (err error) {
smsClient, err := dysmsapi.NewClientWithAccessKey("cn-hangzhou", conf.Options.SmsAccessKeyId, conf.Options.SmsAccessSecret)
if err != nil {
conf.Logger.Error("dysmsapi client error", zap.Error(err))
err = resp.FAIL.ErrorDetail(err)
return
}
var orderLevels string
switch orderLevel {
case 1:
orderLevels = "紧急任务"
case 2:
orderLevels = "重要任务"
case 3:
orderLevels = "一般任务"
}
tickettype := "业务工单"
params := map[string]interface{}{"tickettype": tickettype, "ticketname": orderName, "ticketlevel": orderLevels}
templateParam, err := json.Marshal(params)
if err != nil {
conf.Logger.Error("序列化模板失败!", zap.Error(err))
err = resp.FAIL.ErrorDetail(err)
return
}
return nil request := dysmsapi.CreateSendSmsRequest()
request.Scheme = "https"
request.PhoneNumbers = strings.Join(phone, ",")
request.TemplateCode = conf.Options.SmsWorkOrderTemplate
request.SignName = conf.Options.SmsSignName
request.TemplateParam = string(templateParam)
req, err := smsClient.SendSms(request)
if err != nil {
err = resp.FAIL.ErrorDetail(err)
return
}
fmt.Printf("response is %#v\n", req)
return
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment