作者 yangfu

fix bug name duplicate

@@ -26,7 +26,7 @@ _testmain.go @@ -26,7 +26,7 @@ _testmain.go
26 .vscode 26 .vscode
27 27
28 app.log 28 app.log
29 -go.sum 29 +#go.sum
30 lastupdate.tmp 30 lastupdate.tmp
31 *.log 31 *.log
32 32
@@ -5,7 +5,7 @@ Verbose: true @@ -5,7 +5,7 @@ Verbose: true
5 HostName: http://sumifcc-bchart-dev.sumifcc.com 5 HostName: http://sumifcc-bchart-dev.sumifcc.com
6 6
7 Log: 7 Log:
8 - Mode: file 8 + #Mode: file
9 Encoding: plain 9 Encoding: plain
10 Level: debug # info 10 Level: debug # info
11 MaxSize: 1 # 2MB 11 MaxSize: 1 # 2MB
@@ -30,7 +30,7 @@ func NewSaveChartLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveCha @@ -30,7 +30,7 @@ func NewSaveChartLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveCha
30 30
31 func (l *SaveChartLogic) SaveChart(req *types.ChartSaveRequest) (resp *types.ChartSaveResponse, err error) { 31 func (l *SaveChartLogic) SaveChart(req *types.ChartSaveRequest) (resp *types.ChartSaveResponse, err error) {
32 var ( 32 var (
33 - //conn = l.svcCtx.DefaultDBConn() 33 + conn = l.svcCtx.DefaultDBConn()
34 //parentChart *domain.Chart 34 //parentChart *domain.Chart
35 chart *domain.Chart 35 chart *domain.Chart
36 chartSetting *domain.ChartSetting 36 chartSetting *domain.ChartSetting
@@ -62,6 +62,9 @@ func (l *SaveChartLogic) SaveChart(req *types.ChartSaveRequest) (resp *types.Cha @@ -62,6 +62,9 @@ func (l *SaveChartLogic) SaveChart(req *types.ChartSaveRequest) (resp *types.Cha
62 //if currentSortChart, _ := l.svcCtx.ChartRepository.FindOneByGroup(l.ctx, conn, tenantId, req.Pid); currentSortChart != nil { 62 //if currentSortChart, _ := l.svcCtx.ChartRepository.FindOneByGroup(l.ctx, conn, tenantId, req.Pid); currentSortChart != nil {
63 // chart.Sort = currentSortChart.Sort + 1 63 // chart.Sort = currentSortChart.Sort + 1
64 //} 64 //}
  65 + if total, _, _ := l.svcCtx.ChartRepository.FindByTypeAndName(l.ctx, conn, tenantId, req.Type, req.Name); total > 0 {
  66 + return nil, xerr.NewErrMsgErr("图表名字重复", nil)
  67 + }
65 if err = transaction.UseTrans(l.ctx, l.svcCtx.DB, func(ctx context.Context, conn transaction.Conn) error { 68 if err = transaction.UseTrans(l.ctx, l.svcCtx.DB, func(ctx context.Context, conn transaction.Conn) error {
66 if chart, err = l.svcCtx.ChartRepository.Insert(ctx, conn, chart); err != nil { 69 if chart, err = l.svcCtx.ChartRepository.Insert(ctx, conn, chart); err != nil {
67 return err 70 return err
@@ -29,7 +29,7 @@ func NewSaveAppPageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveA @@ -29,7 +29,7 @@ func NewSaveAppPageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveA
29 29
30 func (l *SaveAppPageLogic) SaveAppPage(req *types.AppPageSaveRequest) (resp *types.AppPageSaveResponse, err error) { 30 func (l *SaveAppPageLogic) SaveAppPage(req *types.AppPageSaveRequest) (resp *types.AppPageSaveResponse, err error) {
31 var ( 31 var (
32 - //conn = l.svcCtx.DefaultDBConn() 32 + conn = l.svcCtx.DefaultDBConn()
33 appPage *domain.AppPage 33 appPage *domain.AppPage
34 tenantId = contextdata.GetTenantFromCtx(l.ctx) 34 tenantId = contextdata.GetTenantFromCtx(l.ctx)
35 ) 35 )
@@ -39,6 +39,9 @@ func (l *SaveAppPageLogic) SaveAppPage(req *types.AppPageSaveRequest) (resp *typ @@ -39,6 +39,9 @@ func (l *SaveAppPageLogic) SaveAppPage(req *types.AppPageSaveRequest) (resp *typ
39 TenantId: tenantId, 39 TenantId: tenantId,
40 Cover: req.Cover, 40 Cover: req.Cover,
41 } 41 }
  42 + if total, _, _ := l.svcCtx.AppPageRepository.FindByName(l.ctx, conn, tenantId, req.Name); total > 0 {
  43 + return nil, xerr.NewErrMsgErr("页面名字重复", nil)
  44 + }
42 if err = transaction.UseTrans(l.ctx, l.svcCtx.DB, func(ctx context.Context, conn transaction.Conn) error { 45 if err = transaction.UseTrans(l.ctx, l.svcCtx.DB, func(ctx context.Context, conn transaction.Conn) error {
43 if appPage, err = l.svcCtx.AppPageRepository.Insert(l.ctx, conn, appPage); err != nil { 46 if appPage, err = l.svcCtx.AppPageRepository.Insert(l.ctx, conn, appPage); err != nil {
44 return err 47 return err
@@ -54,7 +54,8 @@ func (l *SearchTableByModuleLogic) SearchTableByModule(req *types.SearchTableByM @@ -54,7 +54,8 @@ func (l *SearchTableByModuleLogic) SearchTableByModule(req *types.SearchTableByM
54 Token: req.Token, 54 Token: req.Token,
55 TableTypes: []string{bytelib.CalculateItem, bytelib.CalculateSet}, 55 TableTypes: []string{bytelib.CalculateItem, bytelib.CalculateSet},
56 Module: bytelib.ModuleCalculateCenter, 56 Module: bytelib.ModuleCalculateCenter,
57 - ReturnGroupItem: true, 57 + ReturnGroupItem: false,
  58 + ExcludeTables: []int{0},
58 }) 59 })
59 if err != nil { 60 if err != nil {
60 batchError.Add(err) 61 batchError.Add(err)
@@ -26,6 +26,15 @@ func NewSearchTableDataLogic(ctx context.Context, svcCtx *svc.ServiceContext) *S @@ -26,6 +26,15 @@ func NewSearchTableDataLogic(ctx context.Context, svcCtx *svc.ServiceContext) *S
26 } 26 }
27 27
28 func (l *SearchTableDataLogic) SearchTableData(req *types.SearchTableDataRequest) (resp interface{}, err error) { 28 func (l *SearchTableDataLogic) SearchTableData(req *types.SearchTableDataRequest) (resp interface{}, err error) {
  29 + if req.ObjectId == 0 {
  30 + resp = map[string]interface{}{
  31 + "objectId": 0,
  32 + "fields": nil,
  33 + "total": 0,
  34 + "data": make([]string, 0),
  35 + }
  36 + return
  37 + }
29 tableDataPreviewRequest := &bytelib.TableDataPreviewRequest{ 38 tableDataPreviewRequest := &bytelib.TableDataPreviewRequest{
30 Token: req.Token, 39 Token: req.Token,
31 ObjectType: bytelib.ObjectMetaTable, 40 ObjectType: bytelib.ObjectMetaTable,
@@ -145,7 +145,9 @@ type Title struct { @@ -145,7 +145,9 @@ type Title struct {
145 ExplainTxt string `json:"explainTxt,optional"` // 文字说明 145 ExplainTxt string `json:"explainTxt,optional"` // 文字说明
146 FileName string `json:"fileName,optional"` // 文件名 146 FileName string `json:"fileName,optional"` // 文件名
147 FileUrl string `json:"fileUrl,optional"` // 组件图片/视频 147 FileUrl string `json:"fileUrl,optional"` // 组件图片/视频
148 - Align string `json:"align,optional"` // 文本对齐方式 left center right 148 + Align string `json:"align,optional"` // 废弃 文本对齐方式 left center right
  149 + HeadingAlign string `json:"headingAlign,optional"` // 主标题 文本对齐方式 left center right
  150 + SubAlign string `json:"subAlign,optional"` // 副标题 文本对齐方式 left center right
149 } 151 }
150 152
151 type TableAbility struct { 153 type TableAbility struct {
@@ -211,7 +213,7 @@ type GetTableDetailResponse struct { @@ -211,7 +213,7 @@ type GetTableDetailResponse struct {
211 213
212 type SearchTableDataRequest struct { 214 type SearchTableDataRequest struct {
213 Token string `header:"x-mmm-accesstoken,optional"` 215 Token string `header:"x-mmm-accesstoken,optional"`
214 - ObjectId int `json:"objectId"` // 对象ID 216 + ObjectId int `json:"objectId,optional"` // 对象ID
215 PageNumber int `json:"page,optional"` // 分页数 217 PageNumber int `json:"page,optional"` // 分页数
216 PageSize int `json:"size,optional"` // 页码 218 PageSize int `json:"size,optional"` // 页码
217 Condition []*Condition `json:"conditions,optional"` // 条件 219 Condition []*Condition `json:"conditions,optional"` // 条件
@@ -195,6 +195,36 @@ func (repository *AppPageRepository) Find(ctx context.Context, conn transaction. @@ -195,6 +195,36 @@ func (repository *AppPageRepository) Find(ctx context.Context, conn transaction.
195 return total, dms, nil 195 return total, dms, nil
196 } 196 }
197 197
  198 +func (repository *AppPageRepository) FindByName(ctx context.Context, conn transaction.Conn, tenantId int64, name string) (int64, []*domain.AppPage, error) {
  199 + var (
  200 + tx = conn.DB()
  201 + ms []*models.AppPage
  202 + dms = make([]*domain.AppPage, 0)
  203 + )
  204 + queryFunc := func() (interface{}, error) {
  205 + tx = tx.Model(&ms).Order("id desc")
  206 + tx.Where("tenant_id = ?", tenantId)
  207 + tx.Where("name = ?", name)
  208 + if tx = tx.Find(&ms); tx.Error != nil {
  209 + return dms, tx.Error
  210 + }
  211 + return dms, nil
  212 + }
  213 +
  214 + if _, err := repository.Query(queryFunc); err != nil {
  215 + return 0, nil, err
  216 + }
  217 +
  218 + for _, item := range ms {
  219 + if dm, err := repository.ModelToDomainModel(item); err != nil {
  220 + return 0, dms, err
  221 + } else {
  222 + dms = append(dms, dm)
  223 + }
  224 + }
  225 + return int64(len(dms)), dms, nil
  226 +}
  227 +
198 func (repository *AppPageRepository) ModelToDomainModel(from *models.AppPage) (*domain.AppPage, error) { 228 func (repository *AppPageRepository) ModelToDomainModel(from *models.AppPage) (*domain.AppPage, error) {
199 to := &domain.AppPage{} 229 to := &domain.AppPage{}
200 err := copier.Copy(to, from) 230 err := copier.Copy(to, from)
@@ -149,6 +149,39 @@ func (repository *ChartRepository) Find(ctx context.Context, conn transaction.Co @@ -149,6 +149,39 @@ func (repository *ChartRepository) Find(ctx context.Context, conn transaction.Co
149 return total, dms, nil 149 return total, dms, nil
150 } 150 }
151 151
  152 +// FindByTypeAndName 按类型、名称搜索图表(判断重复的图表)
  153 +func (repository *ChartRepository) FindByTypeAndName(ctx context.Context, conn transaction.Conn, tenantId int64, t string, name string) (int64, []*domain.Chart, error) {
  154 + var (
  155 + tx = conn.DB()
  156 + ms []*models.Chart
  157 + dms = make([]*domain.Chart, 0)
  158 + //total int64
  159 + )
  160 + queryFunc := func() (interface{}, error) {
  161 + tx = tx.Model(&ms).Order("id desc") //.Order("pid asc").Order("sort asc")
  162 + tx.Where("tenant_id = ?", tenantId)
  163 + tx.Where("type = ?", t)
  164 + tx.Where("name = ?", name)
  165 + if tx = tx.Find(&ms); tx.Error != nil {
  166 + return dms, tx.Error
  167 + }
  168 + return dms, nil
  169 + }
  170 +
  171 + if _, err := repository.Query(queryFunc); err != nil {
  172 + return 0, nil, err
  173 + }
  174 +
  175 + for _, item := range ms {
  176 + if dm, err := repository.ModelToDomainModel(item); err != nil {
  177 + return 0, dms, err
  178 + } else {
  179 + dms = append(dms, dm)
  180 + }
  181 + }
  182 + return int64(len(dms)), dms, nil
  183 +}
  184 +
152 func (repository *ChartRepository) FindOneByGroup(ctx context.Context, conn transaction.Conn, tenantId, pid int64) (*domain.Chart, error) { 185 func (repository *ChartRepository) FindOneByGroup(ctx context.Context, conn transaction.Conn, tenantId, pid int64) (*domain.Chart, error) {
153 var ( 186 var (
154 err error 187 err error
@@ -27,6 +27,7 @@ type AppPageRepository interface { @@ -27,6 +27,7 @@ type AppPageRepository interface {
27 FindOneByKey(ctx context.Context, conn transaction.Conn, key string) (*AppPage, error) 27 FindOneByKey(ctx context.Context, conn transaction.Conn, key string) (*AppPage, error)
28 FindOneByChartId(ctx context.Context, conn transaction.Conn, tenantId, chartId int64) (*AppPage, error) 28 FindOneByChartId(ctx context.Context, conn transaction.Conn, tenantId, chartId int64) (*AppPage, error)
29 Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*AppPage, error) 29 Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*AppPage, error)
  30 + FindByName(ctx context.Context, conn transaction.Conn, tenantId int64, name string) (int64, []*AppPage, error)
30 } 31 }
31 32
32 func (m *AppPage) Identify() interface{} { 33 func (m *AppPage) Identify() interface{} {
@@ -34,6 +34,7 @@ type ChartRepository interface { @@ -34,6 +34,7 @@ type ChartRepository interface {
34 FindOne(ctx context.Context, conn transaction.Conn, id int64) (*Chart, error) 34 FindOne(ctx context.Context, conn transaction.Conn, id int64) (*Chart, error)
35 Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*Chart, error) 35 Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*Chart, error)
36 FindOneByGroup(ctx context.Context, conn transaction.Conn, tenantId, pid int64) (*Chart, error) 36 FindOneByGroup(ctx context.Context, conn transaction.Conn, tenantId, pid int64) (*Chart, error)
  37 + FindByTypeAndName(ctx context.Context, conn transaction.Conn, tenantId int64, t string, name string) (int64, []*Chart, error)
37 } 38 }
38 39
39 /*************** 索引函数 开始****************/ 40 /*************** 索引函数 开始****************/
@@ -55,7 +55,9 @@ type Title struct { @@ -55,7 +55,9 @@ type Title struct {
55 ExplainTxt string `json:"explainTxt,optional"` // 文字说明 55 ExplainTxt string `json:"explainTxt,optional"` // 文字说明
56 FileName string `json:"fileName,optional"` // 文件名 56 FileName string `json:"fileName,optional"` // 文件名
57 FileUrl string `json:"fileUrl,optional"` // 组件图片/视频 57 FileUrl string `json:"fileUrl,optional"` // 组件图片/视频
58 - Align string `json:"align,optional"` // 文本对齐方式 left center right 58 + Align string `json:"align,optional"` // 废弃 文本对齐方式 left center right
  59 + HeadingAlign string `json:"headingAlign,optional"` // 主标题 文本对齐方式 left center right
  60 + SubAlign string `json:"subAlign,optional"` // 副标题 文本对齐方式 left center right
59 } 61 }
60 62
61 type TableAbility struct { 63 type TableAbility struct {
@@ -70,6 +70,14 @@ func (gateway Service) Do(ctx context.Context, url string, method string, val in @@ -70,6 +70,14 @@ func (gateway Service) Do(ctx context.Context, url string, method string, val in
70 if err = json.Unmarshal(body, &baseResponse); err != nil { 70 if err = json.Unmarshal(body, &baseResponse); err != nil {
71 return err 71 return err
72 } 72 }
  73 + if baseResponse.Code != 0 {
  74 + return HttpError{
  75 + Base: Response{
  76 + Code: baseResponse.Code,
  77 + Msg: baseResponse.Msg,
  78 + },
  79 + }
  80 + }
73 if err = mapping.UnmarshalJsonBytes(baseResponse.Data, result); err != nil { 81 if err = mapping.UnmarshalJsonBytes(baseResponse.Data, result); err != nil {
74 return err 82 return err
75 } 83 }
@@ -183,7 +183,9 @@ type( @@ -183,7 +183,9 @@ type(
183 ExplainTxt string `json:"explainTxt,optional"` // 文字说明 183 ExplainTxt string `json:"explainTxt,optional"` // 文字说明
184 FileName string `json:"fileName,optional"` // 文件名 184 FileName string `json:"fileName,optional"` // 文件名
185 FileUrl string `json:"fileUrl,optional"` // 组件图片/视频 185 FileUrl string `json:"fileUrl,optional"` // 组件图片/视频
186 - Align string `json:"align,optional"` // 文本对齐方式 left center right 186 + Align string `json:"align,optional"` // 废弃 文本对齐方式 left center right
  187 + HeadingAlign string `json:"headingAlign,optional"` // 主标题 文本对齐方式 left center right
  188 + SubAlign string `json:"subAlign,optional"` // 副标题 文本对齐方式 left center right
187 } 189 }
188 TableAbility struct { 190 TableAbility struct {
189 FilterSwitch bool `json:"filterSwitch,optional"` // 表筛选功能开关 191 FilterSwitch bool `json:"filterSwitch,optional"` // 表筛选功能开关
@@ -80,7 +80,7 @@ type ( @@ -80,7 +80,7 @@ type (
80 80
81 SearchTableDataRequest struct{ 81 SearchTableDataRequest struct{
82 Token string `header:"x-mmm-accesstoken,optional"` 82 Token string `header:"x-mmm-accesstoken,optional"`
83 - ObjectId int `json:"objectId"` // 对象ID 83 + ObjectId int `json:"objectId,optional"` // 对象ID
84 PageNumber int `json:"page,optional"` // 分页数 84 PageNumber int `json:"page,optional"` // 分页数
85 PageSize int `json:"size,optional"` // 页码 85 PageSize int `json:"size,optional"` // 页码
86 Condition []*Condition `json:"conditions,optional"` // 条件 86 Condition []*Condition `json:"conditions,optional"` // 条件
此 diff 太大无法显示。