|
|
package CacheUtil
|
|
|
|
|
|
import (
|
|
|
"dsSupport/Utils/ErrorConst"
|
|
|
"dsSupport/Utils/LogUtil"
|
|
|
"dsSupport/Utils/RedisUtil"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
var GBT2260 map[string]string
|
|
|
|
|
|
var XXBXLXM map[string]string
|
|
|
|
|
|
var PARENT_IDS []string
|
|
|
|
|
|
/**
|
|
|
* @Author zhangjun
|
|
|
* @Description 组织机构树缓存初始化,【机构下属学校】递归查询、并缓存 Redis
|
|
|
* @Description TODO:如果性能还不行,使用全局静态变量存储【机构下属学校】!!!!!
|
|
|
* @Date 2020-06-16 10:06
|
|
|
* @Param
|
|
|
* @return
|
|
|
**/
|
|
|
func OrgtreeCacheInit() {
|
|
|
//删除Redis缓存
|
|
|
RedisUtil.RedisClient.FlushDB()
|
|
|
|
|
|
//机构树缓存
|
|
|
sql := "SELECT id from t_dataex_orgtree where delete_flag = -1 and enable_flag = 1 and parent_id = '-1'"
|
|
|
|
|
|
list, count, _ := Page(sql, 1000, 0)
|
|
|
|
|
|
PARENT_IDS = make([]string, 0)
|
|
|
|
|
|
if count > 0 {
|
|
|
for no := 0; no < int(count); no++ {
|
|
|
//TODO:目前只支持教育局下属学校的数据访问控制,暂不支持其他机构类型(如:大学区、主校分校...)
|
|
|
if list[no]["org_type"].(string) == "1" {
|
|
|
sql = "SELECT id from t_dataex_orgtree where delete_flag = -1 and enable_flag = 1 and parent_id = '" + list[no]["id"].(string) + "'"
|
|
|
|
|
|
list2, count2, _ := Page(sql, 1000, 0)
|
|
|
|
|
|
if count2 > 0 {
|
|
|
Orgtree2Redis(list2, "Dataex_Scope_"+list[no]["id"].(string))
|
|
|
|
|
|
PARENT_IDS = append(PARENT_IDS, list[no]["id"].(string))
|
|
|
|
|
|
OrgCacheCreate(list[no]["id"].(string), list[no]["id"].(string))
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//行政区划缓存
|
|
|
sql = "SELECT area_code from t_dataex_gbt2260"
|
|
|
|
|
|
list, _, _ = Page(sql, 5000, 0)
|
|
|
|
|
|
GBT2260 = make(map[string]string)
|
|
|
|
|
|
for no := 0; no < len(list); no++ {
|
|
|
GBT2260[list[no]["area_code"].(string)] = list[no]["area_name"].(string)
|
|
|
}
|
|
|
|
|
|
XXBXLXM = make(map[string]string)
|
|
|
|
|
|
XXBXLXM["111"] = "幼儿园"
|
|
|
XXBXLXM["119"] = "附设幼儿班"
|
|
|
XXBXLXM["211"] = "小学"
|
|
|
XXBXLXM["218"] = "小学教学点"
|
|
|
XXBXLXM["219"] = "附设小学班"
|
|
|
XXBXLXM["221"] = "职工小学"
|
|
|
XXBXLXM["222"] = "农民小学"
|
|
|
XXBXLXM["228"] = "小学班"
|
|
|
XXBXLXM["229"] = "扫盲班"
|
|
|
XXBXLXM["311"] = "初级中学"
|
|
|
XXBXLXM["312"] = "九年一贯制学校"
|
|
|
XXBXLXM["319"] = "附设普通初中班"
|
|
|
XXBXLXM["321"] = "职业初中"
|
|
|
XXBXLXM["329"] = "附设职业初中班"
|
|
|
XXBXLXM["331"] = "成人职工初中"
|
|
|
XXBXLXM["332"] = "成人农民初中"
|
|
|
XXBXLXM["341"] = "完全中学"
|
|
|
XXBXLXM["342"] = "高级中学"
|
|
|
XXBXLXM["345"] = "十二年一贯制学校"
|
|
|
XXBXLXM["349"] = "附设普通高中班"
|
|
|
XXBXLXM["351"] = "成人职工高中"
|
|
|
XXBXLXM["352"] = "成人农民高中"
|
|
|
XXBXLXM["361"] = "中等职业学校"
|
|
|
XXBXLXM["362"] = "中等技术学校"
|
|
|
XXBXLXM["363"] = "中等师范学校"
|
|
|
XXBXLXM["364"] = "成人中等专业学校"
|
|
|
XXBXLXM["365"] = "职业高中学校"
|
|
|
XXBXLXM["366"] = "技工学校"
|
|
|
XXBXLXM["368"] = "附设中职班"
|
|
|
XXBXLXM["369"] = "其他机构"
|
|
|
XXBXLXM["371"] = "工读学校"
|
|
|
XXBXLXM["411"] = "大学"
|
|
|
XXBXLXM["412"] = "学院"
|
|
|
XXBXLXM["413"] = "独立学院"
|
|
|
XXBXLXM["414"] = "高等专科学校"
|
|
|
XXBXLXM["415"] = "高等职业学校"
|
|
|
XXBXLXM["419"] = "分校、大专班"
|
|
|
XXBXLXM["421"] = "职工高校"
|
|
|
XXBXLXM["422"] = "农民高校"
|
|
|
XXBXLXM["423"] = "管理干部学院"
|
|
|
XXBXLXM["424"] = "教育学院"
|
|
|
XXBXLXM["425"] = "独立函授学院"
|
|
|
XXBXLXM["426"] = "广播电视大学"
|
|
|
XXBXLXM["429"] = "其他成人高等教育机构"
|
|
|
XXBXLXM["511"] = "盲人学校"
|
|
|
XXBXLXM["512"] = "聋人学校"
|
|
|
XXBXLXM["513"] = "弱智学校"
|
|
|
XXBXLXM["514"] = "特殊教育学校"
|
|
|
XXBXLXM["519"] = "附设特教班"
|
|
|
XXBXLXM["911"] = "培养研究生的科研机构"
|
|
|
XXBXLXM["921"] = "民办的其他高等教育机构"
|
|
|
XXBXLXM["931"] = "职工技术培训学校"
|
|
|
XXBXLXM["932"] = "农村成人文化技术培训学校"
|
|
|
XXBXLXM["933"] = "其他培训机构"
|
|
|
}
|
|
|
|
|
|
func RefreshOrgtree() {
|
|
|
|
|
|
//删除Redis缓存
|
|
|
RedisUtil.RedisClient.FlushDB()
|
|
|
|
|
|
//机构树缓存
|
|
|
sql := "SELECT id from t_dataex_orgtree where delete_flag = -1 and enable_flag = 1 and parent_id = '-1'"
|
|
|
|
|
|
list, count, _ := Page(sql, 1000, 0)
|
|
|
|
|
|
if count > 0 {
|
|
|
for no := 0; no < int(count); no++ {
|
|
|
//TODO:目前只支持教育局下属学校的数据访问控制,暂不支持其他机构类型(如:大学区、主校分校...)
|
|
|
if list[no]["org_type"].(string) == "1" {
|
|
|
sql = "SELECT id from t_dataex_orgtree where delete_flag = -1 and enable_flag = 1 and parent_id = '" + list[no]["id"].(string) + "'"
|
|
|
|
|
|
list2, count2, _ := Page(sql, 1000, 0)
|
|
|
|
|
|
if count2 > 0 {
|
|
|
Orgtree2Redis(list2, "Dataex_Scope_"+list[no]["id"].(string))
|
|
|
|
|
|
PARENT_IDS = append(PARENT_IDS, list[no]["id"].(string))
|
|
|
|
|
|
OrgCacheCreate(list[no]["id"].(string), list[no]["id"].(string))
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @Author zhangjun
|
|
|
* @Description 刷新机构下属学校缓存
|
|
|
* @Date 2020-06-16 10:14
|
|
|
* @Param orgID string 教育局机构ID
|
|
|
* @return
|
|
|
**/
|
|
|
func OrgCacheCreate(orgID string, scope ...string) {
|
|
|
sql := "SELECT id from t_dataex_orgtree where delete_flag = -1 and enable_flag = 1 and parent_id = '" + orgID + "'"
|
|
|
|
|
|
list, count, _ := Page(sql, 1000, 0)
|
|
|
|
|
|
if count > 0 {
|
|
|
for no := 0; no < int(count); no++ {
|
|
|
//TODO:目前只支持教育局下属学校的数据访问控制,暂不支持其他机构类型(如:大学区、主校分校...)
|
|
|
if list[no]["org_type"].(string) == "1" {
|
|
|
sql = "SELECT id from t_dataex_orgtree where delete_flag = -1 and enable_flag = 1 and parent_id = '" + list[no]["id"].(string) + "'"
|
|
|
|
|
|
list2, count2, _ := Page(sql, 1000, 0)
|
|
|
|
|
|
if count2 > 0 {
|
|
|
Orgtree2Redis(list2, "Dataex_Scope_"+list[no]["id"].(string))
|
|
|
|
|
|
PARENT_IDS = append(PARENT_IDS, list[no]["id"].(string))
|
|
|
|
|
|
var newscope = append(scope, list[no]["id"].(string))
|
|
|
|
|
|
for no := 0; no < len(scope); no++ {
|
|
|
Orgtree2Redis(list2, "Dataex_Scope_"+scope[no])
|
|
|
}
|
|
|
|
|
|
OrgCacheCreate(list[no]["id"].(string), newscope...)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @Author zhangjun
|
|
|
* @Description
|
|
|
* @Date 2020-06-16 10:49
|
|
|
* @Param list 【】map 机构范围数据【】数组
|
|
|
* @Param cacheName string 缓存名称
|
|
|
* @return
|
|
|
**/
|
|
|
func Orgtree2Redis(list []map[string]interface{}, cacheName string) {
|
|
|
|
|
|
var ids string
|
|
|
//add by zhangjun 2020-08-05
|
|
|
old, _ := RedisUtil.RedisClient.Get(cacheName).Result()
|
|
|
ids = old
|
|
|
|
|
|
for i := 0; i < len(list); i++ {
|
|
|
bean := list[i]
|
|
|
|
|
|
ids = ids + "##" + bean["id"].(string)
|
|
|
}
|
|
|
|
|
|
//change by zhangjun 2020-08-06
|
|
|
//RedisUtil.RedisClient.Set(cacheName, ids,10*time.Hour)
|
|
|
RedisUtil.RedisClient.Set(cacheName, ids, 0)
|
|
|
}
|
|
|
|
|
|
func Orgtree2Redis2(list []map[string]interface{}, cacheName string) {
|
|
|
//声明管道
|
|
|
pipe := RedisUtil.RedisClient.Pipeline()
|
|
|
|
|
|
for i := 0; i < len(list); i++ {
|
|
|
bean := list[i]
|
|
|
key := cacheName + ":" + bean["id"].(string)
|
|
|
|
|
|
pipe.HSet(key, bean)
|
|
|
pipe.Expire(key, 24*time.Hour)
|
|
|
}
|
|
|
_, err := pipe.Exec()
|
|
|
|
|
|
if err != nil {
|
|
|
LogUtil.Error(ErrorConst.SqlQueryError, err.Error())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @Author zhangjun
|
|
|
* @Description
|
|
|
* @Date 2020-06-16 11:21
|
|
|
* @Param
|
|
|
* @return
|
|
|
**/
|
|
|
func OrgtreeCheckScope(provideID string, orgID string) bool {
|
|
|
result, err := RedisUtil.RedisClient.Get("Dataex_Scope_" + provideID).Result()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
if strings.Contains(result, orgID) {
|
|
|
return true
|
|
|
} else {
|
|
|
return false
|
|
|
}
|
|
|
}
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
func OrgtreeCheckScope2(provideID string, orgID string) bool {
|
|
|
count, _ := RedisUtil.RedisClient.Exists("Dataex_Scope_" + provideID + ":" + orgID).Result()
|
|
|
|
|
|
if count > 0 {
|
|
|
return true
|
|
|
}
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
func OrgtreeGetScope(orgId string) []string {
|
|
|
result, _ := RedisUtil.RedisClient.Get("Dataex_Scope_" + orgId).Result()
|
|
|
|
|
|
if result != "" {
|
|
|
|
|
|
return strings.Split(result, "##")
|
|
|
}
|
|
|
return nil
|
|
|
}
|