117 lines
3.4 KiB
Go
117 lines
3.4 KiB
Go
package service
|
|
|
|
import (
|
|
"electricity_bill_calc/cache"
|
|
"electricity_bill_calc/exceptions"
|
|
"electricity_bill_calc/global"
|
|
"electricity_bill_calc/model"
|
|
"fmt"
|
|
|
|
"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")
|
|
}
|
|
if fees, _ := cache.RetreiveSearch[[]model.MaintenanceFee]("maintenance_fee", pid...); fees != nil {
|
|
return *fees, nil
|
|
}
|
|
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
|
|
}
|
|
cache.CacheSearch(fees, "maintenance_fee", "maintenance_fee", pid...)
|
|
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
|
|
}
|
|
cache.AbolishRelation("maintenance_fee")
|
|
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
|
|
}
|
|
}
|
|
cache.AbolishRelation("maintenance_fee")
|
|
cache.AbolishRelation(fmt.Sprintf("maintenance_fee_%s", fee.Id))
|
|
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
|
|
}
|
|
}
|
|
cache.AbolishRelation("maintenance_fee")
|
|
cache.AbolishRelation(fmt.Sprintf("maintenance_fee_%s", fid))
|
|
return nil
|
|
}
|
|
|
|
func (_MaintenanceFeeService) DeleteMaintenanceFee(fid string) error {
|
|
rows, err := global.DBConn.ID(fid).NoAutoCondition().Delete(new(model.MaintenanceFee))
|
|
if err != nil {
|
|
if rows == 0 {
|
|
return exceptions.NewNotFoundError("未能找到匹配的维护费记录。")
|
|
} else {
|
|
return err
|
|
}
|
|
}
|
|
cache.AbolishRelation("maintenance_fee")
|
|
cache.AbolishRelation(fmt.Sprintf("maintenance_fee_%s", fid))
|
|
return nil
|
|
}
|
|
|
|
func (_MaintenanceFeeService) EnsureFeeBelongs(uid, mid string) (bool, error) {
|
|
if has, _ := cache.CheckExists("maintenance_fee", mid, uid); has {
|
|
return true, nil
|
|
}
|
|
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, exceptions.NewNotFoundError("指定维护费条目未找到。")
|
|
}
|
|
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, exceptions.NewNotFoundError("指定维护费所属园区未找到。")
|
|
}
|
|
if park[0].UserId == uid {
|
|
cache.CacheExists("maintenance_fee", "maintenance_fee", mid, uid)
|
|
}
|
|
return park[0].UserId == uid, nil
|
|
}
|