diff --git a/api/mobile/survey.go b/api/mobile/survey.go
index 2cf503120f1a7d81f3dcb936eed02f679abf4bfa..f82918fb27ad0511db47d6ef31070c6f6d18eab8 100755
--- a/api/mobile/survey.go
+++ b/api/mobile/survey.go
@@ -116,34 +116,87 @@ func ExportSurveyUserExcel(c *gin.Context) {
 	_ = c.ShouldBindQuery(&req)
 
 	req.PageSize = 99999
+	req.Status = 1
 
 	_, list, _ := service.GetSurveyUserList(req)
 
-	fileName := "用户列表" + time.Now().Format("20060102")
+	fileName := "留资信息列表" + time.Now().Format("20060102")
 	f := excelize.NewFile()
 	// Create a new sheet.
 	index := f.NewSheet(fileName)
 
-	f.SetCellValue(fileName, "A1", "链接所属人")
-	f.SetCellValue(fileName, "B1", "链接所属人电话")
-	f.SetCellValue(fileName, "C1", "下单时间")
-	f.SetCellValue(fileName, "D1", "开通天数")
-	f.SetCellValue(fileName, "E1", "订单金额")
-	f.SetCellValue(fileName, "F1", "支付金额")
-	f.SetCellValue(fileName, "G1", "订单类型")
-	f.SetCellValue(fileName, "H1", "备注")
+	f.MergeCell(fileName, "A1", "E1")
+	f.SetCellValue(fileName, "A1", "留资信息")
+	f.MergeCell(fileName, "F1", "P1")
+	f.SetCellValue(fileName, "F1", "电销沟通结果")
+	f.MergeCell(fileName, "Q1", "U1")
+	f.SetCellValue(fileName, "Q1", "渠道信息")
+
+	f.SetCellValue(fileName, "A2", "联系人")
+	f.SetCellValue(fileName, "B2", "联系电话")
+	f.SetCellValue(fileName, "C2", "留资时间")
+	f.SetCellValue(fileName, "D2", "留资选配产品")
+	f.SetCellValue(fileName, "E2", "备注")
+	f.SetCellValue(fileName, "F2", "电话沟通")
+	f.SetCellValue(fileName, "G2", "沟通日期")
+	f.SetCellValue(fileName, "H2", "医院名称")
+	f.SetCellValue(fileName, "I2", "医院状态")
+	f.SetCellValue(fileName, "J2", "开业时间")
+	f.SetCellValue(fileName, "K2", "所属省份")
+	f.SetCellValue(fileName, "L2", "签单状态")
+	f.SetCellValue(fileName, "M2", "转介绍渠道状态")
+	f.SetCellValue(fileName, "N2", "签约金额")
+	f.SetCellValue(fileName, "O2", "签约选配产品")
+	f.SetCellValue(fileName, "P2", "电销人员")
+	f.SetCellValue(fileName, "Q2", "转介绍人")
+	f.SetCellValue(fileName, "R2", "转介绍人电话")
+	f.SetCellValue(fileName, "S2", "渠道类型")
+	f.SetCellValue(fileName, "T2", "渠道")
+	f.SetCellValue(fileName, "U2", "渠道链接")
 
 	for k, v := range list {
 
-		a := strconv.Itoa(k + 2)
-		f.SetCellValue(fileName, "A"+a, v.WorkerName)
-		f.SetCellValue(fileName, "B"+a, v.WorkerMobile)
-		f.SetCellValue(fileName, "C"+a, v.WorkerMobile)
-		f.SetCellValue(fileName, "D"+a, v.WorkerMobile)
-		f.SetCellValue(fileName, "E"+a, v.WorkerMobile)
-		f.SetCellValue(fileName, "F"+a, v.WorkerMobile)
-		f.SetCellValue(fileName, "G"+a, v.WorkerMobile)
-		f.SetCellValue(fileName, "H"+a, v.WorkerMobile)
+		surveyData := service.GetSurveyUserDataList(v.Id)
+
+		optionData := ""
+		for _, v2 := range surveyData {
+			optionData += v2.OptionValue + " * " + strconv.Itoa(v2.OptionNum) + "; "
+		}
+
+		isReference := "转介绍留资"
+		if v.Contacts == v.WorkerMobile {
+			isReference = "直接留资"
+		}
+
+		moc := ""
+		if v.MocId == 1 {
+			moc = "短信"
+		}
+
+		url := global.GVA_CONFIG.Common.Url + "?" + v.Vcode
+
+		a := strconv.Itoa(k + 3)
+		f.SetCellValue(fileName, "A"+a, v.Contacts)
+		f.SetCellValue(fileName, "B"+a, v.ContactsMobile)
+		f.SetCellValue(fileName, "C"+a, v.CreateTime)
+		f.SetCellValue(fileName, "D"+a, optionData)
+		f.SetCellValue(fileName, "E"+a, "")
+		f.SetCellValue(fileName, "F"+a, "")
+		f.SetCellValue(fileName, "G"+a, "")
+		f.SetCellValue(fileName, "H"+a, "")
+		f.SetCellValue(fileName, "I"+a, "")
+		f.SetCellValue(fileName, "J"+a, "")
+		f.SetCellValue(fileName, "K"+a, "")
+		f.SetCellValue(fileName, "L"+a, "")
+		f.SetCellValue(fileName, "M"+a, "")
+		f.SetCellValue(fileName, "N"+a, "")
+		f.SetCellValue(fileName, "O"+a, "")
+		f.SetCellValue(fileName, "P"+a, "")
+		f.SetCellValue(fileName, "Q"+a, v.Reference)
+		f.SetCellValue(fileName, "R"+a, v.ReferenceMobile)
+		f.SetCellValue(fileName, "S"+a, isReference)
+		f.SetCellValue(fileName, "T"+a, moc)
+		f.SetCellValue(fileName, "U"+a, url)
 	}
 
 	// Set active sheet of the workbook.
diff --git a/config.yaml b/config.yaml
index 6f666537f9c6f997b6752a030fa25c565a12d62c..8d9c70eaed4d16629227ac974d9c014212156bd9 100755
--- a/config.yaml
+++ b/config.yaml
@@ -116,7 +116,7 @@ encrypt:
   key: "75SIQyfvwHDU0GbO"
 common:
   type: "2"
-  url: "https://tdt.pet-dbc.cn/"
+  url: "https://tdt.pet-dbc.cn"
 
 sms:
   smsname: "dbc"
diff --git a/model/request/survey.go b/model/request/survey.go
index f6627367fe5f71f0078831e598679041d574bd96..f8ba989676e2ba5442bddd5e88e24f7e99caf508 100755
--- a/model/request/survey.go
+++ b/model/request/survey.go
@@ -27,6 +27,7 @@ type GetSurveyUserListReq struct {
 	ReferenceMobile string `gorm:"type:string(255)" json:"reference_mobile"`
 	StartCreateTime string `json:"start_create_time" form:"start_create_time"`
 	EndCreateTime   string `json:"end_create_time" form:"end_create_time"`
+	Status          int    `gorm:"type:int(255)" json:"status"`
 }
 
 type GetSurveyUserListReply struct {
@@ -36,15 +37,21 @@ type GetSurveyUserListReply struct {
 
 type GetSurveyUserList struct {
 	Data            []model.SurveyUserData `gorm:"-" json:"data"`
+	Id              int                    `gorm:"type:int(255)" json:"id"`
 	SurveyId        int                    `gorm:"type:int(255)" json:"survey_id"`
 	UserId          int                    `gorm:"type:int(255)" json:"user_id"`
 	MocId           int                    `gorm:"type:int(255)" json:"moc_id"`
+	CodeMobile      string                 `gorm:"type:string(255)" json:"code_mobile"`
+	Code            string                 `gorm:"type:string(255)" json:"code"`
 	Contacts        string                 `gorm:"type:string(255)" json:"contacts"`
 	ContactsMobile  string                 `gorm:"type:string(255)" json:"contacts_mobile"`
 	Reference       string                 `gorm:"type:string(255)" json:"reference"`
 	ReferenceMobile string                 `gorm:"type:string(255)" json:"reference_mobile"`
 	WorkerName      string                 `gorm:"type:string(255)" json:"worker_name"`
 	WorkerMobile    string                 `gorm:"type:string(255)" json:"worker_mobile"`
+	CreateTime      string                 `gorm:"type:string(255)" json:"create_time"`
+	Vcode           string                 `gorm:"type:string(255)" json:"vcode"`
+	Status          int                    `gorm:"type:int(255)" json:"status"`
 }
 
 type GetSurveyLogListReq struct {
diff --git a/service/survey.go b/service/survey.go
index 214b0dc551f879dd2efb024e95360c88a4dfcb04..1c51f3a570d70f5ff33655eb6834de66fd79a8bd 100755
--- a/service/survey.go
+++ b/service/survey.go
@@ -41,43 +41,49 @@ func GetSurveyUserList(req request.GetSurveyUserListReq) (error, []request.GetSu
 	list := make([]request.GetSurveyUserList, 0)
 
 	table := " survey_user as sur " +
-		" left join customer_user as cu on sur.user_id=cu.id "
+		" left join customer_user as cu on sur.user_id=cu.id " +
+		" left join vcode as vc on sur.user_id=vc.user_id and sur.moc_id = vc.moc_id "
 
-	field := " sur.id, sur.user_id, sur.moc_id, sur.contacts, sur.contacts_mobile" +
+	field := " sur.id, sur.user_id, sur.moc_id, sur.code_mobile, sur.code, sur.contacts, sur.contacts_mobile" +
 		", sur.reference, sur.reference_mobile, sur.create_time" +
 		", sur.country, sur.area, sur.region, sur.city" +
-		", cu.worker_name, cu.worker_mobile "
+		", cu.worker_name, cu.worker_mobile " +
+		", vc.code as vcode "
 
 	conditions := ""
 
 	orderby := " sur.create_time desc "
 
 	if req.MocId != 0 {
-		conditions += " AND sur.moc_id = " + strconv.Itoa(currentpage)
+		conditions += " AND sur.moc_id = " + strconv.Itoa(req.MocId)
+	}
+
+	if req.Status != 0 {
+		conditions += " AND sur.status = " + strconv.Itoa(req.Status)
 	}
 
 	if req.Region != "" {
-		conditions += " AND region like '%" + req.Region + "%'"
+		conditions += " AND sur.region like '%" + req.Region + "%'"
 	}
 
 	if req.City != "" {
-		conditions += " AND city like '%" + req.City + "%'"
+		conditions += " AND sur.city like '%" + req.City + "%'"
 	}
 
 	if req.Contacts != "" {
-		conditions += " AND contacts like '%" + req.Contacts + "%'"
+		conditions += " AND sur.contacts like '%" + req.Contacts + "%'"
 	}
 
 	if req.ContactsMobile != "" {
-		conditions += " AND contacts_mobile like '%" + req.ContactsMobile + "%'"
+		conditions += " AND sur.contacts_mobile like '%" + req.ContactsMobile + "%'"
 	}
 
 	if req.Reference != "" {
-		conditions += " AND reference like '%" + req.Reference + "%'"
+		conditions += " AND sur.reference like '%" + req.Reference + "%'"
 	}
 
 	if req.ReferenceMobile != "" {
-		conditions += " AND reference_mobile like '%" + req.ReferenceMobile + "%'"
+		conditions += " AND sur.reference_mobile like '%" + req.ReferenceMobile + "%'"
 	}
 
 	if req.StartCreateTime != "" {
@@ -91,7 +97,7 @@ func GetSurveyUserList(req request.GetSurveyUserListReq) (error, []request.GetSu
 	//@@总条数,总页数
 	var totalItem int64 = 0
 
-	sqlStr := "SELECT count(vo.id) as totalItem FROM " + table + " where 1=1 " + conditions
+	sqlStr := "SELECT count(sur.id) as totalItem FROM " + table + " where 1=1 " + conditions
 	global.GVA_DB.Raw(sqlStr).Count(&totalItem) //获取总条数
 
 	sqlStr2 := "SELECT " + field +
@@ -107,6 +113,27 @@ func GetSurveyUserList(req request.GetSurveyUserListReq) (error, []request.GetSu
 	return nil, list, totalItem
 }
 
+func GetSurveyUserDataList(id int) []model.SurveyUserData {
+
+	list := make([]model.SurveyUserData, 0)
+
+	table := " survey_user_data "
+
+	field := " survey_user_id, `option`, option_value, option_num, price "
+
+	conditions := " AND survey_user_id = " + strconv.Itoa(id)
+
+	sqlStr2 := "SELECT " + field +
+		" FROM " + table +
+		" WHERE 1>0 " + conditions
+
+	global.GVA_DB.Raw(sqlStr2).Scan(&list)
+	if global.GVA_DB.Error != nil {
+		return []model.SurveyUserData{}
+	}
+	return list
+}
+
 func GetSurveyLogList(req request.GetSurveyLogListReq) (error, []request.GetSurveyLogList, int64) {
 	pagesize := 10
 	page := 1