Company.go 21 KB

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