diff --git a/service/meter04kv.go b/service/meter04kv.go index c1e09ad..8c8cfc9 100644 --- a/service/meter04kv.go +++ b/service/meter04kv.go @@ -1,11 +1,13 @@ package service import ( + "electricity_bill_calc/cache" "electricity_bill_calc/config" "electricity_bill_calc/excel" "electricity_bill_calc/global" "electricity_bill_calc/model" "fmt" + "strconv" mapset "github.com/deckarep/golang-set/v2" "github.com/samber/lo" @@ -18,7 +20,9 @@ type _Meter04kVService struct{} var Meter04kVService _Meter04kVService func (_Meter04kVService) ListMeterDetail(park, keyword string, page int) ([]model.Meter04KV, int64, error) { - cond := builder.NewCond() + var condition = make([]string, 0) + cond := builder.NewCond().And(builder.Eq{"park_id": park}) + condition = append(condition, park, strconv.Itoa(page)) if len(keyword) > 0 { cond = cond.And( builder.Like{"address", keyword}. @@ -26,21 +30,38 @@ func (_Meter04kVService) ListMeterDetail(park, keyword string, page int) ([]mode Or(builder.Like{"code", keyword}). Or(builder.Like{"contact_name", keyword}). Or(builder.Like{"contact_phone", keyword})) + condition = append(condition, keyword) } - total, err := global.DBConn.Where(cond).Count(new(model.Meter04KV)) - if err != nil { - return make([]model.Meter04KV, 0), -1, err + var ( + total int64 + err error + ) + if cachedTotal, _ := cache.RetreiveCount("meter_04kv", condition...); cachedTotal != -1 { + total = cachedTotal + } else { + total, err = global.DBConn.Where(cond).NoAutoCondition().Count(new(model.Meter04KV)) + if err != nil { + return make([]model.Meter04KV, 0), -1, err + } + cache.CacheCount("meter_04kv", "meter_04kv", total, condition...) } var meters = make([]model.Meter04KV, 0) startItem := (page - 1) * config.ServiceSettings.ItemsPageSize + if cachedMeters, _ := cache.RetreiveSearch[[]model.Meter04KV]("meter_04kv", condition...); cachedMeters != nil { + return *cachedMeters, total, nil + } err = global.DBConn. Where(cond). Limit(config.ServiceSettings.ItemsPageSize, startItem). Find(&meters) + cache.CacheSearch(meters, "meter_04kv", "meter_04kv", condition...) return meters, total, err } func (_Meter04kVService) Get04kVMeterDetail(park, code string) (*model.Meter04KV, error) { + if cachedMeter, _ := cache.RetreiveEntity[model.Meter04KV]("meter_04kv", fmt.Sprintf("%s_%s", park, code)); cachedMeter != nil { + return cachedMeter, nil + } var meter = new(model.Meter04KV) has, err := global.DBConn.Where(builder.Eq{"code": code, "park_id": park}).NoAutoCondition().Get(meter) if err != nil { @@ -49,6 +70,7 @@ func (_Meter04kVService) Get04kVMeterDetail(park, code string) (*model.Meter04KV if !has { return nil, nil } + cache.CacheEntity(meter, fmt.Sprintf("meter_04kv_%s_%s", park, code), "meter_04kv", fmt.Sprintf("%s_%s", park, code)) return meter, nil } @@ -57,6 +79,7 @@ func (_Meter04kVService) insertNewMeter(tx *xorm.Session, meter model.Meter04KV) if err != nil { tx.Rollback() } + cache.AbolishRelation("meter_04kv") return err } @@ -69,6 +92,8 @@ func (_Meter04kVService) updateMeter(tx *xorm.Session, meter model.Meter04KV) er if err != nil { tx.Rollback() } + cache.AbolishRelation("meter_04kv") + cache.AbolishRelation(fmt.Sprintf("meter_04kv_%s_%s", meter.ParkId, meter.Code)) return err } @@ -88,6 +113,8 @@ func (m _Meter04kVService) CreateSingleMeter(meter model.Meter04KV) error { tx.Rollback() return err } + cache.AbolishRelation("meter_04kv") + cache.AbolishRelation(fmt.Sprintf("meter_04kv_%s_%s", meter.ParkId, meter.Code)) return nil } @@ -107,6 +134,8 @@ func (m _Meter04kVService) UpdateSingleMeter(meter *model.Meter04KV) error { tx.Rollback() return err } + cache.AbolishRelation("meter_04kv") + cache.AbolishRelation(fmt.Sprintf("meter_04kv_%s_%s", meter.ParkId, meter.Code)) return nil } @@ -161,5 +190,6 @@ func (m _Meter04kVService) BatchCreateMeter(meters []model.Meter04KV) error { tx.Rollback() return err } + cache.AbolishRelation("meter_04kv") return nil }