package DataexDAO import ( "dsDataex/GenXorm/models" "dsDataex/MyService/MySwagger" "dsDataex/Utils/CacheUtil" "dsDataex/Utils/DbUtil" "dsDataex/Utils/ErrorConst" "dsDataex/Utils/LogUtil" "encoding/json" "fmt" uuid "github.com/satori/go.uuid" "html" "strings" "time" ) //数据库 var db = DbUtil.Engine /** * @Author zhangjun * @Description 获取数据源信息 * @Date 2020-06-16 09:35 * @Param systemID string 接入系统id * @return 【】map 数据map数组 * @return error 错误 **/ func GetbySystemID(systemID string) (bool, string, []map[string]interface{}, error){ sql := "SELECT id from t_dataex_datasource where delete_flag = -1 and enable_flag = 1 and system_id = '" + html.EscapeString(systemID) + "'" //通过SQL获取带缓存的数据 list, count, _ := CacheUtil.Page(sql, 100,0) if count >0 { return true, "数据获取成功", list,nil }else { return false, "数据获取失败,systemID对应的数据源类型不存在", nil,nil } } func GetParentIDBaseGO(areaCode string) string{ sql := "SELECT id from t_dataex_orgtree where org_type = 1 and area_id = '" + areaCode + "'" //通过SQL获取带缓存的数据 list, count, _ := CacheUtil.Page(sql, 100,0) if count >0 { return list[0]["id"].(string) }else { return "" } } func GetParentID2BaseGO(areaCodes []string) map[string] string{ var areaCode = strings.Join(areaCodes, "','") sql := "SELECT id from t_dataex_orgtree where org_type = 1 and area_id in ('" + areaCode + "')" //通过SQL获取带缓存的数据 list, count, _ := CacheUtil.Page(sql, 100,0) var result=make( map[string]string) if count >0 { for no:=0;no< len(list);no++{ result[list[no]["area_id"].(string)]=list[no]["id"].(string) } return result }else { return nil } } /** * @Author zhangjun * @Description 校验接入系统是否为数据源提供者 * @Date 2020-06-16 09:35 * @Param systemID string 接入系统ID * @Param datasource string 数据类型code * @return bool 成功/失败 * @return string 结果 * @return map 数据map * @return error 错误 **/ func CheckDatasourceSet(systemID string,datasource string) (bool, string, map[string]interface{}, error){ sql := "SELECT id from t_dataex_datasource where delete_flag = -1 and enable_flag = 1 and datasource_code = '" + html.EscapeString(datasource) + "' and system_id = '" + html.EscapeString(systemID) + "'" //通过SQL获取带缓存的数据 list, count, _ := CacheUtil.Page(sql, 100,0) if count==1 { return true, "数据源校验成功", list[0],nil }else { return false, "数据源校验失败,接入系统无权操作此数据源", nil,nil } } /** * @Author zhangjun * @Description 校验接入系统是否可以调用 ES-SQL 查询 * @Date 2020-08-05 09:50 * @Param * @return **/ func CheckDatasourceSql(systemID string,queryID string) (bool, string, map[string]interface{}, error){ sql := "SELECT id from t_report_sqlquery where delete_flag = -1 and enable_flag = 1 and query_code = '" + html.EscapeString(queryID) + "' and system_id = '" + html.EscapeString(systemID) + "'" //通过SQL获取带缓存的数据 list, count, _ := CacheUtil.Page(sql, 100,0) if count==1 { return true, "数据源校验成功", list[0],nil }else { return false, "数据源校验失败,接入系统无权操作此数据源", nil,nil } } /** * @Author zhangjun * @Description 校验接入系统是否为数据源消费者 * @Date 2020-06-23 08:10 * @Param * @return **/ func CheckDatasourceGet(systemID string,datasource string) (bool, string, map[string]interface{}, error){ sql:="SELECT id from t_dataex_dataaccess where delete_flag = -1 and enable_flag = 1 and datasource_code = '" + html.EscapeString(datasource) + "' and consume_systemid = '" + html.EscapeString(systemID) + "'" list, count, _ := CacheUtil.Page(sql, 100,0) if count==1 { return true, "数据源校验成功", list[0],nil }else { return false, "数据源校验失败,接入系统无权操作此数据源", nil,nil } } func GetDatasourceOrgIDS(consumeType int,orgID string) []string { var result []string switch consumeType{ case 1: result=append(result,orgID) break case 2: result=CacheUtil.OrgtreeGetScope(orgID) //add by zhangjun 2020-08-05 if len(result)==0{ result=append(result,orgID) } break case -1: result=append(result,orgID) break default: break } return result } /** * @Author zhangjun * @Description 获取机构权限信息 * @Date 2020-06-16 09:39 * @Param provideType int 配置机构校验类型(1:本机构、2:本机构和下属机构、-1:不校验) * @Param provideOrgid string 配置机构id * @Param orgID string 数据所属机构id * @return bool 成功/失败 * @return string 结果 * @return map 数据map * @return error 错误 **/ func CheckProvideOrgID(provideType int, provideOrgid string,orgID string) (bool, string, map[string]interface{}, error){ //change by zhangjun 2020-07-15 ids:=[]string{orgID} //ids:=[]string{strings.ToLower(orgID)} result := CacheUtil.GetListByIds( ids ,CacheUtil.GetBean("t_dataex_orgtree")) switch provideType{ case 1: if provideOrgid==orgID{ if len(result)==1{ return true,"获取机构数据成功",result[0],nil }else { return false,"获取机构数据失败,无此机构",nil,nil } }else { return false,"数据权限校验不通过,无权操作此机构下属数据",nil,nil } break case 2: if provideOrgid=="-1"{ if len(result)==1{ return true,"获取机构数据成功",result[0],nil }else { return false,"获取机构数据失败,无此机构",nil,nil } } else { if CacheUtil.OrgtreeCheckScope(provideOrgid,orgID) == true{ if len(result)==1{ return true,"获取机构数据成功",result[0],nil }else { return false,"获取机构数据失败,无此机构",nil,nil } }else { return false,"数据权限校验不通过,无权操作此机构下属数据",nil,nil } } break case -1: if len(result)==1{ return true,"获取机构数据成功",result[0],nil }else { return false,"获取机构数据失败,无此机构",nil,nil } break default: return false,"provideType数据配置错误",nil,nil break } return false,"获取机构数据失败,无此机构",nil,nil } /** * @Author zhangjun * @Description * @Date 2020-06-23 08:28 * @Param * @return **/ func CheckConsumeOrgID(consumeType int, consumeOrgid string,orgID string) (bool, string, error) { switch consumeType { case 1: if consumeOrgid == orgID { return true, "数据权限校验通过", nil }else { return false, "数据权限校验不通过,无权访问此机构下属数据", nil } break case 2: if consumeOrgid=="-1"{ return true, "数据权限校验通过", nil } else { if CacheUtil.OrgtreeCheckScope(consumeOrgid,orgID) == true{ return true, "数据权限校验通过", nil }else { return false, "数据权限校验不通过,无权访问此机构下属数据", nil } } break case -1: return true, "数据权限校验通过", nil break default: return false,"consumeType数据配置错误",nil break } return false, "数据权限校验不通过,无权访问此机构下属数据", nil } func SaveDataError(fails []MySwagger.FailResult,datas []MySwagger.Data ,SystemId string,DatasourceId string) (bool, string, error) { error := new(models.TDataexError) error.Id=strings.ToLower(uuid.NewV4().String()) for no:=0;no< len(datas);no++{ if datas[no].DataID == fails[0].FailID{ error.SystemId= SystemId error.DatasourceId=DatasourceId error.OrgId=datas[no].OrgID error.DataId=datas[no].DataID bytes, _ := json.Marshal(datas[no].Data) error.DataContent=string(bytes) } } error.ErrorInfo=fails[0].FailReason var createTime =time.Now() error.CreateTime= createTime error.DeleteFlag=-1 error.EnableFlag=1 _, err := db.Insert(error) fmt.Println("[DataexDAO] ES Error :", fails[0].FailReason) if err != nil { fmt.Println("[DataexDAO] MySQL Error :", err) LogUtil.Error(ErrorConst.SqlUpdateError, "SaveDataError,数据库操作发生严重错误:"+err.Error()) } if len(fails)>1{ var sqls []string var sql string //for no:=1;no< len(fails);no++{ // // sql="insert into t_dataex_error (id,system_id,datasource_id,create_time,delete_flag,enable_flag) values ('"+strings.ToLower(uuid.NewV4().String())+"','"+SystemId+"','"+DatasourceId+"','"+createTime.Format("2006-01-02 15:04:05")+"',-1,1)" // // sqls=append(sqls,sql) //} for no:=0;no< len(datas);no++{ for no2:=1;no2< len(fails);no2++{ if datas[no].DataID == fails[no2].FailID{ sql="insert into t_dataex_error (id,system_id,datasource_id,org_id,data_id,error_info,create_time,delete_flag,enable_flag) values ('"+strings.ToLower(uuid.NewV4().String())+"','"+SystemId+"','"+DatasourceId+"','"+datas[no].OrgID+"','"+datas[no].DataID+"','"+fails[no2].FailReason+"','"+createTime.Format("2006-01-02 15:04:05")+"',-1,1)" sqls=append(sqls,sql) continue } } } DbUtil.Engine.Sqls(sqls).Execute() } return true, "数据添加成功", nil } func SaveDataError2(fails []MySwagger.FailResult,datas []MySwagger.Data ,SystemId string,DatasourceId string) (bool, string, error) { var sqls []string var sql string var createTime =time.Now() for no:=0;no< len(datas);no++{ for no2:=0;no2< len(fails);no2++{ if datas[no].DataID == fails[no2].FailID{ bytes, _ := json.Marshal(datas[no].Data) sql="insert into t_dataex_error (id,system_id,datasource_id,org_id,data_id,data_content,create_time,delete_flag,enable_flag) values ('"+strings.ToLower(uuid.NewV4().String())+"','"+SystemId+"','"+DatasourceId+"','"+datas[no].OrgID+"','"+datas[no].DataID+"','"+string(bytes)+"','"+createTime.Format("2006-01-02 15:04:05")+"',-1,1)" sqls=append(sqls,sql) fmt.Println("[DataexDAO] ES Error :", fails[0].FailReason) continue } } } _,_,err:=DbUtil.Engine.Sqls(sqls).Execute() if err != nil { fmt.Println("[DataexDAO] MySQL Error :", err) LogUtil.Error(ErrorConst.SqlUpdateError, "SaveDataError,数据库操作发生严重错误:"+err.Error()) } return true, "数据添加成功", nil } /** * @title GetMetadataResults * @Description 获取元数据集合 * @Author wangshuai * @Date 2020-09-16 * @Param conditions string 查询条件 * @Return bool 执行结果 * @Return string 提示信息 * @Return int 条数 * @Return []map[string]interface{} 元数据集合 * @Return error 错误信息 */ func GetMetadataResults(conditions string) (bool, string, int, []map[string]interface{}, error) { sql := "SELECT * FROM t_dataex_metadata WHERE 1 = 1 AND " + conditions + " AND enable_flag = 1 ORDER BY create_time DESC, change_time DESC" //数据条数 count, _ := DbUtil.Engine.SQL(sql).Query().Count() //分页数据 list, err := DbUtil.Engine.SQL(sql).Query().List() if list != nil { return true, "数据获取成功", count, list, err } else { return false, "数据获取失败,数据源不存在", count, nil, nil } } func GetDicIdsFromMetadata(conditions string) (bool, string, int, []map[string]interface{}, error) { sql := "SELECT dic_id FROM t_dataex_metadata WHERE 1 = 1 AND " + conditions + " AND dic_id != '' AND eneble_flag = 1 ORDER BY create_time DESC, change_time DESC" //数据条数 count, _ := DbUtil.Engine.SQL(sql).Query().Count() //分页数据 list, err := DbUtil.Engine.SQL(sql).Query().List() if list != nil { return true, "数据获取成功", count, list, err } else { return false, "数据获取失败,数据源不存在", count, nil, nil } } /** * @title GetJyt2012CountByParentIdAndDicValue * @Description 根据parent_id和字典项值获取字典数量 * @Author wangshuai * @Date 2020-09-16 * @Param parentId string 字典项父ID * @Param dicValue string 字典项值 * @Return int64 数量 */ func GetJyt2012CountByParentIdAndDicValue(parentId string, dicValue string) int64 { business := new(models.TDataexJyt2012) total, err := db.Where("parent_id =? AND dic_value =?", parentId, dicValue).Count(business) if err != nil { LogUtil.Error(ErrorConst.SqlQueryError, "数据库操作错误:"+err.Error()) } return total } func GetJyt2012ResultsByParentId(parentId string) (bool, string, int, []map[string]interface{}, error) { sql := "SELECT * FROM t_dataex_jyt2012 WHERE parent_id ='" + parentId + "' ORDER BY create_time DESC, change_time DESC" //数据条数 count, _ := DbUtil.Engine.SQL(sql).Query().Count() if count > 0 { //分页数据 list, err := DbUtil.Engine.SQL(sql).Query().List() return true, "数据获取成功", count, list, err } else { return false, "数据获取失败,数据源不存在", count, nil, nil } } func GetJyt2012ResultsByParentIds(parentIds string) (bool, string, int, []map[string]interface{}, error) { sql := "SELECT * FROM t_dataex_jyt2012 WHERE parent_id IN (" + parentIds + ") ORDER BY create_time DESC, change_time DESC" //数据条数 count, _ := DbUtil.Engine.SQL(sql).Query().Count() if count > 0 { //分页数据 list, err := DbUtil.Engine.SQL(sql).Query().List() return true, "数据获取成功", count, list, err } else { return false, "数据获取失败,数据源不存在", count, nil, nil } }