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.

317 lines
10 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 DatasourceService
import (
"dsSupport/MyModel/AccessSystem/AccessSystemDao"
"dsSupport/MyModel/DataSource/DatasourceDAO"
"dsSupport/MyModel/MySwagger"
"dsSupport/MyModel/OrgTree/OrgtreeDAO"
"dsSupport/Utils/CacheUtil"
"dsSupport/Utils/CommonUtil"
"dsSupport/Utils/ES7Util"
"dsSupport/Utils/ES7Util/DataEX"
"dsSupport/models"
"encoding/json"
"fmt"
"html"
"strconv"
"strings"
"time"
)
// ESDataContent DataContent,定义了DataContent结构信息
type ESDataContent struct {
Address string `json:"address"` // 地址
AreaCode string `json:"area_code"` // 区域码
OrgName string `json:"org_name"` // 机构名称
}
/**
* @title GetDatasourceResults
* @Description 获取数据源集合
* @Author wangshuai
* @Date 2020-09-17
* @Param swag MySwagger.DatasourceSwag 查询条件
* @Return bool 执行结果
* @Return string 提示信息
* @Return int 数据源数量
* @Return []map[string]interface{} 数据源集合
* @Return error 错误信息
*/
func GetDatasourceResults(swag MySwagger.DatasourceSwag) (bool, string, int, []map[string]interface{}, error) {
var condition string
var conditions []string
//var page int
var query MySwagger.DatasourceQuery
if swag.SystemId != "" {
conditions = append(conditions, "system_id="+"'"+html.EscapeString(swag.SystemId)+"'")
}
if swag.DatasourceName != "" {
conditions = append(conditions, "datasource_name="+"'"+html.EscapeString(swag.DatasourceName)+"'")
}
if swag.DatasourceCode != "" {
conditions = append(conditions, "datasource_code="+"'"+html.EscapeString(swag.DatasourceCode)+"'")
}
if swag.DatasourceDetail != "" {
conditions = append(conditions, "datasource_detail="+"'"+html.EscapeString(swag.DatasourceDetail)+"'")
}
if swag.SetFlag != 0 {
conditions = append(conditions, "set_flag="+"'"+strconv.Itoa(swag.SetFlag)+"'")
}
if swag.CollectFlag != 0 {
conditions = append(conditions, "collect_flag="+"'"+strconv.Itoa(swag.CollectFlag)+"'")
}
if swag.ProvideType != 0 {
conditions = append(conditions, "provider_type="+"'"+strconv.Itoa(swag.ProvideType)+"'")
}
if swag.ProvideOrgid != "" {
conditions = append(conditions, "provider_orgid="+"'"+html.EscapeString(swag.ProvideOrgid)+"'")
}
if swag.DatastoreType != 0 {
conditions = append(conditions, "datastore_type="+"'"+strconv.Itoa(swag.DatastoreType)+"'")
}
if swag.DicId != "" {
conditions = append(conditions, "dic_id="+"'"+html.EscapeString(swag.DicId)+"'")
}
if swag.DeleteFlag != 0 {
conditions = append(conditions, "delete_flag="+"'"+strconv.Itoa(swag.DeleteFlag)+"'")
} else {
conditions = append(conditions, "delete_flag='-1'")
}
if swag.EnableFlag != 0 {
conditions = append(conditions, "enable_flag="+"'"+strconv.Itoa(swag.EnableFlag)+"'")
}
if swag.Page != 0 {
//page = swag.Page
//query.Page = (page - 1) * 100
query.Page = swag.Page
} else {
query.Page = 1
}
if len(conditions) > 0 {
condition = " AND " + strings.Join(conditions, " AND ")
} else {
condition = ""
}
query.Conditions = condition
result, message, count, data, failResult := DatasourceDAO.GetDatasourceResults(query)
return result, message, count, data, failResult
}
/**
* @title CreateDatasource
* @Description 创建数据源
* @Author wangshuai
* @Date 2020-09-17
* @Param model models.TDataexDatasource 数据源信息
* @Return bool 执行结果
* @Return string 提示信息
* @Return error 错误信息
*/
func CreateDatasource(model models.TDataexDatasource) (bool, string, error) {
// 校验数据提供系统是否存在
_, e := AccessSystemDao.GetAppByCode(model.SystemId)
if e != nil {
return false, "数据提供系统不存在", nil
}
// 校验机构是否存在
if !OrgtreeDAO.IsOrgtreeExistsById(model.ProvideOrgid) {
return false, "机构不存在", nil
}
// 校验数据源编码是否存在
if DatasourceDAO.IsDatasourceExistsByCode(html.EscapeString(model.DatasourceCode)) {
return false, "数据源编码已存在", nil
}
business := new(models.TDataexDatasource)
business.Id = CommonUtil.GetUUID()
business.SystemId = model.SystemId
business.DatasourceName = html.EscapeString(model.DatasourceName)
business.DatasourceCode = html.EscapeString(model.DatasourceCode)
business.DatasourceDetail = html.EscapeString(model.DatasourceDetail)
business.SetFlag = model.SetFlag
business.CollectFlag = model.CollectFlag
business.ProvideType = model.ProvideType
business.ProvideOrgid = html.EscapeString(model.ProvideOrgid)
business.DatastoreType = model.DatastoreType
business.DicId = html.EscapeString(model.DicId)
business.CreateTime = time.Now()
business.DeleteFlag = -1
business.EnableFlag = 1
result, message, error := DatasourceDAO.CreateDatasource(business)
return result, message, error
}
func UpdateDatasource(id string, model models.TDataexDatasource) (bool, string, error) {
// 校验数据提供系统是否存在
_, e := AccessSystemDao.GetAppByCode(model.SystemId)
if e != nil {
return false, "数据提供系统不存在", nil
}
// 校验机构是否存在
if !OrgtreeDAO.IsOrgtreeExistsById(model.ProvideOrgid) {
return false, "机构不存在", nil
}
business := new(models.TDataexDatasource)
//清除Redis缓存
var ids = []string{id}
var selector = CacheUtil.GetBean("t_dataex_datasource")
CacheUtil.DeleteCacheByIds(ids, selector)
business.Id = html.EscapeString(id)
business.DatasourceName = html.EscapeString(model.DatasourceName)
business.DatasourceCode = html.EscapeString(model.DatasourceCode)
business.DatasourceDetail = html.EscapeString(model.DatasourceDetail)
business.SetFlag = model.SetFlag
business.CollectFlag = model.CollectFlag
business.ProvideType = model.ProvideType
business.ProvideOrgid = html.EscapeString(model.ProvideOrgid)
business.DatastoreType = model.DatastoreType
business.DicId = html.EscapeString(model.DicId)
business.ChangeTime = time.Now()
business.EnableFlag = model.EnableFlag
result, message, error := DatasourceDAO.UpdateDatasource(id, business)
return result, message, error
}
func RemoveDatasource(id string) (bool, string, error) {
business := new(models.TDataexDatasource)
//清除Redis缓存
var ids = []string{id}
var selector = CacheUtil.GetBean("t_dataex_datasource")
CacheUtil.DeleteCacheByIds(ids, selector)
business.Id = html.EscapeString(id)
business.ChangeTime = time.Now()
business.DeleteTime = time.Now()
business.DeleteFlag = 1
business.EnableFlag = -1
result, message, error := DatasourceDAO.RemoveDatasource(id, business)
return result, message, error
}
func GetESDoc(datasourceCode string, dataId string) (bool, string, map[string]interface{}) {
result, message, esdata := ES7Util.IndexDocGet(datasourceCode, dataId)
var query = "AND datasource_code='" + datasourceCode + "'"
res, _, data, _ := DatasourceDAO.GetDatasourceRow(query)
var datasourceName interface{}
if res == true {
datasourceName = data["datasource_name"]
}
m := make(map[string]interface{})
j, _ := json.Marshal(esdata)
json.Unmarshal(j, &m)
m["datasource_name"] = datasourceName
return result, message, m
}
func ReadESDoc(datasourceCode string, orgIDs []string, page int, begin string, conditions map[string]interface{}, sort map[string]interface{}) (bool, string, int, []DataEX.ESData2) {
t1 := time.Now()
count, _ := ES7Util.GetDocCount(datasourceCode, begin, conditions)
t2 := time.Now()
fmt.Println("t2与t1相差", t2.Sub(t1))
result, message, esdata := ES7Util.SearchDocPage(datasourceCode, orgIDs, page, begin, conditions, sort)
t3 := time.Now()
fmt.Println("t3与t2相差", t3.Sub(t2))
var ESData2 []DataEX.ESData2
var esData2 DataEX.ESData2
for _, value := range esdata {
var query = "AND datasource_code='" + datasourceCode + "'"
res, _, data, _ := DatasourceDAO.GetDatasourceRow(query)
var datasourceName interface{}
if res == true {
datasourceName = data["datasource_name"]
esData2.DatasourceName = datasourceName.(string)
}
esData2.SystemId = value.SystemId
esData2.DatasourceId = value.DatasourceId
//
esData2.ProvinceId = value.ProvinceId
esData2.ProvinceName = value.ProvinceName
esData2.CityId = value.CityId
esData2.CityName = value.CityName
esData2.AreaId = value.AreaId
esData2.AreaName = value.AreaName
esData2.BureauId = value.BureauId
esData2.RegionId = value.RegionId
esData2.MainId = value.MainId
esData2.OrgId = value.OrgId
esData2.OrgName = value.OrgName
esData2.OrgType = value.OrgType
esData2.SchoolType = value.SchoolType
esData2.SchoolTypeName = value.SchoolTypeName
esData2.DeptId = value.DeptId
esData2.StageId = value.StageId
esData2.GradeId = value.GradeId
esData2.ClassId = value.ClassId
esData2.DataId = value.DataId
esData2.FileUri = value.FileUri
esData2.BeginTime = value.BeginTime
esData2.EndTime = value.EndTime
esData2.DelFlag = value.DelFlag
esData2.EnableFlag = value.EnableFlag
esData2.DataContent = value.DataContent
ESData2 = append(ESData2, esData2)
}
/*
var esDatas []map[string]interface{}
var datas []map[string]interface{}
for _, value := range esdata {
esData := make(map[string]interface{})
j, _ := json.Marshal(value)
json.Unmarshal(j, &esData)
esDatas = append(esDatas, esData)
}
*/
t4 := time.Now()
fmt.Println("t4与t3相差", t4.Sub(t3))
/*
var query = ""
res, _, _, datasources, _ := DatasourceDAO.GetAllDatasourceResults(query)
fmt.Println(datasources)
if res == true {
listJson, _ :=json.Marshal(esDatas)
joinListJson, _ := json.Marshal(datasources)
mergedesDatas := CommonUtil.ListMerge(string(listJson), string(joinListJson), "datasource_id", "datasource_code", "datasource_name", "datasource_name")
json.Unmarshal([]byte(mergedesDatas), &datas)
}
*/
//t4 := time.Now()
//fmt.Println("t4与t3相差", t4.Sub(t3))
fmt.Println("ESData2:", ESData2)
//var datas []map[string]interface{}
return result, message, count, ESData2
}
//func IsDatasourceExistsByCode(code string) bool {
// result := DatasourceDAO.IsDatasourceExistsByCode(code)
//
// return result
//}
//
//func GetDatasourceIdByCode(code string) (bool, string, interface{}, error) {
// result, message, data, err := DatasourceDAO.GetDatasourceIdByCode(code)
//
// return result, message, data, err
//}