From c36bfff05a2553a203c66ec553e2f526abc0c72b Mon Sep 17 00:00:00 2001 From: ZiHangQin <1420014281@qq.com> Date: Mon, 31 Jul 2023 09:41:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8C=87=E5=AE=9A=E7=9A=84?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E7=94=A8=E6=88=B7=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/god_mode.go | 18 +++++++++---- repository/god_mode.go | 59 +++++++++++++++++++++++++++++++++++++++++- service/god_mode.go | 51 ++++++++++++++++++++++++++++++++++-- 3 files changed, 120 insertions(+), 8 deletions(-) diff --git a/controller/god_mode.go b/controller/god_mode.go index 1a3537d..b7b4242 100644 --- a/controller/god_mode.go +++ b/controller/god_mode.go @@ -17,7 +17,8 @@ func InitializeGmController(router *fiber.App) { router.Delete("/gm/tenement", security.SingularityAuthorize, deleteTenement) router.Delete("/gm/park", security.SingularityAuthorize, deletePark) router.Delete("/gm/report", security.SingularityAuthorize, deleteReports) - router.Delete("/gm/tenement/meter",security.SingularityAuthorize, deleteTenementMeterRelations) + router.Delete("/gm/tenement/meter", security.SingularityAuthorize, deleteTenementMeterRelations) + router.Delete("/gm/enterprise", security.SingularityAuthorize, deleteEnterprise) } //用于将参数转化为切片 @@ -78,15 +79,22 @@ func deleteReports(c *fiber.Ctx) error { } func deleteEnterprise(c *fiber.Ctx) error { + uid := c.Query("uid") + result := response.NewResult(c) + GmLog.Info("[天神模式]删除指定企业用户", zap.String("uid", uid)) - return nil + err := service.GMService.DeleteEnterprises(uid) + if err != nil { + GmLog.Error("[天神模式]删除指定企业用户失败", zap.Error(err)) + return result.Error(500, "删除指定企业用户失败。") + } + return result.Success("指定企业用户已经删除。") } - func deleteTenementMeterRelations(c *fiber.Ctx) error { result := response.NewResult(c) parkId := c.Query("park") - tId := getQueryValues(c,"tenements") + tId := getQueryValues(c, "tenements") metersId := getQueryValues(c, "meters") GmLog.Info("删除指定园区中的商户与表计的关联关系", zap.String("park id", parkId)) if err := service.GMService.DeleteTenementMeterRelations(parkId, tId, metersId); err != nil { @@ -94,4 +102,4 @@ func deleteTenementMeterRelations(c *fiber.Ctx) error { return result.NotAccept(err.Error()) } return result.Success("删除成功") -} \ No newline at end of file +} diff --git a/repository/god_mode.go b/repository/god_mode.go index 5537efb..fed5fc8 100644 --- a/repository/god_mode.go +++ b/repository/god_mode.go @@ -2,9 +2,11 @@ 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" ) @@ -125,7 +127,7 @@ func (gm _GMRepository) DeleteInvoices(ctx context.Context, tx pgx.Tx, parks str } -func (gm _GMRepository) DeleteMeterPookings(ctx context.Context, tx pgx.Tx, parks string, val ...[]string) error { +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)) @@ -390,3 +392,58 @@ func (gm _GMRepository) DeleteParks(ctx context.Context, tx pgx.Tx, park []strin } 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 +} diff --git a/service/god_mode.go b/service/god_mode.go index 7025c06..6c66439 100644 --- a/service/god_mode.go +++ b/service/god_mode.go @@ -61,8 +61,8 @@ func (gm _GMService) DeleteParks(parks []string) error { 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) + //删除meter_poolings + err = repository.GMRepository.DeleteMeterPoolings(ctx, tx, pid) //删除tenements err = repository.GMRepository.DeleteTenements(ctx, tx, pid, []string{}) //删除meters @@ -128,3 +128,50 @@ func (gm _GMService) DeleteTenementMeterRelations(pId string, tId []string, mId } return nil } + +func (gm _GMService) DeleteEnterprises(uid 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) + } + parks, err := repository.GMRepository.ListAllParkIdsInUser(ctx, tx, uid) + if err != nil { + gm.l.Error("查询园区错误", zap.Error(err)) + tx.Rollback(ctx) + return err + } + + for _, pid := range parks { + err = repository.GMRepository.DeleteInvoices(ctx, tx, pid) + err = repository.GMRepository.DeleteMeterBinding(ctx, tx, pid, []string{}) + err = repository.GMRepository.DeleteMeterPookings(ctx, tx, pid) + err = repository.GMRepository.DeleteTenements(ctx, tx, pid) + err = repository.GMRepository.DeleteMeters(ctx, tx, pid) + err = repository.GMRepository.DeleteReports(ctx, tx, pid) + err = repository.GMRepository.DeleteBuildings(ctx, tx, pid) + + if err != nil { + gm.l.Error("删除用户下关联出错", zap.Error(err)) + return err + } + } + + err = repository.GMRepository.DeleteParks(ctx, tx, parks) + if err != nil { + gm.l.Error("删除用户关联园区错误", zap.Error(err)) + tx.Rollback(ctx) + return err + } + err = repository.GMRepository.DeleteUsers(ctx, tx, uid) + if err != nil { + gm.l.Error("删除用户信息出错", zap.Error(err)) + tx.Rollback(ctx) + return err + } + return nil +}