perf: filter by condition

This commit is contained in:
zchengo
2023-02-03 19:55:45 +08:00
parent 20dd98ec35
commit 54c3653197
7 changed files with 321 additions and 121 deletions
+20 -13
View File
@@ -52,23 +52,30 @@ func (c *ContractDao) Delete(param *models.ContractDeleteParam) error {
func (c *ContractDao) GetList(param *models.ContractQueryParam) ([]*models.ContractList, int64, error) {
contractList := make([]*models.ContractList, 0)
s := "contract.id, contract.name, contract.amount, contract.begin_time, contract.over_time, customer.name as cname, contract.remarks, contract.status, contract.created, contract.updated"
j := "inner join customer on contract.cid = customer.id and contract.creator = ?"
field := "contract.id, contract.name, contract.amount, contract.begin_time, contract.over_time, customer.name as cname, contract.remarks, contract.status, contract.created, contract.updated"
where := "inner join customer on contract.cid = customer.id and contract.creator = ?"
raw := "select count(*) from contract where creator = ?"
// 分页查询
offset := (param.Page.PageNum - 1) * param.Page.PageSize
mdb := global.Db.Offset(offset).Limit(param.Page.PageSize).Table(CONTRACT).Select(s)
var err error
if param.Id != 0 {
err = mdb.Joins(j+" and contract.id = ?", param.Creator, param.Id).Scan(&contractList).Error
} else {
err = mdb.Joins(j, param.Creator).Scan(&contractList).Error
}
if err != nil {
return nil, 0, err
}
db := global.Db.Offset(offset).Limit(param.Page.PageSize).Table(CONTRACT).Select(field)
var rows int64
global.Db.Raw("select count(*) from contract where creator = ?", param.Creator).Scan(&rows)
if param.Id != NumberNull {
db.Joins(where+" and contract.id = ?", param.Creator, param.Id)
global.Db.Raw(raw + " and contract.id = ?", param.Creator, param.Creator).Scan(&rows)
} else {
if param.Status != NumberNull {
db.Joins(where+" and contract.status = ?", param.Creator, param.Status)
global.Db.Raw(raw + " and contract.status = ?", param.Creator, param.Status).Scan(&rows)
} else {
db.Joins(where, param.Creator)
global.Db.Raw(raw, param.Creator).Scan(&rows)
}
}
if err := db.Scan(&contractList).Error; err != nil {
return nil, NumberNull, nil
}
return contractList, rows, nil
}