添加催办功能。

This commit is contained in:
Mr. Lan 2020-07-26 21:27:08 +08:00
parent 5cb6f9d094
commit 0862668e90
6 changed files with 104 additions and 15 deletions

View File

@ -209,7 +209,7 @@ QQ群1127401830
## 打赏
> 如果你觉得这个项目帮助到了你,你可以请作者喝一杯咖啡表示鼓励:
> 如果您觉得这个项目帮助到了您,您可以请作者喝一杯咖啡表示鼓励:
<img class="no-margin" src="https://www.fdevops.com/wp-content/uploads/2020/07/1595075890-81595075871_.pic_hd.png" height="200px" >

View File

@ -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, "", "")
}

View File

@ -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 {

View File

@ -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
}

View File

@ -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)
}

View File

@ -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)
}
}