diff --git a/README.md b/README.md index 271ae47..6992ec3 100644 --- a/README.md +++ b/README.md @@ -209,7 +209,7 @@ QQ群:1127401830 ## 打赏 -> 如果你觉得这个项目帮助到了你,你可以请作者喝一杯咖啡表示鼓励: +> 如果您觉得这个项目帮助到了您,您可以请作者喝一杯咖啡表示鼓励: diff --git a/apis/process/workOrder.go b/apis/process/workOrder.go index 53f230c..e7b4ac8 100644 --- a/apis/process/workOrder.go +++ b/apis/process/workOrder.go @@ -223,7 +223,11 @@ func CreateWorkOrder(c *gin.Context) { Priority: workOrderValue.Priority, CreatedAt: time.Now().Format("2006-01-02 15:04:05"), } - bodyData.SendNotify() + err = bodyData.SendNotify() + if err != nil { + app.Error(c, -1, err, fmt.Sprintf("通知发送失败,%v", err.Error())) + return + } }() } @@ -491,3 +495,79 @@ func InversionWorkOrder(c *gin.Context) { app.OK(c, nil, "工单已手动结单") } + +// 催办工单 +func UrgeWorkOrder(c *gin.Context) { + var ( + workOrderInfo process.WorkOrderInfo + sendToUserList []system.SysUser + stateList []interface{} + userInfo system.SysUser + ) + workOrderId := c.DefaultQuery("workOrderId", "") + if workOrderId == "" { + app.Error(c, -1, errors.New("参数不正确,缺失workOrderId"), "") + return + } + + // 查询工单数据 + err := orm.Eloquent.Model(&process.WorkOrderInfo{}).Where("id = ?", workOrderId).Find(&workOrderInfo).Error + if err != nil { + app.Error(c, -1, err, fmt.Sprintf("查询工单信息失败,%v", err.Error())) + return + } + + // 确认是否可以催办 + if workOrderInfo.UrgeLastTime != 0 && (int(time.Now().Unix())-workOrderInfo.UrgeLastTime) < 600 { + app.Error(c, -1, errors.New("十分钟内无法多次催办工单。"), "") + return + } + + // 获取当前工单处理人信息 + err = json.Unmarshal(workOrderInfo.State, &stateList) + if err != nil { + app.Error(c, -1, err, "") + return + } + sendToUserList, err = service.GetPrincipalUserInfo(stateList, workOrderInfo.Creator) + + // 查询创建人信息 + err = orm.Eloquent.Model(&system.SysUser{}).Where("user_id = ?", workOrderInfo.Creator).Find(&userInfo).Error + if err != nil { + app.Error(c, -1, err, fmt.Sprintf("创建人信息查询失败,%v", err.Error())) + return + } + + // 发送催办提醒 + bodyData := notify.BodyData{ + SendTo: map[string]interface{}{ + "userList": sendToUserList, + }, + Subject: "您被催办工单了,请及时处理。", + Description: "您有一条待办工单,请及时处理,工单描述如下", + Classify: []int{1}, // todo 1 表示邮箱,后续添加了其他的在重新补充 + ProcessId: workOrderInfo.Process, + Id: workOrderInfo.Id, + Title: workOrderInfo.Title, + Creator: userInfo.NickName, + Priority: workOrderInfo.Priority, + CreatedAt: workOrderInfo.CreatedAt.Format("2006-01-02 15:04:05"), + } + err = bodyData.SendNotify() + if err != nil { + app.Error(c, -1, err, fmt.Sprintf("催办提醒发送失败,%v", err.Error())) + return + } + + // 更新数据库 + err = orm.Eloquent.Model(&process.WorkOrderInfo{}).Where("id = ?", workOrderInfo.Id).Updates(map[string]interface{}{ + "urge_count": workOrderInfo.UrgeCount + 1, + "urge_last_time": int(time.Now().Unix()), + }).Error + if err != nil { + app.Error(c, -1, err, fmt.Sprintf("更新催办信息失败,%v", err.Error())) + return + } + + app.OK(c, "", "") +} diff --git a/models/process/workOrder.go b/models/process/workOrder.go index d6a9cd9..2072bba 100644 --- a/models/process/workOrder.go +++ b/models/process/workOrder.go @@ -12,15 +12,17 @@ import ( // 工单 type WorkOrderInfo struct { base.Model - Title string `gorm:"column:title; type:varchar(128)" json:"title" form:"title"` // 工单标题 - Priority int `gorm:"column:priority; type:int(11)" json:"priority" form:"priority"` // 工单优先级 1,正常 2,紧急 3,非常紧急 - Process int `gorm:"column:process; type:int(11)" json:"process" form:"process"` // 流程ID - Classify int `gorm:"column:classify; type:int(11)" json:"classify" form:"classify"` // 分类ID - IsEnd int `gorm:"column:is_end; type:int(11); default:0" json:"is_end" form:"is_end"` // 是否结束, 0 未结束,1 已结束 - IsDenied int `gorm:"column:is_denied; type:int(11); default:0" json:"is_denied" form:"is_denied"` // 是否被拒绝, 0 没有,1 有 - State json.RawMessage `gorm:"column:state; type:json" json:"state" form:"state"` // 状态信息 - RelatedPerson json.RawMessage `gorm:"column:related_person; type:json" json:"related_person" form:"related_person"` // 工单所有处理人 - Creator int `gorm:"column:creator; type:int(11)" json:"creator" form:"creator"` // 创建人 + Title string `gorm:"column:title; type:varchar(128)" json:"title" form:"title"` // 工单标题 + Priority int `gorm:"column:priority; type:int(11)" json:"priority" form:"priority"` // 工单优先级 1,正常 2,紧急 3,非常紧急 + Process int `gorm:"column:process; type:int(11)" json:"process" form:"process"` // 流程ID + Classify int `gorm:"column:classify; type:int(11)" json:"classify" form:"classify"` // 分类ID + IsEnd int `gorm:"column:is_end; type:int(11); default:0" json:"is_end" form:"is_end"` // 是否结束, 0 未结束,1 已结束 + IsDenied int `gorm:"column:is_denied; type:int(11); default:0" json:"is_denied" form:"is_denied"` // 是否被拒绝, 0 没有,1 有 + State json.RawMessage `gorm:"column:state; type:json" json:"state" form:"state"` // 状态信息 + RelatedPerson json.RawMessage `gorm:"column:related_person; type:json" json:"related_person" form:"related_person"` // 工单所有处理人 + Creator int `gorm:"column:creator; type:int(11)" json:"creator" form:"creator"` // 创建人 + UrgeCount int `gorm:"column:urge_count; type:int(11)" json:"urge_count" form:"urge_count"` // 催办次数 + UrgeLastTime int `gorm:"column:urge_last_time; type:int(11)" json:"urge_last_time" form:"urge_last_time"` // 上一次催促时间 } func (WorkOrderInfo) TableName() string { diff --git a/pkg/notify/send.go b/pkg/notify/send.go index f19e3a2..699194e 100644 --- a/pkg/notify/send.go +++ b/pkg/notify/send.go @@ -50,10 +50,9 @@ func (b *BodyData) ParsingTemplate() (err error) { return } -func (b *BodyData) SendNotify() { +func (b *BodyData) SendNotify() (err error) { var ( emailList []string - err error ) switch b.Priority { @@ -82,4 +81,5 @@ func (b *BodyData) SendNotify() { } } } + return } diff --git a/pkg/service/handle.go b/pkg/service/handle.go index 345fd52..78aa65d 100644 --- a/pkg/service/handle.go +++ b/pkg/service/handle.go @@ -711,7 +711,10 @@ func (h *Handle) HandleWorkOrder( // 发送通知 go func(bodyData notify.BodyData) { - bodyData.SendNotify() + err = bodyData.SendNotify() + if err != nil { + return + } }(bodyData) } } @@ -733,7 +736,10 @@ func (h *Handle) HandleWorkOrder( // 发送通知 go func(bodyData notify.BodyData) { - bodyData.SendNotify() + err = bodyData.SendNotify() + if err != nil { + return + } }(bodyData) } diff --git a/router/process/workOrder.go b/router/process/workOrder.go index 6a6a608..b46dcd3 100644 --- a/router/process/workOrder.go +++ b/router/process/workOrder.go @@ -21,5 +21,6 @@ func RegisterWorkOrderRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMidd workOrderRouter.POST("/handle", process.ProcessWorkOrder) workOrderRouter.GET("/unity", process.UnityWorkOrder) workOrderRouter.POST("/inversion", process.InversionWorkOrder) + workOrderRouter.GET("/urge", process.UrgeWorkOrder) } }