|
@@ -1,6 +1,7 @@
|
|
|
package biapprove
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
biapprove "eta_gn/eta_api/models/bi_approve"
|
|
|
"eta_gn/eta_api/models/bi_approve/response"
|
|
|
"eta_gn/eta_api/models/bi_dashboard"
|
|
@@ -13,7 +14,7 @@ import (
|
|
|
|
|
|
var (
|
|
|
timeField = map[int]string{1: fmt.Sprintf("a.%s", biapprove.BiApproveCols.CreateTime), 2: fmt.Sprintf("a.%s", biapprove.BiApproveCols.ApproveTime), 3: fmt.Sprintf("b.%s", biapprove.BiApproveCols.ApproveTime)}
|
|
|
- myTimeField = map[int]string{1: fmt.Sprintf("%s", biapprove.BiApproveCols.CreateTime), 3: fmt.Sprintf("%s", biapprove.BiApproveCols.ApproveTime)}
|
|
|
+ myTimeField = map[int]string{1: biapprove.BiApproveCols.CreateTime, 3: biapprove.BiApproveCols.ApproveTime}
|
|
|
orderRules = map[int]string{1: "ASC", 2: "DESC"}
|
|
|
)
|
|
|
|
|
@@ -196,7 +197,7 @@ func PassBiApprove(approveId int, adminId int) (msg string, err error) {
|
|
|
otherCond := ` AND bi_approve_id =? AND node_id =? AND approve_user_id <> ? `
|
|
|
otherPars := make([]interface{}, 0)
|
|
|
otherPars = append(otherPars, approveItem.BiApproveId, recordItem.NodeId, adminId)
|
|
|
- otherRecords, e := biapprove.GetBiaApproveRecordItemsByCondition(otherCond, otherPars)
|
|
|
+ otherRecords, e := biapprove.GetBiApproveRecordItemsByCondition(otherCond, otherPars)
|
|
|
if e != nil {
|
|
|
err = fmt.Errorf("获取节点审批记录失败, Err: %s", e.Error())
|
|
|
return
|
|
@@ -406,11 +407,11 @@ func updateBiApproveState(biId, approveId, state int) (err error) {
|
|
|
BiItem.State = state
|
|
|
BiItem.ModifyTime = time.Now().Local()
|
|
|
|
|
|
- // if state == models.ReportStatePass || state == models.ReportStateRefused {
|
|
|
+ // if state == models.BiStatePass || state == models.BiStateRefused {
|
|
|
// updateCols = append(updateCols, "ApproveTime")
|
|
|
// // BiItem.ApproveTime = time.Now().Local()
|
|
|
// }
|
|
|
- // if state == models.ReportStatePass {
|
|
|
+ // if state == models.BiStatePass {
|
|
|
// updateCols = append(updateCols, "PublishTime")
|
|
|
// // BiItem.PublishTime = time.Now().Local()
|
|
|
// }
|
|
@@ -423,14 +424,14 @@ func updateBiApproveState(biId, approveId, state int) (err error) {
|
|
|
}
|
|
|
|
|
|
func ProcessingBiApprove(adminId, classifyId, timeType, sortField, sortRule, startSize, pageSize int, adminName, startTime, endTime, keyword string) (ormList []*biapprove.BiApproveItemOrm, respTotal int, msg string, err error) {
|
|
|
+ cond := fmt.Sprintf(` AND a.%s = ? AND b.%s = ? AND a.%s = ?`, biapprove.BiApproveRecordCols.State, biapprove.BiApproveCols.State, biapprove.BiApproveRecordCols.ApproveUserId)
|
|
|
pars := make([]interface{}, 0)
|
|
|
- cond := ` AND a.state = ? AND b.state = ? AND a."approve_user_id" = ?`
|
|
|
pars = append(pars, BiApproveStateApproving, BiApproveStateApproving, adminId)
|
|
|
order := ""
|
|
|
|
|
|
// 筛选条件
|
|
|
if classifyId > 0 {
|
|
|
- cond += ` AND b.classify_id = ?`
|
|
|
+ cond += fmt.Sprintf(` AND b.%s = ?`, biapprove.BiApproveCols.ClassifyId)
|
|
|
pars = append(pars, classifyId)
|
|
|
}
|
|
|
if timeType <= 0 {
|
|
@@ -450,43 +451,38 @@ func ProcessingBiApprove(adminId, classifyId, timeType, sortField, sortRule, sta
|
|
|
return
|
|
|
}
|
|
|
tmpEndTime = tmpEndTime.AddDate(0, 0, 1)
|
|
|
- cond += ` AND (b.create_time BETWEEN ? AND ?)`
|
|
|
+ cond += fmt.Sprintf(` AND (b.%s BETWEEN ? AND ?)`, biapprove.BiApproveCols.CreateTime)
|
|
|
pars = append(pars, startTime, tmpEndTime)
|
|
|
}
|
|
|
keyword = strings.TrimSpace(keyword)
|
|
|
if keyword != "" {
|
|
|
kw := fmt.Sprint("%", keyword, "%")
|
|
|
- cond += ` AND b.bi_title LIKE ?`
|
|
|
+ cond += fmt.Sprintf(` AND b.%s LIKE ?`, biapprove.BiApproveCols.BiTitle)
|
|
|
pars = append(pars, kw)
|
|
|
}
|
|
|
if sortField > 0 && sortRule > 0 {
|
|
|
- var orderField, orderRule string
|
|
|
- switch sortField {
|
|
|
- case 1:
|
|
|
- orderField = "b.create_time"
|
|
|
- case 2:
|
|
|
- orderField = "a.approve_time"
|
|
|
- case 3:
|
|
|
- orderField = "b.approve_time"
|
|
|
- }
|
|
|
- switch sortRule {
|
|
|
- case 1:
|
|
|
- orderRule = "ASC"
|
|
|
- case 2:
|
|
|
- orderRule = "DESC"
|
|
|
+ orderField := timeField[sortField]
|
|
|
+ if orderField == "" {
|
|
|
+ msg = "时间排序字段有误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ orderRule := orderRules[sortRule]
|
|
|
+ if orderRule == "" {
|
|
|
+ msg = "时间排序方式有误"
|
|
|
+ return
|
|
|
}
|
|
|
order = fmt.Sprintf("%s %s", orderField, orderRule)
|
|
|
}
|
|
|
total, e := biapprove.GetApprovingBiApproveCount(cond, pars)
|
|
|
if e != nil {
|
|
|
msg = "获取失败"
|
|
|
- err = e
|
|
|
+ err = fmt.Errorf("GetApprovingBiApproveCount err: %s", e.Error())
|
|
|
return
|
|
|
}
|
|
|
list, e := biapprove.GetApprovingBiApprovePageList(cond, pars, order, startSize, pageSize)
|
|
|
if e != nil {
|
|
|
msg = "获取失败"
|
|
|
- err = e
|
|
|
+ err = fmt.Errorf("GetApprovingBiApprovePageList err: %s", e.Error())
|
|
|
return
|
|
|
}
|
|
|
respTotal = total
|
|
@@ -636,3 +632,235 @@ func MyApplyBiApproves(adminId, classifyId, timeType, sortField, sortRule, appro
|
|
|
ormList = list
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+func GetApproveDetail(approveId int) (resp response.BiApproveDetail, msg string, err error) {
|
|
|
+ approveItem, e := biapprove.GetBiApproveById(approveId)
|
|
|
+ if e != nil {
|
|
|
+ if utils.IsErrNoRow(e) {
|
|
|
+ msg = "审批已被删除, 请刷新页面"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ msg = "获取失败"
|
|
|
+ err = fmt.Errorf("GetItemById err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 审批信息
|
|
|
+ detail := new(response.BiApproveDetail)
|
|
|
+ detail.Approve = new(response.BiApproveDetailItem)
|
|
|
+ detail.Approve.BiApproveId = approveItem.BiApproveId
|
|
|
+ detail.Approve.State = approveItem.State
|
|
|
+ detail.Approve.FlowId = approveItem.FlowId
|
|
|
+ detail.Approve.FlowVersion = approveItem.FlowVersion
|
|
|
+ detail.Approve.StartNodeId = approveItem.StartNodeId
|
|
|
+ detail.Approve.CurrNodeId = approveItem.CurrNodeId
|
|
|
+ detail.Approve.ApplyUserId = approveItem.ApplyUserId
|
|
|
+ detail.Approve.ApplyUserName = approveItem.ApplyUserName
|
|
|
+ detail.Approve.ApproveTime = utils.TimeTransferString(utils.FormatDateTime, approveItem.ApproveTime)
|
|
|
+ detail.Approve.CreateTime = utils.TimeTransferString(utils.FormatDateTime, approveItem.CreateTime)
|
|
|
+ detail.Approve.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, approveItem.ModifyTime)
|
|
|
+
|
|
|
+ // 审批节点
|
|
|
+ nodeOb := new(biapprove.BiApproveNode)
|
|
|
+ nodeCond := fmt.Sprintf(` AND %s = ? AND %s = ?`, biapprove.BiApproveNodeCols.BiApproveFlowId, biapprove.BiApproveNodeCols.CurrVersion)
|
|
|
+ nodePars := make([]interface{}, 0)
|
|
|
+ nodePars = append(nodePars, approveItem.FlowId, approveItem.FlowVersion)
|
|
|
+ nodeItems, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ msg = "获取失败"
|
|
|
+ err = fmt.Errorf("GetItemsByCondition err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 审批记录
|
|
|
+ recordOb := new(biapprove.BiApproveRecord)
|
|
|
+ recordCond := fmt.Sprintf(` AND %s = ?`, biapprove.BiApproveRecordCols.BiApproveId)
|
|
|
+ recordPars := make([]interface{}, 0)
|
|
|
+ recordPars = append(recordPars, approveItem.BiApproveId)
|
|
|
+ recordItems, e := recordOb.GetItemsByCondition(recordCond, recordPars, []string{}, fmt.Sprintf("%s DESC", biapprove.BiApproveRecordCols.ApproveTime))
|
|
|
+ if e != nil {
|
|
|
+ msg = "获取失败"
|
|
|
+ err = fmt.Errorf("GetItemsByCondition err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ recordMap := make(map[string]*biapprove.BiApproveRecord)
|
|
|
+ for _, v := range recordItems {
|
|
|
+ k := fmt.Sprintf("%d-%d", v.NodeId, v.ApproveUserId)
|
|
|
+ recordMap[k] = v
|
|
|
+ }
|
|
|
+
|
|
|
+ // 审批流节点详情
|
|
|
+ detail.ApproveFlowNodes = make([]*response.BiApproveDetailNodes, 0)
|
|
|
+ for _, v := range nodeItems {
|
|
|
+ t := new(response.BiApproveDetailNodes)
|
|
|
+ t.BiApproveNodeId = v.BiApproveNodeId
|
|
|
+ t.BiApproveFlowId = v.BiApproveFlowId
|
|
|
+ t.PrevNodeId = v.PrevNodeId
|
|
|
+ t.NextNodeId = v.NextNodeId
|
|
|
+ t.NodeType = v.NodeType
|
|
|
+ t.ApproveType = v.ApproveType
|
|
|
+ t.Users = make([]*response.BiApproveDetailNodeUser, 0)
|
|
|
+ us := make([]*response.BiApproveNodeUserReq, 0)
|
|
|
+ if v.Users != "" {
|
|
|
+ e = json.Unmarshal([]byte(v.Users), &us)
|
|
|
+ if e != nil {
|
|
|
+ msg = "获取失败"
|
|
|
+ err = fmt.Errorf("json.Unmarshal err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, vu := range us {
|
|
|
+ u := new(response.BiApproveDetailNodeUser)
|
|
|
+ u.UserType = vu.UserType
|
|
|
+ u.UserId = vu.UserId
|
|
|
+ u.UserName = vu.UserName
|
|
|
+ u.Sort = vu.Sort
|
|
|
+ // 审批记录
|
|
|
+ k := fmt.Sprintf("%d-%d", v.BiApproveNodeId, vu.UserId)
|
|
|
+ r := recordMap[k]
|
|
|
+ if r != nil {
|
|
|
+ u.ApproveRecord = new(response.BiApproveDetailNodeUserRecord)
|
|
|
+ u.ApproveRecord.BiApproveRecordId = r.BiApproveRecordId
|
|
|
+ u.ApproveRecord.State = r.State
|
|
|
+ u.ApproveRecord.ApproveUserId = r.ApproveUserId
|
|
|
+ u.ApproveRecord.ApproveUserName = r.ApproveUserName
|
|
|
+ u.ApproveRecord.ApproveRemark = r.ApproveRemark
|
|
|
+ u.ApproveRecord.ApproveTime = utils.TimeTransferString(utils.FormatDateTime, r.ApproveTime)
|
|
|
+ }
|
|
|
+ t.Users = append(t.Users, u)
|
|
|
+ }
|
|
|
+ sort.Slice(t.Users, func(k, j int) bool {
|
|
|
+ return t.Users[k].Sort < t.Users[j].Sort
|
|
|
+ })
|
|
|
+ detail.ApproveFlowNodes = append(detail.ApproveFlowNodes, t)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 看板信息
|
|
|
+ cnClassifyIdName := make(map[int]string)
|
|
|
+ cnClassify, e := bi_dashboard.GetBiDashboardClassifyAllList()
|
|
|
+ if e != nil {
|
|
|
+ msg = "获取失败"
|
|
|
+ err = fmt.Errorf("GetBiDashboardClassifyAllList err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range cnClassify {
|
|
|
+ cnClassifyIdName[v.BiDashboardClassifyId] = v.BiDashboardClassifyName
|
|
|
+ }
|
|
|
+ detail.Bi = new(response.BiApproveDetailBi)
|
|
|
+ detail.Bi.BiId = approveItem.BiId
|
|
|
+ detail.Bi.BiTitle = approveItem.BiTitle
|
|
|
+ detail.Bi.BiClassify = cnClassifyIdName[approveItem.ClassifyId]
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func BiApproveRefuse(biApproveId, adminId int, approveRemark string) (msg string, err error) {
|
|
|
+ approveItem, e := biapprove.GetBiApproveById(biApproveId)
|
|
|
+ if e != nil {
|
|
|
+ if utils.IsErrNoRow(e) {
|
|
|
+ msg = "审批不存在, 请刷新页面"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ msg = "操作失败"
|
|
|
+ err = fmt.Errorf("GetBiApproveById err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if approveItem.State != BiApproveStateApproving {
|
|
|
+ msg = "审批状态有误, 请刷新页面"
|
|
|
+ err = fmt.Errorf("审批状态有误, State: %d", approveItem.State)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 校验审批记录和审批
|
|
|
+ recordOb := new(biapprove.BiApproveRecord)
|
|
|
+ recordCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s = ?`, biapprove.BiApproveRecordCols.BiApproveId, biapprove.BiApproveRecordCols.ApproveUserId, biapprove.BiApproveRecordCols.State)
|
|
|
+ recordPars := make([]interface{}, 0)
|
|
|
+ recordPars = append(recordPars, approveItem.BiApproveId, adminId, BiApproveStateApproving)
|
|
|
+ recordItem, e := recordOb.GetItemByCondition(recordCond, recordPars, "")
|
|
|
+ if e != nil {
|
|
|
+ if utils.IsErrNoRow(e) {
|
|
|
+ msg = "无权审批"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ msg = "操作失败"
|
|
|
+ err = fmt.Errorf("GetItemByCondition err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 驳回审批
|
|
|
+ if e = RefuseBiApprove(approveItem, recordItem, approveRemark, adminId); e != nil {
|
|
|
+ msg = "操作失败"
|
|
|
+ err = fmt.Errorf("RefuseBiApprove err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// RefuseBiApprove 驳回审批
|
|
|
+func RefuseBiApprove(approveItem *biapprove.BiApprove, recordItem *biapprove.BiApproveRecord, approveRemark string, sysAdminId int) (err error) {
|
|
|
+ if approveItem == nil {
|
|
|
+ err = fmt.Errorf("审批信息有误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if recordItem == nil {
|
|
|
+ err = fmt.Errorf("审批记录有误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新审批记录
|
|
|
+ now := time.Now().Local()
|
|
|
+ recordItem.State = BiApproveStateRefuse
|
|
|
+ recordItem.ApproveRemark = approveRemark
|
|
|
+ recordItem.ApproveTime = now
|
|
|
+ recordItem.ModifyTime = now
|
|
|
+
|
|
|
+ recordItem.NodeState = BiApproveStateRefuse
|
|
|
+ recordItem.NodeApproveUserId = recordItem.ApproveUserId
|
|
|
+ recordItem.NodeApproveUserName = recordItem.ApproveUserName
|
|
|
+ recordItem.NodeApproveTime = now
|
|
|
+
|
|
|
+ recordCols := []string{"State", "ApproveRemark", "ApproveTime", "ModifyTime", "NodeState", "NodeApproveUserId", "NodeApproveUserName", "NodeApproveTime"}
|
|
|
+ if e := recordItem.Update(recordCols); e != nil {
|
|
|
+ err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将该审批的同一个节点的记录标记为已审批
|
|
|
+ if e := recordItem.UpdateNodeState(recordItem.BiApproveId, recordItem.NodeId, recordItem.NodeState, recordItem.NodeApproveUserId, recordItem.NodeApproveUserName, recordItem.NodeApproveTime); e != nil {
|
|
|
+ err = fmt.Errorf("更新同一节点的其他审批记录状态失败, Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 驳回-更新审批, 报告状态, 推送消息
|
|
|
+ approveItem.State = BiApproveStateRefuse
|
|
|
+ approveItem.ApproveRemark = approveRemark
|
|
|
+ approveItem.ApproveTime = now
|
|
|
+ approveItem.ModifyTime = now
|
|
|
+ approveCols := []string{"State", "ApproveRemark", "ApproveTime", "ModifyTime"}
|
|
|
+ if e := approveItem.Update(approveCols); e != nil {
|
|
|
+ err = fmt.Errorf("更新审批状态失败, Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if e := updateBiApproveState(approveItem.BiId, approveItem.BiApproveId, BiStateRefused); e != nil {
|
|
|
+ err = fmt.Errorf("更新报告状态失败, Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 推送驳回消息给申请人
|
|
|
+ go func() {
|
|
|
+ messageItem := new(biapprove.BiApproveMessage)
|
|
|
+ messageItem.SendUserId = sysAdminId
|
|
|
+ messageItem.ReceiveUserId = approveItem.ApplyUserId
|
|
|
+ messageItem.Content = "您提交的审批被驳回"
|
|
|
+ messageItem.Remark = "您提交的【研报审批】已被驳回"
|
|
|
+ messageItem.BiApproveId = approveItem.BiApproveId
|
|
|
+ messageItem.ApproveState = BiApproveStateRefuse
|
|
|
+ messageItem.CreateTime = now
|
|
|
+ messageItem.ModifyTime = now
|
|
|
+ if e := messageItem.Create(); e != nil {
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("ApproveBi message err: %s", e.Error()))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ return
|
|
|
+}
|