makeEntRelation.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package service
  2. import (
  3. "log"
  4. "math"
  5. "regexp"
  6. . "app.yhyue.com/moapp/jybase/common"
  7. . "app.yhyue.com/moapp/jybase/date"
  8. . "bp.jydev.jianyu360.cn/BaseService/biService/entity"
  9. "github.com/zeromicro/go-zero/core/logx"
  10. )
  11. var fields = []string{"a_id", "a_name", "b_id", "b_name", "legal_person", "item", "create_time"}
  12. var regHan = regexp.MustCompile(`[\p{Han}]+`)
  13. func MakeEntRelation(entName string) int64 {
  14. if len([]rune(entName)) < 2 || !regHan.MatchString(entName) {
  15. return 1
  16. } else if JyBiTidb.CountBySql(`select count(1) as count from ent_relation where a_name=?`, entName) != 0 {
  17. logx.Info(entName, "已有企业关联关系")
  18. return 1
  19. } else if JyBiTidb.CountBySql(`select count(1) as count from group_company_name where company_name=?`, entName) != 0 {
  20. logx.Info(entName, "是集团公司")
  21. return 1
  22. }
  23. saveCount := 0
  24. companyBase, ok := MgoPingAn.FindOneByField("company_base", map[string]interface{}{"company_name": entName}, `{"company_id":1,"legal_person":1,"company_status":1}`)
  25. if !ok || companyBase == nil || len(*companyBase) == 0 {
  26. return 1
  27. }
  28. company_status, _ := (*companyBase)["company_status"].(string)
  29. if company_status != "在营(开业)企业" && company_status != "存续(在营、开业、在册)" {
  30. return 1
  31. }
  32. company_id, _ := (*companyBase)["company_id"].(string)
  33. legal_person, _ := (*companyBase)["legal_person"].(string)
  34. repeat := map[string]int{}
  35. ids := []string{}
  36. array := []interface{}{}
  37. //投资我的
  38. if companyPartner, ok := MgoPingAn.Find("company_partner", map[string]interface{}{"company_id": company_id}, `{"_id":-1}`, `{"stock_name_id":1,"is_personal":1}`, false, -1, -1); ok && companyPartner != nil {
  39. for _, v := range *companyPartner {
  40. is_personal := Int64All(v["is_personal"])
  41. stock_name_id, _ := v["stock_name_id"].(string)
  42. if stock_name_id == "" || is_personal != 0 || repeat[stock_name_id] > 0 {
  43. continue
  44. }
  45. ids = append(ids, stock_name_id)
  46. repeat[stock_name_id] = 1
  47. }
  48. }
  49. //我投资的
  50. if companyPartner, ok := MgoPingAn.Find("company_partner", map[string]interface{}{"stock_name_id": company_id}, `{"_id":-1}`, `{"company_id":1,"is_personal":1}`, false, -1, -1); ok && companyPartner != nil {
  51. for _, v := range *companyPartner {
  52. cId, _ := v["company_id"].(string)
  53. is_personal := Int64All(v["is_personal"])
  54. if cId == "" || is_personal != 0 || repeat[cId] > 0 {
  55. continue
  56. }
  57. ids = append(ids, cId)
  58. repeat[cId] = 2
  59. }
  60. }
  61. for k, v := range getCompanyBase(ids, legal_person) {
  62. saveCount++
  63. array = append(array, company_id, entName, k, v, legal_person, repeat[k], NowFormat(Date_Full_Layout))
  64. if saveCount == 200 {
  65. JyBiTidb.InsertBatch("ent_relation", fields, array)
  66. array = []interface{}{}
  67. }
  68. }
  69. if len(array) > 0 {
  70. JyBiTidb.InsertBatch("ent_relation", fields, array)
  71. }
  72. log.Println(entName, "企业关联关系保存", saveCount, "条")
  73. return 1
  74. }
  75. func getCompanyBase(ids []string, legalPerson string) map[string]string {
  76. m := map[string]string{}
  77. if len(ids) == 0 {
  78. return m
  79. }
  80. for i := 0; i < int(math.Ceil(float64(len(ids))/50)); i++ {
  81. start := i * 50
  82. end := start + 50
  83. if end > len(ids) {
  84. end = len(ids)
  85. }
  86. newIds := ids[start:end]
  87. if companyBase, ok := MgoPingAn.Find("company_base", map[string]interface{}{"company_id": map[string]interface{}{"$in": newIds}}, `{"_id":-1}`, `{"company_id":1,"company_name":1,"legal_person":1,"company_status":1}`, false, -1, -1); ok && companyBase != nil {
  88. for _, v := range *companyBase {
  89. if company_status, _ := v["company_status"].(string); company_status != "在营(开业)企业" && company_status != "存续(在营、开业、在册)" {
  90. continue
  91. } else if legal_person, _ := v["legal_person"].(string); legal_person != legalPerson {
  92. continue
  93. }
  94. company_name, _ := v["company_name"].(string)
  95. if company_name == "" {
  96. continue
  97. }
  98. company_id, _ := v["company_id"].(string)
  99. m[company_id] = company_name
  100. }
  101. }
  102. }
  103. return m
  104. }