Company.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713
  1. package Account
  2. import (
  3. "Cold_Api/conf"
  4. "Cold_Api/controllers/lib"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/astaxie/beego/cache"
  8. _ "github.com/astaxie/beego/cache/redis"
  9. "github.com/beego/beego/v2/adapter/orm"
  10. orm2 "github.com/beego/beego/v2/client/orm"
  11. "github.com/beego/beego/v2/core/logs"
  12. _ "github.com/go-sql-driver/mysql"
  13. "strconv"
  14. "sync"
  15. "time"
  16. )
  17. type Company struct {
  18. Id int `orm:"column(ID);size(11);auto;pk"`
  19. T_mid int `orm:"size(200);null"` // 上一级 ID
  20. T_name string `orm:"size(256);null"` // 公司名称
  21. T_key string `orm:"size(256);index;null"` // 公司密钥
  22. T_type int `orm:"size(256);default(1)"` // 公司类型 1-医药公司 2-运输企业
  23. T_plan string `orm:"type(text);null"` // 平面图
  24. T_data string `orm:"type(text);null"` // 大数据
  25. T_v3d string `orm:"type(text);null"` // 3D 视图
  26. T_Address string `orm:"size(256);null"` // 地址
  27. T_coordinate string `orm:"size(256);null"` // 坐标
  28. T_path string `orm:"size(256);null"` // 公司路径 /0/1/5/
  29. T_money float32 `orm:"digits(12);decimals(2)"`
  30. T_State int `orm:"size(200);default(1)"` // 0删除 1正常
  31. T_warning int `orm:"size(20);default(1)"` // 是否处理报警信息 1处理 2不处理
  32. T_Charging int `orm:"size(11);default(0)"` // 记账扣费 公司ID 默认为:0 (自己)
  33. CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` // auto_now 每次 model 保存时都会对时间自动更新
  34. UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` // auto_now_add 第一次保存时才设置时间
  35. Children []Company `orm:"-"`
  36. }
  37. type Company_R struct {
  38. Id int
  39. T_mid int // 上一级 ID
  40. T_name string // 公司名称
  41. T_plan string // 平面图
  42. T_data string // 大数据
  43. T_v3d string // 3D 视图
  44. T_money float32 // 余额
  45. T_warning int // 报警统计
  46. T_key string
  47. T_type int // 公司类型 1-医药公司 2-运输企业
  48. T_Charging int
  49. T_Address string
  50. T_coordinate string
  51. Children []Company_R
  52. }
  53. func CompanyToCompany_R(r Company) (v Company_R) {
  54. v.Id = r.Id
  55. v.T_mid = r.T_mid
  56. v.T_name = r.T_name
  57. v.T_plan = r.T_plan
  58. v.T_data = r.T_data
  59. v.T_v3d = r.T_v3d
  60. v.T_money = r.T_money
  61. v.T_warning = r.T_warning
  62. v.T_key = r.T_key
  63. v.T_Charging = r.T_Charging
  64. v.T_type = r.T_type
  65. v.T_Address = r.T_Address
  66. v.T_coordinate = r.T_coordinate
  67. return v
  68. }
  69. func (t *Company) TableName() string {
  70. return "company" // 数据库名称 // ************** 替换 FormulaList **************
  71. }
  72. var redisCache_Company cache.Cache
  73. var Company_map *sync.Map // 泛型
  74. func init() {
  75. //注册模型
  76. Company_map = new(sync.Map)
  77. //注册模型
  78. orm.RegisterModel(new(Company))
  79. config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
  80. "redis_User_Company", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
  81. fmt.Println(config)
  82. var err error
  83. redisCache_Company, err = cache.NewCache("redis", config)
  84. if err != nil || redisCache_Company == nil {
  85. errMsg := "failed to init redis"
  86. logs.Error(errMsg, err)
  87. panic(errMsg)
  88. }
  89. }
  90. // ---------------- Redis -------------------
  91. func Redis_Company_Set(key string, r Company) (err error) {
  92. //json序列化
  93. str, err := json.Marshal(r)
  94. if err != nil {
  95. logs.Error(lib.FuncName(), err)
  96. return
  97. }
  98. err = redisCache_Company.Put(key, str, 24*time.Hour)
  99. if err != nil {
  100. logs.Error("set key:", key, ",value:", str, err)
  101. }
  102. return
  103. }
  104. func Redis_Company_Get(key string) (r Company, is bool) {
  105. if redisCache_Company.IsExist(key) {
  106. //println("找到key:",key)
  107. v := redisCache_Company.Get(key)
  108. err := json.Unmarshal(v.([]byte), &r)
  109. if err != nil {
  110. logs.Error(lib.FuncName(), err)
  111. return Company{}, false
  112. }
  113. return r, true
  114. }
  115. //println("没有 找到key:",key)
  116. return Company{}, false
  117. }
  118. func Redis_Company_DelK(key string) (err error) {
  119. err = redisCache_Company.Delete(key)
  120. if err != nil {
  121. logs.Error(lib.FuncName(), err)
  122. }
  123. return
  124. }
  125. // ---------------- 特殊方法 -------------------
  126. // 添加
  127. func Add_Company(var_ Company) (id int64, err error) {
  128. o := orm.NewOrm()
  129. o.Begin()
  130. var rand_x int64
  131. for true {
  132. var_.T_key = lib.GetRandstring(16, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", rand_x)
  133. err = o.Read(&var_, "T_key") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  134. if err != nil {
  135. break
  136. }
  137. rand_x++
  138. }
  139. id, err = o.Insert(&var_)
  140. if err != nil {
  141. o.Rollback()
  142. logs.Error(lib.FuncName(), err)
  143. return id, err
  144. }
  145. T_Path := "/0/" + strconv.Itoa(int(id)) + "/"
  146. if var_.T_mid != 0 {
  147. Company_r, err := Read_Company_ById(var_.T_mid)
  148. if err != nil {
  149. o.Rollback()
  150. logs.Error(lib.FuncName(), err)
  151. return id, err
  152. }
  153. T_Path = Company_r.T_path + strconv.Itoa(int(id)) + "/"
  154. }
  155. var_.Id = int(id)
  156. var_.T_path = T_Path
  157. _, err = o.Update(&var_, "T_path")
  158. if err != nil {
  159. o.Rollback()
  160. logs.Error(lib.FuncName(), err)
  161. return id, err
  162. }
  163. o.Commit()
  164. Redis_Company_Set(strconv.Itoa(var_.Id), var_)
  165. return id, err
  166. }
  167. // 修改
  168. func Update_Company(m Company, cols ...string) bool {
  169. o := orm.NewOrm()
  170. num, err := o.Update(&m, cols...)
  171. if err != nil {
  172. logs.Error(lib.FuncName(), err)
  173. return false
  174. }
  175. logs.Info("Number of records updated in database:", num)
  176. Redis_Company_Set(strconv.Itoa(m.Id), m) // Redis 更新缓存
  177. return true
  178. }
  179. // 删除
  180. func Delete_Company(orm orm.Ormer, id int) bool {
  181. var m = Company{
  182. Id: id,
  183. T_State: 0,
  184. }
  185. num, err := orm.Update(&m, "T_State")
  186. if err != nil {
  187. logs.Error(lib.FuncName(), err)
  188. return false
  189. }
  190. logs.Info("Number of records updated in database:", num)
  191. Redis_Company_DelK(strconv.Itoa(m.Id))
  192. return true
  193. }
  194. // 获取 ById
  195. func Read_Company_ById(Id int) (r Company, e error) {
  196. if r, is := Redis_Company_Get(strconv.Itoa(Id)); is {
  197. //println("Redis_Get OK")
  198. return r, nil
  199. }
  200. o := orm.NewOrm()
  201. qs := o.QueryTable(new(Company))
  202. e = qs.Filter("Id", Id).Filter("T_State", 1).One(&r)
  203. if e != nil {
  204. logs.Error(lib.FuncName(), e)
  205. return
  206. }
  207. Redis_Company_Set(strconv.Itoa(r.Id), r) // Redis 更新缓存
  208. return r, e
  209. }
  210. func Read_Company_ByKey(key string) (r Company, e error) {
  211. if r, is := Redis_Company_Get(key); is {
  212. //println("Redis_Get OK")
  213. return r, nil
  214. }
  215. o := orm.NewOrm()
  216. qs := o.QueryTable(new(Company))
  217. e = qs.Filter("T_key", key).Filter("T_State", 1).One(&r)
  218. if e != nil {
  219. logs.Error(lib.FuncName(), e)
  220. return
  221. }
  222. Redis_Company_Set(key, r) // Redis 更新缓存
  223. return r, e
  224. }
  225. // 获取列表
  226. func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R) {
  227. // 内部用户未绑定公司
  228. if admin_r.T_pid == 0 && len(admin_r.T_pids) == 0 {
  229. return CompanyList
  230. }
  231. o := orm.NewOrm()
  232. // 也可以直接使用 Model 结构体作为表名
  233. qs := o.QueryTable(new(Company))
  234. var maps []Company
  235. cond := orm.NewCondition()
  236. cond1 := cond.And("T_State", 1)
  237. if admin_r.T_pid > 0 {
  238. cond1 = cond1.And("T_path__icontains", fmt.Sprintf("/%d/", admin_r.T_pid))
  239. }
  240. // 内部用户已绑定公司,* 绑定所有公司
  241. if len(admin_r.T_pids) > 0 && admin_r.T_pids != "*" {
  242. T_pids := lib.SplitStringToIntIds(admin_r.T_pids, "P")
  243. if len(T_pids) > 0 {
  244. cond1 = cond1.And("Id__in", ReadCompanyIds_T_pids(T_pids))
  245. }
  246. }
  247. if len(T_name) > 0 {
  248. cond1 = cond1.And("T_name__icontains", T_name)
  249. }
  250. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  251. if err != nil {
  252. logs.Error(lib.FuncName(), err)
  253. return CompanyList
  254. }
  255. parentMap, flag := getCompanyParent(maps)
  256. if flag {
  257. for i := 0; i < len(maps); i++ {
  258. if parentMap[maps[i].T_mid] {
  259. continue
  260. }
  261. r := Company_R{
  262. Id: maps[i].Id,
  263. T_mid: maps[i].T_mid,
  264. T_name: maps[i].T_name,
  265. T_plan: maps[i].T_plan,
  266. T_data: maps[i].T_data,
  267. T_v3d: maps[i].T_v3d,
  268. T_money: maps[i].T_money,
  269. T_warning: maps[i].T_warning,
  270. T_Charging: maps[i].T_Charging,
  271. T_key: maps[i].T_key,
  272. T_type: maps[i].T_type,
  273. T_Address: maps[i].T_Address,
  274. T_coordinate: maps[i].T_coordinate,
  275. Children: nil,
  276. }
  277. info := CompanyCall(maps, r)
  278. CompanyList = append(CompanyList, info)
  279. }
  280. } else {
  281. for i := 0; i < len(maps); i++ {
  282. r := Company_R{
  283. Id: maps[i].Id,
  284. T_mid: maps[i].T_mid,
  285. T_name: maps[i].T_name,
  286. T_plan: maps[i].T_plan,
  287. T_data: maps[i].T_data,
  288. T_v3d: maps[i].T_v3d,
  289. T_money: maps[i].T_money,
  290. T_warning: maps[i].T_warning,
  291. T_Charging: maps[i].T_Charging,
  292. T_key: maps[i].T_key,
  293. T_type: maps[i].T_type,
  294. T_Address: maps[i].T_Address,
  295. T_coordinate: maps[i].T_coordinate,
  296. Children: nil,
  297. }
  298. info := CompanyCall(maps, r)
  299. CompanyList = append(CompanyList, info)
  300. }
  301. }
  302. return CompanyList
  303. }
  304. func ReadCompanyIds_T_pids(T_pids []int) []int {
  305. var companyIds []int
  306. if len(T_pids) == 0 {
  307. return companyIds
  308. }
  309. var companyList []Company
  310. o := orm.NewOrm()
  311. qs := o.QueryTable(new(Company))
  312. _, err := qs.Filter("Id__in", T_pids).Filter("T_State", 1).All(&companyList)
  313. if err != nil {
  314. logs.Error(lib.FuncName(), err)
  315. return companyIds
  316. }
  317. for _, company := range companyList {
  318. subIds := ReadCompanyIds_T_path(company.T_path)
  319. companyIds = append(companyIds, subIds...)
  320. }
  321. return lib.IntIdsDistinct(companyIds)
  322. }
  323. // 通过T_pid查询所有子id
  324. func ReadCompanyIds_T_path(T_path string) (companyIds []int) {
  325. o := orm.NewOrm()
  326. qs := o.QueryTable(new(Company))
  327. var CompanyList []Company
  328. _, err := qs.Filter("T_path__startswith", T_path).Filter("T_State", 1).All(&CompanyList)
  329. if err != nil {
  330. logs.Error(lib.FuncName(), err)
  331. return companyIds
  332. }
  333. for _, v := range CompanyList {
  334. companyIds = append(companyIds, v.Id)
  335. }
  336. return companyIds
  337. }
  338. func ReadCompanyWarningIds_T_pids(T_pids []int) []int {
  339. var companyList []Company
  340. var companyIds []int
  341. o := orm.NewOrm()
  342. qs := o.QueryTable(new(Company))
  343. if len(T_pids) == 0 {
  344. return companyIds
  345. }
  346. _, err := qs.Filter("Id__in", T_pids).Filter("T_State", 1).Filter("T_warning", 1).All(&companyList)
  347. if err != nil {
  348. logs.Error(lib.FuncName(), err)
  349. return companyIds
  350. }
  351. for _, company := range companyList {
  352. subIds := ReadCompanyWarningIds_T_path(company.T_path)
  353. companyIds = append(companyIds, subIds...)
  354. }
  355. return lib.IntIdsDistinct(companyIds)
  356. }
  357. // 通过T_pid查询所有子id
  358. func ReadCompanyWarningIds_T_path(T_path string) (companyIds []int) {
  359. o := orm.NewOrm()
  360. qs := o.QueryTable(new(Company))
  361. var CompanyList []Company
  362. _, err := qs.Filter("T_path__startswith", T_path).Filter("T_State", 1).Filter("T_warning", 1).All(&CompanyList)
  363. if err != nil {
  364. logs.Error(lib.FuncName(), err)
  365. return companyIds
  366. }
  367. for _, v := range CompanyList {
  368. companyIds = append(companyIds, v.Id)
  369. }
  370. return companyIds
  371. }
  372. func Read_Company_List(T_name string) (CompanyList []Company_R) {
  373. o := orm.NewOrm()
  374. // 也可以直接使用 Model 结构体作为表名
  375. qs := o.QueryTable(new(Company))
  376. var maps []Company
  377. cond := orm.NewCondition()
  378. cond1 := cond.And("T_State", 1)
  379. if len(T_name) > 0 {
  380. cond1 = cond1.And("T_name__icontains", T_name)
  381. }
  382. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  383. if err != nil {
  384. logs.Error(lib.FuncName(), err)
  385. return CompanyList
  386. }
  387. parentMap, flag := getCompanyParent(maps)
  388. if flag {
  389. for i := 0; i < len(maps); i++ {
  390. if parentMap[maps[i].T_mid] {
  391. continue
  392. }
  393. r := Company_R{
  394. Id: maps[i].Id,
  395. T_mid: maps[i].T_mid,
  396. T_name: maps[i].T_name,
  397. T_plan: maps[i].T_plan,
  398. T_data: maps[i].T_data,
  399. T_v3d: maps[i].T_v3d,
  400. T_money: maps[i].T_money,
  401. T_warning: maps[i].T_warning,
  402. T_type: maps[i].T_type,
  403. T_Address: maps[i].T_Address,
  404. T_coordinate: maps[i].T_coordinate,
  405. Children: nil,
  406. }
  407. info := CompanyCall(maps, r)
  408. CompanyList = append(CompanyList, info)
  409. }
  410. } else {
  411. for i := 0; i < len(maps); i++ {
  412. r := Company_R{
  413. Id: maps[i].Id,
  414. T_mid: maps[i].T_mid,
  415. T_name: maps[i].T_name,
  416. T_plan: maps[i].T_plan,
  417. T_data: maps[i].T_data,
  418. T_v3d: maps[i].T_v3d,
  419. T_money: maps[i].T_money,
  420. T_warning: maps[i].T_warning,
  421. T_type: maps[i].T_type,
  422. T_Address: maps[i].T_Address,
  423. T_coordinate: maps[i].T_coordinate,
  424. Children: nil,
  425. }
  426. info := CompanyCall(maps, r)
  427. CompanyList = append(CompanyList, info)
  428. }
  429. }
  430. return CompanyList
  431. }
  432. // 获取运输企业公司列表
  433. func Read_Transport_Company_List(T_name string) (CompanyList []Company_R) {
  434. o := orm.NewOrm()
  435. // 也可以直接使用 Model 结构体作为表名
  436. qs := o.QueryTable(new(Company))
  437. var maps []Company
  438. cond := orm.NewCondition()
  439. cond1 := cond.And("T_State", 1).And("T_type", 2)
  440. if len(T_name) > 0 {
  441. cond1 = cond1.And("T_name__icontains", T_name)
  442. }
  443. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  444. if err != nil {
  445. logs.Error(lib.FuncName(), err)
  446. return CompanyList
  447. }
  448. parentMap, flag := getCompanyParent(maps)
  449. if flag {
  450. for i := 0; i < len(maps); i++ {
  451. if parentMap[maps[i].T_mid] {
  452. continue
  453. }
  454. r := Company_R{
  455. Id: maps[i].Id,
  456. T_mid: maps[i].T_mid,
  457. T_name: maps[i].T_name,
  458. T_plan: maps[i].T_plan,
  459. T_data: maps[i].T_data,
  460. T_v3d: maps[i].T_v3d,
  461. T_money: maps[i].T_money,
  462. T_warning: maps[i].T_warning,
  463. T_Charging: maps[i].T_Charging,
  464. T_key: maps[i].T_key,
  465. T_Address: maps[i].T_Address,
  466. T_coordinate: maps[i].T_coordinate,
  467. Children: nil,
  468. }
  469. info := CompanyCall(maps, r)
  470. CompanyList = append(CompanyList, info)
  471. }
  472. } else {
  473. for i := 0; i < len(maps); i++ {
  474. r := Company_R{
  475. Id: maps[i].Id,
  476. T_mid: maps[i].T_mid,
  477. T_name: maps[i].T_name,
  478. T_plan: maps[i].T_plan,
  479. T_data: maps[i].T_data,
  480. T_v3d: maps[i].T_v3d,
  481. T_money: maps[i].T_money,
  482. T_warning: maps[i].T_warning,
  483. T_Charging: maps[i].T_Charging,
  484. T_key: maps[i].T_key,
  485. T_Address: maps[i].T_Address,
  486. T_coordinate: maps[i].T_coordinate,
  487. Children: nil,
  488. }
  489. info := CompanyCall(maps, r)
  490. CompanyList = append(CompanyList, info)
  491. }
  492. }
  493. return CompanyList
  494. }
  495. func CompanyCall(CompanyList []Company, company Company_R) Company_R {
  496. list := CompanyList
  497. min := make([]Company_R, 0)
  498. for j := 0; j < len(list); j++ {
  499. if company.Id != list[j].T_mid {
  500. continue
  501. }
  502. mi := Company_R{}
  503. mi.Id = list[j].Id
  504. mi.T_mid = list[j].T_mid
  505. mi.T_name = list[j].T_name
  506. mi.T_plan = list[j].T_plan
  507. mi.T_data = list[j].T_data
  508. mi.T_v3d = list[j].T_v3d
  509. mi.T_money = list[j].T_money
  510. mi.T_warning = list[j].T_warning
  511. mi.T_Charging = list[j].T_Charging
  512. mi.T_key = list[j].T_key
  513. mi.T_type = list[j].T_type
  514. mi.T_Address = list[j].T_Address
  515. mi.T_coordinate = list[j].T_coordinate
  516. mi.Children = []Company_R{}
  517. ms := CompanyCall(CompanyList, mi)
  518. min = append(min, ms)
  519. }
  520. company.Children = min
  521. return company
  522. }
  523. func getCompanyParent(CompanyList []Company) (map[int]bool, bool) {
  524. list := CompanyList
  525. var flag = false
  526. var parentMap = map[int]bool{}
  527. for j := 0; j < len(list); j++ {
  528. parentMap[list[j].T_mid] = false
  529. }
  530. for j := 0; j < len(list); j++ {
  531. if _, ok := parentMap[list[j].Id]; !ok {
  532. continue
  533. }
  534. parentMap[list[j].Id] = true
  535. flag = true
  536. }
  537. return parentMap, flag
  538. }
  539. func Read_Company_List_All_ByT_name(T_name string) (maps []Company) {
  540. o := orm.NewOrm()
  541. // 也可以直接使用 Model 结构体作为表名
  542. qs := o.QueryTable(new(Company))
  543. cond := orm.NewCondition()
  544. if len(T_name) > 0 {
  545. cond = cond.And("T_name__icontains", T_name)
  546. }
  547. _, err := qs.SetCond((*orm2.Condition)(cond)).All(&maps)
  548. if err != nil {
  549. logs.Error(lib.FuncName(), err)
  550. return maps
  551. }
  552. return maps
  553. }
  554. // 获取内部用户绑定的公司列表
  555. func Read_Company_List_ByT_pids(T_pids string) (CompanyList []Company_R) {
  556. o := orm.NewOrm()
  557. // 也可以直接使用 Model 结构体作为表名
  558. qs := o.QueryTable(new(Company))
  559. var maps []Company
  560. cond := orm.NewCondition()
  561. cond1 := cond.And("T_State", 1)
  562. if len(T_pids) == 0 {
  563. return
  564. }
  565. if T_pids == "*" {
  566. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  567. if err != nil {
  568. logs.Error(lib.FuncName(), err)
  569. return CompanyList
  570. }
  571. } else {
  572. list := lib.SplitStringIds(T_pids, "P")
  573. cond1 = cond1.And("Id__in", list)
  574. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  575. if err != nil {
  576. logs.Error(lib.FuncName(), err)
  577. return CompanyList
  578. }
  579. }
  580. parentMap, flag := getCompanyParent(maps)
  581. if flag {
  582. for i := 0; i < len(maps); i++ {
  583. if parentMap[maps[i].T_mid] {
  584. continue
  585. }
  586. r := Company_R{
  587. Id: maps[i].Id,
  588. T_mid: maps[i].T_mid,
  589. T_name: maps[i].T_name,
  590. Children: nil,
  591. }
  592. info := CompanyCall(maps, r)
  593. CompanyList = append(CompanyList, info)
  594. }
  595. } else {
  596. for i := 0; i < len(maps); i++ {
  597. r := Company_R{
  598. Id: maps[i].Id,
  599. T_mid: maps[i].T_mid,
  600. T_name: maps[i].T_name,
  601. Children: nil,
  602. }
  603. info := CompanyCall(maps, r)
  604. CompanyList = append(CompanyList, info)
  605. }
  606. }
  607. return CompanyList
  608. }
  609. func Read_Company_All_Maps() {
  610. o := orm.NewOrm()
  611. var r []Company
  612. qs := o.QueryTable(new(Company))
  613. _, err := qs.All(&r)
  614. if err != nil {
  615. logs.Error(lib.FuncName(), err)
  616. }
  617. for _, v := range r {
  618. Company_map.Store(v.Id, v.T_name)
  619. }
  620. }
  621. func Read_Company_Get(id int) string {
  622. v, ok := Company_map.Load(id) /*如果确定是真实的,则存在,否则不存在 */
  623. if ok {
  624. return v.(string)
  625. } else {
  626. return ""
  627. }
  628. }