You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

430 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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" + conditions + " 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
}