wangchuanjin 4 年之前
父節點
當前提交
442ead837e
共有 2 個文件被更改,包括 125 次插入32 次删除
  1. 124 31
      online_datasync/entity/raw_user.go
  2. 1 1
      online_syncto_offline/entity/raw_user.go

+ 124 - 31
online_datasync/entity/raw_user.go

@@ -33,6 +33,7 @@ type raw_user struct {
 	Open_id        string //微信id
 	Channel_id     string //例如:如果是推荐人记推荐用户id
 	Email          string //
+	Name           string //姓名
 	Timestamp      string //更新时间
 }
 
@@ -42,7 +43,7 @@ func (r *raw_user) TableName() string {
 
 //
 func (r *raw_user) SaveFields() []string {
-	return []string{"user_id", "reg_time", "province", "city", "reg_type", "device", "company", "job", "source_module", "source_channel", "follow_status", "phone", "openid", "channel_id", "email", "timestamp"}
+	return []string{"user_id", "reg_time", "province", "city", "reg_type", "device", "company", "job", "source_module", "source_channel", "follow_status", "phone", "openid", "channel_id", "name", "email", "timestamp"}
 }
 
 //
@@ -67,6 +68,7 @@ func (r *raw_user) selectField() map[string]interface{} {
 		"o_member_jy.s_email": 1,
 		"s_rsource":           1,
 		"s_module":            1,
+		"a_collect_phone":     1,
 	}
 }
 
@@ -114,7 +116,7 @@ func (r *raw_user) add() (id string) {
 			lock.Lock()
 			defer lock.Unlock()
 			index++
-			array = append(array, ru.User_id, ru.Reg_time, ru.Province, ru.City, ru.Reg_type, ru.Device, ru.Company, ru.Job, ru.Source_module, ru.Source_channel, ru.Follow_status, ru.Phone, ru.Open_id, ru.Channel_id, ru.Email, ru.Timestamp)
+			array = append(array, ru.User_id, ru.Reg_time, ru.Province, ru.City, ru.Reg_type, ru.Device, ru.Company, ru.Job, ru.Source_module, ru.Source_channel, ru.Follow_status, ru.Phone, ru.Open_id, ru.Channel_id, ru.Email, ru.Name, ru.Timestamp)
 			if index%Config.InsertBathSize == 0 {
 				log.Println("同步新增", r.TableName(), "表", index)
 				Mysql_Main.InsertIgnoreBatch(r.TableName(), r.SaveFields(), array)
@@ -137,7 +139,7 @@ func (r *raw_user) update(start_unix, end_unix int64) {
 	log.Println("开始同步user表,Mgo to Mysql 更新。。。")
 	defer Catch()
 	index := 0
-	fields := []string{"user_id", "province", "city", "reg_type", "device", "company", "job", "source_module", "source_channel", "follow_status", "phone", "openid", "email", "timestamp"}
+	fields := []string{"user_id", "province", "city", "reg_type", "device", "company", "job", "source_module", "source_channel", "follow_status", "phone", "openid", "name", "email", "timestamp"}
 	array := [][]interface{}{}
 	lock := &sync.Mutex{}
 	pool := make(chan bool, Config.SelectMgoUserPool)
@@ -166,7 +168,7 @@ func (r *raw_user) update(start_unix, end_unix int64) {
 			lock.Lock()
 			defer lock.Unlock()
 			index++
-			array = append(array, []interface{}{ru.User_id, ru.Province, ru.City, ru.Reg_type, ru.Device, ru.Company, ru.Job, ru.Source_module, ru.Source_channel, ru.Follow_status, ru.Phone, ru.Open_id, ru.Email, ru.Timestamp})
+			array = append(array, []interface{}{ru.User_id, ru.Province, ru.City, ru.Reg_type, ru.Device, ru.Company, ru.Job, ru.Source_module, ru.Source_channel, ru.Follow_status, ru.Phone, ru.Open_id, ru.Email, ru.Name, ru.Timestamp})
 			if index%Config.UpdateBathSize == 0 {
 				log.Println("同步更新", r.TableName(), "表", index)
 				Mysql_Main.UpdateBath(r.TableName(), fields, array)
@@ -187,10 +189,6 @@ func (r *raw_user) update(start_unix, end_unix int64) {
 func new_raw_user(m map[string]interface{}, flag bool) *raw_user {
 	_id := BsonIdToSId(m["_id"])
 	s_m_openid := ObjToString(m["s_m_openid"])
-	phone := ObjToString(m["s_phone"])
-	if phone == "" {
-		phone = ObjToString(m["s_m_phone"])
-	}
 	registedate := Int64All(m["l_registedate"])
 	if registedate == 0 {
 		registedate = Int64All(m["l_w_registedate"])
@@ -207,27 +205,116 @@ func new_raw_user(m map[string]interface{}, flag bool) *raw_user {
 	}
 	province := ObjToString(m["s_province"])
 	city := ObjToString(m["s_city"])
+	phone := strings.TrimSpace(ObjToString(m["s_phone"]))
+	if phone == "" {
+		phone = strings.TrimSpace(ObjToString(m["s_m_phone"]))
+	}
+	phone_map := map[string]bool{}
+	phone_array := []string{}
 	if phone != "" {
-		phoneData, err := phonedata.Find(phone)
-		if err == nil {
-			province = phoneData.Province
-			city = phoneData.City
+		phone_map[phone] = true
+		phone_array = append(phone_array, phone)
+	}
+	//邮箱
+	email := strings.TrimSpace(ObjToString(m["s_myemail"]))
+	if email == "" {
+		o_jy, _ := m["o_jy"].(map[string]interface{})
+		email = strings.TrimSpace(ObjToString(o_jy["s_email"]))
+	}
+	if email == "" {
+		o_vipjy, _ := m["o_vipjy"].(map[string]interface{})
+		email = strings.TrimSpace(ObjToString(o_vipjy["s_email"]))
+	}
+	if email == "" {
+		o_member_jy, _ := m["o_member_jy"].(map[string]interface{})
+		email = strings.TrimSpace(ObjToString(o_member_jy["s_email"]))
+	}
+	name := ""
+	company := ""
+	//手机号 公司名称 邮箱 姓名 从订单、发票中取
+	orders := Mysql_From_Jianyu.SelectBySql(`SELECT a.user_phone,b.apply_phone,b.apply_company,b.apply_realyname,b.email,c.phone,c.mail,c.company_name from dataexport_order a
+		LEFT JOIN apply_invoice b on (a.user_id=? and a.id=b.order_id)
+		LEFT JOIN invoice c on (a.user_id=? and a.order_code=c.order_code)
+		where a.user_id=? and (a.user_phone is not null or b.apply_company is not null or c.company_name is not null) order by a.id desc limit 100`, _id, _id, _id)
+	if orders != nil {
+		for _, v := range *orders {
+			if order_phone := strings.TrimSpace(ObjToString(v["user_phone"])); order_phone != "" && !phone_map[order_phone] {
+				phone_map[order_phone] = true
+				phone_array = append(phone_array, order_phone)
+			}
+			if apply_invoice_phone := strings.TrimSpace(ObjToString(v["apply_phone"])); apply_invoice_phone != "" && !phone_map[apply_invoice_phone] {
+				phone_map[apply_invoice_phone] = true
+				phone_array = append(phone_array, apply_invoice_phone)
+			}
+			if invoice_phone := strings.TrimSpace(ObjToString(v["phone"])); invoice_phone != "" && !phone_map[invoice_phone] {
+				phone_map[invoice_phone] = true
+				phone_array = append(phone_array, invoice_phone)
+			}
+			company = strings.TrimSpace(ObjToString(v["company_name"]))
+			if company == "" {
+				company = strings.TrimSpace(ObjToString(v["apply_company"]))
+			}
+			if email == "" {
+				email = strings.TrimSpace(ObjToString(v["mail"]))
+			}
+			if email == "" {
+				email = strings.TrimSpace(ObjToString(v["email"]))
+			}
+			name = strings.TrimSpace(ObjToString(v["apply_realyname"]))
 		}
 	}
-	company := ObjToString(m["s_company"])
+	if phone != "" {
+		entniche_info := Mysql_From_Jianyu.SelectBySql(`select name,admin from entniche_info where phone=? order by id desc limit 100`, phone)
+		if entniche_info != nil {
+			for _, v := range *entniche_info {
+				if entniche_info_name := strings.TrimSpace(ObjToString(v["name"])); entniche_info_name != "" {
+					company = entniche_info_name
+				}
+				if entniche_info_admin := strings.TrimSpace(ObjToString(v["admin"])); entniche_info_admin != "" {
+					name = entniche_info_admin
+				}
+				if company != "" && name != "" {
+					break
+				}
+			}
+		}
+	}
+	//
+	a_collect_phone, _ := m["a_collect_phone"].([]interface{})
+	for _, v := range a_collect_phone {
+		if vs := strings.TrimSpace(ObjToString(v)); vs != "" && !phone_map[vs] {
+			phone_map[vs] = true
+			phone_array = append(phone_array, vs)
+		}
+	}
+	//注册时候的公司名称
+	if company == "" {
+		company = strings.TrimSpace(ObjToString(m["s_company"]))
+	}
+	//超级订阅试用
 	job := ""
 	user_msg, user_msg_ok := Mgo.FindOneByField("user_msg", map[string]interface{}{
 		"s_userId": _id,
 	}, map[string]interface{}{
 		"s_company": 1,
 		"s_job":     1,
+		"s_name":    1,
+		"s_phone":   1,
 	})
 	if user_msg_ok && user_msg != nil {
 		if company == "" {
-			company = ObjToString((*user_msg)["s_company"])
+			company = strings.TrimSpace(ObjToString((*user_msg)["s_company"]))
+		}
+		if name == "" {
+			name = ObjToString((*user_msg)["s_name"])
 		}
 		job = ObjToString((*user_msg)["s_job"])
+		if user_msg_phone := strings.TrimSpace(ObjToString((*user_msg)["s_phone"])); user_msg_phone != "" && !phone_map[user_msg_phone] {
+			phone_map[user_msg_phone] = true
+			phone_array = append(phone_array, user_msg_phone)
+		}
 	}
+	//开通大会员
 	if company == "" {
 		member, member_ok := Mgo.FindOneByField("member", map[string]interface{}{
 			"userid": _id,
@@ -235,23 +322,41 @@ func new_raw_user(m map[string]interface{}, flag bool) *raw_user {
 			"entname": 1,
 		})
 		if member_ok && member != nil {
-			company = ObjToString((*member)["company"])
+			company = strings.TrimSpace(ObjToString((*member)["entname"]))
 		}
 	}
-	if company == "" {
+	//以前申请打开微信推送模板消息,目前入口已关闭
+	if flag {
 		applysub_user, applysub_user_ok := Mgo.FindOneByField("applysub_user", map[string]interface{}{
 			"s_openid": s_m_openid,
 		}, map[string]interface{}{
 			"s_company": 1,
+			"s_phone":   1,
 		})
 		if applysub_user_ok && applysub_user != nil {
-			company = ObjToString((*applysub_user)["s_company"])
+			if company == "" {
+				company = strings.TrimSpace(ObjToString((*applysub_user)["s_company"]))
+			}
+			if applysub_user_phone := strings.TrimSpace(ObjToString((*applysub_user)["s_phone"])); applysub_user_phone != "" && !phone_map[applysub_user_phone] {
+				phone_map[applysub_user_phone] = true
+				phone_array = append(phone_array, applysub_user_phone)
+			}
 		}
 	}
+	//绑定的手机号要放数组第一个,省份、城市从手机号归属地中取
+	if len(phone_array) > 0 {
+		phoneData, err := phonedata.Find(phone_array[0])
+		if err == nil {
+			province = phoneData.Province
+			city = phoneData.City
+		}
+	}
+	//关注状态
 	follow_status := 1
 	if s_m_openid != "" && IntAllDef(m["i_ispush"], 1) == 0 {
 		follow_status = 2
 	}
+	//推荐人
 	channel_id := ""
 	if flag {
 		person_invitelink, person_invitelink_ok := Mgo.FindOneByField("person_invitelink", map[string]interface{}{
@@ -283,19 +388,6 @@ func new_raw_user(m map[string]interface{}, flag bool) *raw_user {
 			}
 		}
 	}
-	email := ObjToString(m["s_myemail"])
-	if email == "" {
-		o_jy, _ := m["o_jy"].(map[string]interface{})
-		email = ObjToString(o_jy["s_email"])
-	}
-	if email == "" {
-		o_vipjy, _ := m["o_vipjy"].(map[string]interface{})
-		email = ObjToString(o_vipjy["s_email"])
-	}
-	if email == "" {
-		o_member_jy, _ := m["o_member_jy"].(map[string]interface{})
-		email = ObjToString(o_member_jy["s_email"])
-	}
 	return &raw_user{
 		User_id:        _id,
 		Open_id:        s_m_openid,
@@ -308,10 +400,11 @@ func new_raw_user(m map[string]interface{}, flag bool) *raw_user {
 		Job:            job,
 		Source_module:  ObjToString(m["s_module"]),
 		Source_channel: ObjToString(m["s_rsource"]),
-		Phone:          phone,
+		Phone:          strings.Join(phone_array, ","),
 		Channel_id:     channel_id,
 		Email:          email,
 		Timestamp:      NowFormat(Date_Full_Layout),
+		Name:           name,
 		Follow_status:  follow_status,
 	}
 }

+ 1 - 1
online_syncto_offline/entity/raw_user.go

@@ -15,7 +15,7 @@ func (r *raw_user) TableName() string {
 
 //
 func (r *raw_user) SaveFields() []string {
-	return []string{"id", "user_id", "reg_time", "province", "city", "reg_type", "device", "company", "job", "source_module", "source_channel", "follow_status", "phone", "openid", "channel_id", "email", "timestamp"}
+	return []string{"id", "user_id", "reg_time", "province", "city", "reg_type", "device", "company", "job", "source_module", "source_channel", "follow_status", "phone", "openid", "channel_id", "name", "email", "timestamp"}
 }
 
 //