沈阳玫苑物业管理后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

300 lines
14 KiB

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
}