|
package models
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"lapp_-wy/db"
|
|
"lapp_-wy/utils"
|
|
"time"
|
|
)
|
|
|
|
type WfApprovalrequestSteplst struct {
|
|
Approvalrequestid int `json:"approvalrequestid" xorm:"not null pk INT(11)"`
|
|
Approvallevel int `json:"approvallevel" xorm:"not null pk INT(8)"`
|
|
Cid int `json:"cid" xorm:"default NULL INT(11)"`
|
|
Approvalmodelid int `json:"approvalmodelid" xorm:"INT(11)"`
|
|
Descr string `json:"descr" xorm:"default 'NULL' VARCHAR(255)"`
|
|
Remark string `json:"remark" xorm:"default 'NULL' VARCHAR(255)"`
|
|
Status string `json:"status" xorm:"default 'NULL' VARCHAR(2)"`
|
|
Approvestatus int `json:"approvestatus" xorm:"default NULL INT(2)"`
|
|
Approvetime string `json:"approvetime" xorm:"default 'NULL' VARCHAR(20)"`
|
|
Approver string `json:"approver" xorm:"not null pk VARCHAR(20)"`
|
|
Lastmodif string `json:"lastmodif" xorm:"default 'NULL' VARCHAR(14)"`
|
|
Lastuser string `json:"lastuser" xorm:"default 'NULL' VARCHAR(20)"`
|
|
Credatuz string `json:"credatuz" xorm:"default 'NULL' VARCHAR(14)"`
|
|
}
|
|
|
|
func (t *WfApprovalrequestSteplst) TableName() string {
|
|
return "wf_approvalrequest_steplst"
|
|
}
|
|
|
|
//审核(逻辑:完成一步,添加一步!)approvestatus:1是通过,2是拒绝
|
|
func (t *WfApprovalrequestSteplst) AuditInfo() error {
|
|
|
|
engine := db.MasterEngine()
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
// add Begin() before any action
|
|
err := session.Begin()
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
upinfo := new(WfApprovalrequestSteplst)
|
|
upinfo.Approvestatus = t.Approvestatus
|
|
upinfo.Approver = t.Approver
|
|
upinfo.Remark = t.Remark
|
|
upinfo.Approvetime = utils.TimeFormat(time.Now(), "yyyy-MM-dd HH:mm:ss")
|
|
upinfo.Lastmodif = t.Lastmodif
|
|
upinfo.Credatuz = t.Credatuz
|
|
upinfo.Lastuser = t.Lastuser
|
|
//第一步:判断审核是通过还是拒绝
|
|
if t.Approvestatus == 1 {
|
|
//通过
|
|
//1.先修改
|
|
_, err = session.Table("wf_approvalrequest_steplst").Cols("remark", "approver", "approvestatus", "approvetime", "lastuser", "lastmodif").Where("approvalrequestid = ? and approvallevel = ?", t.Approvalrequestid, t.Approvallevel).Update(upinfo)
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
//2.生成待审核逻辑
|
|
level := t.Approvallevel + 1
|
|
//如果是最后一个级别,结束并且更新报销任务
|
|
data := new(WfApprovalmodelSteplst)
|
|
ok, err := engine.Table("wf_approvalmodel_steplst").Where("approvalmodelid = ? and approvallevel = ?", t.Approvalmodelid, level).Get(data)
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
if ok {
|
|
//还需要审核
|
|
info := new(WfApprovalrequestSteplst)
|
|
info.Approvalrequestid = t.Approvalrequestid
|
|
info.Approvallevel = level
|
|
info.Status = "1"
|
|
info.Descr = data.Descr
|
|
info.Approvestatus = 0
|
|
info.Lastmodif = t.Lastmodif
|
|
info.Lastuser = t.Lastuser
|
|
info.Approvalmodelid = data.Approvalmodelid
|
|
_, err := session.Table("wf_approvalrequest_steplst").Insert(info)
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
|
|
req := new(WfApprovalrequest)
|
|
req.Status = "2"
|
|
//2.更改报销需求
|
|
_, err = session.Table("wf_approvalrequest").Cols("status").Where("approvalrequestid = ?", t.Approvalrequestid).Update(req)
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
} else {
|
|
//不需要审核
|
|
//1.先修改
|
|
_, err = session.Table("wf_approvalrequest_steplst").Cols("remark", "approver", "approvestatus", "approvetime", "lastuser", "lastmodif").Where("approvalrequestid = ? and approvallevel = ?", t.Approvalrequestid, t.Approvallevel).Update(upinfo)
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
req := new(WfApprovalrequest)
|
|
req.Status = "3"
|
|
req.Approvestatus = 1
|
|
//2.更改报销需求
|
|
_, err = session.Table("wf_approvalrequest").Cols("status", "approvestatus").Where("approvalrequestid = ?", t.Approvalrequestid).Update(req)
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
}
|
|
} else if t.Approvestatus == 2 {
|
|
//拒绝
|
|
//1.先修改
|
|
_, err = session.Table("wf_approvalrequest_steplst").Cols("remark", "approver", "approvestatus", "approvetime", "lastuser", "lastmodif").Where("approvalrequestid = ? and approvallevel = ?", t.Approvalrequestid, t.Approvallevel).Update(upinfo)
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
req := new(WfApprovalrequest)
|
|
req.Status = "3"
|
|
req.Approvestatus = 2
|
|
//2.更改报销需求
|
|
_, err = session.Table("wf_approvalrequest").Cols("status", "approvestatus").Where("approvalrequestid = ?", t.Approvalrequestid).Update(req)
|
|
if err != nil {
|
|
session.Rollback()
|
|
return err
|
|
}
|
|
} else {
|
|
return errors.New("修改状态错误!")
|
|
}
|
|
err = session.Commit()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type WfApprovalrequestData struct {
|
|
Approvalrequestid int `json:"approvalrequestid"`
|
|
Approvalmodelid int `json:"approvalmodelid"`
|
|
Requester string `json:"requester"`
|
|
Agentman string `json:"agentman"`
|
|
Subject string `json:"subject"`
|
|
Requesttime string `json:"requesttime"`
|
|
Status string `json:"status"`
|
|
Approvestatus int `json:"approvestatus"`
|
|
Itemname string `json:"itemname"`
|
|
Specmodel string `json:"specmodel"`
|
|
Qty int `json:"qty"`
|
|
Cid int `json:"cid"`
|
|
Price float64 `json:"price"`
|
|
Money float64 `json:"money"`
|
|
Requestinfo string `json:"requestinfo"`
|
|
Approvaltype string `json:"approvaltype"`
|
|
Requestobjid string `json:"requestobjid"`
|
|
Callbackfunc string `json:"callbackfunc"`
|
|
Approvallevel int `json:"approvallevel"`
|
|
Descr string `json:"descr"`
|
|
Picpath string `json:"picpath"`
|
|
Remark string `json:"remark"`
|
|
Approvetime string `json:"approvetime"`
|
|
Approver string `json:"approver"`
|
|
Reqtype int `json:"reqtype"`
|
|
Purpose string `json:"purpose"`
|
|
Detail []WfApprovalrequestDetail `json:"detail"`
|
|
}
|
|
|
|
//查询所有的审核记录
|
|
func (t *WfApprovalrequestSteplst) GetPage(pageSize int, pageIndex int, approvetime string, role string, approvaltype string) ([]WfApprovalrequestData, int, error) {
|
|
data := make([]WfApprovalrequestData, 0)
|
|
e := db.MasterEngine()
|
|
query := e.Table("wf_approvalrequest_steplst").Alias("a").Select("wf_approvalrequest.agentman,wf_approvalrequest.subject,wf_approvalrequest.status,wf_approvalrequest.cid,a.approvestatus,a.approvallevel,a.descr,a.remark,a.approvetime,wf_approvalrequest.approvalrequestid,wf_approvalrequest.approvalmodelid,wf_approvalrequest.picpath,wf_approvalrequest.requester,wf_approvalrequest.requesttime,wf_approvalrequest.itemname,wf_approvalrequest.specmodel,wf_approvalrequest.qty,wf_approvalrequest.price,wf_approvalrequest.money,wf_approvalrequest.requestinfo,wf_approvalrequest.approvaltype,wf_approvalrequest.requestobjid,wf_approvalrequest.callbackfunc,a.approver,wf_approvalrequest.reqtype,wf_approvalrequest.purpose").Join("INNER", "wf_approvalrequest", "a.approvalrequestid = wf_approvalrequest.approvalrequestid").Where("1=1")
|
|
table := e.Table("wf_approvalrequest_steplst").Alias("a").Join("INNER", "wf_approvalrequest", "a.approvalrequestid = wf_approvalrequest.approvalrequestid").Where("1=1")
|
|
if t.Approvestatus > 0 {
|
|
query = query.And("a.approvestatus = ?", t.Approvestatus)
|
|
table = table.And("a.approvestatus = ?", t.Approvestatus)
|
|
}
|
|
if !utils.ValueIsEmpty(t.Status) {
|
|
query = query.And("wf_approvalrequest.status = ?", t.Status)
|
|
table = table.And("wf_approvalrequest.status = ?", t.Status)
|
|
}
|
|
if !utils.ValueIsEmpty(approvaltype) {
|
|
query = query.And("wf_approvalrequest.approvaltype = ?", approvaltype)
|
|
table = table.And("wf_approvalrequest.approvaltype = ?", approvaltype)
|
|
}
|
|
if t.Cid > 0 && role != "topm" && role != "finance" {
|
|
query = query.And("wf_approvalrequest.cid = ?", t.Cid)
|
|
table = table.And("wf_approvalrequest.cid = ?", t.Cid)
|
|
}
|
|
|
|
if !utils.ValueIsEmpty(approvetime) {
|
|
stime := approvetime + " 00:00:00"
|
|
etime := approvetime + " 23:59:59"
|
|
query = query.And("a.approvetime >= ?", stime)
|
|
query = query.And("a.approvetime <= ?", etime)
|
|
table = table.And("a.approvetime >= ?", stime)
|
|
table = table.And("a.approvetime <= ?", etime)
|
|
}
|
|
if !utils.ValueIsEmpty(t.Descr) {
|
|
descr := "%" + t.Descr + "%"
|
|
query = query.And("a.descr like ?", descr)
|
|
table = table.And("a.descr like ?", descr)
|
|
}
|
|
Offset := (pageIndex - 1) * pageSize
|
|
err := query.Limit(pageSize, Offset).Desc("a.approvalrequestid").Find(&data)
|
|
for k, v := range data {
|
|
//查询对应的子项
|
|
sdata := make([]WfApprovalrequestDetail, 0)
|
|
err = e.Table("wf_approvalrequest_detail").Where("approvalrequestid = ?", v.Approvalrequestid).Find(&sdata)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if len(sdata) > 0 {
|
|
data[k].Detail = sdata
|
|
}
|
|
}
|
|
pcount := new(WfApprovalrequestData)
|
|
count, err := table.Count(pcount)
|
|
if err != nil {
|
|
return data, 0, err
|
|
}
|
|
return data, int(count), nil
|
|
}
|
|
|
|
//查询所有的审核任务
|
|
func (t *WfApprovalrequestSteplst) ListPage(pageSize int, pageIndex int, requesttime string, role string, reqType int) ([]WfApprovalrequestData, int, error) {
|
|
data := make([]WfApprovalrequestData, 0)
|
|
e := db.MasterEngine()
|
|
query := e.Table("wf_approvalrequest_steplst").Alias("a").Select("wf_approvalrequest.agentman,wf_approvalrequest.subject,wf_approvalrequest.status,wf_approvalrequest.cid,a.approvestatus,a.approvallevel,a.descr,a.remark,a.approvetime,wf_approvalrequest.approvalrequestid,wf_approvalrequest.picpath,wf_approvalrequest.approvalmodelid,wf_approvalrequest.requester,wf_approvalrequest.requesttime,wf_approvalrequest.itemname,wf_approvalrequest.specmodel,wf_approvalrequest.qty,wf_approvalrequest.price,wf_approvalrequest.money,wf_approvalrequest.requestinfo,wf_approvalrequest.approvaltype,wf_approvalrequest.requestobjid,wf_approvalrequest.callbackfunc,a.approver,wf_approvalrequest.reqtype,wf_approvalrequest.purpose").Join("INNER", "wf_approvalrequest", "a.approvalrequestid = wf_approvalrequest.approvalrequestid").Where("a.approvestatus = ?", 0)
|
|
table := e.Table("wf_approvalrequest_steplst").Alias("a").Join("INNER", "wf_approvalrequest", "a.approvalrequestid = wf_approvalrequest.approvalrequestid").Where("a.approvestatus = ?", 0)
|
|
if reqType == 1 {
|
|
query = query.And("wf_approvalrequest.reqtype = 1")
|
|
table = table.And("wf_approvalrequest.reqtype = 1")
|
|
} else {
|
|
query = query.And(`wf_approvalrequest.reqtype != 1 or wf_approvalrequest.reqtype is null`)
|
|
table = table.And(`wf_approvalrequest.reqtype != 1 or wf_approvalrequest.reqtype is null`)
|
|
}
|
|
if t.Lastuser != "admin" {
|
|
query = query.And("'" + t.Lastuser + "'" + " in (SELECT approver FROM `wf_approver` WHERE (wf_approver.approvalmodelid = a.approvalmodelid and wf_approver.approvallevel = a.approvallevel))")
|
|
table = table.And("'" + t.Lastuser + "'" + " in (SELECT approver FROM `wf_approver` WHERE (wf_approver.approvalmodelid = a.approvalmodelid and wf_approver.approvallevel = a.approvallevel))")
|
|
}
|
|
fmt.Println("test:", role)
|
|
if t.Cid > 0 && role != "topm" && role != "finance" && role != "CFO" && role != "buyer" && role != "accounting" && role != "FM" {
|
|
query = query.And("wf_approvalrequest.cid = ?", t.Cid)
|
|
table = table.And("wf_approvalrequest.cid = ?", t.Cid)
|
|
}
|
|
if !utils.ValueIsEmpty(t.Descr) {
|
|
descr := "%" + t.Descr + "%"
|
|
query = query.And("a.descr like ?", descr)
|
|
table = table.And("a.descr like ?", descr)
|
|
}
|
|
if !utils.ValueIsEmpty(requesttime) {
|
|
stime := requesttime + " 00:00:00"
|
|
etime := requesttime + " 23:59:59"
|
|
query = query.And("wf_approvalrequest.requesttime >= ?", stime)
|
|
query = query.And("wf_approvalrequest.requesttime <= ?", etime)
|
|
table = table.And("wf_approvalrequest.requesttime >= ?", stime)
|
|
table = table.And("wf_approvalrequest.requesttime <= ?", etime)
|
|
}
|
|
Offset := (pageIndex - 1) * pageSize
|
|
err := query.Limit(pageSize, Offset).Desc("a.approvalrequestid").Find(&data)
|
|
for k, v := range data {
|
|
//查询对应的子项
|
|
sdata := make([]WfApprovalrequestDetail, 0)
|
|
err = e.Table("wf_approvalrequest_detail").Where("approvalrequestid = ?", v.Approvalrequestid).Find(&sdata)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if len(sdata) > 0 {
|
|
data[k].Detail = sdata
|
|
}
|
|
}
|
|
pcount := new(WfApprovalrequestData)
|
|
count, err := table.Count(pcount)
|
|
if err != nil {
|
|
return data, 0, err
|
|
}
|
|
return data, int(count), nil
|
|
}
|
|
|
|
type WfApprovalDataInfo struct {
|
|
Approvallevel int `json:"approvallevel"`
|
|
Approvestatus int `json:"approvestatus"`
|
|
Descr string `json:"descr"`
|
|
Remark string `json:"remark"`
|
|
Approvetime string `json:"approvetime"`
|
|
Approver string `json:"approver"`
|
|
}
|
|
|
|
//审批树状图
|
|
func (t *WfApprovalrequestSteplst) TreeInfo() ([]WfApprovalDataInfo, error) {
|
|
data := make([]WfApprovalDataInfo, 0)
|
|
e := db.MasterEngine()
|
|
err := e.Table("wf_approvalmodel_steplst").Alias("a").Select("wf_approvalrequest_steplst.approvestatus,a.approvallevel,a.descr,wf_approvalrequest_steplst.remark,wf_approvalrequest_steplst.approvetime,wf_approvalrequest_steplst.approver").Join("LEFT", "wf_approvalrequest_steplst", "a.approvalmodelid = wf_approvalrequest_steplst.approvalmodelid and a.approvallevel = wf_approvalrequest_steplst.approvallevel").Where("a.approvalmodelid = ? and wf_approvalrequest_steplst.approvalrequestid = ?", t.Approvalmodelid, t.Approvalrequestid).Asc("a.approvallevel").Find(&data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|