package service import ( "log" "math" "regexp" . "app.yhyue.com/moapp/jybase/common" . "app.yhyue.com/moapp/jybase/date" . "bp.jydev.jianyu360.cn/BaseService/biService/entity" "github.com/zeromicro/go-zero/core/logx" ) var fields = []string{"a_id", "a_name", "b_id", "b_name", "legal_person", "item", "create_time"} var regHan = regexp.MustCompile(`[\p{Han}]+`) func MakeEntRelation(entName string) int64 { if len([]rune(entName)) < 2 || !regHan.MatchString(entName) { return 1 } else if JyBiTidb.CountBySql(`select count(1) as count from ent_relation where a_name=?`, entName) != 0 { logx.Info(entName, "已有企业关联关系") return 1 } else if JyBiTidb.CountBySql(`select count(1) as count from group_company_name where company_name=?`, entName) != 0 { logx.Info(entName, "是集团公司") return 1 } saveCount := 0 companyBase, ok := MgoPingAn.FindOneByField("company_base", map[string]interface{}{"company_name": entName}, `{"company_id":1,"legal_person":1,"company_status":1}`) if !ok || companyBase == nil || len(*companyBase) == 0 { return 1 } company_status, _ := (*companyBase)["company_status"].(string) if company_status != "在营(开业)企业" && company_status != "存续(在营、开业、在册)" { return 1 } company_id, _ := (*companyBase)["company_id"].(string) legal_person, _ := (*companyBase)["legal_person"].(string) repeat := map[string]int{} ids := []string{} array := []interface{}{} //投资我的 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 { for _, v := range *companyPartner { is_personal := Int64All(v["is_personal"]) stock_name_id, _ := v["stock_name_id"].(string) if stock_name_id == "" || is_personal != 0 || repeat[stock_name_id] > 0 { continue } ids = append(ids, stock_name_id) repeat[stock_name_id] = 1 } } //我投资的 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 { for _, v := range *companyPartner { cId, _ := v["company_id"].(string) is_personal := Int64All(v["is_personal"]) if cId == "" || is_personal != 0 || repeat[cId] > 0 { continue } ids = append(ids, cId) repeat[cId] = 2 } } for k, v := range getCompanyBase(ids, legal_person) { saveCount++ array = append(array, company_id, entName, k, v, legal_person, repeat[k], NowFormat(Date_Full_Layout)) if saveCount == 200 { JyBiTidb.InsertBatch("ent_relation", fields, array) array = []interface{}{} } } if len(array) > 0 { JyBiTidb.InsertBatch("ent_relation", fields, array) } log.Println(entName, "企业关联关系保存", saveCount, "条") return 1 } func getCompanyBase(ids []string, legalPerson string) map[string]string { m := map[string]string{} if len(ids) == 0 { return m } for i := 0; i < int(math.Ceil(float64(len(ids))/50)); i++ { start := i * 50 end := start + 50 if end > len(ids) { end = len(ids) } newIds := ids[start:end] 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 { for _, v := range *companyBase { if company_status, _ := v["company_status"].(string); company_status != "在营(开业)企业" && company_status != "存续(在营、开业、在册)" { continue } else if legal_person, _ := v["legal_person"].(string); legal_person != legalPerson { continue } company_name, _ := v["company_name"].(string) if company_name == "" { continue } company_id, _ := v["company_id"].(string) m[company_id] = company_name } } } return m }