88 lines
2.1 KiB
Go
88 lines
2.1 KiB
Go
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
|
|
}
|