forked from lock-upme/OPMS
/
gooutsApprovers.go
138 lines (123 loc) · 3.47 KB
/
gooutsApprovers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package goouts
import (
//"fmt"
"opms/models"
//"opms/utils"
"time"
//"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
)
type GooutsApprover struct {
Id int64 `orm:"pk;column(approverid);"`
Gooutid int64
Userid int64
Summary string
Status int
Created int64
Changed int64
}
func (this *GooutsApprover) TableName() string {
return models.TableName("goouts_approver")
}
func init() {
orm.RegisterModel(new(GooutsApprover))
}
func AddGooutsApprover(upd GooutsApprover) error {
o := orm.NewOrm()
goout := new(GooutsApprover)
goout.Id = upd.Id
goout.Userid = upd.Userid
goout.Gooutid = upd.Gooutid
//goout.Summary = upd.Summary
goout.Status = 0
goout.Created = time.Now().Unix()
goout.Changed = time.Now().Unix()
_, err := o.Insert(goout)
return err
}
func UpdateGooutsApprover(id int64, upd GooutsApprover) error {
var goout GooutsApprover
o := orm.NewOrm()
goout = GooutsApprover{Id: id}
goout.Summary = upd.Summary
goout.Status = upd.Status
goout.Changed = time.Now().Unix()
_, err := o.Update(&goout, "summary", "status", "changed")
if err == nil {
//直接结束
if upd.Status == 2 {
ChangeGooutResult(upd.Gooutid, 2)
o.Raw("UPDATE pms_goouts_approver SET status = ?,summary = ?, changed = ? WHERE gooutid = ? AND approverid != ?", 2, "前审批人拒绝,后面审批人默认为拒绝状态", time.Now().Unix(), upd.Gooutid, id).Exec()
} else {
_, _, approvers := ListGooutApproverProcess(upd.Gooutid)
//检测审批顺序
var ApproverNum = 0
for _, v := range approvers {
if v.Status == 1 {
ApproverNum++
}
}
if ApproverNum == len(approvers) {
ChangeGooutResult(upd.Gooutid, 1)
}
}
}
return err
}
type GooutApproverProcess struct {
Userid int64
Realname string
Avatar string
Position string
Status int
Summary string
Changed int64
}
func ListGooutApproverProcess(gooutid int64) (num int64, err error, user []GooutApproverProcess) {
var users []GooutApproverProcess
qb, _ := orm.NewQueryBuilder("mysql")
qb.Select("upr.userid", "upr.realname", "p.name AS position", "u.avatar", "la.status", "la.summary", "la.changed").From("pms_goouts_approver AS la").
LeftJoin("pms_users AS u").On("u.userid = la.userid").
LeftJoin("pms_users_profile AS upr").On("upr.userid = u.userid").
LeftJoin("pms_positions AS p").On("p.positionid = upr.positionid").
Where("la.gooutid=?").
OrderBy("la.approverid").
Asc()
sql := qb.String()
o := orm.NewOrm()
nums, err := o.Raw(sql, gooutid).QueryRows(&users)
return nums, err, users
}
func ListGooutApproverProcessHtml(gooutid int64) string {
nums, _, users := ListGooutApproverProcess(gooutid)
var html, avatar, css, status string
var num = int(nums)
for i, v := range users {
if "" == v.Avatar {
avatar = "/static/img/avatar/1.jpg"
} else {
avatar = v.Avatar
}
if v.Status == 1 {
status = "同意"
} else if v.Status == 2 {
//css = "gray"
status = "拒绝"
} else {
css = "gray"
status = "未处"
}
html += "<a href='javascript:;' title='" + v.Realname + "'><img class='" + css + "' src='" + avatar + "' alt='" + v.Realname + "'>" + status + "</a>"
if i < (num - 1) {
html += "<span>..........</span>"
}
}
return html
}
//检测是否已经审批
func CheckGooutApprover(id, userId int64) (int64, int) {
var goout GooutsApprover
o := orm.NewOrm()
o.QueryTable(models.TableName("goouts_approver")).Filter("gooutid", id).Filter("userid", userId).One(&goout, "approverid", "status")
return goout.Id, goout.Status
}