refactor(fee):园区固定费用基本完成迁移。
This commit is contained in:
parent
e2767501fb
commit
ab7ce6d0c6
@ -8,7 +8,8 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"xorm.io/builder"
|
||||
"github.com/samber/lo"
|
||||
"github.com/uptrace/bun"
|
||||
)
|
||||
|
||||
type _MaintenanceFeeService struct{}
|
||||
@ -16,28 +17,43 @@ 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)
|
||||
|
||||
var (
|
||||
fees = make([]model.MaintenanceFee, 0)
|
||||
cond = global.DB.NewSelect().Model(&fees)
|
||||
)
|
||||
if len(pid) > 0 {
|
||||
cond = cond.Where("park_id in (?)", bun.In(pid))
|
||||
} else {
|
||||
return make([]model.MaintenanceFee, 0), exceptions.NewIllegalArgumentsError("必须给定所要请求的至少一个园区", "park_id")
|
||||
}
|
||||
|
||||
ctx, cancel := global.TimeoutContext()
|
||||
defer cancel()
|
||||
|
||||
err := cond.Order("created_at desc").Scan(ctx)
|
||||
if err != nil {
|
||||
return make([]model.MaintenanceFee, 0), err
|
||||
}
|
||||
cache.CacheSearch(fees, []string{"maintenance_fee", "park"}, "maintenance_fee", pid...)
|
||||
relations := lo.Map(fees, func(f model.MaintenanceFee, _ int) string {
|
||||
return fmt.Sprintf("maintenance_fee:%s", f.Id)
|
||||
})
|
||||
relations = append(relations, "maintenance_fee", "park")
|
||||
|
||||
cache.CacheSearch(fees, relations, "maintenance_fee", pid...)
|
||||
return fees, nil
|
||||
}
|
||||
|
||||
func (_MaintenanceFeeService) CreateMaintenanceFeeRecord(fee model.MaintenanceFee) error {
|
||||
ctx, cancel := global.TimeoutContext()
|
||||
defer cancel()
|
||||
|
||||
fee.Id = uuid.New().String()
|
||||
fee.Enabled = true
|
||||
_, err := global.DBConn.Insert(fee)
|
||||
_, err := global.DB.NewInsert().Model(fee).Exec(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -46,44 +62,58 @@ func (_MaintenanceFeeService) CreateMaintenanceFeeRecord(fee model.MaintenanceFe
|
||||
}
|
||||
|
||||
func (_MaintenanceFeeService) ModifyMaintenanceFee(fee model.MaintenanceFee) error {
|
||||
rows, err := global.DBConn.Table(&model.MaintenanceFee{}).NoAutoCondition().ID(fee.Id).Cols("fee", "memo").Update(fee)
|
||||
ctx, cancel := global.TimeoutContext()
|
||||
defer cancel()
|
||||
|
||||
res, err := global.DB.NewUpdate().Model(fee).
|
||||
WherePK().
|
||||
Column("fee", "memo").
|
||||
Exec(ctx)
|
||||
if err != nil {
|
||||
if rows == 0 {
|
||||
if rows, _ := res.RowsAffected(); rows == 0 {
|
||||
return exceptions.NewNotFoundError("未能找到匹配的维护费记录。")
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
cache.AbolishRelation("maintenance_fee")
|
||||
cache.AbolishRelation(fmt.Sprintf("maintenance_fee_%s", fee.Id))
|
||||
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})
|
||||
ctx, cancel := global.TimeoutContext()
|
||||
defer cancel()
|
||||
|
||||
res, err := global.DB.NewUpdate().Model((*model.MaintenanceFee)(nil)).
|
||||
Where("id = ?", fid).
|
||||
Set("enabled = ?", state).
|
||||
Exec(ctx)
|
||||
if err != nil {
|
||||
if rows == 0 {
|
||||
if rows, err := res.RowsAffected(); rows == 0 {
|
||||
return exceptions.NewNotFoundError("未能找到匹配的维护费记录。")
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
cache.AbolishRelation("maintenance_fee")
|
||||
cache.AbolishRelation(fmt.Sprintf("maintenance_fee_%s", fid))
|
||||
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))
|
||||
ctx, cancel := global.TimeoutContext()
|
||||
defer cancel()
|
||||
|
||||
res, err := global.DB.NewDelete().Model((*model.MaintenanceFee)(nil)).
|
||||
Where("id = ?", fid).
|
||||
Exec(ctx)
|
||||
if err != nil {
|
||||
if rows == 0 {
|
||||
if rows, err := res.RowsAffected(); rows == 0 {
|
||||
return exceptions.NewNotFoundError("未能找到匹配的维护费记录。")
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
cache.AbolishRelation("maintenance_fee")
|
||||
cache.AbolishRelation(fmt.Sprintf("maintenance_fee_%s", fid))
|
||||
cache.AbolishRelation(fmt.Sprintf("maintenance_fee:%s", fid))
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -91,31 +121,21 @@ 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.
|
||||
Table(new(model.MaintenanceFee)).
|
||||
Where(builder.Eq{"id": mid}).
|
||||
Limit(1).
|
||||
Find(&fee)
|
||||
|
||||
ctx, cancel := global.TimeoutContext()
|
||||
defer cancel()
|
||||
|
||||
exists, err := global.DB.NewSelect().Model((*model.Park)(nil)).
|
||||
Relation("MaintenanceFees").
|
||||
Where("p.user_id = ?", uid).
|
||||
Where("m.id = ?", mid).
|
||||
Exists(ctx)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if len(fee) == 0 {
|
||||
return false, exceptions.NewNotFoundError("指定维护费条目未找到。")
|
||||
}
|
||||
var park = make([]model.Park, 0)
|
||||
err = global.DBConn.
|
||||
Table(new(model.Park)).
|
||||
Where(builder.Eq{"id": fee[0].ParkId}).
|
||||
Limit(1).Find(&park)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if len(park) == 0 {
|
||||
if !exists {
|
||||
return false, exceptions.NewNotFoundError("指定维护费所属园区未找到。")
|
||||
}
|
||||
if park[0].UserId == uid {
|
||||
cache.CacheExists([]string{"maintenance_fee", "park"}, "maintenance_fee", mid, uid)
|
||||
}
|
||||
return park[0].UserId == uid, nil
|
||||
cache.CacheExists([]string{fmt.Sprintf("maintenance_fee:%s", mid), "maintenance_fee", "park"}, "maintenance_fee", mid, uid)
|
||||
return exists, nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user