package repository import ( "context" "electricity_bill_calc/global" "electricity_bill_calc/logger" "fmt" "github.com/doug-martin/goqu/v9" "github.com/georgysavva/scany/v2/pgxscan" "github.com/jackc/pgx/v5" "go.uber.org/zap" ) type _GMRepository struct { log *zap.Logger ds goqu.DialectWrapper } var GMRepository = &_GMRepository{ log: logger.Named("Repository", "GM"), ds: goqu.Dialect("postgres"), } func (gm _GMRepository) DeleteMeterBinding(ctx context.Context, tx pgx.Tx, pid string, tenements []string, meterCodes ...[]string) error { DeleteQuery := gm.ds.From(goqu.T("tenement_meter")). Where(goqu.I("park_id").Eq(pid)). Delete() if len(tenements) > 0 { DeleteQuery = DeleteQuery. Where(goqu.I("tenement_id").In(tenements)) } if len(meterCodes) > 0 { DeleteQuery = DeleteQuery. Where(goqu.I("meter_id").In(meterCodes)) } DeleteQuerySql, DeleteQueryArgs, _ := DeleteQuery.ToSQL() _, err := tx.Exec(ctx, DeleteQuerySql, DeleteQueryArgs...) if err != nil { gm.log.Error("数据库在删除tenement_meter表数据中出错", zap.Error(err)) tx.Rollback(ctx) return err } return nil } func (gm _GMRepository) DeleteTenements(ctx context.Context, tx pgx.Tx, pid string, tenements ...[]string) error { DeleteTenements := gm.ds. From("tenement"). Where(goqu.I("park_id").Eq(pid)). Delete() fmt.Println(len(tenements)) if len(tenements) > 0 { DeleteTenements = DeleteTenements. Where(goqu.I("id").In(tenements)) } DeleteTenementsSql, DeleteTenementsArgs, _ := DeleteTenements.ToSQL() _, err := tx.Exec(ctx, DeleteTenementsSql, DeleteTenementsArgs...) if err != nil { tx.Rollback(ctx) gm.log.Error("删除商户信息出错", zap.Error(err)) return err } return nil } func (gm _GMRepository) DeleteInvoices(ctx context.Context, tx pgx.Tx, parks string, val ...[]string) error { if len(val) > 0 { updateQuery, updateQueryArgs, _ := gm.ds. Update(goqu.T("report_tenement")). Set(goqu.Record{"invoice": nil}). Where(goqu.I("invoice").In(val)). Where( goqu.I("report_id"). Eq( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)), ), ).ToSQL() _, err := tx.Exec(ctx, updateQuery, updateQueryArgs...) if err != nil { tx.Rollback(ctx) gm.log.Error("更新发票记录出错", zap.Error(err)) return err } } else { updateQuery, updateQueryArgs, _ := gm.ds. Update(goqu.T("report_tenement")). Set(goqu.Record{"invoice": nil}). Where( goqu.I("report_id"). Eq(gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)), )).ToSQL() _, err := tx.Exec(ctx, updateQuery, updateQueryArgs...) if err != nil { tx.Rollback(ctx) gm.log.Error("更新发票记录出错", zap.Error(err)) return err } } deleteQuery := gm.ds. From(goqu.T("invoices")). Where(goqu.I("park_id").Eq(parks)). Delete() if len(val) > 0 { deleteQuery.Where(goqu.I("invoice_code").In(val)) } deleteQuerySql, deleteQueryArgs, _ := deleteQuery.ToSQL() _, err := tx.Exec(ctx, deleteQuerySql, deleteQueryArgs...) if err != nil { tx.Rollback(ctx) gm.log.Error("删除指定园区发票记录出错", zap.Error(err)) return err } return nil } func (gm _GMRepository) DeleteMeterPoolings(ctx context.Context, tx pgx.Tx, parks string, val ...[]string) error { deleteQuery := gm.ds. Delete(goqu.T("meter_relations")). Where(goqu.I("park_id").Eq(parks)) if len(val) > 0 { deleteQuery = deleteQuery. Where( goqu.I("master_meter_id").In(val), goqu.Or(goqu.I("slave_meter_id").In(val)), ) } deleteQuerySql, deleteQueryArgs, _ := deleteQuery.ToSQL() _, err := tx.Exec(ctx, deleteQuerySql, deleteQueryArgs...) if err != nil { tx.Rollback(ctx) gm.log.Error("删除指定园区中的表计分摊关系失败", zap.Error(err)) return err } return nil } func (gm _GMRepository) DeleteMeters(ctx context.Context, tx pgx.Tx, parks string, val ...[]string) error { deleteQuery := gm.ds. Delete(goqu.T("meter_04kv")). Where(goqu.I("park_id").Eq(parks)) if len(val) > 0 { deleteQuery = deleteQuery.Where(goqu.I("code").In(val)) } deleteQuerySql, deleteQueryArgs, _ := deleteQuery.ToSQL() _, err := tx.Exec(ctx, deleteQuerySql, deleteQueryArgs...) if err != nil { tx.Rollback(ctx) gm.log.Error("删除指定园区的符合条件的标记出错", zap.Error(err)) return err } return nil } func (gm _GMRepository) DeleteReports(ctx context.Context, tx pgx.Tx, parks string, val ...[]string) error { var err error if len(val) > 0 { deleteReportTenementQuerySql, deleteReportTenementQueryArgs, _ := gm.ds. Delete(goqu.T("report_tenement")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)). Where(goqu.I("id").In(val)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportTenementQuerySql, deleteReportTenementQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportPooledConsumptionQuerySql, deleteReportPooledConsumptionQueryArgs, _ := gm.ds. Delete(goqu.T("report_pooled_consumption")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)). Where(goqu.I("id").In(val)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportPooledConsumptionQuerySql, deleteReportPooledConsumptionQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportPublicConsumptionQuerySql, deleteReportPublicConsumptionQueryArgs, _ := gm.ds. Delete(goqu.T("report_public_consumption")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)). Where(goqu.I("id").In(val)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportPublicConsumptionQuerySql, deleteReportPublicConsumptionQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportSummaryQuerySql, deleteReportSummaryQueryArgs, _ := gm.ds. Delete(goqu.T("report_summary")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)). Where(goqu.I("id").In(val)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportSummaryQuerySql, deleteReportSummaryQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportTaskQuerySql, deleteReportTaskQueryArgs, _ := gm.ds. Delete(goqu.T("report_task")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)). Where(goqu.I("id").In(val)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportTaskQuerySql, deleteReportTaskQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportQuerySql, deleteReportQueryArgs, _ := gm.ds. Delete(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)). Where(goqu.I("id").In(val)).ToSQL() _, err = tx.Exec(ctx, deleteReportQuerySql, deleteReportQueryArgs...) if err != nil { tx.Rollback(ctx) return err } } else { deleteReportTenementQuerySql, deleteReportTenementQueryArgs, _ := gm.ds. Delete(goqu.T("report_tenement")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportTenementQuerySql, deleteReportTenementQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportPooledConsumptionQuerySql, deleteReportPooledConsumptionQueryArgs, _ := gm.ds. Delete(goqu.T("report_pooled_consumption")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportPooledConsumptionQuerySql, deleteReportPooledConsumptionQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportPublicConsumptionQuerySql, deleteReportPublicConsumptionQueryArgs, _ := gm.ds. Delete(goqu.T("report_public_consumption")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportPublicConsumptionQuerySql, deleteReportPublicConsumptionQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportSummaryQuerySql, deleteReportSummaryQueryArgs, _ := gm.ds. Delete(goqu.T("report_summary")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportSummaryQuerySql, deleteReportSummaryQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportTaskQuerySql, deleteReportTaskQueryArgs, _ := gm.ds. Delete(goqu.T("report_task")). Where(goqu.I("report_id").In( gm.ds. From(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)), )).ToSQL() _, err = tx.Exec(ctx, deleteReportTaskQuerySql, deleteReportTaskQueryArgs...) if err != nil { tx.Rollback(ctx) return err } deleteReportQuerySql, deleteReportQueryArgs, _ := gm.ds. Delete(goqu.T("report")). Where(goqu.I("park_id").Eq(parks)).ToSQL() _, err = tx.Exec(ctx, deleteReportQuerySql, deleteReportQueryArgs...) if err != nil { tx.Rollback(ctx) return err } } return nil } func (gm _GMRepository) DeleteBuildings(ctx context.Context, tx pgx.Tx, parks string, val ...[]string) error { if len(val) > 0 { updateBulidingSql, updateBlidingArgs, _ := gm.ds. Update(goqu.T("tenement")). Set(goqu.Record{"building": nil}). Where(goqu.I("park_id").Eq(parks)). Where(goqu.I("building").In( gm.ds. From(goqu.I("park_building")). Where(goqu.I("park_id").Eq(parks)). Where(goqu.I("id").In(val)). Select(goqu.I("id")), )).ToSQL() _, err := tx.Exec(ctx, updateBulidingSql, updateBlidingArgs...) if err != nil { tx.Rollback(ctx) return err } } else { updateBulidingSql, updateBlidingArgs, _ := gm.ds. Update(goqu.T("tenement")). Set(goqu.Record{"building": nil}). Where(goqu.I("park_id").Eq(parks)).ToSQL() _, err := tx.Exec(ctx, updateBulidingSql, updateBlidingArgs...) if err != nil { tx.Rollback(ctx) return err } } deleteQuery := gm.ds. Delete(goqu.I("park_building")). Where(goqu.I("park_id").Eq(parks)) if len(val) > 0 { deleteQuery = deleteQuery. Where(goqu.I("id").In(val)) } deleteQuerySql, deleteQueryArgs, _ := deleteQuery.ToSQL() _, err := tx.Exec(ctx, deleteQuerySql, deleteQueryArgs...) if err != nil { tx.Rollback(ctx) return err } return nil } func (gm _GMRepository) DeleteParks(ctx context.Context, tx pgx.Tx, park []string) error { deleteParksSql, deleteParksArgs, _ := gm.ds. Delete(goqu.T("park")). Where(goqu.I("id").In(park)).ToSQL() _, err := tx.Exec(ctx, deleteParksSql, deleteParksArgs...) if err != nil { tx.Rollback(ctx) return err } return nil } func (gm _GMRepository) ListAllParkIdsInUser(ctx context.Context, tx pgx.Tx, uid string) ([]string, error) { SearchParkIdsSql, SearchParkIdsArgs, _ := gm.ds. From(goqu.T("park")). Where(goqu.I("user_id").Eq(uid)). Select(goqu.I("id")).ToSQL() var pids []string err := pgxscan.Select(ctx, global.DB, &pids, SearchParkIdsSql, SearchParkIdsArgs...) if err != nil { gm.log.Error("查询["+uid+"]用户下的所有园区失败", zap.Error(err)) tx.Rollback(ctx) return nil, err } return pids, nil } func (gm _GMRepository) DeleteUsers(ctx context.Context, tx pgx.Tx, uid string) error { var err error //删除用户关联 DeleteUserChargeSql, DeleteUserChargeArgs, _ := gm.ds. Delete(goqu.T("user_charge")). Where(goqu.I("id").Eq(uid)).ToSQL() _, err = tx.Exec(ctx,DeleteUserChargeSql,DeleteUserChargeArgs...) if err != nil { gm.log.Error("user_charge表关联出错",zap.Error(err)) tx.Rollback(ctx) return err } //删除用户详细信息 DeleteUserDetailSql, DeleteUserDetailArgs,_ := gm.ds. Delete(goqu.T("user_detail")). Where(goqu.I("id").Eq(uid)).ToSQL() _, err = tx.Exec(ctx,DeleteUserDetailSql,DeleteUserDetailArgs...) if err != nil { gm.log.Error("user_detail表详细信息出错",zap.Error(err)) tx.Rollback(ctx) return err } //删除用户基础信息 DeleteUserSql, DeleteUserArgs,_ := gm.ds. Delete(goqu.T("users")). Where(goqu.I("id").Eq(uid)).ToSQL() _, err = tx.Exec(ctx,DeleteUserSql,DeleteUserArgs...) if err != nil { gm.log.Error("user表基础信息出错",zap.Error(err)) tx.Rollback(ctx) return err } return nil }