diff --git a/apps/visual/api/visual_data_set_table.go b/apps/visual/api/visual_data_set_table.go index 4653617..9ca8bcf 100644 --- a/apps/visual/api/visual_data_set_table.go +++ b/apps/visual/api/visual_data_set_table.go @@ -24,14 +24,16 @@ import ( "time" ) +const filePath = "uploads/excel" + +var ColumnTypeStr = []string{"delete_time", "update_time"} + type VisualDataSetTableApi struct { VisualDataSetTableApp services.VisualDataSetTableModel VisualDataSourceApp services.VisualDataSourceModel VisualDataSetFieldApi services.VisualDataSetFieldModel } -var ColumnTypeStr = []string{"delete_time", "update_time"} - // GetVisualDataSetTableList DataSetTable列表数据 func (p *VisualDataSetTableApi) GetVisualDataSetTableList(rc *restfulx.ReqCtx) { data := entity.VisualDataSetTable{} @@ -70,56 +72,16 @@ func (p *VisualDataSetTableApi) InsertVisualDataSetTable(rc *restfulx.ReqCtx) { data.TableId = kgo.KStr.Uniqid("px") p.VisualDataSetTableApp.Insert(data) // 协程执行添加字段 - go func() { - info := make(map[string]string) - err := json.Unmarshal([]byte(data.Info), &info) - if err != nil { - return - } - // 保存 excel field - if data.TableType == "excel" { - filePath := info["filePath"] - _, datas := tool.ReadExcel(filePath) - field := getDataSetField(datas) - if field != nil { - field.TableId = data.TableId - p.VisualDataSetFieldApi.Insert(*field) - } - return - } - - one := p.VisualDataSourceApp.FindOne(data.DataSourceId) - if driver.TestConnection(one) != nil { - one.Status = "0" - one := p.VisualDataSourceApp.Update(*one) - global.Log.Errorf("数据源:%s不在线", one.SourceName) - return - } - instance := driver.NewDbInstance(one) - - sql := "" - if data.TableType == "db" { - sql = fmt.Sprintf(`select * from %s LIMIT 1`, info["table"]) - } - if data.TableType == "sql" { - sql = info["sql"] + " LIMIT 1" - } - _, datas, err := instance.SelectData(sql) - field := getDataSetField(datas) - if field != nil { - field.TableId = data.TableId - p.VisualDataSetFieldApi.Insert(*field) - } - }() - + go p.operateTable("add", data) } // UpdateVisualDataSetTable 修改DataSetTable func (p *VisualDataSetTableApi) UpdateVisualDataSetTable(rc *restfulx.ReqCtx) { var data entity.VisualDataSetTable restfulx.BindQuery(rc, &data) - p.VisualDataSetTableApp.Update(data) + + go p.operateTable("edit", data) } // DeleteVisualDataSetTable 删除DataSetTable @@ -161,8 +123,6 @@ func (p *VisualDataSetTableApi) GetVisualDataSetTableResult(rc *restfulx.ReqCtx) } } -const filePath = "uploads/excel" - // GetVisualDataSetTableByExcelResult 通过excel读取结果 func (p *VisualDataSetTableApi) GetVisualDataSetTableByExcelResult(rc *restfulx.ReqCtx) { _, fileHeader, err := rc.Request.Request.FormFile("excelFile") @@ -178,6 +138,7 @@ func (p *VisualDataSetTableApi) GetVisualDataSetTableByExcelResult(rc *restfulx. rc.ResData = dst } +// GetDataSetTableFun 获取sql函数 func (p *VisualDataSetTableApi) GetDataSetTableFun(rc *restfulx.ReqCtx) { sourceId := restfulx.QueryParam(rc, "sourceId") one := p.VisualDataSourceApp.FindOne(sourceId) @@ -185,10 +146,72 @@ func (p *VisualDataSetTableApi) GetDataSetTableFun(rc *restfulx.ReqCtx) { rc.ResData = p.VisualDataSetTableApp.FindFunList(one.SourceType) } -func getDataSetField(datas []map[string]interface{}) *entity.VisualDataSetField { - field := new(entity.VisualDataSetField) +// GetDataSets 获取图表设置的数据集查询数据 +func (p *VisualDataSetFieldApi) GetDataSets(rc *restfulx.ReqCtx) { + var data entity.DataSetDataReq + restfulx.BindQuery(rc, &data) + +} + +func (p *VisualDataSetTableApi) operateTable(opType string, data entity.VisualDataSetTable) { + info := make(map[string]string) + err := json.Unmarshal([]byte(data.Info), &info) + if err != nil { + return + } + // 保存 excel field + if data.TableType == "excel" { + filePath := info["filePath"] + _, datas := tool.ReadExcel(filePath) + fields := getDataSetField(datas) + if len(fields) > 0 { + for _, field := range fields { + field.TableId = data.TableId + if opType == "edit" { + p.VisualDataSetFieldApi.DeleteByTable(data.TableId) + } + p.VisualDataSetFieldApi.Insert(field) + } + } + return + } + + one := p.VisualDataSourceApp.FindOne(data.DataSourceId) + if driver.TestConnection(one) != nil { + one.Status = "0" + one := p.VisualDataSourceApp.Update(*one) + global.Log.Errorf("数据源:%s不在线", one.SourceName) + return + } + instance := driver.NewDbInstance(one) + + sql := "" + if data.TableType == "db" { + sql = fmt.Sprintf(`select * from %s LIMIT 1`, info["table"]) + } + if data.TableType == "sql" { + sql = info["sql"] + " LIMIT 1" + } + _, datas, err := instance.SelectData(sql) + + fields := getDataSetField(datas) + if len(fields) > 0 { + for _, field := range fields { + field.TableId = data.TableId + if opType == "edit" { + p.VisualDataSetFieldApi.DeleteByTable(data.TableId) + } + p.VisualDataSetFieldApi.Insert(field) + } + } +} + +// 根据读取的Data获取字段 +func getDataSetField(datas []map[string]interface{}) []entity.VisualDataSetField { + fields := make([]entity.VisualDataSetField, 0) if len(datas) > 0 { for k, v := range datas[0] { + field := entity.VisualDataSetField{} if needDelete(k) { continue } @@ -196,19 +219,22 @@ func getDataSetField(datas []map[string]interface{}) *entity.VisualDataSetField field.Name = k field.DeName = k switch v.(type) { - case int64, float64: + case int, uint, int8, uint8, int64, uint64, float32, float64: field.DeType = "2" field.GroupType = "q" - case time.Time: - field.DeType = "1" - field.GroupType = "d" - default: - field.DeType = "0" - field.GroupType = "d" + case string: + if _, err := time.Parse("2006-01-02", v.(string)); err != nil { + field.DeType = "1" + field.GroupType = "d" + } else { + field.DeType = "0" + field.GroupType = "d" + } } + fields = append(fields, field) } } - return field + return fields } func needDelete(name string) bool { diff --git a/apps/visual/entity/data_set.go b/apps/visual/entity/data_set.go index 0894ff1..bd785e6 100644 --- a/apps/visual/entity/data_set.go +++ b/apps/visual/entity/data_set.go @@ -54,3 +54,17 @@ type VisualDataSetTableFun struct { func (VisualDataSetTableFun) TableName() string { return "visual_data_set_table_function" } + +type DataSetDataReq struct { + TableId string `json:"tableId"` //数据集Id + ShowNumType string `json:"showNumType"` + ShowNum int64 `json:"showNum"` + DataDs []map[string]interface{} `json:"dataDs"` + DataQs []map[string]interface{} `json:"dataQs"` + DataLs []map[string]interface{} `json:"dataLs"` +} + +type DataSetDataRes struct { + Fields []string `json:"fields"` + Series []map[string]interface{} `json:"series"` +} diff --git a/apps/visual/services/visual_data_set_field.go b/apps/visual/services/visual_data_set_field.go index 4297614..06a7c97 100644 --- a/apps/visual/services/visual_data_set_field.go +++ b/apps/visual/services/visual_data_set_field.go @@ -20,6 +20,7 @@ type ( FindList(data entity.VisualDataSetField) *[]entity.VisualDataSetField Update(data entity.VisualDataSetField) *entity.VisualDataSetField Delete(fieldIds []string) + DeleteByTable(tableId string) } datasetfieldModelImpl struct { @@ -91,3 +92,7 @@ func (m *datasetfieldModelImpl) Update(data entity.VisualDataSetField) *entity.V func (m *datasetfieldModelImpl) Delete(fieldIds []string) { biz.ErrIsNil(global.Db.Table(m.table).Delete(&entity.VisualDataSetField{}, "field_id in (?)", fieldIds).Error, "删除数据集字段失败") } + +func (m *datasetfieldModelImpl) DeleteByTable(tableId string) { + biz.ErrIsNil(global.Db.Table(m.table).Delete(&entity.VisualDataSetField{}, "table_id = ?", tableId).Error, "删除数据集字段失败") +} diff --git a/config.yml b/config.yml index ad4c67b..e3842ac 100644 --- a/config.yml +++ b/config.yml @@ -29,9 +29,9 @@ redis: port: 6379 mysql: - host: 101.35.247.125:3306 + host: 127.0.0.1:3306 username: root - password: pandax + password: '!MyEMS1' db-name: pandax config: charset=utf8&loc=Local&parseTime=true diff --git a/pkg/tool/excel.go b/pkg/tool/excel.go index de61c02..6b3d622 100644 --- a/pkg/tool/excel.go +++ b/pkg/tool/excel.go @@ -15,7 +15,6 @@ func ReadExcel(filename string) ([]string, []map[string]interface{}) { } sheets := f.GetSheetMap() sheet1 := sheets[1] - fmt.Println("第一个工作表", sheet1) rows, err := f.GetRows(sheet1) cols := make([]string, 0) isHead := true @@ -28,7 +27,6 @@ func ReadExcel(filename string) ([]string, []map[string]interface{}) { cols = append(cols, colCell) } isHead = false - fmt.Println("列信息", cols) } else { theRow := map[string]interface{}{} for j, colCell := range row {