forked from free-lancers/electricity_bill_calc_service
feat(report):完成多端共用的报表检索功能。
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"electricity_bill_calc/config"
|
||||
"electricity_bill_calc/exceptions"
|
||||
"electricity_bill_calc/global"
|
||||
"electricity_bill_calc/model"
|
||||
@@ -379,3 +380,45 @@ func (_ReportService) PublishReport(report model.Report) (err error) {
|
||||
_, err = global.DBConn.ID(report.Id).Cols("step_state", "published", "published_at").Update(report)
|
||||
return
|
||||
}
|
||||
|
||||
func (_ReportService) SearchReport(requestUser, requestPark, requestKeyword string, requestPeriod *time.Time, requestPage int) ([]model.JoinedReportForWithdraw, int64, error) {
|
||||
cond := builder.NewCond().And(builder.Eq{"r.published": true})
|
||||
if len(requestUser) > 0 {
|
||||
cond = cond.And(builder.Eq{"u.id": requestUser})
|
||||
}
|
||||
if len(requestPark) > 0 {
|
||||
cond = cond.And(builder.Eq{"p.id": requestPark})
|
||||
}
|
||||
if requestPeriod != nil {
|
||||
cond = cond.And(builder.Eq{"r.period": *requestPeriod})
|
||||
}
|
||||
if len(requestKeyword) > 0 {
|
||||
cond = cond.And(
|
||||
builder.Like{"u.name", requestKeyword}.
|
||||
Or(builder.Like{"p.name", requestKeyword}).
|
||||
Or(builder.Like{"u.abbr", requestKeyword}).
|
||||
Or(builder.Like{"p.abbr", requestKeyword}).
|
||||
Or(builder.Like{"u.address", requestKeyword}).
|
||||
Or(builder.Like{"p.address", requestKeyword}),
|
||||
)
|
||||
}
|
||||
total, err := global.DBConn.
|
||||
Table("report").Alias("r").
|
||||
Join("INNER", []string{"park", "p"}, "p.id=r.park_id").
|
||||
Join("INNER", []string{"user_detail", "u"}, "u.id=p.user_id").
|
||||
Where(cond).
|
||||
Count()
|
||||
if err != nil {
|
||||
return make([]model.JoinedReportForWithdraw, 0), -1, err
|
||||
}
|
||||
startItem := (requestPage - 1) * config.ServiceSettings.ItemsPageSize
|
||||
records := make([]model.JoinedReportForWithdraw, 0)
|
||||
err = global.DBConn.
|
||||
Table("report").Alias("r").
|
||||
Join("INNER", []string{"park", "p"}, "p.id=r.park_id").
|
||||
Join("INNER", []string{"user_detail", "u"}, "u.id=p.user_id").
|
||||
Where(cond).
|
||||
Limit(config.ServiceSettings.ItemsPageSize, startItem).
|
||||
Find(&records)
|
||||
return records, total, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user