作者 庄敏学

删除图表时删除已下载数据表

@@ -3,6 +3,7 @@ package chart @@ -3,6 +3,7 @@ package chart
3 import ( 3 import (
4 "context" 4 "context"
5 "fmt" 5 "fmt"
  6 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/transaction"
6 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" 7 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain"
7 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/pkg/contextdata" 8 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/pkg/contextdata"
8 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/pkg/xerr" 9 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/pkg/xerr"
@@ -35,6 +36,7 @@ func (l *DeleteChartLogic) DeleteChart(req *types.ChartDeleteRequest) (resp *typ @@ -35,6 +36,7 @@ func (l *DeleteChartLogic) DeleteChart(req *types.ChartDeleteRequest) (resp *typ
35 appPage *domain.AppPage 36 appPage *domain.AppPage
36 ) 37 )
37 resp = &types.ChartDeleteResponse{} 38 resp = &types.ChartDeleteResponse{}
  39 +
38 if chart, err = l.svcCtx.ChartRepository.FindOne(l.ctx, conn, req.Id); err != nil { 40 if chart, err = l.svcCtx.ChartRepository.FindOne(l.ctx, conn, req.Id); err != nil {
39 return nil, xerr.NewErrMsgErr("不存在", err) 41 return nil, xerr.NewErrMsgErr("不存在", err)
40 } 42 }
@@ -48,9 +50,23 @@ func (l *DeleteChartLogic) DeleteChart(req *types.ChartDeleteRequest) (resp *typ @@ -48,9 +50,23 @@ func (l *DeleteChartLogic) DeleteChart(req *types.ChartDeleteRequest) (resp *typ
48 if appPage.Identify() != nil { 50 if appPage.Identify() != nil {
49 return nil, xerr.NewErrMsgErr(fmt.Sprintf("该图表已被页面\"%v\"引用", appPage.Name), err) 51 return nil, xerr.NewErrMsgErr(fmt.Sprintf("该图表已被页面\"%v\"引用", appPage.Name), err)
50 } 52 }
51 - if chart, err = l.svcCtx.ChartRepository.Delete(l.ctx, conn, chart); err != nil {  
52 - return nil, xerr.NewErrMsgErr("删除失败", err)  
53 - } 53 +
  54 + err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, conn transaction.Conn) error {
  55 + if chart, err = l.svcCtx.ChartRepository.Delete(l.ctx, conn, chart); err != nil {
  56 + return xerr.NewErrMsgErr("删除失败", err)
  57 + }
  58 + //删除数据源
  59 + chartSetting, err := l.svcCtx.ChartSettingRepository.FindOne(l.ctx, conn, chart.Id)
  60 + if err == nil && len(chartSetting.DataSourceIds) > 0 {
  61 + for _, sourceId := range chartSetting.DataSourceIds {
  62 + err = DeleteObjectTable(l.ctx, l.svcCtx, conn, int(sourceId))
  63 + if err != nil {
  64 + return xerr.NewErrMsg("删除失败")
  65 + }
  66 + }
  67 + }
  68 + return nil
  69 + }, true)
54 70
55 resp = &types.ChartDeleteResponse{} 71 resp = &types.ChartDeleteResponse{}
56 return 72 return
@@ -96,27 +96,35 @@ func (l *UpdateChartLogic) SyncTableData(tenantId int64, conn transaction.Conn, @@ -96,27 +96,35 @@ func (l *UpdateChartLogic) SyncTableData(tenantId int64, conn transaction.Conn,
96 //删除 96 //删除
97 if len(right) > 0 { 97 if len(right) > 0 {
98 for _, sourceId := range right { 98 for _, sourceId := range right {
99 - //验证其他图表是否使用  
100 - used, err := l.svcCtx.ChartSettingRepository.CheckUseDataSource(l.ctx, conn, int(sourceId))  
101 - if err == nil && !used { //未使用,删除  
102 - err = l.svcCtx.ObjectTableDataRepository.DropTable(l.ctx, conn, int(sourceId))  
103 - if err != nil {  
104 - return err  
105 - }  
106 - //是否远程已删除  
107 - objectTable, err := l.svcCtx.ObjectTableRepository.FindOne(l.ctx, conn, int(sourceId))  
108 - if err == nil && objectTable.Id > 0 && objectTable.RemoteDeleted == 1 {  
109 - //删除表  
110 - _, err = l.svcCtx.ObjectTableRepository.Delete(l.ctx, conn, &domain.ObjectTable{Id: int(sourceId)})  
111 - if err != nil {  
112 - return err  
113 - }  
114 - //删除字段  
115 - _, err = l.svcCtx.ObjectFieldRepository.Delete(l.ctx, conn, &domain.ObjectField{Id: sourceId})  
116 - if err != nil {  
117 - return err  
118 - }  
119 - } 99 + err := DeleteObjectTable(l.ctx, l.svcCtx, conn, int(sourceId))
  100 + if err != nil {
  101 + return err
  102 + }
  103 + }
  104 + }
  105 + return nil
  106 +}
  107 +
  108 +func DeleteObjectTable(ctx context.Context, svcCtx *svc.ServiceContext, conn transaction.Conn, sourceId int) error {
  109 + //验证其他图表是否使用
  110 + used, err := svcCtx.ChartSettingRepository.CheckUseDataSource(ctx, conn, sourceId)
  111 + if err == nil && !used { //未使用,删除
  112 + err = svcCtx.ObjectTableDataRepository.DropTable(ctx, conn, sourceId)
  113 + if err != nil {
  114 + return err
  115 + }
  116 + //是否远程已删除
  117 + objectTable, err := svcCtx.ObjectTableRepository.FindOne(ctx, conn, sourceId)
  118 + if err == nil && objectTable.Id > 0 && objectTable.RemoteDeleted == 1 {
  119 + //删除表
  120 + _, err = svcCtx.ObjectTableRepository.Delete(ctx, conn, &domain.ObjectTable{Id: sourceId})
  121 + if err != nil {
  122 + return err
  123 + }
  124 + //删除字段
  125 + _, err = svcCtx.ObjectFieldRepository.Delete(ctx, conn, &domain.ObjectField{Id: int64(sourceId)})
  126 + if err != nil {
  127 + return err
120 } 128 }
121 } 129 }
122 } 130 }