正在显示
28 个修改的文件
包含
1656 行增加
和
11 行删除
cmd/chart-server/api/.gitignore
0 → 100644
| 1 | +go_build_bchart |
| @@ -2,14 +2,15 @@ package main | @@ -2,14 +2,15 @@ package main | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "flag" | 4 | "flag" |
| 5 | + "github.com/golang-jwt/jwt/v4/request" | ||
| 6 | + "github.com/zeromicro/go-queue/kq" | ||
| 5 | "github.com/zeromicro/go-zero/core/logx" | 7 | "github.com/zeromicro/go-zero/core/logx" |
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/logic/consumer" | ||
| 6 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db" | 9 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db" |
| 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | 10 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" |
| 8 | "net/http" | 11 | "net/http" |
| 9 | "strings" | 12 | "strings" |
| 10 | 13 | ||
| 11 | - "github.com/golang-jwt/jwt/v4/request" | ||
| 12 | - | ||
| 13 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/config" | 14 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/config" |
| 14 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/handler" | 15 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/handler" |
| 15 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/svc" | 16 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/svc" |
| @@ -56,7 +57,49 @@ func main() { | @@ -56,7 +57,49 @@ func main() { | ||
| 56 | handler.RegisterHandlers(server, ctx) | 57 | handler.RegisterHandlers(server, ctx) |
| 57 | 58 | ||
| 58 | db.Migrate(ctx.DB) | 59 | db.Migrate(ctx.DB) |
| 60 | + //启动消费队列 | ||
| 61 | + go startConsume(c) | ||
| 59 | 62 | ||
| 60 | logx.Infof("Starting server at %s:%d... \n", c.Host, c.Port) | 63 | logx.Infof("Starting server at %s:%d... \n", c.Host, c.Port) |
| 61 | server.Start() | 64 | server.Start() |
| 62 | } | 65 | } |
| 66 | + | ||
| 67 | +func startConsume(c config.Config) { | ||
| 68 | + svcCtx := svc.NewServiceContext(c) | ||
| 69 | + go func() { | ||
| 70 | + //for { | ||
| 71 | + // notice := &domain.ObjectNotice{ | ||
| 72 | + // CompanyId: 1594869884284571648, | ||
| 73 | + // TableId: 1573, | ||
| 74 | + // TableType: "主表", | ||
| 75 | + // ObjectType: "导入模块", | ||
| 76 | + // Event: "table.data.edit", | ||
| 77 | + // TableAffectedList: []int{1573}, | ||
| 78 | + // DataChanged: true, | ||
| 79 | + // StructChanged: true, | ||
| 80 | + // MetaData: domain.ObjectNoticeMetaData{ | ||
| 81 | + // Module: 0, | ||
| 82 | + // Status: 0, | ||
| 83 | + // }, | ||
| 84 | + // } | ||
| 85 | + // mBytes, _ := json.Marshal(notice) | ||
| 86 | + // err := kq.NewPusher(c.KqConsumerConf.Brokers, c.KqConsumerConf.Topic).Push(string(mBytes)) | ||
| 87 | + // fmt.Println(err) | ||
| 88 | + // time.Sleep(10 * 10 * time.Second) | ||
| 89 | + //} | ||
| 90 | + }() | ||
| 91 | + go func() { | ||
| 92 | + | ||
| 93 | + }() | ||
| 94 | + //kq.MustNewQueue(c.KqConsumerConf, consumer.NewByteNoticeLogic(svcCtx)) | ||
| 95 | + //for { | ||
| 96 | + queue, err := kq.NewQueue(c.KqConsumerConf, consumer.NewByteNoticeLogic(svcCtx)) | ||
| 97 | + if err != nil { | ||
| 98 | + panic(err) | ||
| 99 | + } else { | ||
| 100 | + queue.Start() | ||
| 101 | + } | ||
| 102 | + //time.Sleep(1 * time.Second) | ||
| 103 | + //} | ||
| 104 | + | ||
| 105 | +} |
| @@ -27,3 +27,11 @@ ByteMetadata: | @@ -27,3 +27,11 @@ ByteMetadata: | ||
| 27 | Host1: http://127.0.0.1:8080 | 27 | Host1: http://127.0.0.1:8080 |
| 28 | Host: http://character-library-metadata-bastion-test.fjmaimaimai.com | 28 | Host: http://character-library-metadata-bastion-test.fjmaimaimai.com |
| 29 | Timeout: 0s | 29 | Timeout: 0s |
| 30 | + | ||
| 31 | +KqConsumerConf: | ||
| 32 | + Name: KqConsumer | ||
| 33 | + Brokers: | ||
| 34 | + - 192.168.100.221:9092 | ||
| 35 | + Group: sumifcc | ||
| 36 | + Topic: sumifcc | ||
| 37 | + Processors: 1 |
| 1 | package config | 1 | package config |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "github.com/zeromicro/go-queue/kq" | ||
| 4 | "github.com/zeromicro/go-zero/core/stores/redis" | 5 | "github.com/zeromicro/go-zero/core/stores/redis" |
| 5 | "github.com/zeromicro/go-zero/rest" | 6 | "github.com/zeromicro/go-zero/rest" |
| 6 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/pkg/config" | 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/pkg/config" |
| @@ -13,6 +14,7 @@ type Config struct { | @@ -13,6 +14,7 @@ type Config struct { | ||
| 13 | Redis redis.RedisConf `json:",optional"` | 14 | Redis redis.RedisConf `json:",optional"` |
| 14 | ByteMetadata ApiService | 15 | ByteMetadata ApiService |
| 15 | HostName string // 服务域名 | 16 | HostName string // 服务域名 |
| 17 | + KqConsumerConf kq.KqConf | ||
| 16 | } | 18 | } |
| 17 | 19 | ||
| 18 | type ApiService struct { | 20 | type ApiService struct { |
| 1 | +package consumer | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "encoding/json" | ||
| 6 | + "fmt" | ||
| 7 | + "github.com/zeromicro/go-zero/core/stores/redis" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/svc" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/api/internal/types" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/transaction" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/gateway/bytelib" | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +type ByteNoticeLogic struct { | ||
| 16 | + ctx context.Context | ||
| 17 | + svcCtx *svc.ServiceContext | ||
| 18 | + conn transaction.Conn | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func NewByteNoticeLogic(svcCtx *svc.ServiceContext) *ByteNoticeLogic { | ||
| 22 | + return &ByteNoticeLogic{ | ||
| 23 | + ctx: context.Background(), | ||
| 24 | + svcCtx: svcCtx, | ||
| 25 | + conn: svcCtx.DefaultDBConn(), | ||
| 26 | + } | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func (logic *ByteNoticeLogic) Consume(key, value string) error { | ||
| 30 | + fmt.Println(key, value) | ||
| 31 | + notice := &domain.ObjectNotice{} | ||
| 32 | + err := json.Unmarshal([]byte(value), notice) | ||
| 33 | + if err != nil { | ||
| 34 | + return err | ||
| 35 | + } | ||
| 36 | + //保存推送消息 | ||
| 37 | + _, err = logic.svcCtx.ObjectNoticeRepository.Insert(logic.ctx, logic.conn, notice) | ||
| 38 | + if err != nil { | ||
| 39 | + return err | ||
| 40 | + } | ||
| 41 | + //处理消息 | ||
| 42 | + err = logic.handleNotice(notice) | ||
| 43 | + //更新处理结果 | ||
| 44 | + if err != nil { | ||
| 45 | + notice.Status = domain.ObjectNoticeStatusError | ||
| 46 | + notice.Message = err.Error() | ||
| 47 | + } else { | ||
| 48 | + notice.Status = domain.ObjectNoticeStatusDone | ||
| 49 | + notice.Message = "OK" | ||
| 50 | + } | ||
| 51 | + _, _ = logic.svcCtx.ObjectNoticeRepository.Update(logic.ctx, logic.conn, notice) | ||
| 52 | + return err | ||
| 53 | +} | ||
| 54 | + | ||
| 55 | +// handleNotice 处理消息 | ||
| 56 | +func (logic *ByteNoticeLogic) handleNotice(notice *domain.ObjectNotice) error { | ||
| 57 | + //是否删除消息 | ||
| 58 | + if notice.IsDeletedEvent() { | ||
| 59 | + return logic.handleDelete(notice) | ||
| 60 | + } | ||
| 61 | + accessToken, _ := types.TableAccessToken{CompanyId: notice.CompanyId}.GenerateToken() | ||
| 62 | + //结构变更 | ||
| 63 | + if notice.StructChanged { | ||
| 64 | + request := bytelib.ObjectTableSearchRequest{ | ||
| 65 | + Token: accessToken, | ||
| 66 | + Module: bytelib.ModuleDigitalCenter, | ||
| 67 | + } | ||
| 68 | + if notice.ObjectType == "导入模块" { | ||
| 69 | + request.TableTypes = []string{bytelib.MainTable, bytelib.SubTable, bytelib.SideTable} | ||
| 70 | + } | ||
| 71 | + if notice.ObjectType == "拆解模块" { | ||
| 72 | + request.TableTypes = []string{bytelib.SchemaTable} | ||
| 73 | + request.ReturnGroupItem = true | ||
| 74 | + } | ||
| 75 | + if notice.ObjectType == "计算模块" { | ||
| 76 | + request.TableTypes = []string{bytelib.CalculateItem, bytelib.CalculateSet} | ||
| 77 | + request.ReturnGroupItem = true | ||
| 78 | + request.ExcludeTables = []int{0} | ||
| 79 | + } | ||
| 80 | + list, err := logic.svcCtx.ByteMetadataService.ObjectTableSearch(logic.ctx, request) | ||
| 81 | + if err != nil { | ||
| 82 | + return err | ||
| 83 | + } | ||
| 84 | + tableInfo, err := logic.svcCtx.ByteMetadataService.TableInfo(logic.ctx, &bytelib.TableInfoRequest{ | ||
| 85 | + Token: accessToken, | ||
| 86 | + TableId: notice.TableId, | ||
| 87 | + }) | ||
| 88 | + if err != nil { | ||
| 89 | + return nil | ||
| 90 | + } | ||
| 91 | + if len(list.List) > 0 { | ||
| 92 | + objectTables := make([]*domain.ObjectTable, 0) | ||
| 93 | + for _, item := range list.List { | ||
| 94 | + if item.TableId == notice.TableId { | ||
| 95 | + objectTables = append(objectTables, &domain.ObjectTable{ | ||
| 96 | + Id: item.Id, | ||
| 97 | + TableId: item.TableId, | ||
| 98 | + Name: item.Name, | ||
| 99 | + TableType: item.TableType, | ||
| 100 | + CompanyId: notice.CompanyId, | ||
| 101 | + ParentId: item.ParentId, | ||
| 102 | + Flag: item.Flag, | ||
| 103 | + Fields: tableInfo.Fields, | ||
| 104 | + }) | ||
| 105 | + //父级节点 | ||
| 106 | + objectTables = append(objectTables, logic.getParents(notice.CompanyId, item.ParentId, list.List)...) | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + err = logic.saveTables(objectTables) | ||
| 110 | + if err != nil { | ||
| 111 | + return err | ||
| 112 | + } | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + //数据变更 | ||
| 116 | + if notice.DataChanged { | ||
| 117 | + tableDataPreview, err := logic.svcCtx.ByteMetadataService.TableDataPreview(logic.ctx, &bytelib.TableDataPreviewRequest{ | ||
| 118 | + Token: accessToken, | ||
| 119 | + ObjectId: int64(notice.TableId), | ||
| 120 | + ObjectType: bytelib.ObjectMetaTable, | ||
| 121 | + Where: &bytelib.TableQueryWhere{ | ||
| 122 | + PageNumber: 1, | ||
| 123 | + PageSize: bytelib.MaxPageSize, | ||
| 124 | + }, | ||
| 125 | + UseCache: true, | ||
| 126 | + HiddenData: false, | ||
| 127 | + }) | ||
| 128 | + if err != nil { | ||
| 129 | + return err | ||
| 130 | + } | ||
| 131 | + //加锁,避免图表在请求读取本地数据时报错 | ||
| 132 | + key := logic.svcCtx.Config.Name + ":bytelib:" + fmt.Sprintf("%v", tableDataPreview.ObjectId) | ||
| 133 | + lock := redis.NewRedisLock(logic.svcCtx.Redis, key) | ||
| 134 | + // 设置过期时间 | ||
| 135 | + lock.SetExpire(10 * 60) | ||
| 136 | + acquire, err := lock.Acquire() | ||
| 137 | + fmt.Println(acquire, err) | ||
| 138 | + defer lock.Release() | ||
| 139 | + err = transaction.UseTrans(logic.ctx, logic.conn.DB(), func(ctx context.Context, conn transaction.Conn) error { | ||
| 140 | + return logic.svcCtx.ObjectTableDataRepository.InsertWithTableData(logic.ctx, conn, bytelib.TableData(tableDataPreview)) | ||
| 141 | + }, true) | ||
| 142 | + fmt.Println(err) | ||
| 143 | + } | ||
| 144 | + return nil | ||
| 145 | +} | ||
| 146 | + | ||
| 147 | +func (logic *ByteNoticeLogic) getParents(companyId int64, parentId int, list []*bytelib.Table) []*domain.ObjectTable { | ||
| 148 | + result := make([]*domain.ObjectTable, 0) | ||
| 149 | + for _, item := range list { | ||
| 150 | + if item.Id == parentId { | ||
| 151 | + result = append(result, &domain.ObjectTable{ | ||
| 152 | + Id: item.Id, | ||
| 153 | + TableId: item.TableId, | ||
| 154 | + Name: item.Name, | ||
| 155 | + TableType: item.TableType, | ||
| 156 | + CompanyId: companyId, | ||
| 157 | + ParentId: item.ParentId, | ||
| 158 | + Flag: item.Flag, | ||
| 159 | + Fields: item.Fields, | ||
| 160 | + }) | ||
| 161 | + if item.ParentId > 0 { | ||
| 162 | + result = append(result, logic.getParents(companyId, item.ParentId, list)...) | ||
| 163 | + } | ||
| 164 | + } | ||
| 165 | + } | ||
| 166 | + return result | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +// handleDelete 删除 | ||
| 170 | +func (logic *ByteNoticeLogic) handleDelete(notice *domain.ObjectNotice) error { | ||
| 171 | + objectTable, err := logic.svcCtx.ObjectTableRepository.FindOneByTableId(logic.ctx, logic.conn, notice.TableId) | ||
| 172 | + if err == nil && objectTable.Id > 0 { | ||
| 173 | + objectTable.RemoteDeleted = 1 | ||
| 174 | + _, err := logic.svcCtx.ObjectTableRepository.Update(logic.ctx, logic.conn, objectTable) | ||
| 175 | + if err != nil { | ||
| 176 | + return err | ||
| 177 | + } | ||
| 178 | + } | ||
| 179 | + return nil | ||
| 180 | +} | ||
| 181 | + | ||
| 182 | +// saveTables 保存表结构 | ||
| 183 | +func (logic *ByteNoticeLogic) saveTables(tables []*domain.ObjectTable) error { | ||
| 184 | + err := transaction.UseTrans(logic.ctx, logic.conn.DB(), func(ctx context.Context, conn transaction.Conn) error { | ||
| 185 | + if len(tables) > 0 { | ||
| 186 | + for _, item := range tables { | ||
| 187 | + objectTable, err := logic.svcCtx.ObjectTableRepository.FindOne(logic.ctx, conn, item.Id) | ||
| 188 | + if err == nil && objectTable.Id > 0 { | ||
| 189 | + item.Id = objectTable.Id | ||
| 190 | + _, err := logic.svcCtx.ObjectTableRepository.Update(logic.ctx, conn, item) | ||
| 191 | + if err != nil { | ||
| 192 | + return err | ||
| 193 | + } | ||
| 194 | + } else { | ||
| 195 | + _, err := logic.svcCtx.ObjectTableRepository.Insert(logic.ctx, conn, item) | ||
| 196 | + if err != nil { | ||
| 197 | + return err | ||
| 198 | + } | ||
| 199 | + } | ||
| 200 | + } | ||
| 201 | + } | ||
| 202 | + return nil | ||
| 203 | + }, true) | ||
| 204 | + return err | ||
| 205 | +} |
| @@ -22,6 +22,9 @@ type ServiceContext struct { | @@ -22,6 +22,9 @@ type ServiceContext struct { | ||
| 22 | ChartRepository domain.ChartRepository | 22 | ChartRepository domain.ChartRepository |
| 23 | ChartSettingRepository domain.ChartSettingRepository | 23 | ChartSettingRepository domain.ChartSettingRepository |
| 24 | AppPageRepository domain.AppPageRepository | 24 | AppPageRepository domain.AppPageRepository |
| 25 | + ObjectNoticeRepository domain.ObjectNoticeRepository | ||
| 26 | + ObjectTableRepository domain.ObjectTableRepository | ||
| 27 | + ObjectTableDataRepository domain.ObjectTableDataRepository | ||
| 25 | 28 | ||
| 26 | ByteMetadataService bytelib.ByteMetadataService | 29 | ByteMetadataService bytelib.ByteMetadataService |
| 27 | } | 30 | } |
| @@ -40,6 +43,9 @@ func NewServiceContext(c config.Config) *ServiceContext { | @@ -40,6 +43,9 @@ func NewServiceContext(c config.Config) *ServiceContext { | ||
| 40 | ChartRepository: repository.NewChartRepository(cache.NewCachedRepository(mlCache)), | 43 | ChartRepository: repository.NewChartRepository(cache.NewCachedRepository(mlCache)), |
| 41 | ChartSettingRepository: repository.NewChartSettingRepository(cache.NewCachedRepository(mlCache)), | 44 | ChartSettingRepository: repository.NewChartSettingRepository(cache.NewCachedRepository(mlCache)), |
| 42 | AppPageRepository: repository.NewAppPageRepository(cache.NewCachedRepository(mlCache)), | 45 | AppPageRepository: repository.NewAppPageRepository(cache.NewCachedRepository(mlCache)), |
| 46 | + ObjectNoticeRepository: repository.NewObjectNoticeRepository(cache.NewCachedRepository(mlCache)), | ||
| 47 | + ObjectTableRepository: repository.NewObjectTableRepository(cache.NewCachedRepository(mlCache)), | ||
| 48 | + ObjectTableDataRepository: repository.NewObjectTableDataRepository(), | ||
| 43 | 49 | ||
| 44 | ByteMetadataService: bytelib.ByteMetadataService{ | 50 | ByteMetadataService: bytelib.ByteMetadataService{ |
| 45 | Service: gateway.NewService(c.ByteMetadata.Name, c.ByteMetadata.Host, c.ByteMetadata.Timeout), | 51 | Service: gateway.NewService(c.ByteMetadata.Name, c.ByteMetadata.Host, c.ByteMetadata.Timeout), |
| 1 | package types | 1 | package types |
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/golang-jwt/jwt/v4" | ||
| 5 | + "time" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type TableAccessToken struct { | ||
| 9 | + UserId int64 `json:"userId"` | ||
| 10 | + CompanyId int64 `json:"companyId"` | ||
| 11 | + UserName string `json:"userName"` | ||
| 12 | + Phone string `json:"phone"` | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +func (tk TableAccessToken) GenerateToken() (string, error) { | ||
| 16 | + claims := make(jwt.MapClaims) | ||
| 17 | + claims["exp"] = time.Now().Unix() + 3600 | ||
| 18 | + claims["iat"] = time.Now().Unix() | ||
| 19 | + claims["UserId"] = tk.UserId | ||
| 20 | + claims["CompanyId"] = tk.CompanyId | ||
| 21 | + claims["UserName"] = tk.UserName | ||
| 22 | + claims["Phone"] = tk.Phone | ||
| 23 | + token := jwt.New(jwt.SigningMethodHS256) | ||
| 24 | + token.Claims = claims | ||
| 25 | + return token.SignedString([]byte("digital-platform")) | ||
| 26 | +} |
| 1 | + | ||
| 2 | +syntax = "v1" | ||
| 3 | + | ||
| 4 | +info( | ||
| 5 | + title: "xx实例" | ||
| 6 | + desc: "xx实例" | ||
| 7 | + author: "author" | ||
| 8 | + email: "email" | ||
| 9 | + version: "v1" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +@server( | ||
| 13 | + prefix: object_field/v1 | ||
| 14 | + group: object_field | ||
| 15 | + jwt: JwtAuth | ||
| 16 | +) | ||
| 17 | +service Core { | ||
| 18 | + @handler getObjectField | ||
| 19 | + post /object_field/:id (ObjectFieldGetRequest) returns (ObjectFieldGetResponse) | ||
| 20 | + @handler saveObjectField | ||
| 21 | + post /object_field (ObjectFieldSaveRequest) returns (ObjectFieldSaveResponse) | ||
| 22 | + @handler deleteObjectField | ||
| 23 | + delete /object_field/:id (ObjectFieldDeleteRequest) returns (ObjectFieldDeleteResponse) | ||
| 24 | + @handler updateObjectField | ||
| 25 | + put /object_field/:id (ObjectFieldUpdateRequest) returns (ObjectFieldUpdateResponse) | ||
| 26 | + @handler searchObjectField | ||
| 27 | + post /object_field/search (ObjectFieldSearchRequest) returns (ObjectFieldSearchResponse) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +type ( | ||
| 31 | + ObjectFieldGetRequest { | ||
| 32 | + Id int64 `path:"id"` | ||
| 33 | + } | ||
| 34 | + ObjectFieldGetResponse struct{ | ||
| 35 | + ObjectField ObjectFieldItem `json:"object_field"` | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + ObjectFieldSaveRequest struct{ | ||
| 39 | + ObjectField ObjectFieldItem `json:"object_field"` | ||
| 40 | + } | ||
| 41 | + ObjectFieldSaveResponse struct{} | ||
| 42 | + | ||
| 43 | + ObjectFieldDeleteRequest struct{ | ||
| 44 | + Id int64 `path:"id"` | ||
| 45 | + } | ||
| 46 | + ObjectFieldDeleteResponse struct{} | ||
| 47 | + | ||
| 48 | + ObjectFieldUpdateRequest struct{ | ||
| 49 | + Id int64 `path:"id"` | ||
| 50 | + ObjectField ObjectFieldItem `json:"object_field"` | ||
| 51 | + } | ||
| 52 | + ObjectFieldUpdateResponse struct{} | ||
| 53 | + | ||
| 54 | + ObjectFieldSearchRequest struct{ | ||
| 55 | + Page int `json:"page"` | ||
| 56 | + Size int `json:"size"` | ||
| 57 | + } | ||
| 58 | + ObjectFieldSearchResponse{ | ||
| 59 | + List []ObjectFieldItem `json:"list"` | ||
| 60 | + Total int64 `json:"total"` | ||
| 61 | + } | ||
| 62 | + ObjectFieldItem struct{ | ||
| 63 | + | ||
| 64 | + } | ||
| 65 | +) |
| 1 | + | ||
| 2 | +syntax = "v1" | ||
| 3 | + | ||
| 4 | +info( | ||
| 5 | + title: "xx实例" | ||
| 6 | + desc: "xx实例" | ||
| 7 | + author: "author" | ||
| 8 | + email: "email" | ||
| 9 | + version: "v1" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +@server( | ||
| 13 | + prefix: object_notice/v1 | ||
| 14 | + group: object_notice | ||
| 15 | + jwt: JwtAuth | ||
| 16 | +) | ||
| 17 | +service Core { | ||
| 18 | + @handler getObjectNotice | ||
| 19 | + post /object_notice/:id (ObjectNoticeGetRequest) returns (ObjectNoticeGetResponse) | ||
| 20 | + @handler saveObjectNotice | ||
| 21 | + post /object_notice (ObjectNoticeSaveRequest) returns (ObjectNoticeSaveResponse) | ||
| 22 | + @handler deleteObjectNotice | ||
| 23 | + delete /object_notice/:id (ObjectNoticeDeleteRequest) returns (ObjectNoticeDeleteResponse) | ||
| 24 | + @handler updateObjectNotice | ||
| 25 | + put /object_notice/:id (ObjectNoticeUpdateRequest) returns (ObjectNoticeUpdateResponse) | ||
| 26 | + @handler searchObjectNotice | ||
| 27 | + post /object_notice/search (ObjectNoticeSearchRequest) returns (ObjectNoticeSearchResponse) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +type ( | ||
| 31 | + ObjectNoticeGetRequest { | ||
| 32 | + Id int64 `path:"id"` | ||
| 33 | + } | ||
| 34 | + ObjectNoticeGetResponse struct{ | ||
| 35 | + ObjectNotice ObjectNoticeItem `json:"object_notice"` | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + ObjectNoticeSaveRequest struct{ | ||
| 39 | + ObjectNotice ObjectNoticeItem `json:"object_notice"` | ||
| 40 | + } | ||
| 41 | + ObjectNoticeSaveResponse struct{} | ||
| 42 | + | ||
| 43 | + ObjectNoticeDeleteRequest struct{ | ||
| 44 | + Id int64 `path:"id"` | ||
| 45 | + } | ||
| 46 | + ObjectNoticeDeleteResponse struct{} | ||
| 47 | + | ||
| 48 | + ObjectNoticeUpdateRequest struct{ | ||
| 49 | + Id int64 `path:"id"` | ||
| 50 | + ObjectNotice ObjectNoticeItem `json:"object_notice"` | ||
| 51 | + } | ||
| 52 | + ObjectNoticeUpdateResponse struct{} | ||
| 53 | + | ||
| 54 | + ObjectNoticeSearchRequest struct{ | ||
| 55 | + Page int `json:"page"` | ||
| 56 | + Size int `json:"size"` | ||
| 57 | + } | ||
| 58 | + ObjectNoticeSearchResponse{ | ||
| 59 | + List []ObjectNoticeItem `json:"list"` | ||
| 60 | + Total int64 `json:"total"` | ||
| 61 | + } | ||
| 62 | + ObjectNoticeItem struct{ | ||
| 63 | + | ||
| 64 | + } | ||
| 65 | +) |
| 1 | + | ||
| 2 | +syntax = "v1" | ||
| 3 | + | ||
| 4 | +info( | ||
| 5 | + title: "xx实例" | ||
| 6 | + desc: "xx实例" | ||
| 7 | + author: "author" | ||
| 8 | + email: "email" | ||
| 9 | + version: "v1" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +@server( | ||
| 13 | + prefix: object_table/v1 | ||
| 14 | + group: object_table | ||
| 15 | + jwt: JwtAuth | ||
| 16 | +) | ||
| 17 | +service Core { | ||
| 18 | + @handler getObjectTable | ||
| 19 | + post /object_table/:id (ObjectTableGetRequest) returns (ObjectTableGetResponse) | ||
| 20 | + @handler saveObjectTable | ||
| 21 | + post /object_table (ObjectTableSaveRequest) returns (ObjectTableSaveResponse) | ||
| 22 | + @handler deleteObjectTable | ||
| 23 | + delete /object_table/:id (ObjectTableDeleteRequest) returns (ObjectTableDeleteResponse) | ||
| 24 | + @handler updateObjectTable | ||
| 25 | + put /object_table/:id (ObjectTableUpdateRequest) returns (ObjectTableUpdateResponse) | ||
| 26 | + @handler searchObjectTable | ||
| 27 | + post /object_table/search (ObjectTableSearchRequest) returns (ObjectTableSearchResponse) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +type ( | ||
| 31 | + ObjectTableGetRequest { | ||
| 32 | + Id int64 `path:"id"` | ||
| 33 | + } | ||
| 34 | + ObjectTableGetResponse struct{ | ||
| 35 | + ObjectTable ObjectTableItem `json:"object_table"` | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + ObjectTableSaveRequest struct{ | ||
| 39 | + ObjectTable ObjectTableItem `json:"object_table"` | ||
| 40 | + } | ||
| 41 | + ObjectTableSaveResponse struct{} | ||
| 42 | + | ||
| 43 | + ObjectTableDeleteRequest struct{ | ||
| 44 | + Id int64 `path:"id"` | ||
| 45 | + } | ||
| 46 | + ObjectTableDeleteResponse struct{} | ||
| 47 | + | ||
| 48 | + ObjectTableUpdateRequest struct{ | ||
| 49 | + Id int64 `path:"id"` | ||
| 50 | + ObjectTable ObjectTableItem `json:"object_table"` | ||
| 51 | + } | ||
| 52 | + ObjectTableUpdateResponse struct{} | ||
| 53 | + | ||
| 54 | + ObjectTableSearchRequest struct{ | ||
| 55 | + Page int `json:"page"` | ||
| 56 | + Size int `json:"size"` | ||
| 57 | + } | ||
| 58 | + ObjectTableSearchResponse{ | ||
| 59 | + List []ObjectTableItem `json:"list"` | ||
| 60 | + Total int64 `json:"total"` | ||
| 61 | + } | ||
| 62 | + ObjectTableItem struct{ | ||
| 63 | + | ||
| 64 | + } | ||
| 65 | +) |
| 1 | + | ||
| 2 | +syntax = "proto3"; | ||
| 3 | + | ||
| 4 | +option go_package ="./pb"; | ||
| 5 | + | ||
| 6 | +package pb; | ||
| 7 | + | ||
| 8 | +message ObjectFieldGetReq { | ||
| 9 | + int64 Id = 1; | ||
| 10 | +} | ||
| 11 | +message ObjectFieldGetResp{ | ||
| 12 | + ObjectFieldItem User = 1; | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +message ObjectFieldSaveReq { | ||
| 16 | + | ||
| 17 | +} | ||
| 18 | +message ObjectFieldSaveResp{ | ||
| 19 | + | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +message ObjectFieldDeleteReq { | ||
| 23 | + int64 Id = 1; | ||
| 24 | +} | ||
| 25 | +message ObjectFieldDeleteResp{ | ||
| 26 | + | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +message ObjectFieldUpdateReq { | ||
| 30 | + int64 Id = 1; | ||
| 31 | +} | ||
| 32 | +message ObjectFieldUpdateResp{ | ||
| 33 | + | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +message ObjectFieldSearchReq { | ||
| 37 | + int64 PageNumber = 1; | ||
| 38 | + int64 PageSize = 2; | ||
| 39 | +} | ||
| 40 | +message ObjectFieldSearchResp{ | ||
| 41 | + repeated ObjectFieldItem List =1; | ||
| 42 | + int64 Total =2; | ||
| 43 | +} | ||
| 44 | +message ObjectFieldItem { | ||
| 45 | + | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +service ObjectFieldService { | ||
| 49 | + rpc ObjectFieldGet(ObjectFieldGetReq) returns(ObjectFieldGetResp); | ||
| 50 | + rpc ObjectFieldSave(ObjectFieldSaveReq) returns(ObjectFieldSaveResp); | ||
| 51 | + rpc ObjectFieldDelete(ObjectFieldDeleteReq) returns(ObjectFieldDeleteResp); | ||
| 52 | + rpc ObjectFieldUpdate(ObjectFieldUpdateReq) returns(ObjectFieldUpdateResp); | ||
| 53 | + rpc ObjectFieldSearch(ObjectFieldSearchReq) returns(ObjectFieldSearchResp); | ||
| 54 | +} |
| 1 | + | ||
| 2 | +syntax = "proto3"; | ||
| 3 | + | ||
| 4 | +option go_package ="./pb"; | ||
| 5 | + | ||
| 6 | +package pb; | ||
| 7 | + | ||
| 8 | +message ObjectNoticeGetReq { | ||
| 9 | + int64 Id = 1; | ||
| 10 | +} | ||
| 11 | +message ObjectNoticeGetResp{ | ||
| 12 | + ObjectNoticeItem User = 1; | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +message ObjectNoticeSaveReq { | ||
| 16 | + | ||
| 17 | +} | ||
| 18 | +message ObjectNoticeSaveResp{ | ||
| 19 | + | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +message ObjectNoticeDeleteReq { | ||
| 23 | + int64 Id = 1; | ||
| 24 | +} | ||
| 25 | +message ObjectNoticeDeleteResp{ | ||
| 26 | + | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +message ObjectNoticeUpdateReq { | ||
| 30 | + int64 Id = 1; | ||
| 31 | +} | ||
| 32 | +message ObjectNoticeUpdateResp{ | ||
| 33 | + | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +message ObjectNoticeSearchReq { | ||
| 37 | + int64 PageNumber = 1; | ||
| 38 | + int64 PageSize = 2; | ||
| 39 | +} | ||
| 40 | +message ObjectNoticeSearchResp{ | ||
| 41 | + repeated ObjectNoticeItem List =1; | ||
| 42 | + int64 Total =2; | ||
| 43 | +} | ||
| 44 | +message ObjectNoticeItem { | ||
| 45 | + | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +service ObjectNoticeService { | ||
| 49 | + rpc ObjectNoticeGet(ObjectNoticeGetReq) returns(ObjectNoticeGetResp); | ||
| 50 | + rpc ObjectNoticeSave(ObjectNoticeSaveReq) returns(ObjectNoticeSaveResp); | ||
| 51 | + rpc ObjectNoticeDelete(ObjectNoticeDeleteReq) returns(ObjectNoticeDeleteResp); | ||
| 52 | + rpc ObjectNoticeUpdate(ObjectNoticeUpdateReq) returns(ObjectNoticeUpdateResp); | ||
| 53 | + rpc ObjectNoticeSearch(ObjectNoticeSearchReq) returns(ObjectNoticeSearchResp); | ||
| 54 | +} |
| 1 | + | ||
| 2 | +syntax = "proto3"; | ||
| 3 | + | ||
| 4 | +option go_package ="./pb"; | ||
| 5 | + | ||
| 6 | +package pb; | ||
| 7 | + | ||
| 8 | +message ObjectTableGetReq { | ||
| 9 | + int64 Id = 1; | ||
| 10 | +} | ||
| 11 | +message ObjectTableGetResp{ | ||
| 12 | + ObjectTableItem User = 1; | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +message ObjectTableSaveReq { | ||
| 16 | + | ||
| 17 | +} | ||
| 18 | +message ObjectTableSaveResp{ | ||
| 19 | + | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +message ObjectTableDeleteReq { | ||
| 23 | + int64 Id = 1; | ||
| 24 | +} | ||
| 25 | +message ObjectTableDeleteResp{ | ||
| 26 | + | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +message ObjectTableUpdateReq { | ||
| 30 | + int64 Id = 1; | ||
| 31 | +} | ||
| 32 | +message ObjectTableUpdateResp{ | ||
| 33 | + | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +message ObjectTableSearchReq { | ||
| 37 | + int64 PageNumber = 1; | ||
| 38 | + int64 PageSize = 2; | ||
| 39 | +} | ||
| 40 | +message ObjectTableSearchResp{ | ||
| 41 | + repeated ObjectTableItem List =1; | ||
| 42 | + int64 Total =2; | ||
| 43 | +} | ||
| 44 | +message ObjectTableItem { | ||
| 45 | + | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +service ObjectTableService { | ||
| 49 | + rpc ObjectTableGet(ObjectTableGetReq) returns(ObjectTableGetResp); | ||
| 50 | + rpc ObjectTableSave(ObjectTableSaveReq) returns(ObjectTableSaveResp); | ||
| 51 | + rpc ObjectTableDelete(ObjectTableDeleteReq) returns(ObjectTableDeleteResp); | ||
| 52 | + rpc ObjectTableUpdate(ObjectTableUpdateReq) returns(ObjectTableUpdateResp); | ||
| 53 | + rpc ObjectTableSearch(ObjectTableSearchReq) returns(ObjectTableSearchResp); | ||
| 54 | +} |
| @@ -10,5 +10,7 @@ func Migrate(db *gorm.DB) { | @@ -10,5 +10,7 @@ func Migrate(db *gorm.DB) { | ||
| 10 | &models.Chart{}, | 10 | &models.Chart{}, |
| 11 | &models.ChartSetting{}, | 11 | &models.ChartSetting{}, |
| 12 | &models.AppPage{}, | 12 | &models.AppPage{}, |
| 13 | + &models.ObjectNotice{}, | ||
| 14 | + &models.ObjectTable{}, | ||
| 13 | ) | 15 | ) |
| 14 | } | 16 | } |
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/gateway/bytelib" | ||
| 7 | + "gorm.io/gorm" | ||
| 8 | + "gorm.io/plugin/soft_delete" | ||
| 9 | + "time" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type ObjectField struct { | ||
| 13 | + Id int64 `json:"id" gorm:"primaryKey"` // ID | ||
| 14 | + Name string `json:"name"` //表名 | ||
| 15 | + Fields []*bytelib.Field `json:"fields"` //表字段 | ||
| 16 | + Version int `json:",omitempty"` //版本 | ||
| 17 | + IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` //删除标记 | ||
| 18 | + CreatedAt int64 `json:",omitempty"` //创建时间 | ||
| 19 | + UpdatedAt int64 `json:",omitempty"` //更新时间 | ||
| 20 | + DeletedAt int64 `json:",omitempty"` //删除时间 | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (m *ObjectField) TableName() string { | ||
| 24 | + return "object_field" | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func (m *ObjectField) BeforeCreate(tx *gorm.DB) (err error) { | ||
| 28 | + m.CreatedAt = time.Now().Unix() | ||
| 29 | + m.UpdatedAt = time.Now().Unix() | ||
| 30 | + return | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func (m *ObjectField) BeforeUpdate(tx *gorm.DB) (err error) { | ||
| 34 | + m.UpdatedAt = time.Now().Unix() | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +func (m *ObjectField) CacheKeyFunc() string { | ||
| 39 | + if m.Id == 0 { | ||
| 40 | + return "" | ||
| 41 | + } | ||
| 42 | + return fmt.Sprintf("%v:cache:%v:id:%v", domain.ProjectName, m.TableName(), m.Id) | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +func (m *ObjectField) CacheKeyFuncByObject(obj interface{}) string { | ||
| 46 | + if v, ok := obj.(*ObjectField); ok { | ||
| 47 | + return v.CacheKeyFunc() | ||
| 48 | + } | ||
| 49 | + return "" | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +func (m *ObjectField) CachePrimaryKeyFunc() string { | ||
| 53 | + if len("") == 0 { | ||
| 54 | + return "" | ||
| 55 | + } | ||
| 56 | + return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key") | ||
| 57 | +} |
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | ||
| 6 | + "gorm.io/gorm" | ||
| 7 | + "gorm.io/plugin/soft_delete" | ||
| 8 | + "time" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +type ObjectNotice struct { | ||
| 12 | + Id int64 `json:"id" gorm:"primaryKey"` // ID | ||
| 13 | + CompanyId int64 `json:"companyId"` //公司ID | ||
| 14 | + TableId int64 `json:"tableId"` //表ID | ||
| 15 | + TableType string `json:"tableType"` //表类型 导入模块(主表、附表、分表) 拆解(方案、子过程、计算表) 计算(计算项、计算集) | ||
| 16 | + ObjectType string `json:"objectType"` //模块 导入模块、拆解模块、计算模块 | ||
| 17 | + Event string `json:"event"` //事件 | ||
| 18 | + TableAffectedList []int `json:"TableAffectedList" gorm:"serializer:json"` //级联影响到的表 | ||
| 19 | + DataChanged bool `json:"dataChanged"` //数据有更新 | ||
| 20 | + StructChanged bool `json:"structChanged"` //结构有更新 | ||
| 21 | + Status int `json:"status" gorm:"index:idx_object_notice_status"` //状态 1-等待处理 2-处理完成 3-处理失败 | ||
| 22 | + Message string `json:"message"` //错误信息 | ||
| 23 | + Retry int `json:"retry" gorm:"default:0"` //重试次数 | ||
| 24 | + MetaData domain.ObjectNoticeMetaData `json:"metaData" gorm:"serializer:json"` //模块信息 | ||
| 25 | + Version int `json:",omitempty"` //版本 | ||
| 26 | + IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` //删除标记 | ||
| 27 | + CreatedAt int64 `json:",omitempty"` //创建时间 | ||
| 28 | + UpdatedAt int64 `json:",omitempty"` //更新时间 | ||
| 29 | + DeletedAt int64 `json:",omitempty"` //删除时间 | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +func (m *ObjectNotice) TableName() string { | ||
| 33 | + return "object_notice" | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +func (m *ObjectNotice) BeforeCreate(tx *gorm.DB) (err error) { | ||
| 37 | + m.CreatedAt = time.Now().Unix() | ||
| 38 | + m.UpdatedAt = time.Now().Unix() | ||
| 39 | + return | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +func (m *ObjectNotice) BeforeUpdate(tx *gorm.DB) (err error) { | ||
| 43 | + m.UpdatedAt = time.Now().Unix() | ||
| 44 | + return | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +func (m *ObjectNotice) CacheKeyFunc() string { | ||
| 48 | + if m.Id == 0 { | ||
| 49 | + return "" | ||
| 50 | + } | ||
| 51 | + return fmt.Sprintf("%v:cache:%v:id:%v", domain.ProjectName, m.TableName(), m.Id) | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (m *ObjectNotice) CacheKeyFuncByObject(obj interface{}) string { | ||
| 55 | + if v, ok := obj.(*ObjectNotice); ok { | ||
| 56 | + return v.CacheKeyFunc() | ||
| 57 | + } | ||
| 58 | + return "" | ||
| 59 | +} | ||
| 60 | + | ||
| 61 | +func (m *ObjectNotice) CachePrimaryKeyFunc() string { | ||
| 62 | + if len("") == 0 { | ||
| 63 | + return "" | ||
| 64 | + } | ||
| 65 | + return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key") | ||
| 66 | +} |
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/gateway/bytelib" | ||
| 7 | + "gorm.io/gorm" | ||
| 8 | + "gorm.io/plugin/soft_delete" | ||
| 9 | + "time" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type ObjectTable struct { | ||
| 13 | + Id int `json:"id" gorm:"primaryKey"` // ID | ||
| 14 | + TableId int `json:"tableId" gorm:"index:idx_object_table_id"` //表ID | ||
| 15 | + Name string `json:"name"` //表名 | ||
| 16 | + TableType string `json:"tableType" gorm:"index:idx_object_table_type"` //模块 | ||
| 17 | + CompanyId int64 `json:"companyId" gorm:"index:idx_object_table_company"` //公司id | ||
| 18 | + ParentId int `json:"parentId" gorm:"default:0"` //父id | ||
| 19 | + Flag string `json:"flag"` //分组:Group 集合:Set | ||
| 20 | + Version int `json:",omitempty"` //版本 | ||
| 21 | + Fields []*bytelib.Field `json:"fields" gorm:"serializer:json"` //表字段 | ||
| 22 | + RemoteDeleted int `json:"remoteDeleted"` //远端删除 | ||
| 23 | + IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` //删除标记 | ||
| 24 | + CreatedAt int64 `json:",omitempty"` //创建时间 | ||
| 25 | + UpdatedAt int64 `json:",omitempty"` //更新时间 | ||
| 26 | + DeletedAt int64 `json:",omitempty"` //删除时间 | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func (m *ObjectTable) TableName() string { | ||
| 30 | + return "object_table" | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func (m *ObjectTable) BeforeCreate(tx *gorm.DB) (err error) { | ||
| 34 | + m.CreatedAt = time.Now().Unix() | ||
| 35 | + m.UpdatedAt = time.Now().Unix() | ||
| 36 | + return | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +func (m *ObjectTable) BeforeUpdate(tx *gorm.DB) (err error) { | ||
| 40 | + m.UpdatedAt = time.Now().Unix() | ||
| 41 | + return | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +func (m *ObjectTable) CacheKeyFunc() string { | ||
| 45 | + if m.Id == 0 { | ||
| 46 | + return "" | ||
| 47 | + } | ||
| 48 | + return fmt.Sprintf("%v:cache:%v:id:%v", domain.ProjectName, m.TableName(), m.Id) | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +func (m *ObjectTable) CacheKeyFuncByObject(obj interface{}) string { | ||
| 52 | + if v, ok := obj.(*ObjectTable); ok { | ||
| 53 | + return v.CacheKeyFunc() | ||
| 54 | + } | ||
| 55 | + return "" | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +func (m *ObjectTable) CachePrimaryKeyFunc() string { | ||
| 59 | + if len("") == 0 { | ||
| 60 | + return "" | ||
| 61 | + } | ||
| 62 | + return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key") | ||
| 63 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/jinzhu/copier" | ||
| 6 | + "github.com/pkg/errors" | ||
| 7 | + "github.com/tiptok/gocomm/pkg/cache" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/models" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/transaction" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | ||
| 11 | + "gorm.io/gorm" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +type ObjectFieldRepository struct { | ||
| 15 | + *cache.CachedRepository | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (repository *ObjectFieldRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.ObjectField) (*domain.ObjectField, error) { | ||
| 19 | + var ( | ||
| 20 | + err error | ||
| 21 | + m = &models.ObjectField{} | ||
| 22 | + tx = conn.DB() | ||
| 23 | + ) | ||
| 24 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 25 | + return nil, err | ||
| 26 | + } | ||
| 27 | + if tx = tx.Model(m).Save(m); tx.Error != nil { | ||
| 28 | + return nil, tx.Error | ||
| 29 | + } | ||
| 30 | + dm.Id = m.Id | ||
| 31 | + return repository.ModelToDomainModel(m) | ||
| 32 | + | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (repository *ObjectFieldRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.ObjectField) (*domain.ObjectField, error) { | ||
| 36 | + var ( | ||
| 37 | + err error | ||
| 38 | + m *models.ObjectField | ||
| 39 | + tx = conn.DB() | ||
| 40 | + ) | ||
| 41 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 42 | + return nil, err | ||
| 43 | + } | ||
| 44 | + queryFunc := func() (interface{}, error) { | ||
| 45 | + tx = tx.Model(m).Updates(m) | ||
| 46 | + return nil, tx.Error | ||
| 47 | + } | ||
| 48 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 49 | + return nil, err | ||
| 50 | + } | ||
| 51 | + return repository.ModelToDomainModel(m) | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (repository *ObjectFieldRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.ObjectField) (*domain.ObjectField, error) { | ||
| 55 | + var ( | ||
| 56 | + err error | ||
| 57 | + m *models.ObjectField | ||
| 58 | + tx = transaction.DB() | ||
| 59 | + ) | ||
| 60 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 61 | + return nil, err | ||
| 62 | + } | ||
| 63 | + oldVersion := dm.Version | ||
| 64 | + m.Version += 1 | ||
| 65 | + queryFunc := func() (interface{}, error) { | ||
| 66 | + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m) | ||
| 67 | + if tx.RowsAffected == 0 { | ||
| 68 | + return nil, domain.ErrUpdateFail | ||
| 69 | + } | ||
| 70 | + return nil, tx.Error | ||
| 71 | + } | ||
| 72 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 73 | + return nil, err | ||
| 74 | + } | ||
| 75 | + return repository.ModelToDomainModel(m) | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +func (repository *ObjectFieldRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.ObjectField) (*domain.ObjectField, error) { | ||
| 79 | + var ( | ||
| 80 | + tx = conn.DB() | ||
| 81 | + m = &models.ObjectField{Id: dm.Identify().(int64)} | ||
| 82 | + ) | ||
| 83 | + queryFunc := func() (interface{}, error) { | ||
| 84 | + tx = tx.Where("id = ?", m.Id).Delete(m) | ||
| 85 | + return m, tx.Error | ||
| 86 | + } | ||
| 87 | + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 88 | + return dm, err | ||
| 89 | + } | ||
| 90 | + return repository.ModelToDomainModel(m) | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +func (repository *ObjectFieldRepository) FindOne(ctx context.Context, conn transaction.Conn, id int64) (*domain.ObjectField, error) { | ||
| 94 | + var ( | ||
| 95 | + err error | ||
| 96 | + tx = conn.DB() | ||
| 97 | + m = new(models.ObjectField) | ||
| 98 | + ) | ||
| 99 | + queryFunc := func() (interface{}, error) { | ||
| 100 | + tx = tx.Model(m).Where("id = ?", id).First(m) | ||
| 101 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 102 | + return nil, domain.ErrNotFound | ||
| 103 | + } | ||
| 104 | + return m, tx.Error | ||
| 105 | + } | ||
| 106 | + cacheModel := new(models.ObjectField) | ||
| 107 | + cacheModel.Id = id | ||
| 108 | + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil { | ||
| 109 | + return nil, err | ||
| 110 | + } | ||
| 111 | + return repository.ModelToDomainModel(m) | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +func (repository *ObjectFieldRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.ObjectField, error) { | ||
| 115 | + var ( | ||
| 116 | + tx = conn.DB() | ||
| 117 | + ms []*models.ObjectField | ||
| 118 | + dms = make([]*domain.ObjectField, 0) | ||
| 119 | + total int64 | ||
| 120 | + ) | ||
| 121 | + queryFunc := func() (interface{}, error) { | ||
| 122 | + tx = tx.Model(&ms).Order("id desc") | ||
| 123 | + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | ||
| 124 | + return dms, tx.Error | ||
| 125 | + } | ||
| 126 | + return dms, nil | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + if _, err := repository.Query(queryFunc); err != nil { | ||
| 130 | + return 0, nil, err | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + for _, item := range ms { | ||
| 134 | + if dm, err := repository.ModelToDomainModel(item); err != nil { | ||
| 135 | + return 0, dms, err | ||
| 136 | + } else { | ||
| 137 | + dms = append(dms, dm) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return total, dms, nil | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +func (repository *ObjectFieldRepository) ModelToDomainModel(from *models.ObjectField) (*domain.ObjectField, error) { | ||
| 144 | + to := &domain.ObjectField{} | ||
| 145 | + err := copier.Copy(to, from) | ||
| 146 | + return to, err | ||
| 147 | +} | ||
| 148 | + | ||
| 149 | +func (repository *ObjectFieldRepository) DomainModelToModel(from *domain.ObjectField) (*models.ObjectField, error) { | ||
| 150 | + to := &models.ObjectField{} | ||
| 151 | + err := copier.Copy(to, from) | ||
| 152 | + return to, err | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +func NewObjectFieldRepository(cache *cache.CachedRepository) domain.ObjectFieldRepository { | ||
| 156 | + return &ObjectFieldRepository{CachedRepository: cache} | ||
| 157 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/jinzhu/copier" | ||
| 6 | + "github.com/pkg/errors" | ||
| 7 | + "github.com/tiptok/gocomm/pkg/cache" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/models" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/transaction" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | ||
| 11 | + "gorm.io/gorm" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +type ObjectNoticeRepository struct { | ||
| 15 | + *cache.CachedRepository | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (repository *ObjectNoticeRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.ObjectNotice) (*domain.ObjectNotice, error) { | ||
| 19 | + var ( | ||
| 20 | + err error | ||
| 21 | + m = &models.ObjectNotice{} | ||
| 22 | + tx = conn.DB() | ||
| 23 | + ) | ||
| 24 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 25 | + return nil, err | ||
| 26 | + } | ||
| 27 | + if tx = tx.Model(m).Save(m); tx.Error != nil { | ||
| 28 | + return nil, tx.Error | ||
| 29 | + } | ||
| 30 | + dm.Id = m.Id | ||
| 31 | + return repository.ModelToDomainModel(m) | ||
| 32 | + | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (repository *ObjectNoticeRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.ObjectNotice) (*domain.ObjectNotice, error) { | ||
| 36 | + var ( | ||
| 37 | + err error | ||
| 38 | + m *models.ObjectNotice | ||
| 39 | + tx = conn.DB() | ||
| 40 | + ) | ||
| 41 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 42 | + return nil, err | ||
| 43 | + } | ||
| 44 | + queryFunc := func() (interface{}, error) { | ||
| 45 | + tx = tx.Model(m).Updates(m) | ||
| 46 | + return nil, tx.Error | ||
| 47 | + } | ||
| 48 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 49 | + return nil, err | ||
| 50 | + } | ||
| 51 | + return repository.ModelToDomainModel(m) | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (repository *ObjectNoticeRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.ObjectNotice) (*domain.ObjectNotice, error) { | ||
| 55 | + var ( | ||
| 56 | + err error | ||
| 57 | + m *models.ObjectNotice | ||
| 58 | + tx = transaction.DB() | ||
| 59 | + ) | ||
| 60 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 61 | + return nil, err | ||
| 62 | + } | ||
| 63 | + oldVersion := dm.Version | ||
| 64 | + m.Version += 1 | ||
| 65 | + queryFunc := func() (interface{}, error) { | ||
| 66 | + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m) | ||
| 67 | + if tx.RowsAffected == 0 { | ||
| 68 | + return nil, domain.ErrUpdateFail | ||
| 69 | + } | ||
| 70 | + return nil, tx.Error | ||
| 71 | + } | ||
| 72 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 73 | + return nil, err | ||
| 74 | + } | ||
| 75 | + return repository.ModelToDomainModel(m) | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +func (repository *ObjectNoticeRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.ObjectNotice) (*domain.ObjectNotice, error) { | ||
| 79 | + var ( | ||
| 80 | + tx = conn.DB() | ||
| 81 | + m = &models.ObjectNotice{Id: dm.Identify().(int64)} | ||
| 82 | + ) | ||
| 83 | + queryFunc := func() (interface{}, error) { | ||
| 84 | + tx = tx.Where("id = ?", m.Id).Delete(m) | ||
| 85 | + return m, tx.Error | ||
| 86 | + } | ||
| 87 | + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 88 | + return dm, err | ||
| 89 | + } | ||
| 90 | + return repository.ModelToDomainModel(m) | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +func (repository *ObjectNoticeRepository) FindOne(ctx context.Context, conn transaction.Conn, id int64) (*domain.ObjectNotice, error) { | ||
| 94 | + var ( | ||
| 95 | + err error | ||
| 96 | + tx = conn.DB() | ||
| 97 | + m = new(models.ObjectNotice) | ||
| 98 | + ) | ||
| 99 | + queryFunc := func() (interface{}, error) { | ||
| 100 | + tx = tx.Model(m).Where("id = ?", id).First(m) | ||
| 101 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 102 | + return nil, domain.ErrNotFound | ||
| 103 | + } | ||
| 104 | + return m, tx.Error | ||
| 105 | + } | ||
| 106 | + cacheModel := new(models.ObjectNotice) | ||
| 107 | + cacheModel.Id = id | ||
| 108 | + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil { | ||
| 109 | + return nil, err | ||
| 110 | + } | ||
| 111 | + return repository.ModelToDomainModel(m) | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +func (repository *ObjectNoticeRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.ObjectNotice, error) { | ||
| 115 | + var ( | ||
| 116 | + tx = conn.DB() | ||
| 117 | + ms []*models.ObjectNotice | ||
| 118 | + dms = make([]*domain.ObjectNotice, 0) | ||
| 119 | + total int64 | ||
| 120 | + ) | ||
| 121 | + queryFunc := func() (interface{}, error) { | ||
| 122 | + tx = tx.Model(&ms).Order("id desc") | ||
| 123 | + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | ||
| 124 | + return dms, tx.Error | ||
| 125 | + } | ||
| 126 | + return dms, nil | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + if _, err := repository.Query(queryFunc); err != nil { | ||
| 130 | + return 0, nil, err | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + for _, item := range ms { | ||
| 134 | + if dm, err := repository.ModelToDomainModel(item); err != nil { | ||
| 135 | + return 0, dms, err | ||
| 136 | + } else { | ||
| 137 | + dms = append(dms, dm) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return total, dms, nil | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +func (repository *ObjectNoticeRepository) ModelToDomainModel(from *models.ObjectNotice) (*domain.ObjectNotice, error) { | ||
| 144 | + to := &domain.ObjectNotice{} | ||
| 145 | + err := copier.Copy(to, from) | ||
| 146 | + return to, err | ||
| 147 | +} | ||
| 148 | + | ||
| 149 | +func (repository *ObjectNoticeRepository) DomainModelToModel(from *domain.ObjectNotice) (*models.ObjectNotice, error) { | ||
| 150 | + to := &models.ObjectNotice{} | ||
| 151 | + err := copier.Copy(to, from) | ||
| 152 | + return to, err | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +func NewObjectNoticeRepository(cache *cache.CachedRepository) domain.ObjectNoticeRepository { | ||
| 156 | + return &ObjectNoticeRepository{CachedRepository: cache} | ||
| 157 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/pkg/errors" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/transaction" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/gateway/bytelib" | ||
| 10 | + "strings" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type ObjectTableDataRepository struct{} | ||
| 14 | + | ||
| 15 | +type TableColumnSQL struct { | ||
| 16 | + Sql string `json:"sql"` | ||
| 17 | + Column []string `json:"column"` | ||
| 18 | + Data []map[string]string `json:"data"` | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +// makeDropTableSQL 创建删除表SQL | ||
| 22 | +func (repository *ObjectTableDataRepository) makeDropTableSQL(tableId int) (string, error) { | ||
| 23 | + return fmt.Sprintf(`drop table if exists data."%v"`, tableId), nil | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +// makeCreateTableSQL 创建表SQL | ||
| 27 | +func (repository *ObjectTableDataRepository) makeCreateTableSQL(tableId int, fields []*bytelib.Field) (string, error) { | ||
| 28 | + if len(fields) <= 0 { | ||
| 29 | + return "", errors.New("缺少字段信息") | ||
| 30 | + } | ||
| 31 | + columns := make([]string, 0) | ||
| 32 | + for _, item := range fields { | ||
| 33 | + columns = append(columns, item.SQLName+" text ") | ||
| 34 | + } | ||
| 35 | + sql := `Create TABLE data."` + fmt.Sprintf("%v", tableId) + `" (` + strings.Join(columns, ",") + `);` | ||
| 36 | + return sql, nil | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// makeInsertTableSQL 创建表数据SQL | ||
| 40 | +func (repository *ObjectTableDataRepository) makeInsertTableSQL(tableId int, fields []*bytelib.Field, list []map[string]string) (*TableColumnSQL, error) { | ||
| 41 | + tableColumnSQL := &TableColumnSQL{ | ||
| 42 | + Column: make([]string, 0), | ||
| 43 | + Data: make([]map[string]string, 0), | ||
| 44 | + } | ||
| 45 | + if len(list) > 0 && len(fields) > 0 { | ||
| 46 | + for _, field := range fields { | ||
| 47 | + tableColumnSQL.Column = append(tableColumnSQL.Column, field.SQLName) | ||
| 48 | + } | ||
| 49 | + for _, item := range list { | ||
| 50 | + values := make(map[string]string) | ||
| 51 | + for _, field := range tableColumnSQL.Column { | ||
| 52 | + if _, ok := item[field]; ok { | ||
| 53 | + values[field] = item[field] | ||
| 54 | + } else { | ||
| 55 | + return tableColumnSQL, errors.New("未获取到字段值") | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + tableColumnSQL.Data = append(tableColumnSQL.Data, values) | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + tableColumnSQL.Sql = fmt.Sprintf(`INSERT INTO data."%v" (%s) values (%s)`, tableId, strings.Join(tableColumnSQL.Column, ","), repository.sqlPlaceHoldersSnippet(tableColumnSQL.Column)) | ||
| 62 | + } | ||
| 63 | + return tableColumnSQL, nil | ||
| 64 | +} | ||
| 65 | + | ||
| 66 | +func (repository *ObjectTableDataRepository) sqlPlaceHoldersSnippet(sqlBuildFields []string) string { | ||
| 67 | + var placeHolder []string | ||
| 68 | + for i := 0; i < len(sqlBuildFields); i++ { | ||
| 69 | + placeHolder = append(placeHolder, "?") | ||
| 70 | + } | ||
| 71 | + return strings.Join(placeHolder, ",") | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +func (repository *ObjectTableDataRepository) DropTable(ctx context.Context, conn transaction.Conn, tableId int) error { | ||
| 75 | + sql, err := repository.makeDropTableSQL(tableId) | ||
| 76 | + if err != nil { | ||
| 77 | + return err | ||
| 78 | + } | ||
| 79 | + return conn.DB().Exec(sql).Error | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | +// InsertWithTableData 写入表数据 | ||
| 83 | +func (repository *ObjectTableDataRepository) InsertWithTableData(ctx context.Context, conn transaction.Conn, tableDataPreview bytelib.TableData) error { | ||
| 84 | + //删除表 | ||
| 85 | + err := repository.DropTable(ctx, conn, int(tableDataPreview.ObjectId)) | ||
| 86 | + if err != nil { | ||
| 87 | + return err | ||
| 88 | + } | ||
| 89 | + //创建表 | ||
| 90 | + createTableSql, err := repository.makeCreateTableSQL(int(tableDataPreview.ObjectId), tableDataPreview.Fields) | ||
| 91 | + if err != nil { | ||
| 92 | + return err | ||
| 93 | + } | ||
| 94 | + err = conn.DB().Exec(createTableSql).Error | ||
| 95 | + if err != nil { | ||
| 96 | + return err | ||
| 97 | + } | ||
| 98 | + tableColumnSQL, err := repository.makeInsertTableSQL(int(tableDataPreview.ObjectId), tableDataPreview.Fields, tableDataPreview.Grid.List) | ||
| 99 | + if err != nil { | ||
| 100 | + return err | ||
| 101 | + } | ||
| 102 | + if len(tableColumnSQL.Column) > 0 && len(tableColumnSQL.Data) > 0 { | ||
| 103 | + for _, item := range tableColumnSQL.Data { | ||
| 104 | + if len(item) > 0 { | ||
| 105 | + params := make([]interface{}, 0) | ||
| 106 | + for _, m := range tableColumnSQL.Column { | ||
| 107 | + if _, ok := item[m]; ok { | ||
| 108 | + params = append(params, item[m]) | ||
| 109 | + } else { | ||
| 110 | + params = append(params, "") | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + err = conn.DB().Exec(tableColumnSQL.Sql, params...).Error | ||
| 114 | + if err != nil { | ||
| 115 | + return err | ||
| 116 | + } | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return nil | ||
| 121 | +} | ||
| 122 | + | ||
| 123 | +// FindAll 获取表内所有数据 | ||
| 124 | +func (repository *ObjectTableDataRepository) FindAll(ctx context.Context, conn transaction.Conn, tableId int) { | ||
| 125 | + | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +func NewObjectTableDataRepository() domain.ObjectTableDataRepository { | ||
| 129 | + return &ObjectTableDataRepository{} | ||
| 130 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/jinzhu/copier" | ||
| 6 | + "github.com/pkg/errors" | ||
| 7 | + "github.com/tiptok/gocomm/pkg/cache" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/models" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/transaction" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/domain" | ||
| 11 | + "gorm.io/gorm" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +type ObjectTableRepository struct { | ||
| 15 | + *cache.CachedRepository | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (repository *ObjectTableRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.ObjectTable) (*domain.ObjectTable, error) { | ||
| 19 | + var ( | ||
| 20 | + err error | ||
| 21 | + m = &models.ObjectTable{} | ||
| 22 | + tx = conn.DB() | ||
| 23 | + ) | ||
| 24 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 25 | + return nil, err | ||
| 26 | + } | ||
| 27 | + if tx = tx.Model(m).Save(m); tx.Error != nil { | ||
| 28 | + return nil, tx.Error | ||
| 29 | + } | ||
| 30 | + dm.Id = m.Id | ||
| 31 | + return repository.ModelToDomainModel(m) | ||
| 32 | + | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (repository *ObjectTableRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.ObjectTable) (*domain.ObjectTable, error) { | ||
| 36 | + var ( | ||
| 37 | + err error | ||
| 38 | + m *models.ObjectTable | ||
| 39 | + tx = conn.DB() | ||
| 40 | + ) | ||
| 41 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 42 | + return nil, err | ||
| 43 | + } | ||
| 44 | + queryFunc := func() (interface{}, error) { | ||
| 45 | + tx = tx.Model(m).Updates(m) | ||
| 46 | + return nil, tx.Error | ||
| 47 | + } | ||
| 48 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 49 | + return nil, err | ||
| 50 | + } | ||
| 51 | + return repository.ModelToDomainModel(m) | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (repository *ObjectTableRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.ObjectTable) (*domain.ObjectTable, error) { | ||
| 55 | + var ( | ||
| 56 | + err error | ||
| 57 | + m *models.ObjectTable | ||
| 58 | + tx = transaction.DB() | ||
| 59 | + ) | ||
| 60 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 61 | + return nil, err | ||
| 62 | + } | ||
| 63 | + oldVersion := dm.Version | ||
| 64 | + m.Version += 1 | ||
| 65 | + queryFunc := func() (interface{}, error) { | ||
| 66 | + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m) | ||
| 67 | + if tx.RowsAffected == 0 { | ||
| 68 | + return nil, domain.ErrUpdateFail | ||
| 69 | + } | ||
| 70 | + return nil, tx.Error | ||
| 71 | + } | ||
| 72 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 73 | + return nil, err | ||
| 74 | + } | ||
| 75 | + return repository.ModelToDomainModel(m) | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +func (repository *ObjectTableRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.ObjectTable) (*domain.ObjectTable, error) { | ||
| 79 | + var ( | ||
| 80 | + tx = conn.DB() | ||
| 81 | + m = &models.ObjectTable{Id: dm.Identify().(int)} | ||
| 82 | + ) | ||
| 83 | + queryFunc := func() (interface{}, error) { | ||
| 84 | + tx = tx.Where("id = ?", m.Id).Delete(m) | ||
| 85 | + return m, tx.Error | ||
| 86 | + } | ||
| 87 | + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 88 | + return dm, err | ||
| 89 | + } | ||
| 90 | + return repository.ModelToDomainModel(m) | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +func (repository *ObjectTableRepository) FindOne(ctx context.Context, conn transaction.Conn, id int) (*domain.ObjectTable, error) { | ||
| 94 | + var ( | ||
| 95 | + err error | ||
| 96 | + tx = conn.DB() | ||
| 97 | + m = new(models.ObjectTable) | ||
| 98 | + ) | ||
| 99 | + queryFunc := func() (interface{}, error) { | ||
| 100 | + tx = tx.Model(m).Where("id = ?", id).First(m) | ||
| 101 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 102 | + return nil, domain.ErrNotFound | ||
| 103 | + } | ||
| 104 | + return m, tx.Error | ||
| 105 | + } | ||
| 106 | + cacheModel := new(models.ObjectTable) | ||
| 107 | + cacheModel.Id = id | ||
| 108 | + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil { | ||
| 109 | + return nil, err | ||
| 110 | + } | ||
| 111 | + return repository.ModelToDomainModel(m) | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +func (repository *ObjectTableRepository) FindOneByTableId(ctx context.Context, conn transaction.Conn, tableId int) (*domain.ObjectTable, error) { | ||
| 115 | + var ( | ||
| 116 | + err error | ||
| 117 | + tx = conn.DB() | ||
| 118 | + m = new(models.ObjectTable) | ||
| 119 | + ) | ||
| 120 | + queryFunc := func() (interface{}, error) { | ||
| 121 | + tx = tx.Model(m).Where("table_id = ?", tableId).First(m) | ||
| 122 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 123 | + return nil, domain.ErrNotFound | ||
| 124 | + } | ||
| 125 | + return m, tx.Error | ||
| 126 | + } | ||
| 127 | + if _, err = repository.Query(queryFunc); err != nil { | ||
| 128 | + return nil, err | ||
| 129 | + } | ||
| 130 | + return repository.ModelToDomainModel(m) | ||
| 131 | +} | ||
| 132 | + | ||
| 133 | +func (repository *ObjectTableRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.ObjectTable, error) { | ||
| 134 | + var ( | ||
| 135 | + tx = conn.DB() | ||
| 136 | + ms []*models.ObjectTable | ||
| 137 | + dms = make([]*domain.ObjectTable, 0) | ||
| 138 | + total int64 | ||
| 139 | + ) | ||
| 140 | + queryFunc := func() (interface{}, error) { | ||
| 141 | + tx = tx.Model(&ms).Order("id desc") | ||
| 142 | + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | ||
| 143 | + return dms, tx.Error | ||
| 144 | + } | ||
| 145 | + return dms, nil | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + if _, err := repository.Query(queryFunc); err != nil { | ||
| 149 | + return 0, nil, err | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + for _, item := range ms { | ||
| 153 | + if dm, err := repository.ModelToDomainModel(item); err != nil { | ||
| 154 | + return 0, dms, err | ||
| 155 | + } else { | ||
| 156 | + dms = append(dms, dm) | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | + return total, dms, nil | ||
| 160 | +} | ||
| 161 | + | ||
| 162 | +func (repository *ObjectTableRepository) ModelToDomainModel(from *models.ObjectTable) (*domain.ObjectTable, error) { | ||
| 163 | + to := &domain.ObjectTable{} | ||
| 164 | + err := copier.Copy(to, from) | ||
| 165 | + return to, err | ||
| 166 | +} | ||
| 167 | + | ||
| 168 | +func (repository *ObjectTableRepository) DomainModelToModel(from *domain.ObjectTable) (*models.ObjectTable, error) { | ||
| 169 | + to := &models.ObjectTable{} | ||
| 170 | + err := copier.Copy(to, from) | ||
| 171 | + return to, err | ||
| 172 | +} | ||
| 173 | + | ||
| 174 | +func NewObjectTableRepository(cache *cache.CachedRepository) domain.ObjectTableRepository { | ||
| 175 | + return &ObjectTableRepository{CachedRepository: cache} | ||
| 176 | +} |
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "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/gateway/bytelib" | ||
| 7 | + "gorm.io/plugin/soft_delete" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +type ObjectField struct { | ||
| 11 | + Id int64 `json:"id"` // ID | ||
| 12 | + Name string `json:"name"` //表名 | ||
| 13 | + Fields []*bytelib.Field `json:"fields"` //表字段 | ||
| 14 | + Version int `json:"version,omitempty"` //版本 | ||
| 15 | + IsDel soft_delete.DeletedAt `json:"isDel"` //删除标记 | ||
| 16 | + CreatedAt int64 `json:"createdAt,omitempty"` //创建时间 | ||
| 17 | + UpdatedAt int64 `json:"updatedAt,omitempty"` //更新时间 | ||
| 18 | + DeletedAt int64 `json:"deletedAt,omitempty"` //删除时间 | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +type ObjectFieldRepository interface { | ||
| 22 | + Insert(ctx context.Context, conn transaction.Conn, dm *ObjectField) (*ObjectField, error) | ||
| 23 | + Update(ctx context.Context, conn transaction.Conn, dm *ObjectField) (*ObjectField, error) | ||
| 24 | + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *ObjectField) (*ObjectField, error) | ||
| 25 | + Delete(ctx context.Context, conn transaction.Conn, dm *ObjectField) (*ObjectField, error) | ||
| 26 | + FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ObjectField, error) | ||
| 27 | + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ObjectField, error) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +func (m *ObjectField) Identify() interface{} { | ||
| 31 | + if m.Id == 0 { | ||
| 32 | + return nil | ||
| 33 | + } | ||
| 34 | + return m.Id | ||
| 35 | +} |
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/transaction" | ||
| 6 | + "gorm.io/plugin/soft_delete" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type ObjectNotice struct { | ||
| 10 | + Id int64 `json:"id"` // ID | ||
| 11 | + CompanyId int64 `json:"companyId"` //公司ID | ||
| 12 | + TableId int `json:"tableId"` //表ID | ||
| 13 | + TableType string `json:"tableType"` //表类型 导入模块(主表、附表、分表) 拆解(方案、子过程、计算表) 计算(计算项、计算集) | ||
| 14 | + ObjectType string `json:"objectType"` //模块 导入模块、拆解模块、计算模块 | ||
| 15 | + Event string `json:"event"` //事件 | ||
| 16 | + TableAffectedList []int `json:"TableAffectedList"` //级联影响到的表 | ||
| 17 | + DataChanged bool `json:"dataChanged"` //数据有更新 | ||
| 18 | + StructChanged bool `json:"structChanged"` //结构有更新 | ||
| 19 | + Status int `json:"status"` //状态 1-等待处理 2-处理完成 3-处理失败 | ||
| 20 | + UpdateTable int `json:"updateTable"` //更新表结构 | ||
| 21 | + UpdateData int `json:"updateData"` //更新表数据 | ||
| 22 | + Message string `json:"message"` //错误信息 | ||
| 23 | + Retry int `json:"retry"` //重试次数 | ||
| 24 | + MetaData ObjectNoticeMetaData `json:"metaData"` //模块信息 | ||
| 25 | + Version int `json:",omitempty"` //版本 | ||
| 26 | + IsDel soft_delete.DeletedAt `json:"isDel"` //删除标记 | ||
| 27 | + CreatedAt int64 `json:"createdAt,omitempty"` //创建时间 | ||
| 28 | + UpdatedAt int64 `json:"updatedAt,omitempty"` //更新时间 | ||
| 29 | + DeletedAt int64 `json:"deletedAt,omitempty"` //删除时间 | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +type ObjectNoticeMetaData struct { | ||
| 33 | + Module int `json:"module"` // 导入模块判断是否 取消应用 | ||
| 34 | + Status int `json:"status"` // 拆解模块判断是否 取消 | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +var ( | ||
| 38 | + ObjectNoticeStatusWait = 1 //等待处理 | ||
| 39 | + ObjectNoticeStatusDone = 2 //处理完成 | ||
| 40 | + ObjectNoticeStatusError = 3 //处理失败 | ||
| 41 | +) | ||
| 42 | + | ||
| 43 | +type ObjectNoticeRepository interface { | ||
| 44 | + Insert(ctx context.Context, conn transaction.Conn, dm *ObjectNotice) (*ObjectNotice, error) | ||
| 45 | + Update(ctx context.Context, conn transaction.Conn, dm *ObjectNotice) (*ObjectNotice, error) | ||
| 46 | + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *ObjectNotice) (*ObjectNotice, error) | ||
| 47 | + Delete(ctx context.Context, conn transaction.Conn, dm *ObjectNotice) (*ObjectNotice, error) | ||
| 48 | + FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ObjectNotice, error) | ||
| 49 | + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ObjectNotice, error) | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +func (m *ObjectNotice) Identify() interface{} { | ||
| 53 | + if m.Id == 0 { | ||
| 54 | + return nil | ||
| 55 | + } | ||
| 56 | + return m.Id | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +// IsDeletedEvent 是否删除事件 | ||
| 60 | +func (m *ObjectNotice) IsDeletedEvent() bool { | ||
| 61 | + deletedEvents := []string{ | ||
| 62 | + "table.delete", | ||
| 63 | + "table.query.set.delete", | ||
| 64 | + } | ||
| 65 | + for _, event := range deletedEvents { | ||
| 66 | + if m.Event == event { | ||
| 67 | + return true | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + //导入模块 取消应用和应用于 | ||
| 71 | + if m.Event == "table.apply-on" { | ||
| 72 | + if m.MetaData.Module&1 == 0 { | ||
| 73 | + return true | ||
| 74 | + } | ||
| 75 | + } | ||
| 76 | + //拆解模块 方案启用、禁用 | ||
| 77 | + //计算模块 计算项和计算集启用、禁用 | ||
| 78 | + if m.Event == "table.query.set.update.status" { | ||
| 79 | + if m.MetaData.Status&1 == 0 { | ||
| 80 | + return true | ||
| 81 | + } | ||
| 82 | + } | ||
| 83 | + return false | ||
| 84 | +} |
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "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/gateway/bytelib" | ||
| 7 | + "gorm.io/plugin/soft_delete" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +type ObjectTable struct { | ||
| 11 | + Id int `json:"id"` // ID | ||
| 12 | + TableId int `json:"tableId" ` //表ID | ||
| 13 | + Name string `json:"name"` //表名 | ||
| 14 | + TableType string `json:"tableType" ` //模块 | ||
| 15 | + CompanyId int64 `json:"companyId"` //公司id | ||
| 16 | + ParentId int `json:"parentId"` //父id | ||
| 17 | + Flag string `json:"flag"` //分组:Group 集合:Set | ||
| 18 | + Fields []*bytelib.Field `json:"fields" gorm:"serializer:json"` //表字段 | ||
| 19 | + Version int `json:"version,omitempty"` //版本 | ||
| 20 | + RemoteDeleted int `json:"remoteDeleted"` //远端删除 | ||
| 21 | + IsDel soft_delete.DeletedAt `json:"isDel,omitempty"` //删除标记 | ||
| 22 | + CreatedAt int64 `json:"createdAt,omitempty"` //创建时间 | ||
| 23 | + UpdatedAt int64 `json:"updatedAt,omitempty"` //更新时间 | ||
| 24 | + DeletedAt int64 `json:"deletedAt,omitempty"` //删除时间 | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +type ObjectTableRepository interface { | ||
| 28 | + Insert(ctx context.Context, conn transaction.Conn, dm *ObjectTable) (*ObjectTable, error) | ||
| 29 | + Update(ctx context.Context, conn transaction.Conn, dm *ObjectTable) (*ObjectTable, error) | ||
| 30 | + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *ObjectTable) (*ObjectTable, error) | ||
| 31 | + Delete(ctx context.Context, conn transaction.Conn, dm *ObjectTable) (*ObjectTable, error) | ||
| 32 | + FindOne(ctx context.Context, conn transaction.Conn, id int) (*ObjectTable, error) | ||
| 33 | + FindOneByTableId(ctx context.Context, conn transaction.Conn, tableId int) (*ObjectTable, error) | ||
| 34 | + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ObjectTable, error) | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +type ObjectTableDataRepository interface { | ||
| 38 | + InsertWithTableData(ctx context.Context, conn transaction.Conn, tableDataPreview bytelib.TableData) error | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +func (m *ObjectTable) Identify() interface{} { | ||
| 42 | + if m.Id == 0 { | ||
| 43 | + return nil | ||
| 44 | + } | ||
| 45 | + return m.Id | ||
| 46 | +} |
| 1 | - | ||
| 2 | -CREATE TABLE `chart` ( | 1 | +CREATE TABLE `chart` |
| 2 | +( | ||
| 3 | `id` bigint(0) NOT NULL COMMENT 'ID', | 3 | `id` bigint(0) NOT NULL COMMENT 'ID', |
| 4 | `pid` bigint(0) NOT NULL COMMENT '父级ID', | 4 | `pid` bigint(0) NOT NULL COMMENT '父级ID', |
| 5 | `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型', | 5 | `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型', |
| @@ -8,7 +8,8 @@ CREATE TABLE `chart` ( | @@ -8,7 +8,8 @@ CREATE TABLE `chart` ( | ||
| 8 | PRIMARY KEY (`id`) USING BTREE | 8 | PRIMARY KEY (`id`) USING BTREE |
| 9 | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | 9 | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
| 10 | 10 | ||
| 11 | -CREATE TABLE `chart_setting` ( | 11 | +CREATE TABLE `chart_setting` |
| 12 | +( | ||
| 12 | `id` bigint(0) NOT NULL COMMENT 'ID ', | 13 | `id` bigint(0) NOT NULL COMMENT 'ID ', |
| 13 | `chart_id` bigint(0) NOT NULL COMMENT '图表ID', | 14 | `chart_id` bigint(0) NOT NULL COMMENT '图表ID', |
| 14 | `property` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '属性', | 15 | `property` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '属性', |
| @@ -17,7 +18,26 @@ CREATE TABLE `chart_setting` ( | @@ -17,7 +18,26 @@ CREATE TABLE `chart_setting` ( | ||
| 17 | PRIMARY KEY (`id`) USING BTREE | 18 | PRIMARY KEY (`id`) USING BTREE |
| 18 | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | 19 | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
| 19 | 20 | ||
| 20 | -CREATE TABLE `app_page` ( | 21 | +CREATE TABLE `app_page` |
| 22 | +( | ||
| 21 | `id` int(0) NOT NULL COMMENT '唯一标识', | 23 | `id` int(0) NOT NULL COMMENT '唯一标识', |
| 22 | PRIMARY KEY (`id`) USING BTREE | 24 | PRIMARY KEY (`id`) USING BTREE |
| 23 | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | 25 | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
| 26 | + | ||
| 27 | +Create Table `object_table` | ||
| 28 | +( | ||
| 29 | + `id` int not null comment 'ID', | ||
| 30 | + PRIMARY KEY (`id`) USING BTREE | ||
| 31 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | ||
| 32 | + | ||
| 33 | +Create Table `object_field` | ||
| 34 | +( | ||
| 35 | + `id` int not null comment 'ID', | ||
| 36 | + PRIMARY KEY (`id`) USING BTREE | ||
| 37 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | ||
| 38 | + | ||
| 39 | +Create Table `object_notice` | ||
| 40 | +( | ||
| 41 | + `id` int not null comment 'ID', | ||
| 42 | + PRIMARY KEY (`id`) USING BTREE | ||
| 43 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
| @@ -6,10 +6,14 @@ require ( | @@ -6,10 +6,14 @@ require ( | ||
| 6 | github.com/golang-jwt/jwt/v4 v4.5.0 | 6 | github.com/golang-jwt/jwt/v4 v4.5.0 |
| 7 | github.com/jinzhu/copier v0.4.0 | 7 | github.com/jinzhu/copier v0.4.0 |
| 8 | github.com/jinzhu/now v1.1.5 | 8 | github.com/jinzhu/now v1.1.5 |
| 9 | + github.com/magiconair/properties v1.8.0 | ||
| 9 | github.com/pkg/errors v0.9.1 | 10 | github.com/pkg/errors v0.9.1 |
| 11 | + github.com/samber/lo v1.38.1 | ||
| 10 | github.com/stretchr/testify v1.8.4 | 12 | github.com/stretchr/testify v1.8.4 |
| 11 | github.com/tiptok/gocomm v1.0.14 | 13 | github.com/tiptok/gocomm v1.0.14 |
| 14 | + github.com/zeromicro/go-queue v1.1.8 | ||
| 12 | github.com/zeromicro/go-zero v1.5.5 | 15 | github.com/zeromicro/go-zero v1.5.5 |
| 16 | + golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 | ||
| 13 | google.golang.org/grpc v1.57.0 | 17 | google.golang.org/grpc v1.57.0 |
| 14 | gorm.io/driver/mysql v1.5.1 | 18 | gorm.io/driver/mysql v1.5.1 |
| 15 | gorm.io/driver/postgres v1.5.2 | 19 | gorm.io/driver/postgres v1.5.2 |
| @@ -37,7 +41,6 @@ require ( | @@ -37,7 +41,6 @@ require ( | ||
| 37 | github.com/garyburd/redigo v1.6.3 // indirect | 41 | github.com/garyburd/redigo v1.6.3 // indirect |
| 38 | github.com/gin-contrib/sse v0.1.0 // indirect | 42 | github.com/gin-contrib/sse v0.1.0 // indirect |
| 39 | github.com/gin-gonic/gin v1.5.0 // indirect | 43 | github.com/gin-gonic/gin v1.5.0 // indirect |
| 40 | - github.com/go-gota/gota v0.12.0 // indirect | ||
| 41 | github.com/go-logr/logr v1.2.3 // indirect | 44 | github.com/go-logr/logr v1.2.3 // indirect |
| 42 | github.com/go-logr/stdr v1.2.2 // indirect | 45 | github.com/go-logr/stdr v1.2.2 // indirect |
| 43 | github.com/go-openapi/jsonpointer v0.19.6 // indirect | 46 | github.com/go-openapi/jsonpointer v0.19.6 // indirect |
| @@ -73,7 +76,6 @@ require ( | @@ -73,7 +76,6 @@ require ( | ||
| 73 | github.com/json-iterator/go v1.1.12 // indirect | 76 | github.com/json-iterator/go v1.1.12 // indirect |
| 74 | github.com/klauspost/compress v1.15.15 // indirect | 77 | github.com/klauspost/compress v1.15.15 // indirect |
| 75 | github.com/leodido/go-urn v1.1.0 // indirect | 78 | github.com/leodido/go-urn v1.1.0 // indirect |
| 76 | - github.com/magiconair/properties v1.8.0 // indirect | ||
| 77 | github.com/mailru/easyjson v0.7.7 // indirect | 79 | github.com/mailru/easyjson v0.7.7 // indirect |
| 78 | github.com/mattn/go-colorable v0.1.13 // indirect | 80 | github.com/mattn/go-colorable v0.1.13 // indirect |
| 79 | github.com/mattn/go-isatty v0.0.17 // indirect | 81 | github.com/mattn/go-isatty v0.0.17 // indirect |
| @@ -93,7 +95,7 @@ require ( | @@ -93,7 +95,7 @@ require ( | ||
| 93 | github.com/prometheus/common v0.42.0 // indirect | 95 | github.com/prometheus/common v0.42.0 // indirect |
| 94 | github.com/prometheus/procfs v0.10.1 // indirect | 96 | github.com/prometheus/procfs v0.10.1 // indirect |
| 95 | github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect | 97 | github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect |
| 96 | - github.com/samber/lo v1.38.1 // indirect | 98 | + github.com/segmentio/kafka-go v0.4.38 // indirect |
| 97 | github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect | 99 | github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect |
| 98 | github.com/spaolacci/murmur3 v1.1.0 // indirect | 100 | github.com/spaolacci/murmur3 v1.1.0 // indirect |
| 99 | github.com/spf13/afero v1.2.2 // indirect | 101 | github.com/spf13/afero v1.2.2 // indirect |
| @@ -121,7 +123,6 @@ require ( | @@ -121,7 +123,6 @@ require ( | ||
| 121 | go.uber.org/multierr v1.9.0 // indirect | 123 | go.uber.org/multierr v1.9.0 // indirect |
| 122 | go.uber.org/zap v1.24.0 // indirect | 124 | go.uber.org/zap v1.24.0 // indirect |
| 123 | golang.org/x/crypto v0.12.0 // indirect | 125 | golang.org/x/crypto v0.12.0 // indirect |
| 124 | - golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect | ||
| 125 | golang.org/x/net v0.14.0 // indirect | 126 | golang.org/x/net v0.14.0 // indirect |
| 126 | golang.org/x/oauth2 v0.7.0 // indirect | 127 | golang.org/x/oauth2 v0.7.0 // indirect |
| 127 | golang.org/x/sys v0.11.0 // indirect | 128 | golang.org/x/sys v0.11.0 // indirect |
| @@ -137,7 +138,7 @@ require ( | @@ -137,7 +138,7 @@ require ( | ||
| 137 | gopkg.in/inf.v0 v0.9.1 // indirect | 138 | gopkg.in/inf.v0 v0.9.1 // indirect |
| 138 | gopkg.in/yaml.v2 v2.4.0 // indirect | 139 | gopkg.in/yaml.v2 v2.4.0 // indirect |
| 139 | gopkg.in/yaml.v3 v3.0.1 // indirect | 140 | gopkg.in/yaml.v3 v3.0.1 // indirect |
| 140 | - gorm.io/datatypes v1.2.0 // indirect | 141 | + gorm.io/driver/sqlite v1.4.3 // indirect |
| 141 | k8s.io/api v0.26.3 // indirect | 142 | k8s.io/api v0.26.3 // indirect |
| 142 | k8s.io/apimachinery v0.27.0-alpha.3 // indirect | 143 | k8s.io/apimachinery v0.27.0-alpha.3 // indirect |
| 143 | k8s.io/client-go v0.26.3 // indirect | 144 | k8s.io/client-go v0.26.3 // indirect |
此 diff 太大无法显示。
-
请 注册 或 登录 后发表评论