|
@@ -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,
|
|
|
}
|
|
|
}
|