Company.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  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. func ReadCompanyWarningIds_T_pids(T_pids []int) []int {
  356. var companyList []Company
  357. var companyIds []int
  358. o := orm.NewOrm()
  359. qs := o.QueryTable(new(Company))
  360. if len(T_pids) == 0 {
  361. return companyIds
  362. }
  363. _, err := qs.Filter("Id__in", T_pids).Filter("T_State", 1).Filter("T_warning", 1).All(&companyList)
  364. if err != nil {
  365. logs.Error(lib.FuncName(), err)
  366. return companyIds
  367. }
  368. for _, company := range companyList {
  369. subIds := ReadCompanyWarningIds_T_path(company.T_path)
  370. companyIds = append(companyIds, subIds...)
  371. }
  372. return lib.IntIdsDistinct(companyIds)
  373. }
  374. // 通过T_pid查询所有子id
  375. func ReadCompanyWarningIds_T_path(T_path string) (companyIds []int) {
  376. o := orm.NewOrm()
  377. qs := o.QueryTable(new(Company))
  378. var CompanyList []Company
  379. _, err := qs.Filter("T_path__startswith", T_path).Filter("T_State", 1).Filter("T_warning", 1).All(&CompanyList)
  380. if err != nil {
  381. logs.Error(lib.FuncName(), err)
  382. return companyIds
  383. }
  384. for _, v := range CompanyList {
  385. companyIds = append(companyIds, v.Id)
  386. }
  387. return companyIds
  388. }
  389. func Read_Company_List(T_name string) (CompanyList []Company_R) {
  390. o := orm.NewOrm()
  391. // 也可以直接使用 Model 结构体作为表名
  392. qs := o.QueryTable(new(Company))
  393. var maps []Company
  394. cond := orm.NewCondition()
  395. cond1 := cond.And("T_State", 1)
  396. if len(T_name) > 0 {
  397. cond1 = cond1.And("T_name__icontains", T_name)
  398. }
  399. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  400. if err != nil {
  401. logs.Error(lib.FuncName(), err)
  402. return CompanyList
  403. }
  404. parentMap, flag := getCompanyParent(maps)
  405. if flag {
  406. for i := 0; i < len(maps); i++ {
  407. if parentMap[maps[i].T_mid] {
  408. continue
  409. }
  410. r := Company_R{
  411. Id: maps[i].Id,
  412. T_mid: maps[i].T_mid,
  413. T_name: maps[i].T_name,
  414. T_plan: maps[i].T_plan,
  415. T_data: maps[i].T_data,
  416. T_v3d: maps[i].T_v3d,
  417. T_money: maps[i].T_money,
  418. T_warning: maps[i].T_warning,
  419. T_type: maps[i].T_type,
  420. T_Address: maps[i].T_Address,
  421. T_coordinate: maps[i].T_coordinate,
  422. T_expirationTime: maps[i].T_expirationTime,
  423. Children: nil,
  424. }
  425. info := CompanyCall(maps, r)
  426. CompanyList = append(CompanyList, info)
  427. }
  428. } else {
  429. for i := 0; i < len(maps); i++ {
  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. }
  449. return CompanyList
  450. }
  451. // 获取运输企业公司列表
  452. func Read_Transport_Company_List(T_name string) (CompanyList []Company_R) {
  453. o := orm.NewOrm()
  454. // 也可以直接使用 Model 结构体作为表名
  455. qs := o.QueryTable(new(Company))
  456. var maps []Company
  457. cond := orm.NewCondition()
  458. cond1 := cond.And("T_State", 1).And("T_type", 2)
  459. if len(T_name) > 0 {
  460. cond1 = cond1.And("T_name__icontains", T_name)
  461. }
  462. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  463. if err != nil {
  464. logs.Error(lib.FuncName(), err)
  465. return CompanyList
  466. }
  467. parentMap, flag := getCompanyParent(maps)
  468. if flag {
  469. for i := 0; i < len(maps); i++ {
  470. if parentMap[maps[i].T_mid] {
  471. continue
  472. }
  473. r := Company_R{
  474. Id: maps[i].Id,
  475. T_mid: maps[i].T_mid,
  476. T_name: maps[i].T_name,
  477. T_plan: maps[i].T_plan,
  478. T_data: maps[i].T_data,
  479. T_v3d: maps[i].T_v3d,
  480. T_money: maps[i].T_money,
  481. T_warning: maps[i].T_warning,
  482. T_Charging: maps[i].T_Charging,
  483. T_key: maps[i].T_key,
  484. T_Address: maps[i].T_Address,
  485. T_coordinate: maps[i].T_coordinate,
  486. T_expirationTime: maps[i].T_expirationTime,
  487. Children: nil,
  488. }
  489. info := CompanyCall(maps, r)
  490. CompanyList = append(CompanyList, info)
  491. }
  492. } else {
  493. for i := 0; i < len(maps); i++ {
  494. r := Company_R{
  495. Id: maps[i].Id,
  496. T_mid: maps[i].T_mid,
  497. T_name: maps[i].T_name,
  498. T_plan: maps[i].T_plan,
  499. T_data: maps[i].T_data,
  500. T_v3d: maps[i].T_v3d,
  501. T_money: maps[i].T_money,
  502. T_warning: maps[i].T_warning,
  503. T_Charging: maps[i].T_Charging,
  504. T_key: maps[i].T_key,
  505. T_Address: maps[i].T_Address,
  506. T_coordinate: maps[i].T_coordinate,
  507. T_expirationTime: maps[i].T_expirationTime,
  508. Children: nil,
  509. }
  510. info := CompanyCall(maps, r)
  511. CompanyList = append(CompanyList, info)
  512. }
  513. }
  514. return CompanyList
  515. }
  516. func CompanyCall(CompanyList []Company, company Company_R) Company_R {
  517. list := CompanyList
  518. min := make([]Company_R, 0)
  519. for j := 0; j < len(list); j++ {
  520. if company.Id != list[j].T_mid {
  521. continue
  522. }
  523. mi := Company_R{}
  524. mi.Id = list[j].Id
  525. mi.T_mid = list[j].T_mid
  526. mi.T_name = list[j].T_name
  527. mi.T_plan = list[j].T_plan
  528. mi.T_data = list[j].T_data
  529. mi.T_v3d = list[j].T_v3d
  530. mi.T_money = list[j].T_money
  531. mi.T_warning = list[j].T_warning
  532. mi.T_Charging = list[j].T_Charging
  533. mi.T_file_size_limit = list[j].T_file_size_limit
  534. mi.T_key = list[j].T_key
  535. mi.T_type = list[j].T_type
  536. mi.T_Address = list[j].T_Address
  537. mi.T_coordinate = list[j].T_coordinate
  538. mi.T_expirationTime = list[j].T_expirationTime
  539. mi.Children = []Company_R{}
  540. ms := CompanyCall(CompanyList, mi)
  541. min = append(min, ms)
  542. }
  543. company.Children = min
  544. return company
  545. }
  546. func getCompanyParent(CompanyList []Company) (map[int]bool, bool) {
  547. list := CompanyList
  548. var flag = false
  549. var parentMap = map[int]bool{}
  550. for j := 0; j < len(list); j++ {
  551. parentMap[list[j].T_mid] = false
  552. }
  553. for j := 0; j < len(list); j++ {
  554. if _, ok := parentMap[list[j].Id]; !ok {
  555. continue
  556. }
  557. parentMap[list[j].Id] = true
  558. flag = true
  559. }
  560. return parentMap, flag
  561. }
  562. func Read_Company_List_All_ByT_name(T_name string) (maps []Company) {
  563. o := orm.NewOrm()
  564. // 也可以直接使用 Model 结构体作为表名
  565. qs := o.QueryTable(new(Company))
  566. cond := orm.NewCondition()
  567. if len(T_name) > 0 {
  568. cond = cond.And("T_name__icontains", T_name)
  569. }
  570. _, err := qs.SetCond((*orm2.Condition)(cond)).All(&maps)
  571. if err != nil {
  572. logs.Error(lib.FuncName(), err)
  573. return maps
  574. }
  575. return maps
  576. }
  577. // 获取内部用户绑定的公司列表
  578. func Read_Company_List_ByT_pids(T_pids string) (CompanyList []Company_R) {
  579. o := orm.NewOrm()
  580. // 也可以直接使用 Model 结构体作为表名
  581. qs := o.QueryTable(new(Company))
  582. var maps []Company
  583. cond := orm.NewCondition()
  584. cond1 := cond.And("T_State", 1)
  585. if len(T_pids) == 0 {
  586. return
  587. }
  588. if T_pids == "*" {
  589. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  590. if err != nil {
  591. logs.Error(lib.FuncName(), err)
  592. return CompanyList
  593. }
  594. } else {
  595. list := lib.SplitStringIds(T_pids, "P")
  596. cond1 = cond1.And("Id__in", list)
  597. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  598. if err != nil {
  599. logs.Error(lib.FuncName(), err)
  600. return CompanyList
  601. }
  602. }
  603. parentMap, flag := getCompanyParent(maps)
  604. if flag {
  605. for i := 0; i < len(maps); i++ {
  606. if parentMap[maps[i].T_mid] {
  607. continue
  608. }
  609. r := Company_R{
  610. Id: maps[i].Id,
  611. T_mid: maps[i].T_mid,
  612. T_name: maps[i].T_name,
  613. Children: nil,
  614. }
  615. info := CompanyCall(maps, r)
  616. CompanyList = append(CompanyList, info)
  617. }
  618. } else {
  619. for i := 0; i < len(maps); i++ {
  620. r := Company_R{
  621. Id: maps[i].Id,
  622. T_mid: maps[i].T_mid,
  623. T_name: maps[i].T_name,
  624. Children: nil,
  625. }
  626. info := CompanyCall(maps, r)
  627. CompanyList = append(CompanyList, info)
  628. }
  629. }
  630. return CompanyList
  631. }
  632. func Read_UnBind_Company_List_ByT_pids(T_pids, T_name string) (CompanyList []Company_R) {
  633. o := orm.NewOrm()
  634. // 也可以直接使用 Model 结构体作为表名
  635. qs := o.QueryTable(new(Company))
  636. var maps []Company
  637. cond := orm.NewCondition()
  638. cond1 := cond.And("T_State", 1)
  639. if T_pids == "*" {
  640. return CompanyList
  641. }
  642. list := lib.SplitStringIds(T_pids, "P")
  643. if len(list) > 0 {
  644. cond1 = cond1.AndNot("Id__in", list)
  645. }
  646. if len(T_name) > 0 {
  647. cond1 = cond1.And("T_name__icontains", T_name)
  648. }
  649. _, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
  650. if err != nil {
  651. logs.Error(lib.FuncName(), err)
  652. return CompanyList
  653. }
  654. parentMap, flag := getCompanyParent(maps)
  655. if flag {
  656. for i := 0; i < len(maps); i++ {
  657. if parentMap[maps[i].T_mid] {
  658. continue
  659. }
  660. r := Company_R{
  661. Id: maps[i].Id,
  662. T_mid: maps[i].T_mid,
  663. T_name: maps[i].T_name,
  664. Children: nil,
  665. }
  666. info := CompanyCall(maps, r)
  667. CompanyList = append(CompanyList, info)
  668. }
  669. } else {
  670. for i := 0; i < len(maps); i++ {
  671. r := Company_R{
  672. Id: maps[i].Id,
  673. T_mid: maps[i].T_mid,
  674. T_name: maps[i].T_name,
  675. Children: nil,
  676. }
  677. info := CompanyCall(maps, r)
  678. CompanyList = append(CompanyList, info)
  679. }
  680. }
  681. return CompanyList
  682. }
  683. func Read_Company_All_Maps() {
  684. o := orm.NewOrm()
  685. var r []Company
  686. qs := o.QueryTable(new(Company))
  687. _, err := qs.All(&r)
  688. if err != nil {
  689. logs.Error(lib.FuncName(), err)
  690. }
  691. for _, v := range r {
  692. Company_map.Store(v.Id, v.T_name)
  693. }
  694. }
  695. func Read_Company_Get(id int) string {
  696. v, ok := Company_map.Load(id) /*如果确定是真实的,则存在,否则不存在 */
  697. if ok {
  698. return v.(string)
  699. } else {
  700. return ""
  701. }
  702. }