|
@@ -6,6 +6,7 @@ import (
|
|
"eta_gn/eta_report/services"
|
|
"eta_gn/eta_report/services"
|
|
"eta_gn/eta_report/utils"
|
|
"eta_gn/eta_report/utils"
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "strconv"
|
|
"strings"
|
|
"strings"
|
|
"time"
|
|
"time"
|
|
)
|
|
)
|
|
@@ -284,7 +285,7 @@ func (this *ReportOpenController) ReportApprove() {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
- // 先做校验后执行
|
|
|
|
|
|
+ // 先做校验后执行, 报告很可能是研报和PPT类型混着一起审批的
|
|
updateReports := make([]*models.Report, 0)
|
|
updateReports := make([]*models.Report, 0)
|
|
updatePpts := make([]*models.PptV2, 0)
|
|
updatePpts := make([]*models.PptV2, 0)
|
|
for _, v := range req.ReportIds {
|
|
for _, v := range req.ReportIds {
|
|
@@ -314,46 +315,198 @@ func (this *ReportOpenController) ReportApprove() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 审批人
|
|
|
|
+ approveUser := new(models.Admin)
|
|
|
|
+ {
|
|
|
|
+ ob := new(models.Admin)
|
|
|
|
+ cond := ` AND out_id = ?`
|
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
|
+ pars = append(pars, req.ApproveUser)
|
|
|
|
+ admin, e := ob.GetItemByCondition(cond, pars, "")
|
|
|
|
+ if e != nil && !utils.IsErrNoRow(e) {
|
|
|
|
+ br.Msg = "操作失败"
|
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取审批人信息失败, %v", e)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if admin != nil && admin.AdminId > 0 {
|
|
|
|
+ approveUser = admin
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if approveUser.AdminId == 0 {
|
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("ReportApprove-无审批人信息, OutId: %s", req.ApproveUser))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ reportMessages := make([]*models.ReportMessage, 0)
|
|
afterApproveMap := map[int]int{
|
|
afterApproveMap := map[int]int{
|
|
1: models.ReportStatePass,
|
|
1: models.ReportStatePass,
|
|
2: models.ReportStateRefused,
|
|
2: models.ReportStateRefused,
|
|
3: models.ReportStateWaitSubmit,
|
|
3: models.ReportStateWaitSubmit,
|
|
}
|
|
}
|
|
- updateCols := []string{"State", "ApproveTime", "ModifyTime"}
|
|
|
|
if len(updateReports) > 0 {
|
|
if len(updateReports) > 0 {
|
|
for _, v := range updateReports {
|
|
for _, v := range updateReports {
|
|
|
|
+ updateCols := []string{"State", "ModifyTime"}
|
|
v.State = afterApproveMap[req.ApproveType]
|
|
v.State = afterApproveMap[req.ApproveType]
|
|
- if v.State == models.ReportStateRefused || v.State == models.ReportStatePass {
|
|
|
|
|
|
+ v.ModifyTime = time.Now()
|
|
|
|
+ if v.State == models.ReportStatePass || v.State == models.ReportStateRefused {
|
|
v.ApproveTime = time.Now()
|
|
v.ApproveTime = time.Now()
|
|
- } else {
|
|
|
|
- v.ApproveTime = time.Time{}
|
|
|
|
|
|
+ updateCols = append(updateCols, "ApproveTime")
|
|
}
|
|
}
|
|
- v.ModifyTime = time.Now()
|
|
|
|
if e := v.Update(updateCols); e != nil {
|
|
if e := v.Update(updateCols); e != nil {
|
|
br.Msg = "操作失败"
|
|
br.Msg = "操作失败"
|
|
br.ErrMsg = fmt.Sprintf("更新报告状态失败, %v", e)
|
|
br.ErrMsg = fmt.Sprintf("更新报告状态失败, %v", e)
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ if req.ApproveType == 3 {
|
|
|
|
+ // 撤回暂不发消息
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 创作人和协作人
|
|
|
|
+ userIds := make([]int, 0)
|
|
|
|
+ userIds = append(userIds, v.AdminId)
|
|
|
|
+ {
|
|
|
|
+ grantOb := new(models.ReportGrant)
|
|
|
|
+ grantCond := ` AND report_id = ?`
|
|
|
|
+ grantPars := make([]interface{}, 0)
|
|
|
|
+ grantPars = append(grantPars, v.Id)
|
|
|
|
+ grants, e := grantOb.GetItemsByCondition(grantCond, grantPars, []string{"admin_id"}, "")
|
|
|
|
+ if e != nil {
|
|
|
|
+ br.Msg = "操作失败"
|
|
|
|
+ br.ErrMsg = fmt.Sprintf("获取报告协作人失败, %v", e)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ for _, v := range grants {
|
|
|
|
+ if utils.InArrayByInt(userIds, v.AdminId) {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ userIds = append(userIds, v.AdminId)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 发送系统消息给创建人和协作人
|
|
|
|
+ var messageType int
|
|
|
|
+ var tips string
|
|
|
|
+ var extraContent string
|
|
|
|
+ if v.State == models.ReportStatePass {
|
|
|
|
+ messageType = models.ReportMessageTypeApprovePass
|
|
|
|
+ tips = "已通过审批!"
|
|
|
|
+ }
|
|
|
|
+ if v.State == models.ReportStateRefused {
|
|
|
|
+ messageType = models.ReportMessageTypeApproveRefuse
|
|
|
|
+ tips = "已被驳回,点击查看详情!"
|
|
|
|
+ // 审批详情信息
|
|
|
|
+ var extra models.ReportMessageApproveItem
|
|
|
|
+ extra.Title = v.Title
|
|
|
|
+ extra.ApproveType = 2
|
|
|
|
+ extra.ApproveUserId = approveUser.AdminId
|
|
|
|
+ extra.ApproveUserName = approveUser.RealName
|
|
|
|
+ extra.ApproveRemark = req.Suggestion
|
|
|
|
+ b, e := json.Marshal(extra)
|
|
|
|
+ if e != nil {
|
|
|
|
+ br.Msg = "操作失败"
|
|
|
|
+ br.ErrMsg = fmt.Sprintf("消息通知-审批信息JSON格式化失败, %v", e)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ extraContent = string(b)
|
|
|
|
+ }
|
|
|
|
+ for _, u := range userIds {
|
|
|
|
+ m := new(models.ReportMessage)
|
|
|
|
+ m.SendUserId = approveUser.AdminId
|
|
|
|
+ m.ReceiveUserId = u
|
|
|
|
+ m.Content = fmt.Sprintf("您提交的【%s】%s", v.Title, tips)
|
|
|
|
+ m.ExtraContent = extraContent
|
|
|
|
+ m.ReportType = utils.ReportTypeDefault
|
|
|
|
+ m.ReportId = v.Id
|
|
|
|
+ m.MessageType = messageType
|
|
|
|
+ m.CreateTime = time.Now()
|
|
|
|
+ m.ModifyTime = time.Now()
|
|
|
|
+ reportMessages = append(reportMessages, m)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if len(updatePpts) > 0 {
|
|
if len(updatePpts) > 0 {
|
|
for _, v := range updatePpts {
|
|
for _, v := range updatePpts {
|
|
|
|
+ updateCols := []string{"State", "ModifyTime"}
|
|
v.State = afterApproveMap[req.ApproveType]
|
|
v.State = afterApproveMap[req.ApproveType]
|
|
- if v.State == models.ReportStateRefused || v.State == models.ReportStatePass {
|
|
|
|
|
|
+ v.ModifyTime = time.Now()
|
|
|
|
+ if v.State == models.ReportStatePass || v.State == models.ReportStateRefused {
|
|
v.ApproveTime = time.Now()
|
|
v.ApproveTime = time.Now()
|
|
- } else {
|
|
|
|
- v.ApproveTime = time.Time{}
|
|
|
|
|
|
+ updateCols = append(updateCols, "ApproveTime")
|
|
}
|
|
}
|
|
- v.ModifyTime = time.Now()
|
|
|
|
if e := v.Update(updateCols); e != nil {
|
|
if e := v.Update(updateCols); e != nil {
|
|
br.Msg = "操作失败"
|
|
br.Msg = "操作失败"
|
|
br.ErrMsg = fmt.Sprintf("更新报告状态失败, %v", e)
|
|
br.ErrMsg = fmt.Sprintf("更新报告状态失败, %v", e)
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+ if req.ApproveType == 3 {
|
|
|
|
+ // 撤回暂不发消息
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 创建人和协作人
|
|
|
|
+ userIds := make([]int, 0)
|
|
|
|
+ userIds = append(userIds, v.AdminId)
|
|
|
|
+ if v.CollaborateUsers != "" {
|
|
|
|
+ partnerArr := strings.Split(v.CollaborateUsers, ",")
|
|
|
|
+ for _, p := range partnerArr {
|
|
|
|
+ uid, _ := strconv.Atoi(p)
|
|
|
|
+ if uid > 0 && !utils.InArrayByInt(userIds, uid) {
|
|
|
|
+ userIds = append(userIds, uid)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 发送系统消息给创建人和协作人
|
|
|
|
+ var messageType int
|
|
|
|
+ var tips string
|
|
|
|
+ var extraContent string
|
|
|
|
+ if v.State == models.ReportStatePass {
|
|
|
|
+ messageType = models.ReportMessageTypeApprovePass
|
|
|
|
+ tips = "已通过审批!"
|
|
|
|
+ }
|
|
|
|
+ if v.State == models.ReportStateRefused {
|
|
|
|
+ messageType = models.ReportMessageTypeApproveRefuse
|
|
|
|
+ tips = "已被驳回,点击查看详情!"
|
|
|
|
+ // 审批详情信息
|
|
|
|
+ var extra models.ReportMessageApproveItem
|
|
|
|
+ extra.Title = v.Title
|
|
|
|
+ extra.ApproveType = 2
|
|
|
|
+ extra.ApproveUserId = approveUser.AdminId
|
|
|
|
+ extra.ApproveUserName = approveUser.RealName
|
|
|
|
+ extra.ApproveRemark = req.Suggestion
|
|
|
|
+ b, e := json.Marshal(extra)
|
|
|
|
+ if e != nil {
|
|
|
|
+ br.Msg = "操作失败"
|
|
|
|
+ br.ErrMsg = fmt.Sprintf("消息通知-审批信息JSON格式化失败, %v", e)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ extraContent = string(b)
|
|
|
|
+ }
|
|
|
|
+ for _, u := range userIds {
|
|
|
|
+ m := new(models.ReportMessage)
|
|
|
|
+ m.SendUserId = approveUser.AdminId
|
|
|
|
+ m.ReceiveUserId = u
|
|
|
|
+ m.Content = fmt.Sprintf("您提交的【%s】%s", v.Title, tips)
|
|
|
|
+ m.ExtraContent = extraContent
|
|
|
|
+ m.ReportType = utils.ReportTypePPT
|
|
|
|
+ m.ReportId = v.PptId
|
|
|
|
+ m.MessageType = messageType
|
|
|
|
+ m.CreateTime = time.Now()
|
|
|
|
+ m.ModifyTime = time.Now()
|
|
|
|
+ reportMessages = append(reportMessages, m)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- // TODO:消息通知
|
|
|
|
|
|
+ // 消息通知
|
|
|
|
+ if len(reportMessages) > 0 {
|
|
|
|
+ messageOb := new(models.ReportMessage)
|
|
|
|
+ if e := messageOb.CreateMulti(reportMessages); e != nil {
|
|
|
|
+ br.Msg = "操作失败"
|
|
|
|
+ br.ErrMsg = fmt.Sprintf("批量新增报告消息失败, %v", e)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
br.Ret = 200
|
|
br.Ret = 200
|
|
br.Success = true
|
|
br.Success = true
|