diff --git a/controller/god_mode.go b/controller/god_mode.go index 40099cf..db1a426 100644 --- a/controller/god_mode.go +++ b/controller/god_mode.go @@ -20,6 +20,7 @@ func InitializeGmController(router *fiber.App) { router.Delete("/gm/tenement/meter", security.SingularityAuthorize, deleteTenementMeterRelations) router.Delete("/gm/enterprise", security.SingularityAuthorize, deleteEnterprise) router.Delete("/gm/meter/pooling", security.SingularityAuthorize, deleteMeterPoolingRelations) + router.Delete("gm/meter", security.SingularityAuthorize, deleteMeters) } //用于将参数转化为切片 @@ -117,3 +118,15 @@ func deleteMeterPoolingRelations(c *fiber.Ctx) error { return result.Success("指定表计公摊关系已经删除。") } + +func deleteMeters(c *fiber.Ctx) error { + result := response.NewResult(c) + parkId := c.Query("park") + mId := getQueryValues(c, "meters") + GmLog.Info("[天神模式]删除指定园区中的表计", zap.String("park id", parkId)) + if err := service.GMService.DeleteMeters(parkId, mId); err != nil { + meterLog.Error("[天神模式]删除指定园区中的表计失败", zap.Error(err)) + return result.Error(500, "删除指定园区中的表计失败。") + } + return result.Success("指定表计已经删除。") +} diff --git a/service/god_mode.go b/service/god_mode.go index 8001b08..a493def 100644 --- a/service/god_mode.go +++ b/service/god_mode.go @@ -149,7 +149,7 @@ func (gm _GMService) DeleteEnterprises(uid string) error { 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.DeleteMeterPoolings(ctx, tx, pid) err = repository.GMRepository.DeleteTenements(ctx, tx, pid) err = repository.GMRepository.DeleteMeters(ctx, tx, pid) err = repository.GMRepository.DeleteReports(ctx, tx, pid) @@ -189,6 +189,39 @@ func (gm _GMService) DeleteMeterPooling(pId string, mId []string) error { tx.Rollback(ctx) return err } + err = tx.Commit(ctx) + if err != nil { + gm.l.Error("未能成功提交数据库事务。", zap.Error(err)) + tx.Rollback(ctx) + return err + } + return nil +} + +func (gm _GMService) DeleteMeters(pId string, mId []string) error { + ctx, cancel := global.TimeoutContext() + defer cancel() + tx, err := global.DB.Begin(ctx) + if err != nil { + gm.l.Error("开启数据库事务失败。", zap.Error(err)) + return err + } + if err := repository.GMRepository.DeleteMeterBinding(ctx, tx, pId, []string{}, mId); err != nil { + gm.l.Error("删除指定园区中的表计和商户的绑定关系", zap.Error(err)) + tx.Rollback(ctx) + return err + } + if err := repository.GMRepository.DeleteMeterPoolings(ctx, tx, pId, mId); err != nil { + gm.l.Error("无法删除指定表记公摊关系。", zap.Error(err)) + tx.Rollback(ctx) + return err + } + if err := repository.GMRepository.DeleteMeters(ctx, tx, pId, mId); err != nil { + gm.l.Error("删除指定园区中符合条件的表计。", zap.Error(err)) + tx.Rollback(ctx) + return err + } + err = tx.Commit(ctx) if err != nil { gm.l.Error("未能成功提交数据库事务。", zap.Error(err))