package service import ( "electricity_bill_calc/global" "electricity_bill_calc/logger" "electricity_bill_calc/repository" "fmt" "github.com/doug-martin/goqu/v9" "go.uber.org/zap" ) type _GMService struct { l *zap.Logger gm goqu.DialectWrapper } var GMService = _GMService{ logger.Named("Service", "GM"), goqu.Dialect("postgres"), } func (gm _GMService) DeleteTenements(pid string, tenements []string) error { var err error ctx, cancel := global.TimeoutContext() defer cancel() tx, err := global.DB.Begin(ctx) if err != nil { gm.l.Error("未能启动数据库事务", zap.Error(err)) return fmt.Errorf("未能启动数据库事务,%w", err) } err = repository.GMRepository.DeleteMeterBinding(ctx, tx, pid, tenements) if err != nil { tx.Rollback(ctx) return err } err = repository.GMRepository.DeleteTenements(ctx, tx, pid, tenements) if err != nil { tx.Rollback(ctx) return err } tx.Commit(ctx) return nil } func (gm _GMService) DeleteParks(parks []string) error { var err error ctx, cancel := global.TimeoutContext() defer cancel() tx, err := global.DB.Begin(ctx) if err != nil { gm.l.Error("未能启动数据库事务", zap.Error(err)) return fmt.Errorf("未能启动数据库事务,%w", err) } for _, pid := range parks { //删除invoices err = repository.GMRepository.DeleteInvoices(ctx, tx, pid) //删除meter_binding err = repository.GMRepository.DeleteMeterBinding(ctx, tx, pid, []string{}) //删除meter_pookings err = repository.GMRepository.DeleteMeterPookings(ctx, tx, pid) //删除tenements err = repository.GMRepository.DeleteTenements(ctx, tx, pid, []string{}) //删除meters err = repository.GMRepository.DeleteMeters(ctx, tx, pid) //删除reports err = repository.GMRepository.DeleteReports(ctx, tx, pid) //删除buildings err = repository.GMRepository.DeleteBuildings(ctx, tx, pid) if err != nil { gm.l.Error("删除关联表出错。", zap.Error(err)) break return err } } err = repository.GMRepository.DeleteParks(ctx, tx, parks) if err != nil { gm.l.Error("指定园区删除失败。", zap.Error(err)) return err } tx.Commit(ctx) return nil }