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.

262 lines
8.3 KiB

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/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, []map[string]interface{}) {
count, _ := ES7Util.GetDocCount(datasourceCode, begin, conditions)
result, message, esdata := ES7Util.SearchDocPage(datasourceCode, orgIDs, page, begin, conditions, sort)
var query = "AND datasource_code='" + datasourceCode + "'"
res, _, data, _ := DatasourceDAO.GetDatasourceRow(query)
var datasourceName interface{}
if res == true {
datasourceName = data["datasource_name"]
}
var esDatas []map[string]interface{}
// 写法2
//esDatas := make([]interface{}, count)
fmt.Println(esDatas)
for _, value := range esdata {
esData := make(map[string]interface{})
j, _ := json.Marshal(value)
json.Unmarshal(j, &esData)
esData["datasource_name"] = datasourceName
fmt.Println("esData:", esData)
esDatas = append(esDatas, esData)
// 写法2
//esDatas[k] = make(map[string]interface{}, 1)
//esDatas[k] = esData
}
return result, message, count, nil
}
//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
//}