首页 > 其他分享 >Yearning外置工单通知实现思路

Yearning外置工单通知实现思路

时间:2024-06-07 09:45:45浏览次数:27  
标签:i18n source 外置 Yearning WorkId 工单 model order


背景概述

上篇我们讲解了一下Yearning如何使用飞书发送工单通知,但是我最初的想法不仅仅是飞书、钉钉这些媒介,更多的是希望可以自定义集成渠道,因此想到了PrometheusAlert,这样我们就不用重新造轮子了。

大致配置

图片image-20240606110115965

我们拿到Yearning发送的数据,当然这个数据需要我们修改一下代码哦,当我们有源数据了,那么我们就可以自定义通知渠道了,如果还不会可以扫描下方二维码一起学习交流。

环境准备

Go版本:1.20

开发工具:Goland

数据库:mysql

源代码:

https://github.com/cookieY/gemini-next.git

https://github.com/cookieY/Yearning.git

大致实现

修改代码

src/lib/ding.go

func dingMsgTplHandler(state string, generic interface{}) string {
 var order imCryGeneric
 // 新增
 type SendOrder struct {
  Order  imCryGeneric
  Status string `json:"status"`
 }
 switch v := generic.(type) {
 case model.CoreSqlOrder:
  order = imCryGeneric{
   Assigned: v.Assigned,
   WorkId:   v.WorkId,
   Source:   v.Source,
   Username: v.Username,
   Text:     v.Text,
  }
 case model.CoreQueryOrder:
  order = imCryGeneric{
   Assigned: v.Assigned,
   WorkId:   v.WorkId + i18n.DefaultLang.Load(i18n.INFO_QUERY),
   Source:   i18n.DefaultLang.Load(i18n.ER_QUERY_NO_DATA_SOURCE),
   Username: v.Username,
   Text:     v.Text,
  }
 }

 if !stateHandler(state) {
  order.Assigned = "无"
 }
 msg := SendOrder{
  Order:  order,
  Status: state,
 }

 jsonData, _ := json.Marshal(msg)
 return string(jsonData)
}

src/handler/order/audit/impl.go

func ExecuteOrder(u *Confirm, user string) common.Resp {
 var order model.CoreSqlOrder
 var source model.CoreDataSource
 model.DB().Where("work_id =?", u.WorkId).First(&order)

 if order.Status != 2 && order.Status != 5 {
  return common.ERR_COMMON_TEXT_MESSAGE(i18n.DefaultLang.Load(i18n.ORDER_NOT_SEARCH))
 }
 order.Assigned = user

 model.DB().Model(model.CoreDataSource{}).Where("source_id =?", order.SourceId).First(&source)
 rule, err := lib.CheckDataSourceRule(source.RuleId)
 if err != nil {
  logger.DefaultLogger.Error(err)
 }

 var isCall bool
 if client := lib.NewRpc(); client != nil {
  if err := client.Call("Engine.Exec", &ExecArgs{
   Order:    &order,
   Rules:    *rule,
   IP:       source.IP,
   Port:     source.Port,
   Username: source.Username,
   Password: lib.Decrypt(model.JWT, source.Password),
   CA:       source.CAFile,
   Cert:     source.Cert,
   Key:      source.KeyFile,
   //Message:  model.GloMessage,
  }, &isCall); err != nil {
   return common.ERR_RPC
  }
  model.DB().Create(&model.CoreWorkflowDetail{
   WorkId:   u.WorkId,
   Username: user,
   Time:     time.Now().Format("2006-01-02 15:04"),
   Action:   i18n.DefaultLang.Load(i18n.ORDER_EXECUTE_STATE),
  })
  // 新增
  lib.MessagePush(u.WorkId, 1, "")
  return common.SuccessPayLoadToMessage(i18n.DefaultLang.Load(i18n.ORDER_EXECUTE_STATE))
 }
 return common.ERR_RPC

}

验证

  1. 提交工单

    图片image-20240606111001505图片image-20240606111021035
  2. 审核工单

    图片image-20240606111137782图片image-20240606111146046
  3. 执行工单

    图片图片

  4. 驳回工单

    图片image-20240606111802580

PrometheusAlert配置

模板内容

### Yearning工单通知
**工单编号:** {{.Order.WorkId}}

**提交人员:**  {{.Order.Username}}

**数据源:**  {{.Order.Source}}

**下一步操作人:**  {{.Order.Assigned}}

{{ if eq .Order.Assigned "执行成功" }}
**状态:** <font color="#1abefa"> {{.status}} </font>
{{ else }}
**状态:**  {{.status}}
{{ end }}
**工单说明:**
>  {{.Order.Text}}

消息协议JSON内容

{
    "Order": {
        "Assigned": "无",
        "WorkId": "1f452500-2e7f-445e-96a8-648205f20876",
        "Source": "test",
        "Username": "zxl",
        "Text": "123456"
    },
    "status": "执行成功"
}

我们可以根据消息JSON来自定义通知渠道,例如:钉钉、企业微信、飞书等等。

总结

承诺以上内容仅供学习。这样依赖我们就可以实现大部分渠道的通知了,即便prometheusAlert不涉及的渠道我们也可以自己写一个webhook来自定义通知。

标签:i18n,source,外置,Yearning,WorkId,工单,model,order
From: https://www.cnblogs.com/cheyunhua/p/18236547

相关文章

  • SpringBoot启动时使用外置yml文件
    第一步:打包时排除yml文件<build><resources><resource> <!--排除的文件的路径--><directory>src/main/resources</directory><excludes> <!--排除的文件的名称-->......
  • Linux Xorg与Vsync不兼容,使用独显启动,在外置显示器上有时会卡死
    https://www.vsynctester.com/https://forums.developer.nvidia.com/t/bug-having-two-monitor-connected-x11-causes-initial-stutter-when-opening-steam/278749https://www.reddit.com/r/linux_gaming/comments/tdt1gx/looking_for_people_having_stutter_issues_with/h......
  • 世微AP5125 外置MOS管5-100V 8A平均电流型LED降压恒流驱动器 SOT23-6
    产品描述  AP5125是一款外围电路简单的Buck型平均电流检测模式的LED恒流驱动器,适用于8-100V电压范围的非隔离式大功率恒流LED驱动领域。芯片采用固定频率140kHz的PWM工作模式,利用平均电流检测模式,因此具有优异的负载调整率特性,高精度的输出电流特性。AP5125......
  • 一周开发一个客服工单系统
    开发一个客服工单系统在一周内完成,需要详细的计划和高效的执行。以下是一个详细的开发计划,涵盖每天的主要任务和技术栈选择:演示效果:gofly.v1kf.com技术栈选择前端:React.js或Vue.js后端:Go(Gin)数据库:MySQL或PostgreSQL实时通讯:WebSocket部署:Docker,AWS或Heroku第......
  • IT小能手秘籍:看工单与任务单如何携手玩转服务管理
    在ITSM这摊事儿里,我们有两种手段来管理IT小哥们忙活的那些维护工作,一种叫工单(Ticket),另一种则是任务单(Task)。这哥俩到底有啥不同,又怎么互相帮衬着呢?工单嘛,基本上是从客户或者用户那边来的,他们用这个来告诉咱们需要啥服务啊,遇到了啥故障啊,或者得解决个啥难题。就像是客户和咱IT服务......
  • AI 数据观 | TapData Cloud + MongoDB Atlas:大模型与 RAG 技术有机结合,落地实时工单处
    本篇为「AI数据观」系列文章第二弹,在这里,我们将进一步探讨AI行业的数据价值。以RAG的智能工单应用场景为例,共同探索如何使用TapdataCloud+MongoDBAtlas实现具备实时更新能力的向量数据库,为企业工单处理的智能化和自动化需求,提供准实时的新鲜数据。完整分布教程指引,详见......
  • 军工单位安全内网文件导出,怎样做到严密的安全管控?
    军工单位是指承担国家下达的军事装备、产品研制、生产计划任务的企、事业单位,主要包括电子工业部、航空工业总公司、航天工业总公司、兵器工业总公司、核工业总公司、船舶工业总公司、中国工程物理研究院及各省国防工业办公室等。 军工单位的特点主要体现在以下几个方面:承担......
  • ferry工单系统部署(docker)
    1.部署说明ferry工单系统部署参考官方文档,采用docker-compose的方式。 2.github地址https://github.com/lanyulei/ferry?tab=readme-ov-file#readme 3.部署步骤注:mysql、redis的镜像可以从dockerhub上下载,地址:https://hub.docker.com/ 3.1部署mysql(5.7.29),此处......
  • Oracle EBS - 工单状态
    Jobstatusupdate1.Job的几种状态unreleased--未核发released--已核发complete--完成completenocharges--完成不计费onhold--保留cancelled--取消closed--关闭2.      开立工单可以给的状态UnreleasedReleasedOnhold3.      关于unreleased......
  • 工单系统和工作流系统区别
    随着信息技术的快速发展,许多组织和企业逐渐意识到有效管理工作流程对于提高工作效率和成本控制至关重要。在这种背景下,工单系统和工作流系统成为许多组织常用的管理工具。然而,尽管它们都起到了简化和优化业务流程的作用,但工单系统和工作流系统之间存在着明显的区别。 工单系......