electricity_bill_calc_service/service/maintenance_fee.go

98 lines
2.5 KiB
Go

package service
import (
"electricity_bill_calc/exceptions"
"electricity_bill_calc/global"
"electricity_bill_calc/model"
"github.com/google/uuid"
"xorm.io/builder"
)
type _MaintenanceFeeService struct{}
var MaintenanceFeeService _MaintenanceFeeService
func (_MaintenanceFeeService) ListMaintenanceFees(pid []string) ([]model.MaintenanceFee, error) {
cond := builder.NewCond()
if len(pid) > 0 {
cond = cond.And(builder.Eq{"park_id": pid})
} else {
return make([]model.MaintenanceFee, 0), exceptions.NewIllegalArgumentsError("必须给定所要请求的至少一个园区", "park_id")
}
var fees = make([]model.MaintenanceFee, 0)
err := global.DBConn.Where(cond).Desc("created_at").Find(&fees)
if err != nil {
return make([]model.MaintenanceFee, 0), err
}
return fees, nil
}
func (_MaintenanceFeeService) CreateMaintenanceFeeRecord(fee model.MaintenanceFee) error {
fee.Id = uuid.New().String()
fee.Enabled = true
_, err := global.DBConn.Insert(fee)
if err != nil {
return err
}
return nil
}
func (_MaintenanceFeeService) ModifyMaintenanceFee(fee model.MaintenanceFee) error {
rows, err := global.DBConn.Table(&model.MaintenanceFee{}).NoAutoCondition().ID(fee.Id).Cols("fee", "memo").Update(fee)
if err != nil {
if rows == 0 {
return exceptions.NewNotFoundError("未能找到匹配的维护费记录。")
} else {
return err
}
}
return nil
}
func (_MaintenanceFeeService) ChangeMaintenanceFeeState(fid string, state bool) error {
rows, err := global.DBConn.Table(&model.MaintenanceFee{}).ID(fid).Update(map[string]interface{}{"enabled": state})
if err != nil {
if rows == 0 {
return exceptions.NewNotFoundError("未能找到匹配的维护费记录。")
} else {
return err
}
}
return nil
}
func (_MaintenanceFeeService) DeleteMaintenanceFee(fid string) error {
rows, err := global.DBConn.ID(fid).Delete(new(model.MaintenanceFee))
if err != nil {
if rows == 0 {
return exceptions.NewNotFoundError("未能找到匹配的维护费记录。")
} else {
return err
}
}
return nil
}
func (_MaintenanceFeeService) EnsureFeeBelongs(uid, mid string) (bool, error) {
var fee = make([]model.MaintenanceFee, 0)
err := global.DBConn.
ID(mid).Limit(1).Find(&fee)
if err != nil {
return false, err
}
if len(fee) == 0 {
return false, nil
}
var park = make([]model.Park, 0)
err = global.DBConn.
ID(fee[0].ParkId).Limit(1).Find(&park)
if err != nil {
return false, err
}
if len(park) == 0 {
return false, nil
}
return park[0].UserId == uid, nil
}