Преглед изворни кода

crm query information structure json test finished.

master
Patrick Peng Sun пре 8 година
родитељ
комит
d01652f648
12 измењених фајлова са 15867 додато и 21 уклоњено
  1. +90
    -0
      crmLead.go
  2. +381
    -0
      crmLead_test.go
  3. +2
    -21
      eventSubscribe.go
  4. +97
    -0
      sample_data/crm_view_lead.json
  5. +3007
    -0
      sample_data/crmhar/save-lead.har
  6. +756
    -0
      sample_data/crmhar/search-ldea.har
  7. +1127
    -0
      sample_data/crmhar/search-lead-Archive 17-06-04 14-01-27.har
  8. +1031
    -0
      sample_data/crmhar/search-lead-by-wechat-id-c.hitxy.org.au.har
  9. +1528
    -0
      sample_data/crmhar/upload-头像.har
  10. +7465
    -0
      sample_data/crmhar/view-specific-lead.har
  11. +330
    -0
      sample_data/crmhar/上传照片-192.168.1.39.har
  12. +53
    -0
      sample_data/sample_crm_lead_query.json

+ 90
- 0
crmLead.go Прегледај датотеку

package main

import "time"

type crmLeadInfo struct {
ID string `json:"id"`
Name string `json:"name,omitempty"`
Deleted bool `json:"deleted,omitempty"`
SalutationName string `json:"salutationName,omitempty"`
FirstName string `json:"firstName,omitempty"`
LastName string `json:"lastName,omitempty"`
Title string `json:"title,omitempty"`
Status string `json:"status,omitempty"`
Source string `json:"source,omitempty"`
Industry string `json:"industry,omitempty"`
OpportunityAmount int `json:"opportunityAmount,omitempty"`
Website string `json:"website,omitempty"`
AddressStreet string `json:"addressStreet,omitempty"`
AddressCity string `json:"addressCity,omitempty"`
AddressState string `json:"addressState,omitempty"`
AddressCountry string `json:"addressCountry,omitempty"`
AddressPostalCode string `json:"addresPostalCode,omitempty"`
EmailAddress string `json:"emailAddress,omitempty"`
PhoneNumber string `json:"phoneNumber,omitempty"`
DoNotCall bool `json:"doNotCall,omitempty"`
Description string `json:"description,omitempty"`
CreatedAt string `json:"createdAt,omitempty"`
ModifiedAt string `json:"ModifiedAt,omitempty"`
AccountName string `json:"accountName,omitempty"`
Password string `json:"password,omitempty"`
WechatHitxyID string `json:"wechat_hitxy_id,omitempty"`
Verifier []string `json:"verifier,omitempty"`
OpportunityAmountCurrency string `json:"opportunityAmountCurrency,omitempty"`
OpportunityAmountConverted int `json:"opportunityAmountConverted,omitempty"`
EmailAddressData []struct {
EmailAddress string `json:"emailAddress,omitempty"`
Lower string `json:"lower,omitempty"`
Primary bool `json:"primary,omitempty"`
OptOut bool `json:"optOut,omitempty"`
Invalid bool `json:"invalid,omitempty"`
} `json:"emailAddressData,omitempty"`
PhoneNumberData []struct {
PhoneNumber string `json:"phoneNumber,omitempty"`
Primary bool `json:"primary,omitempty"`
Type string `json:"type,omitempty"`
} `json:"phoneNumberData,omitempty"`
CreatedByID string `json:"createdById,omitempty"`
CreatedByName string `json:"createdByName,omitempty"`
ModifiedByID string `json:"modifiedById,omitempty"`
ModifiedByName string `json:"modifiedByName,omitempty"`
AssignedUserID string `json:"assignedUserId,omitempty"`
AssignedUserName string `json:"assignedUserName,omitempty"`
CampaignID string `json:"campaignId,omitempty"`
CreatedAccountID string `json:"createdAccountId,omitempty"`
CreatedContactID string `json:"createdContactId,omitempty"`
CreatedOpportunityID string `json:"createdOpportunityId,omitempty"`
}

type crmSearchLead struct {
Total int `json:"total"`
List []crmLeadInfo `json:"list"`
}

func (m *crmLeadInfo) getCreatedAt() (r time.Time) {
layout := m.getTimeLayout()
r, _ = time.Parse(layout, m.CreatedAt)
return
}

func (m *crmLeadInfo) setCreatedAt(v time.Time) string {
layout := m.getTimeLayout()
m.CreatedAt = v.Format(layout)
return m.CreatedAt
}

func (m *crmLeadInfo) getModifiedAt() (r time.Time) {
layout := m.getTimeLayout()
r, _ = time.Parse(layout, m.ModifiedAt)
return
}

func (m *crmLeadInfo) setModifiedAt(v time.Time) string {
layout := m.getTimeLayout()
m.ModifiedAt = v.Format(layout)
return m.ModifiedAt
}

func (m *crmLeadInfo) getTimeLayout() string {
return "2006-01-02 15:04:05"
}

+ 381
- 0
crmLead_test.go Прегледај датотеку

package main

import (
"encoding/json"
"log"
"testing"
)

func TestDecodeLeadInfo(t *testing.T) {
msg := `{
"id": "58f4aa0682ea74bb8",
"name": "same email",
"deleted": false,
"salutationName": "Mr",
"firstName": "same",
"lastName": "email",
"title": "title",
"status": "New",
"source": "",
"industry": "",
"opportunityAmount": null,
"website": "",
"addressStreet": "",
"addressCity": "",
"addressState": "",
"addressCountry": "",
"addressPostalCode": "",
"emailAddress": "test@gmail.com",
"phoneNumber": "456",
"doNotCall": false,
"description": "",
"createdAt": "2017-04-17 11:41:58",
"modifiedAt": "2017-04-18 04:41:06",
"accountName": "",
"password": "abcdefg",
"wechat_hitxy_id": "the user id obtained from wechat public account",
"verifier": [
"231823091",
"adkdaifaskfsafsa",
"394kfdjafdsa",
"39410498321041"
],
"opportunityAmountCurrency": null,
"opportunityAmountConverted": null,
"createdById": "1",
"createdByName": "Admin",
"modifiedById": "58ef420cac3cf6c95",
"modifiedByName": "wechat robot",
"assignedUserId": "1",
"assignedUserName": "Admin",
"campaignId": null,
"createdAccountId": null,
"createdContactId": null,
"createdOpportunityId": null
}`

r := crmLeadInfo{}
err := json.Unmarshal([]byte(msg), &r)
log.Println(r)
AssertEqual(t, err, nil, "Decode CRM Lead Json shold be correct")

AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ")
AssertEqual(t, r.Name, "same email", "Name mismatch")
AssertEqual(t, r.Deleted, false, "")
AssertEqual(t, r.SalutationName, "Mr", "")
AssertEqual(t, r.FirstName, "same", "")
AssertEqual(t, r.LastName, "email", "")
AssertEqual(t, r.Title, "title", "")
AssertEqual(t, r.Status, "New", "")
AssertEqual(t, r.Source, "", "")
AssertEqual(t, r.Industry, "", "")
AssertEqual(t, r.OpportunityAmount, 0, "")
AssertEqual(t, r.Website, "", "")
AssertEqual(t, r.AddressStreet, "", "")
AssertEqual(t, r.AddressCity, "", "")
AssertEqual(t, r.AddressState, "", "")
AssertEqual(t, r.AddressCountry, "", "")
AssertEqual(t, r.AddressPostalCode, "", "")
AssertEqual(t, r.EmailAddress, "test@gmail.com", "")
AssertEqual(t, r.PhoneNumber, "456", "")
AssertEqual(t, r.DoNotCall, false, "")
AssertEqual(t, r.Description, "", "")
AssertEqual(t, r.CreatedAt, "2017-04-17 11:41:58", "")
AssertEqual(t, r.ModifiedAt, "2017-04-18 04:41:06", "")
AssertEqual(t, r.AccountName, "", "")
AssertEqual(t, r.Password, "abcdefg", "")
AssertEqual(t, r.WechatHitxyID, "the user id obtained from wechat public account", "")
AssertEqual(t, r.Verifier[0], "231823091", "")
AssertEqual(t, r.Verifier[1], "adkdaifaskfsafsa", "")
AssertEqual(t, r.Verifier[2], "394kfdjafdsa", "")
AssertEqual(t, r.Verifier[3], "39410498321041", "")
AssertEqual(t, r.OpportunityAmountCurrency, "", "")
AssertEqual(t, r.OpportunityAmountConverted, 0, "")
AssertEqual(t, r.CreatedByID, "1", "")
AssertEqual(t, r.CreatedByName, "Admin", "")
AssertEqual(t, r.ModifiedByID, "58ef420cac3cf6c95", "")
AssertEqual(t, r.ModifiedByName, "wechat robot", "")
AssertEqual(t, r.AssignedUserID, "1", "")
AssertEqual(t, r.AssignedUserName, "Admin", "")
AssertEqual(t, r.CampaignID, "", "")
AssertEqual(t, r.CreatedAccountID, "", "")
AssertEqual(t, r.CreatedContactID, "", "")
AssertEqual(t, r.CreatedOpportunityID, "", "")

}

func TestCrmLeadInfoByCompleteInfo(t *testing.T) {
msg := `{
"id": "58f4aa0682ea74bb8",
"name": "same email",
"deleted": false,
"salutationName": "",
"firstName": "same",
"lastName": "email",
"title": "",
"status": "New",
"source": "",
"industry": "",
"opportunityAmount": 120,
"website": "",
"addressStreet": "",
"addressCity": "",
"addressState": "",
"addressCountry": "",
"addressPostalCode": "",
"emailAddress": "test@gmail.com",
"phoneNumber": "456",
"doNotCall": false,
"description": "",
"createdAt": "2017-04-17 11:41:58",
"modifiedAt": "2017-06-04 04:08:16",
"accountName": "",
"password": "abcdefg",
"wechat_hitxy_id": "the user id obtained from wechat public account",
"verifier": [
"231823091",
"adkdaifaskfsafsa",
"394kfdjafdsa",
"39410498321041"
],
"opportunityAmountCurrency": "AUD",
"opportunityAmountConverted": 120,
"emailAddressData": [
{
"emailAddress": "test@gmail.com",
"lower": "test@gmail.com",
"primary": true,
"optOut": false,
"invalid": false
},
{
"emailAddress": "abc@hotmail.com",
"lower": "abc@hotmail.com",
"primary": false,
"optOut": false,
"invalid": false
},
{
"emailAddress": "def@jjx.com.au",
"lower": "def@jjx.com.au",
"primary": false,
"optOut": false,
"invalid": false
}
],
"phoneNumberData": [
{
"phoneNumber": "456",
"primary": true,
"type": "Home"
},
{
"phoneNumber": "123",
"primary": false,
"type": "Mobile"
}
],
"createdById": "1",
"createdByName": "Admin",
"modifiedById": "1",
"modifiedByName": "Admin",
"assignedUserId": "1",
"assignedUserName": "Admin",
"teamsIds": [],
"teamsNames": {},
"campaignId": null,
"campaignName": null,
"createdAccountId": null,
"createdAccountName": null,
"createdContactId": null,
"createdContactName": null,
"createdOpportunityId": null,
"createdOpportunityName": null,
"imagesIds": [],
"imagesNames": {},
"isFollowed": true,
"followersIds": [
"1"
],
"followersNames": {
"1": "Admin"
},
"imagesTypes": {}
}`
r := crmLeadInfo{}
err := json.Unmarshal([]byte(msg), &r)
log.Println(r)
AssertEqual(t, err, nil, "")

AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ")
AssertEqual(t, r.Name, "same email", "Name mismatch")
AssertEqual(t, r.Deleted, false, "")
AssertEqual(t, r.SalutationName, "", "")
AssertEqual(t, r.FirstName, "same", "")
AssertEqual(t, r.LastName, "email", "")
AssertEqual(t, r.Title, "", "")
AssertEqual(t, r.Status, "New", "")
AssertEqual(t, r.Source, "", "")
AssertEqual(t, r.Industry, "", "")
AssertEqual(t, r.OpportunityAmount, 120, "")
AssertEqual(t, r.Website, "", "")
AssertEqual(t, r.AddressStreet, "", "")
AssertEqual(t, r.AddressCity, "", "")
AssertEqual(t, r.AddressState, "", "")
AssertEqual(t, r.AddressCountry, "", "")
AssertEqual(t, r.AddressPostalCode, "", "")
AssertEqual(t, r.EmailAddress, "test@gmail.com", "")
AssertEqual(t, r.PhoneNumber, "456", "")
AssertEqual(t, r.DoNotCall, false, "")
AssertEqual(t, r.Description, "", "")
AssertEqual(t, r.CreatedAt, "2017-04-17 11:41:58", "")
AssertEqual(t, r.ModifiedAt, "2017-06-04 04:08:16", "")
AssertEqual(t, r.AccountName, "", "")
AssertEqual(t, r.Password, "abcdefg", "")
AssertEqual(t, r.WechatHitxyID, "the user id obtained from wechat public account", "")
AssertEqual(t, r.Verifier[0], "231823091", "")
AssertEqual(t, r.Verifier[1], "adkdaifaskfsafsa", "")
AssertEqual(t, r.Verifier[2], "394kfdjafdsa", "")
AssertEqual(t, r.Verifier[3], "39410498321041", "")
AssertEqual(t, r.OpportunityAmountCurrency, "AUD", "")
AssertEqual(t, r.OpportunityAmountConverted, 120, "")
AssertEqual(t, r.CreatedByID, "1", "")
AssertEqual(t, r.CreatedByName, "Admin", "")
AssertEqual(t, r.ModifiedByID, "1", "")
AssertEqual(t, r.ModifiedByName, "Admin", "")
AssertEqual(t, r.AssignedUserID, "1", "")
AssertEqual(t, r.AssignedUserName, "Admin", "")
AssertEqual(t, r.CampaignID, "", "")
AssertEqual(t, r.CreatedAccountID, "", "")
AssertEqual(t, r.CreatedContactID, "", "")
AssertEqual(t, r.CreatedOpportunityID, "", "")

AssertEqual(t, r.EmailAddressData[0].EmailAddress, "test@gmail.com", "")
AssertEqual(t, r.EmailAddressData[0].Lower, "test@gmail.com", "")
AssertEqual(t, r.EmailAddressData[0].Primary, true, "")
AssertEqual(t, r.EmailAddressData[0].OptOut, false, "")
AssertEqual(t, r.EmailAddressData[0].Invalid, false, "")

AssertEqual(t, r.EmailAddressData[1].EmailAddress, "abc@hotmail.com", "")
AssertEqual(t, r.EmailAddressData[1].Lower, "abc@hotmail.com", "")
AssertEqual(t, r.EmailAddressData[1].Primary, false, "")
AssertEqual(t, r.EmailAddressData[1].OptOut, false, "")
AssertEqual(t, r.EmailAddressData[1].Invalid, false, "")

AssertEqual(t, r.EmailAddressData[2].EmailAddress, "def@jjx.com.au", "")
AssertEqual(t, r.EmailAddressData[2].Lower, "def@jjx.com.au", "")
AssertEqual(t, r.EmailAddressData[2].Primary, false, "")
AssertEqual(t, r.EmailAddressData[2].OptOut, false, "")
AssertEqual(t, r.EmailAddressData[2].Invalid, false, "")

AssertEqual(t, r.PhoneNumberData[0].PhoneNumber, "456", "")
AssertEqual(t, r.PhoneNumberData[0].Primary, true, "")
AssertEqual(t, r.PhoneNumberData[0].Type, "Home", "")

AssertEqual(t, r.PhoneNumberData[1].PhoneNumber, "123", "")
AssertEqual(t, r.PhoneNumberData[1].Primary, false, "")
AssertEqual(t, r.PhoneNumberData[1].Type, "Mobile", "")

}

func TestSearchResult(t *testing.T) {
msg := `{
"total": 2,
"list": [
{
"id": "58f4aa0682ea74bb8",
"name": "same email",
"deleted": false,
"salutationName": "",
"firstName": "same",
"lastName": "email",
"title": "",
"status": "New",
"source": "",
"industry": "",
"opportunityAmount": 120,
"website": "",
"addressStreet": "",
"addressCity": "",
"addressState": "",
"addressCountry": "",
"addressPostalCode": "",
"emailAddress": "test@gmail.com",
"phoneNumber": "456",
"doNotCall": true,
"description": "",
"createdAt": "2017-04-17 11:41:58",
"modifiedAt": "2017-06-04 06:57:48",
"accountName": "",
"password": "abcdefg",
"wechat_hitxy_id": "the user id obtained from wechat public account",
"verifier": [
"231823091",
"adkdaifaskfsafsa",
"394kfdjafdsa",
"39410498321041"
],
"opportunityAmountCurrency": "AUD",
"opportunityAmountConverted": 120,
"createdById": "1",
"createdByName": "Admin",
"modifiedById": "1",
"modifiedByName": "Admin",
"assignedUserId": "1",
"assignedUserName": "Admin",
"campaignId": null,
"createdAccountId": null,
"createdContactId": null,
"createdOpportunityId": null
},
{
"id": "58f4a849502da6f33",
"name": "not searchable",
"deleted": false,
"salutationName": "Mr.",
"firstName": "not",
"lastName": "searchable",
"title": "",
"status": "New",
"source": "",
"industry": "",
"opportunityAmount": null,
"website": "",
"addressStreet": "",
"addressCity": "",
"addressState": "",
"addressCountry": "",
"addressPostalCode": "",
"emailAddress": null,
"phoneNumber": null,
"doNotCall": false,
"description": "",
"createdAt": "2017-04-17 11:34:33",
"modifiedAt": "2017-04-18 05:09:36",
"accountName": "",
"password": null,
"wechat_hitxy_id": "the user id obtained from wechat public account",
"verifier": [],
"opportunityAmountCurrency": null,
"opportunityAmountConverted": null,
"createdById": "1",
"createdByName": "Admin",
"modifiedById": "58ef420cac3cf6c95",
"modifiedByName": "wechat robot",
"assignedUserId": "1",
"assignedUserName": "Admin",
"campaignId": null,
"createdAccountId": null,
"createdContactId": null,
"createdOpportunityId": null
}
]
}`
r := crmSearchLead{}
err := json.Unmarshal([]byte(msg), &r)
AssertEqual(t, err, nil, "")
AssertEqual(t, r.Total, 2, "")
AssertEqual(t, len(r.List), 2, "")
AssertEqual(t, r.List[0].ID, "58f4aa0682ea74bb8", "")
AssertEqual(t, r.List[1].ID, "58f4a849502da6f33", "")
}

+ 2
- 21
eventSubscribe.go Прегледај датотеку



func onSubscribe(in InWechatMsg) { func onSubscribe(in InWechatMsg) {
openID := in.header.FromUserName openID := in.header.FromUserName
//getUser fromCRM
log.Println(openID) log.Println(openID)
} }


/*
{
"subscribe": 1,
"openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
"nickname": "Band",
"sex": 1,
"language": "zh_CN",
"city": "广州",
"province": "广东",
"country": "中国",

"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"subscribe_time": 1382694957,
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
"remark": "",

"groupid": 0,

"tagid_list":[128,2]
}
*/
//WechatUserInfo response for wechat user info.
type WechatUserInfo struct { type WechatUserInfo struct {
Subscribe int32 `json:"subscribe"` Subscribe int32 `json:"subscribe"`
OpenID string `json:"openid"` OpenID string `json:"openid"`

+ 97
- 0
sample_data/crm_view_lead.json Прегледај датотеку

{
"id": "58f4aa0682ea74bb8",
"name": "same email",
"deleted": false,
"salutationName": "",
"firstName": "same",
"lastName": "email",
"title": "",
"status": "New",
"source": "",
"industry": "",
"opportunityAmount": 120,
"website": "",
"addressStreet": "",
"addressCity": "",
"addressState": "",
"addressCountry": "",
"addressPostalCode": "",
"emailAddress": "test@gmail.com",
"phoneNumber": "456",
"doNotCall": false,
"description": "",
"createdAt": "2017-04-17 11:41:58",
"modifiedAt": "2017-06-04 04:08:16",
"accountName": "",
"password": "abcdefg",
"wechat_hitxy_id": "the user id obtained from wechat public account",
"verifier": [
"231823091",
"adkdaifaskfsafsa",
"394kfdjafdsa",
"39410498321041"
],
"opportunityAmountCurrency": "AUD",
"opportunityAmountConverted": 120,
"emailAddressData": [
{
"emailAddress": "test@gmail.com",
"lower": "test@gmail.com",
"primary": true,
"optOut": false,
"invalid": false
},
{
"emailAddress": "abc@hotmail.com",
"lower": "abc@hotmail.com",
"primary": false,
"optOut": false,
"invalid": false
},
{
"emailAddress": "def@jjx.com.au",
"lower": "def@jjx.com.au",
"primary": false,
"optOut": false,
"invalid": false
}
],
"phoneNumberData": [
{
"phoneNumber": "456",
"primary": true,
"type": "Home"
},
{
"phoneNumber": "123",
"primary": false,
"type": "Mobile"
}
],
"createdById": "1",
"createdByName": "Admin",
"modifiedById": "1",
"modifiedByName": "Admin",
"assignedUserId": "1",
"assignedUserName": "Admin",
"teamsIds": [],
"teamsNames": {},
"campaignId": null,
"campaignName": null,
"createdAccountId": null,
"createdAccountName": null,
"createdContactId": null,
"createdContactName": null,
"createdOpportunityId": null,
"createdOpportunityName": null,
"imagesIds": [],
"imagesNames": {},
"isFollowed": true,
"followersIds": [
"1"
],
"followersNames": {
"1": "Admin"
},
"imagesTypes": {}
}

+ 3007
- 0
sample_data/crmhar/save-lead.har
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 756
- 0
sample_data/crmhar/search-ldea.har
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 1127
- 0
sample_data/crmhar/search-lead-Archive 17-06-04 14-01-27.har
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 1031
- 0
sample_data/crmhar/search-lead-by-wechat-id-c.hitxy.org.au.har
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 1528
- 0
sample_data/crmhar/upload-头像.har
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 7465
- 0
sample_data/crmhar/view-specific-lead.har
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 330
- 0
sample_data/crmhar/上传照片-192.168.1.39.har
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 53
- 0
sample_data/sample_crm_lead_query.json Прегледај датотеку

{
"total": 1,
"list": [
{
"id": "58f4aa0682ea74bb8",
"name": "same email",
"deleted": false,
"salutationName": "",
"firstName": "same",
"lastName": "email",
"title": "",
"status": "New",
"source": "",
"industry": "",
"opportunityAmount": null,
"website": "",
"addressStreet": "",
"addressCity": "",
"addressState": "",
"addressCountry": "",
"addressPostalCode": "",
"emailAddress": "test@gmail.com",
"phoneNumber": "456",
"doNotCall": false,
"description": "",
"createdAt": "2017-04-17 11:41:58",
"modifiedAt": "2017-04-18 04:41:06",
"accountName": "",
"password": "abcdefg",
"wechat_hitxy_id": "the user id obtained from wechat public account",
"verifier": [
"231823091",
"adkdaifaskfsafsa",
"394kfdjafdsa",
"39410498321041"
],
"opportunityAmountCurrency": null,
"opportunityAmountConverted": null,
"createdById": "1",
"createdByName": "Admin",
"modifiedById": "58ef420cac3cf6c95",
"modifiedByName": "wechat robot",
"assignedUserId": "1",
"assignedUserName": "Admin",
"campaignId": null,
"createdAccountId": null,
"createdContactId": null,
"createdOpportunityId": null
}
]
}



Loading…
Откажи
Сачувај