Selaa lähdekoodia

Merge branch 'dev/v1.0.4_wjh' into feature/v1.0.4

* dev/v1.0.4_wjh:
  xg

# Conflicts:
#	api/internal/types/types.go
Jianghan 1 vuosi sitten
vanhempi
commit
f6c42daca9

+ 106 - 105
api/application.api

@@ -20,15 +20,15 @@ type (
 		EntId        int64   `header:"entId,optional"`
 		AccountId    int64   `header:"accountId,optional"`
 		EntDeptId    int64   `header:"entDeptId,optional"`
-		CluesSource  string  `json:"cluesSource"`           //线索来源
-		ClueName     string  `json:"clueName"`              //线索名称
-		Summary      string  `json:"summary"`               //概要信息
+		CluesSource  string  `json:"cluesSource"` //线索来源
+		ClueName     string  `json:"clueName"` //线索名称
+		Summary      string  `json:"summary"` //概要信息
 		FollowUpTime int64   `json:"followUpTime,optional"` //下次跟进时间(时间戳)
-		Types        int64   `json:"types"`                 //处理方式 1自办;2转办;3待处理
-		User         []int64 `json:"user,optional"`         //企业用户id
+		Types        int64   `json:"types"` //处理方式 1自办;2转办;3待处理
+		User         []int64 `json:"user,optional"` //企业用户id
 		EmployInfoId int64   `json:"employInfoId,optional"` //资讯收录id
-		CreateName   string  `json:"createName"`            //创建人
-		Channel      string  `json:"channel"`               //渠道来源:网页、手动创建
+		CreateName   string  `json:"createName"` //创建人
+		Channel      string  `json:"channel"` //渠道来源:网页、手动创建
 	}
 	SaleChanceReq {
 		AppId             string  `header:"appId,default=10000"`
@@ -38,23 +38,23 @@ type (
 		EntId             int64   `header:"entId,optional"`
 		AccountId         int64   `header:"accountId,optional"`
 		EntDeptId         int64   `header:"entDeptId,optional"`
-		ChanceName        string  `json:"chanceName"`                 //机会名称
-		Summary           string  `json:"summary"`                    //概要信息
-		ChanceClassify    int64   `json:"chanceClassify"`             //机会分类
+		ChanceName        string  `json:"chanceName"` //机会名称
+		Summary           string  `json:"summary"` //概要信息
+		ChanceClassify    int64   `json:"chanceClassify"` //机会分类
 		ExpectedOrderTime int64   `json:"expectedOrderTime,optional"` //最初预计落单段时间 时间戳
-		ExpectedMoney     float64 `json:"expectedMoney,optional"`     //最初预计落单金额
-		CustomName        string  `json:"customName"`                 //客户全称
-		BusinessType      int64   `json:"businessType"`               //业务类型  1新客户需求 2老客户需求 3简易项目流程
-		Remarks           string  `json:"remarks,optional"`           //备注
-		NextfollowUpTime  int64   `json:"nextfollowUpTime,optional"`  //下次跟进时间戳
-		Types             int64   `json:"types"`                      //处理方式 1自办;2转办;3待处理
-		User              []int64 `json:"user,optional"`              //企业用户id
-		EmployInfoId      int64   `json:"employInfoId,optional"`      //资讯收录id
-		CustomId          int64   `json:"customId,optional"`          //客户id
-		CreateName        string  `json:"createName"`                 //创建人
-		ChanceSource      int64   `json:"chanceSource"`               //机会来源
-		OwnerId           int64   `json:"ownerId,optional"`           //潜客收录id(人脉)
-		BusinessId        int64   `json:"businessId,optional"`        //商机收录id(人脉)
+		ExpectedMoney     float64 `json:"expectedMoney,optional"` //最初预计落单金额
+		CustomName        string  `json:"customName"` //客户全称
+		BusinessType      int64   `json:"businessType"` //业务类型  1新客户需求 2老客户需求 3简易项目流程
+		Remarks           string  `json:"remarks,optional"` //备注
+		NextfollowUpTime  int64   `json:"nextfollowUpTime,optional"` //下次跟进时间戳
+		Types             int64   `json:"types"` //处理方式 1自办;2转办;3待处理
+		User              []int64 `json:"user,optional"` //企业用户id
+		EmployInfoId      int64   `json:"employInfoId,optional"` //资讯收录id
+		CustomId          int64   `json:"customId,optional"` //客户id
+		CreateName        string  `json:"createName"` //创建人
+		ChanceSource      int64   `json:"chanceSource"` //机会来源
+		OwnerId           int64   `json:"ownerId,optional"` //潜客收录id(人脉)
+		BusinessId        int64   `json:"businessId,optional"` //商机收录id(人脉)
 	}
 	EmployOperateReq {
 		AppId      string `header:"appId,default=10000"`
@@ -62,8 +62,8 @@ type (
 		PositionId int64  `header:"positionId,optional"`
 		EntUserId  int64  `header:"entUserId,optional"`
 		EntId      int64  `header:"entId,optional"`
-		IdArr      string `json:"idArr"`      //信息id多条信息
-		IsEmploy   bool   `json:"isEmploy"`   //是否收录true收录 false取消收录
+		IdArr      string `json:"idArr"` //信息id多条信息
+		IsEmploy   bool   `json:"isEmploy"` //是否收录true收录 false取消收录
 		EmployType int64  `json:"employType"` //来源方式来源;1招标采购、2企业、3采购单位、4拟在建项目
 		EntDeptId  int64  `header:"entDeptId,optional"`
 		From       string `json:"from,optional"` //来源
@@ -83,8 +83,8 @@ type (
 		PositionId int64  `header:"positionId,optional"`
 		EntUserId  int64  `header:"entUserId,optional"`
 		EntId      int64  `header:"entId,optional"`
-		IdArr      string `json:"idArr"`      //id集合
-		IsIgnore   bool   `json:"isIgnore"`   //是否忽略 true 忽略 false取消忽略
+		IdArr      string `json:"idArr"` //id集合
+		IsIgnore   bool   `json:"isIgnore"` //是否忽略 true 忽略 false取消忽略
 		EmployType int64  `json:"employType"` //来源方式来源;1招标采购、2企业、3采购单位、4拟在建项目
 	}
 	InfoEmployinfoReq {
@@ -94,13 +94,13 @@ type (
 		EntUserId    int64  `header:"entUserId,optional"`
 		EntId        int64  `header:"entId,optional"`
 		EmployType   int64  `json:"employType"` //1标采购、2企业、3采购单位、4拟在建项目
-		IdArr        string `json:"idArr"`      //id
+		IdArr        string `json:"idArr"` //id
 		EntNicheDis  int64  `header:"entNicheDis,optional"`
 		EntDeptId    int64  `header:"entDeptId,optional"`
 		PositionType int64  `header:"positionType,optional"` //职位类型 0个人 1企业
-		AccountId    int64  `header:"accountId,optional"`    //账户id
+		AccountId    int64  `header:"accountId,optional"` //账户id
 		EntAccountId int64  `header:"entAccountId,optional"` //企业账户id
-		From         string `json:"from,optional"`           //来源
+		From         string `json:"from,optional"` //来源
 	}
 	CustomAddReq {
 		AppId                string  `header:"appId,default=10000"`
@@ -110,28 +110,28 @@ type (
 		EntId                int64   `header:"entId,optional"`
 		AccountId            int64   `header:"accountId,optional"`
 		EntDeptId            int64   `header:"entDeptId,optional"`
-		CustomType           int64   `json:"customType"`                       //客户类型
-		Summary              string  `json:"summary"`                          //概要信息
-		CustomAllName        string  `json:"customAllName"`                    //客户全称
-		CustomAbbreviation   string  `json:"customAbbreviation"`               //客户简称
-		CustomLevel          int64   `json:"customLevel,optional"`             //客户级别
-		CustomIndustry       int64   `json:"customIndustry"`                   //客户行业
-		CustomDetailIndustry int64   `json:"customDetailIndustry"`             //客户细分行业
-		Province             string  `json:"province,optional"`                //省份
-		City                 string  `json:"city,optional"`                    //城市
-		District             string  `json:"district,optional"`                //地区
-		Address              string  `json:"address,optional"`                 //详细地址
-		CompanyPhone         string  `json:"companyPhone,optional"`            //公司电话
-		NextfollowUpTime     int64   `json:"nextfollowUpTime,optional"`        //下次跟进时间戳
-		Types                int64   `json:"types"`                            //处理方式 1自办;2转办
-		User                 []int64 `json:"user,optional"`                    //转办用户
+		CustomType           int64   `json:"customType"` //客户类型
+		Summary              string  `json:"summary"` //概要信息
+		CustomAllName        string  `json:"customAllName"` //客户全称
+		CustomAbbreviation   string  `json:"customAbbreviation"` //客户简称
+		CustomLevel          int64   `json:"customLevel,optional"` //客户级别
+		CustomIndustry       int64   `json:"customIndustry"` //客户行业
+		CustomDetailIndustry int64   `json:"customDetailIndustry"` //客户细分行业
+		Province             string  `json:"province,optional"` //省份
+		City                 string  `json:"city,optional"` //城市
+		District             string  `json:"district,optional"` //地区
+		Address              string  `json:"address,optional"` //详细地址
+		CompanyPhone         string  `json:"companyPhone,optional"` //公司电话
+		NextfollowUpTime     int64   `json:"nextfollowUpTime,optional"` //下次跟进时间戳
+		Types                int64   `json:"types"` //处理方式 1自办;2转办
+		User                 []int64 `json:"user,optional"` //转办用户
 		EmployCustomId       int64   `json:"employCustomId,optional,optional"` //客户收录id
-		EmployInfoId         int64   `json:"employInfoId,optional,optional"`   //资讯收录id
-		Remarks              string  `json:"remarks,optional"`                 //备注
-		CreateName           string  `json:"createName"`                       //创建人
-		Source               string  `json:"source,optional"`                  //来源
-		OwnerId              int64   `json:"ownerId,optional"`                 //潜客收录id(人脉)
-		BusinessId           int64   `json:"businessId,optional"`              //商机收录id(人脉)
+		EmployInfoId         int64   `json:"employInfoId,optional,optional"` //资讯收录id
+		Remarks              string  `json:"remarks,optional"` //备注
+		CreateName           string  `json:"createName"` //创建人
+		Source               string  `json:"source,optional"` //来源
+		OwnerId              int64   `json:"ownerId,optional"` //潜客收录id(人脉)
+		BusinessId           int64   `json:"businessId,optional"` //商机收录id(人脉)
 	}
 	FileUploadReq {
 		AppId      string `header:"appId,default=10000"`
@@ -140,8 +140,8 @@ type (
 		EntUserId  int64  `header:"entUserId,optional"`
 		EntId      int64  `header:"entId,optional"`
 		BusinessId int64  `form:"businessId"` //业务id
-		Types      int64  `form:"type"`       //类型;1:跟进记录-线下 2:跟进记录-线上 3:跟进记录-备忘 4:销售机会-项目文档 5:客户-客户档案
-		FileType   int64  `form:"fileType"`   //文件类型,产品介绍、项目方案、立项报告、报价文件、招标文件、投标文件、中标通知书、合同、发票、其他文件
+		Types      int64  `form:"type"` //类型;1:跟进记录-线下 2:跟进记录-线上 3:跟进记录-备忘 4:销售机会-项目文档 5:客户-客户档案
+		FileType   int64  `form:"fileType"` //文件类型,产品介绍、项目方案、立项报告、报价文件、招标文件、投标文件、中标通知书、合同、发票、其他文件
 	}
 	EmployDistributeReq {
 		AppId       string             `header:"appId,default=10000"`
@@ -168,12 +168,12 @@ type (
 		PositionId int64   `header:"positionId,optional"`
 		EntUserId  int64   `header:"entUserId,optional"`
 		EntId      int64   `header:"entId,optional"`
-		Title      string  `json:"title"`         //标题
-		Content    string  `json:"content"`       //内容
-		PcHref     string  `json:"pcHref"`        //pc跳转地址
-		MobileHref string  `json:"mobileHref"`    //移动端跳转地址
+		Title      string  `json:"title"` //标题
+		Content    string  `json:"content"` //内容
+		PcHref     string  `json:"pcHref"` //pc跳转地址
+		MobileHref string  `json:"mobileHref"` //移动端跳转地址
 		User       []int64 `json:"user,optional"` //企业用户id
-		MsgType    string  `json:"msgType"`       //消息类型 1-活动优惠 2-服务通知 3-订阅消息 4-项目动态 5-企业动态 6-分析报告 7-系统通知 11-待办
+		MsgType    string  `json:"msgType"` //消息类型 1-活动优惠 2-服务通知 3-订阅消息 4-项目动态 5-企业动态 6-分析报告 7-系统通知 11-待办
 	}
 	CanAddReq {
 		AppId          string `header:"appId,default=10000"`
@@ -183,20 +183,20 @@ type (
 		EntId          int64  `header:"entId,optional"`
 		AccountId      int64  `header:"accountId,optional"`
 		EntDeptId      int64  `header:"entDeptId,optional"`
-		EmployInfoId   int64  `json:"employInfoId"`            //资讯收录id
+		EmployInfoId   int64  `json:"employInfoId"` //资讯收录id
 		EmployCustomId int64  `json:"employCustomId,optional"` //客户收录id
-		Key            string `json:"key"`                     //创建线索:more_create_clue 创建机会:more_create_chance 创建客户:more_create_custom
+		Key            string `json:"key"` //创建线索:more_create_clue 创建机会:more_create_chance 创建客户:more_create_custom
 	}
 	OwnerListReq {
-		PartyA           string `json:"partyA,optional"`           //甲方
-		Supplier         string `json:"supplier,optional"`         //供应商
-		Heterotophy      string `json:"heterotophy,optional"`      //同甲异业
-		Intermediary     string `json:"intermediary,optional"`     //中间人
-		Agency           string `json:"agency,optional"`           //代理机构
-		SearchEntName    string `json:"searchEntName,optional"`    //搜索企业名称
-		SourceType       string `json:"sourceType,optional"`       //搜索类型 1 只看转介绍成功率高2只看已监控的
+		PartyA           string `json:"partyA,optional"` //甲方
+		Supplier         string `json:"supplier,optional"` //供应商
+		Heterotophy      string `json:"heterotophy,optional"` //同甲异业
+		Intermediary     string `json:"intermediary,optional"` //中间人
+		Agency           string `json:"agency,optional"` //代理机构
+		SearchEntName    string `json:"searchEntName,optional"` //搜索企业名称
+		SourceType       string `json:"sourceType,optional"` //搜索类型 1 只看转介绍成功率高2只看已监控的
 		ProcessingStatus string `json:"processingStatus,optional"` //处理状态1未处理2已忽略3已建客户
-		Area             string `json:"area,optional"`             //项目地区
+		Area             string `json:"area,optional"` //项目地区
 		PositionId       int64  `header:"positionId,optional"`
 		PageSize         int64  `json:"pageSize,optional"`
 		PageIndex        int64  `json:"pageIndex,optional"`
@@ -205,12 +205,12 @@ type (
 		PositionId   int64  `header:"positionId,optional"`
 		EntId        string `header:"entId,optional"`
 		EntUserId    string `header:"entUserId,optional"`
-		DeptId       string `header:"deptId,optional"`     //部门id
-		PartyA       string `json:"partyA,optional"`       //甲方
-		Supplier     string `json:"supplier,optional"`     //供应商
-		Heterotophy  string `json:"heterotophy,optional"`  //同甲异业
+		DeptId       string `header:"deptId,optional"` //部门id
+		PartyA       string `json:"partyA,optional"` //甲方
+		Supplier     string `json:"supplier,optional"` //供应商
+		Heterotophy  string `json:"heterotophy,optional"` //同甲异业
 		Intermediary string `json:"intermediary,optional"` //中间人
-		Agency       string `json:"agency,optional"`       //代理机构
+		Agency       string `json:"agency,optional"` //代理机构
 		PageNum      int    `json:"pageNum"`
 		PageSize     int    `json:"pageSize"`
 		BusinessType string `json:"businessType"`
@@ -234,8 +234,8 @@ type (
 		EntId        string `header:"entId,optional"`
 		EntUserId    string `header:"entUserId,optional"`
 		DeptId       string `header:"deptId,optional"` //部门id
-		Pid          string `json:"porjectId"`
-		ChannelType  int    `json:"channelType"`
+		Pid          string `json:"projectId"`
+		ChannelType  string `json:"channelType"`
 	}
 	AddOrUpdateReq {
 		PositionId             int64  `header:"positionId"`
@@ -301,11 +301,11 @@ type (
 		WinnerId string `json:"winnerId"`
 	}
 	ChannelListReq {
-		PartyA       string `json:"partyA,optional"`       //甲方
-		Supplier     string `json:"supplier,optional"`     //供应商
-		Heterotophy  string `json:"heterotophy,optional"`  //同甲异业
+		PartyA       string `json:"partyA,optional"` //甲方
+		Supplier     string `json:"supplier,optional"` //供应商
+		Heterotophy  string `json:"heterotophy,optional"` //同甲异业
 		Intermediary string `json:"intermediary,optional"` //中间人
-		Agency       string `json:"agency,optional"`       //代理机构
+		Agency       string `json:"agency,optional"` //代理机构
 		PositionId   int64  `header:"positionId,optional"`
 	}
 	RouteOwnerListReq {
@@ -329,104 +329,105 @@ service crmApplication {
 	@doc "添加线索"
 	@handler clueAdd
 	post /crmApplication/clue/add (ClueAddReq) returns (Reply)
-	
+
 	@doc "创建销售机会"
 	@handler saleChanceAdd
 	post /crmApplication/saleChance/add (SaleChanceReq) returns (Reply)
-	
+
 	@doc "收录操作"
 	@handler employOperate
 	post /crmApplication/employ/operate (EmployOperateReq) returns (Reply)
-	
+
 	@doc "商业资讯的转办"
 	@handler transfer
 	post /crmApplication/information/transfer (TransferReq) returns (Reply)
-	
+
 	@doc "忽略操作"
 	@handler ignoreOperate
 	post /crmApplication/ignore/operate (IgnoreOperateReq) returns (Reply)
-	
+
 	@doc "收录情况"
 	@handler employInfo
 	post /crmApplication/employ/info (InfoEmployinfoReq) returns (InfoReply)
-	
+
 	@doc "创建客户"
 	@handler customAdd
 	post /crmApplication/custom/add (CustomAddReq) returns (Reply)
-	
+
 	@doc "文件上传"
 	@handler fileUpload
 	post /crmApplication/file/upload (FileUploadReq) returns (Reply)
-	
+
 	@doc "分发"
 	@handler employDistribute
 	post /crmApplication/employ/distribute (EmployDistributeReq) returns (Reply)
-	
+
 	@doc "企业详情"
 	@handler entinfo
 	post /crmApplication/ent/info (EntInfoReq) returns (Reply)
-	
+
 	@doc "消息推送"
 	@handler pushMsg
 	post /crmApplication/info/push (PushMsgReq) returns (Reply)
-	
+
 	@doc "是否可以创建"
 	@handler canAddReq
 	post /crmApplication/info/canAdd (CanAddReq) returns (Reply)
-	
+
 	@doc "人脉可达潜客业主列表"
 	@handler ownerList
 	post /crmApplication/owner/list (OwnerListReq) returns (Reply)
-	
+
 	@doc "人脉可达商机列表"
 	@handler projectList
 	post /crmApplication/network/project/list (ProjectListReq) returns (Reply)
-	
+
 	@doc "项目公关渠道分析-项目名称联想"
 	@handler PrPnameAss
 	post /crmApplication/pr/pname/ass (PnameAssReq) returns (Reply)
-	
+
 	@doc "项目公关渠道分析-与业主合作历史"
 	@handler CoopHistoryList
 	post /crmApplication/pr/project/analyse (CoopHistoryReq) returns (Reply)
-	
+
 	@doc "人脉库-添加/修改人脉"
 	@handler addOrUpdate
 	post /crmApplication/network/addOrUpdate (AddOrUpdateReq) returns (Reply)
-	
+
 	@doc "人脉库-业主名称联想"
 	@handler associate
 	post /crmApplication/network/associate (AssociateReq) returns (Reply)
-	
+
 	@doc "人脉库-全部人脉项目"
 	@handler allProject
 	post /crmApplication/network/allProject (AllprojectReq) returns (Reply)
-	
+
 	@doc "人脉库-列表"
 	@handler networkList
 	post /crmApplication/network/networkList (NetWorkListReq) returns (Reply)
-	
+
 	@doc "忽略操作"
 	@handler ignoreAction
 	post /crmApplication/ignore/action (IgnoreReq) returns (Reply)
-	
+
 	@doc "情报详情"
 	@handler infoDetail
 	post /crmApplication/infomation/detail (InfoDetailReq) returns (Reply)
-	
+
 	@doc "人脉项目分析-业主合作历史"
 	@handler projectHistory
 	post /crmApplication/pr/project/history (PrjectHistoryReq) returns (Reply)
-	
+
 	@doc "可介绍业主路径"
 	@handler ownerRoute
 	post /crmApplication/owner/route (RouteOwnerListReq) returns (Reply)
-	
+
 	@doc "可介绍业主合作次数"
 	@handler ownerCooperate
 	post /crmApplication/owner/cooperate (CooperateOwnerListReq) returns (Reply)
-	
+
 	@doc "候选渠道列表"
 	@handler candidateChannel
 	post /crmApplication/candidate/channel (ChannelListReq) returns (Reply)
-}
+}
+

+ 49 - 48
api/internal/handler/routes.go

@@ -14,28 +14,23 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 		[]rest.Route{
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/clue/add",
-				Handler: clueAddHandler(serverCtx),
-			},
-			{
-				Method:  http.MethodPost,
-				Path:    "/crmApplication/saleChance/add",
-				Handler: saleChanceAddHandler(serverCtx),
+				Path:    "/crmApplication/candidate/channel",
+				Handler: candidateChannelHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/employ/operate",
-				Handler: employOperateHandler(serverCtx),
+				Path:    "/crmApplication/clue/add",
+				Handler: clueAddHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/information/transfer",
-				Handler: transferHandler(serverCtx),
+				Path:    "/crmApplication/custom/add",
+				Handler: customAddHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/ignore/operate",
-				Handler: ignoreOperateHandler(serverCtx),
+				Path:    "/crmApplication/employ/distribute",
+				Handler: employDistributeHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
@@ -44,28 +39,28 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/custom/add",
-				Handler: customAddHandler(serverCtx),
+				Path:    "/crmApplication/employ/operate",
+				Handler: employOperateHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/file/upload",
-				Handler: fileUploadHandler(serverCtx),
+				Path:    "/crmApplication/ent/info",
+				Handler: entinfoHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/employ/distribute",
-				Handler: employDistributeHandler(serverCtx),
+				Path:    "/crmApplication/file/upload",
+				Handler: fileUploadHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/ent/info",
-				Handler: entinfoHandler(serverCtx),
+				Path:    "/crmApplication/ignore/action",
+				Handler: ignoreActionHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/info/push",
-				Handler: pushMsgHandler(serverCtx),
+				Path:    "/crmApplication/ignore/operate",
+				Handler: ignoreOperateHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
@@ -74,23 +69,18 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/owner/list",
-				Handler: ownerListHandler(serverCtx),
-			},
-			{
-				Method:  http.MethodPost,
-				Path:    "/crmApplication/network/project/list",
-				Handler: projectListHandler(serverCtx),
+				Path:    "/crmApplication/info/push",
+				Handler: pushMsgHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/pr/pname/ass",
-				Handler: PrPnameAssHandler(serverCtx),
+				Path:    "/crmApplication/infomation/detail",
+				Handler: infoDetailHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/pr/project/analyse",
-				Handler: CoopHistoryListHandler(serverCtx),
+				Path:    "/crmApplication/information/transfer",
+				Handler: transferHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
@@ -99,13 +89,13 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/network/associate",
-				Handler: associateHandler(serverCtx),
+				Path:    "/crmApplication/network/allProject",
+				Handler: allProjectHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/network/allProject",
-				Handler: allProjectHandler(serverCtx),
+				Path:    "/crmApplication/network/associate",
+				Handler: associateHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
@@ -114,18 +104,18 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/ignore/action",
-				Handler: ignoreActionHandler(serverCtx),
+				Path:    "/crmApplication/network/project/list",
+				Handler: projectListHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/infomation/detail",
-				Handler: infoDetailHandler(serverCtx),
+				Path:    "/crmApplication/owner/cooperate",
+				Handler: ownerCooperateHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/pr/project/history",
-				Handler: projectHistoryHandler(serverCtx),
+				Path:    "/crmApplication/owner/list",
+				Handler: ownerListHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
@@ -134,14 +124,25 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/owner/cooperate",
-				Handler: ownerCooperateHandler(serverCtx),
+				Path:    "/crmApplication/pr/pname/ass",
+				Handler: PrPnameAssHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/crmApplication/candidate/channel",
-				Handler: candidateChannelHandler(serverCtx),
+				Path:    "/crmApplication/pr/project/analyse",
+				Handler: CoopHistoryListHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/crmApplication/pr/project/history",
+				Handler: projectHistoryHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/crmApplication/saleChance/add",
+				Handler: saleChanceAddHandler(serverCtx),
 			},
 		},
+		rest.WithMaxBytes(104857600),
 	)
 }

+ 2 - 0
api/internal/logic/coophistorylistlogic.go

@@ -3,6 +3,7 @@ package logic
 import (
 	"bp.jydev.jianyu360.cn/CRM/application/api/internal/service"
 	"context"
+	"log"
 
 	"bp.jydev.jianyu360.cn/CRM/application/api/internal/svc"
 	"bp.jydev.jianyu360.cn/CRM/application/api/internal/types"
@@ -27,6 +28,7 @@ func NewCoopHistoryListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *C
 func (l *CoopHistoryListLogic) CoopHistoryList(req *types.CoopHistoryReq) (resp *types.Reply, err error) {
 	resp = &types.Reply{}
 	result := service.GetPrList(req)
+	log.Println(result)
 	if result == nil {
 		resp.Error_code = -1
 		resp.Error_msg = "查询异常"

+ 6 - 1
api/internal/logic/infodetaillogic.go

@@ -2,8 +2,10 @@ package logic
 
 import (
 	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/encrypt"
 	T "bp.jydev.jianyu360.cn/CRM/application/api/common"
 	"context"
+	"fmt"
 
 	"bp.jydev.jianyu360.cn/CRM/application/api/internal/svc"
 	"bp.jydev.jianyu360.cn/CRM/application/api/internal/types"
@@ -33,7 +35,8 @@ type Infomation struct {
 	Area        string `ch:"area"`
 	City        string `ch:"city"`
 	DataJsonId  string `ch:"datajson_id"`
-	ProjectName string `ch:"project_name"`
+	ProjectName string `json:"project_name"`
+	Href        string `json:"href"`
 }
 
 func (l *InfoDetailLogic) InfoDetail(req *types.InfoDetailReq) (resp *types.Reply, err error) {
@@ -42,9 +45,11 @@ func (l *InfoDetailLogic) InfoDetail(req *types.InfoDetailReq) (resp *types.Repl
 	info := Infomation{}
 	err = T.ClickhouseConn.QueryRow(context.TODO(), sql, req.InfoId).ScanStruct(&info)
 	if err == nil {
+		info.DataJsonId = encrypt.CommonEncodeArticle("content", info.DataJsonId)
 		binfo, b := T.MgoBidding.FindById("bidding", info.DataJsonId, map[string]interface{}{"title": 1, "projectname": 1})
 		if b && binfo != nil && len(*binfo) > 0 {
 			info.ProjectName = common.ObjToString((*binfo)["projectname"])
+			info.Href = fmt.Sprintf("/article/content/%s.html", encrypt.CommonEncodeArticle("content", info.DataJsonId))
 		}
 		resp.Data = info
 	} else {

+ 127 - 145
api/internal/service/CoopHistoryService.go

@@ -13,78 +13,27 @@ import (
 )
 
 var (
-	INDEX_1  = "transaction_info"
-	sql_2_0  = `SELECT buyer, buyer_id, agency, agency_id, property_form FROM information.transaction_info WHERE project_id = ?`
-	sql_2_1  = `SELECT project_id, project_name, zbtime FROM information.transaction_info WHERE buyer_id = ? AND has(winner_id, ?) ORDER BY zbtime DESC`
-	sql_2_2  = `SELECT b.company_id, b.company_name, b.contact_name, a.relate_id, a.relate_name FROM connection_introduce a INNER JOIN connection b ON b.position_id =%d AND a.connection_id = b.id AND b.state = 1 AND a.itype = 1 AND b.itype = 4 AND a.relate_Id = %s`
-	sql_2_3  = `select a.a_id as a_id, a.b_id as b_id, a.a_name as a_name, a.b_name as b_name, a.code as code, c.legal_person as c_person, d.legal_person d_person from ent_map_code a left join ent_info c on (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201') and a.a_id = c.id left join ent_info d on (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201') and a.b_id = d.id where (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201')`
-	es_query = `{
-	  "query": {
-		"bool": {
-		  "must": [
-			{
-			  "range": {
-				"zbtime": {
-				  "gte": %d
-				}
-			  }
-			},
-			{
-			  "term": {
-				"buyer_id": %s
-			  }
-			}
-		  ],
-		  "must_not": {
-			"term": {
-			  "property_form": %s
-			}
-		  }
-		}
-	  },
-	  "aggs": {
-		"winner_count": {
-		  "terms": {
-			"field": "winner",
-			"size": 100,
-			"order": {
-			  "_count": "desc"
-			}
-		  },
-		  "aggs": {
-			"amount_all": {
-			  "sum": {
-				"field": "bidamount"
-			  }
-			}
-		  }
-		},
-		"agency_count": {
-		  "terms": {
-			"field": "agency",
-			"size": 100,
-			"order": {
-			  "_count": "desc"
-			}
-		  },
-		  "aggs": {
-			"amount_all": {
-			  "sum": {
-				"field": "bidamount"
-			  }
-			}
-		  }
-		}
-	  },
-	  "size": 1
-	}`
+	INDEX_1   = "transaction_info"
+	sql_2_0   = `SELECT buyer, buyer_id, agency, agency_id, property_form FROM information.transaction_info WHERE project_id = ?`
+	sql_2_1   = `SELECT project_id, project_name, zbtime FROM information.transaction_info WHERE buyer_id = ? AND has(winner_id, ?) ORDER BY zbtime DESC`
+	sql_2_2   = `select DISTINCT  b.company_id,b.company_name,a.relate_id,a.relate_name,b.contact_person   from  connection_introduce a  INNER JOIN connection b on  a.position_id= ? and a.connection_id=b.id  and   a.relate_Id = ? and  a.itype =1  and  b.itype=4 and  b.status=1 `
+	sql_2_3   = `select a.a_id as a_id, a.b_id as b_id, a.a_name as a_name, a.b_name as b_name, a.code as code, c.legal_person as c_person, d.legal_person d_person from crm.ent_map_code a left join ent_info c on (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201') and a.a_id = c.id left join ent_info d on (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201') and a.b_id = d.id where (a.a_id = ? or a.b_id = ? ) and a.code in('0101', '0201')`
+	es_query  = `{"query": {"bool": {"must": [{"term": {"buyer": "%s"}}],"must_not": {"term": {"property_form": "%s"}}}},"aggs": {"winner_count": {"terms": {"field": "winner","size": 1000,"order": {"_count": "desc"}},"aggs": {"amount_all": {"sum": {"field": "bidamount"}}}}},"size": 1}`
+	es_query1 = `{"query": {"bool": {"must": [{"term": {"buyer": "%s"}}]}},"aggs": {"agency_count": {"terms": {"field": "agency","size": 1000,"order": {"_count": "desc"}},"aggs": {"amount_all": {"sum": {"field": "bidamount"}}}}},"size": 1}`
 )
 
 type ResultData struct {
-	channelType int                      `json:"channel_type"`
-	channel     string                   `json:"channel"`
-	size        int                      `json:"size"`
-	data        []map[string]interface{} `json:"data"`
+	SourceType   string  `json:"SourceType"`
+	EntName      string  `json:"EntName"`
+	EntPerson    string  `json:"EntPerson"`
+	Middleman    string  `json:"Middleman"`
+	ProjectNum   int     `json:"ProjectNum"`
+	TotalAmount  float64 `json:"TotalAmount"`
+	RecentTime   int64   `json:"RecentTime"`
+	NearlyYears  bool    `json:"NearlyYears"`
+	SupEnt       string  `json:"SupEnt"`       // 上级
+	NextEnt      string  `json:"NextEnt"`      // 下级
+	Relationship string  `json:"Relationship"` // 关系
 }
 
 type ProjectTmp struct {
@@ -107,126 +56,139 @@ func GetPrList(req *types.CoopHistoryReq) (result []*ResultData) {
 		propertyForm = common.ObjToString((*m1)["probusfor"])
 	}
 
+	// firstparty:甲方 supplier:供应商 adiffb:同甲异业 middleman:中间人 agency:招标代理机构 sup_sub: 上下级
 	// 1、同甲异业数据/招标代理机构渠道
-	if propertyForm != "" {
-		r1, r2 := GetData(propertyForm, pTmp.BuyerId)
-		if r1 != nil && len(r1) > 0 {
-			tmp := &ResultData{
-				channelType: 1,
-				channel:     "同甲异业渠道",
-				size:        len(r1),
-				data:        r1,
+	r1, r2 := GetData(propertyForm, pTmp.BuyerId)
+	if r1 != nil && len(r1) > 0 {
+		for _, m := range r1 {
+			near, zbtime := LastTimeCoop(pTmp.BuyerId, common.ObjToString(m["name"]), "adiffb")
+			tmp := ResultData{
+				SourceType:  "adiffb",
+				EntName:     common.ObjToString(m["name"]),
+				ProjectNum:  common.IntAll(m["coop_size"]),
+				TotalAmount: common.Float64All(m["coop_amount"]),
+				RecentTime:  zbtime,
+				NearlyYears: near,
 			}
-			result = append(result, tmp)
-		}
-		if r2 != nil && len(r2) > 0 {
-			tmp := &ResultData{
-				channelType: 1,
-				channel:     "招标代理机构",
-				size:        len(r2),
-				data:        r2,
-			}
-			result = append(result, tmp)
+			result = append(result, &tmp)
 		}
 	}
-	// 中间人可介绍业主
-	if pTmp.BuyerId != "" {
-		r3 := GetData1(req.PositionId, pTmp.BuyerId)
-		if r3 != nil && len(r3) > 0 {
-			tmp := &ResultData{
-				channelType: 1,
-				channel:     "中间人",
-				size:        len(r3),
-				data:        r3,
-			}
-			result = append(result, tmp)
-		}
-		// 关联单位
-		r4 := GetData2(pTmp.BuyerId)
-		if r4 != nil && len(r4) > 0 {
-			tmp := &ResultData{
-				channelType: 1,
-				channel:     "业主关联单位",
-				size:        len(r4),
-				data:        r4,
+	if r2 != nil && len(r2) > 0 {
+		for _, m := range r2 {
+			near, zbtime := LastTimeCoop(pTmp.BuyerId, common.ObjToString(m["name"]), "agency")
+			tmp := ResultData{
+				SourceType:  "agency",
+				EntName:     common.ObjToString(m["name"]),
+				ProjectNum:  common.IntAll(m["coop_size"]),
+				TotalAmount: common.Float64All(m["coop_amount"]),
+				RecentTime:  zbtime,
+				NearlyYears: near,
 			}
-			result = append(result, tmp)
+			result = append(result, &tmp)
 		}
 	}
+	// 中间人可介绍业主
+	//if pTmp.BuyerId != "" {
+	//	r3 := GetData1(req.PositionId, pTmp.BuyerId)
+	//	if r3 != nil && len(r3) > 0 {
+	//		tmp := ResultData{
+	//			SourceType:  "middleman",
+	//			EntName:     common.ObjToString(m["name"]),
+	//			ProjectNum:  common.IntAll(m["coop_size"]),
+	//			TotalAmount: common.Float64All(m["coop_amount"]),
+	//			RecentTime:  zbtime,
+	//			NearlyYears: near,
+	//		}
+	//		result = append(result, &tmp)
+	//	}
+	//// 关联单位
+	//r4 := GetData2(pTmp.BuyerId)
+	//if r4 != nil && len(r4) > 0 {
+	//	tmp := &ResultData{
+	//		channelType: 1,
+	//		channel:     "业主关联单位",
+	//		size:        len(r4),
+	//		data:        r4,
+	//	}
+	//	result = append(result, tmp)
+	//}
+	//}
 	return
 }
 
 func GetData(propertyForm, bid string) (result1, result2 []map[string]interface{}) {
-	timestamp := time.Now().AddDate(-3, 0, 0).Unix()
-	aggs, count, res := elastic.GetAggs(INDEX_1, INDEX_1, fmt.Sprintf(es_query, timestamp, propertyForm, bid))
-	logx.Info("es聚合查询结果:", aggs, count, res)
 	type AggStruct struct {
 		Buckets []struct {
 			Key        string `json:"key,omitempty"`
 			Doc_count  int64  `json:"doc_count,omitempty"`
 			Amount_all struct {
-				Value string `json:"value,omitempty"`
+				Value float64 `json:"value,omitempty"`
 			} `json:"amount_all"`
 		} `json:"buckets"`
 	}
 	m1 := make(map[string]interface{}) //采购单位-中标单位
 	m2 := make(map[string]interface{}) //采购单位-代理机构
-	var m1Buckets = AggStruct{}
-	if aggs != nil && aggs["winner_count"] != nil {
-		bs, err := aggs["winner_count"].MarshalJSON()
-		if err != nil {
-			logx.Info(err)
-		} else {
-			if len(bs) == 0 {
+	if propertyForm != "" {
+		//同甲异态 中标企业
+		aggs, count, res := elastic.GetAggs("bidding", "bidding", fmt.Sprintf(es_query, propertyForm, "中国计量大学"))
+		logx.Info("es聚合查询结果:", aggs, count, res)
+		var m1Buckets = AggStruct{}
+		if aggs != nil && aggs["winner_count"] != nil {
+			bs, err := aggs["winner_count"].MarshalJSON()
+			if err != nil {
 				logx.Info(err)
 			} else {
-				err := json.Unmarshal(bs, &m1Buckets)
-				logx.Info(err)
-				if len(m1Buckets.Buckets) > 0 {
-					for _, v := range m1Buckets.Buckets {
-						m1[v.Key] = map[string]interface{}{"name": v.Key, "amount": v.Amount_all.Value, "count": v.Doc_count}
+				if len(bs) == 0 {
+					logx.Info(err)
+				} else {
+					err := json.Unmarshal(bs, &m1Buckets)
+					logx.Info(err)
+					if len(m1Buckets.Buckets) > 0 {
+						for _, v := range m1Buckets.Buckets {
+							m1[v.Key] = map[string]interface{}{"name": v.Key, "amount": v.Amount_all.Value, "count": v.Doc_count}
+						}
 					}
 				}
 			}
 		}
+		for k, v := range m1 {
+			v1 := v.(map[string]interface{})
+			tmp := make(map[string]interface{})
+			tmp["name"] = k
+			tmp["coop_size"] = v1["count"]
+			tmp["coop_amount"] = v1["amount"]
+			result1 = append(result1, tmp)
+		}
 	}
+	//代理机构
+	aggs1, count1, res1 := elastic.GetAggs("bidding", "bidding", fmt.Sprintf(es_query1, "中国计量大学"))
+	logx.Info("es聚合查询结果:", aggs1, count1, res1)
 	var m2Buckets = AggStruct{}
-	if aggs != nil && aggs["amount_all"] != nil {
-		bs, err := aggs["amount_all"].MarshalJSON()
+	if aggs1 != nil && aggs1["agency_count"] != nil {
+		bs, err := aggs1["agency_count"].MarshalJSON()
 		if err != nil {
 			logx.Info(err)
 		} else {
 			if len(bs) == 0 {
 				logx.Info(err)
 			} else {
-				err := json.Unmarshal(bs, &m2Buckets)
+				err = json.Unmarshal(bs, &m2Buckets)
 				logx.Info(err)
 				if len(m2Buckets.Buckets) > 0 {
 					for _, v := range m2Buckets.Buckets {
-						m1[v.Key] = map[string]interface{}{"name": v.Key, "amount": v.Amount_all.Value, "count": v.Doc_count}
+						m2[v.Key] = map[string]interface{}{"name": v.Key, "amount": v.Amount_all.Value, "count": v.Doc_count}
 					}
 				}
 			}
 		}
 	}
-	for k, v := range m1 {
-		if m2[k] != nil {
-			tmp := make(map[string]interface{})
-			tmp["name"] = v
-			tmp["coop_size"] = v
-			tmp["coop_amount"] = m2[k]
-			result1 = append(result1, tmp)
-		}
-	}
-
 	for k, v := range m2 {
-		if m2[k] != nil {
-			tmp := make(map[string]interface{})
-			tmp["name"] = v
-			tmp["coop_size"] = v
-			tmp["coop_amount"] = m2[k]
-			result2 = append(result2, tmp)
-		}
+		v1 := v.(map[string]interface{})
+		tmp := make(map[string]interface{})
+		tmp["name"] = k
+		tmp["coop_size"] = v1["count"]
+		tmp["coop_amount"] = v1["amount"]
+		result2 = append(result2, tmp)
 	}
 	return
 }
@@ -275,3 +237,23 @@ func GetData3(buyerId, winnerId string) (result []*P_History) {
 	}
 	return
 }
+
+// @Author jianghan
+// @Description 上次合作时间
+// @Date 2024/4/24
+func LastTimeCoop(buyerId, ent, stype string) (bool, int64) {
+	zbtime := int64(0)
+	near := false
+	if stype == "adiffb" {
+		sql := `SELECT zbtime FROM information.transaction_info WHERE buyer_id = ? AND has(winner, ?) ORDER BY zbtime DESC LIMIT 1`
+		_ = T.ClickhouseConn.QueryRow(context.TODO(), sql, buyerId, ent).Scan(&zbtime)
+	} else if stype == "agency" {
+		sql := `SELECT zbtime FROM information.transaction_info WHERE buyer_id = ? AND agency = ? ORDER BY zbtime DESC LIMIT 1`
+		_ = T.ClickhouseConn.QueryRow(context.TODO(), sql, buyerId, ent).Scan(&zbtime)
+	}
+	timestamp := time.Now().AddDate(-3, 0, 0).Unix()
+	if timestamp <= zbtime {
+		near = true
+	}
+	return near, zbtime
+}

+ 38 - 24
api/internal/service/owner.go

@@ -814,42 +814,56 @@ func (t *OwnerService) CandidateChannel() []*ResultData {
 			logx.Info(buyerId)
 			r1, r2 := GetData(propertyForm, buyerId)
 			if r1 != nil && len(r1) > 0 {
-				tmp := &ResultData{
-					channelType: 1,
-					channel:     "同甲异业渠道",
-					size:        len(r1),
-					data:        r1,
+				for _, m := range r1 {
+					near, zbtime := LastTimeCoop(buyerId, common.ObjToString(m["name"]), "adiffb")
+					tmp := ResultData{
+						SourceType:  "adiffb",
+						EntName:     common.ObjToString(m["name"]),
+						ProjectNum:  common.IntAll(m["coop_size"]),
+						TotalAmount: common.Float64All(m["coop_amount"]),
+						RecentTime:  zbtime,
+						NearlyYears: near,
+					}
+					returnData = append(returnData, &tmp)
 				}
-				returnData = append(returnData, tmp)
 			}
 			if r2 != nil && len(r2) > 0 {
-				tmp := &ResultData{
-					channelType: 1,
-					channel:     "招标代理机构",
-					size:        len(r2),
-					data:        r2,
+				for _, m := range r2 {
+					near, zbtime := LastTimeCoop(buyerId, common.ObjToString(m["name"]), "agency")
+					tmp := ResultData{
+						SourceType:  "agency",
+						EntName:     common.ObjToString(m["name"]),
+						ProjectNum:  common.IntAll(m["coop_size"]),
+						TotalAmount: common.Float64All(m["coop_amount"]),
+						RecentTime:  zbtime,
+						NearlyYears: near,
+					}
+					returnData = append(returnData, &tmp)
 				}
-				returnData = append(returnData, tmp)
 			}
 			r3 := GetData1(t.PositionId, buyerId)
 			if r3 != nil && len(r3) > 0 {
-				tmp := &ResultData{
-					channelType: 1,
-					channel:     "中间人",
-					size:        len(r3),
-					data:        r3,
+				for _, m := range r3 {
+					tmp := ResultData{
+						SourceType:  "middleman",
+						EntName:     common.ObjToString(m["name"]),
+						ProjectNum:  common.IntAll(m["coop_size"]),
+						TotalAmount: common.Float64All(m["coop_amount"]),
+					}
+					returnData = append(returnData, &tmp)
 				}
-				returnData = append(returnData, tmp)
 			}
 			r4 := GetData2(buyerId)
 			if r4 != nil && len(r4) > 0 {
-				tmp := &ResultData{
-					channelType: 1,
-					channel:     "业主关联单位",
-					size:        len(r4),
-					data:        r4,
+				for _, m := range r4 {
+					tmp := ResultData{
+						SourceType:  "sup_sub",
+						EntName:     common.ObjToString(m["name"]),
+						ProjectNum:  common.IntAll(m["coop_size"]),
+						TotalAmount: common.Float64All(m["coop_amount"]),
+					}
+					returnData = append(returnData, &tmp)
 				}
-				returnData = append(returnData, tmp)
 			}
 		}
 

+ 213 - 213
api/internal/types/types.go

@@ -1,17 +1,58 @@
 // Code generated by goctl. DO NOT EDIT.
 package types
 
-type Reply struct {
-	Error_code int64       `json:"error_code"`
-	Error_msg  string      `json:"error_msg"`
-	Data       interface{} `json:"data"`
+type AddOrUpdateReq struct {
+	PositionId             int64  `header:"positionId"`
+	EntUserId              int64  `header:"entUserId,optional"`
+	EntId                  int64  `header:"entId,optional"`
+	EntDeptId              int64  `header:"entDeptId,optional"`
+	Company_id             string `json:"company_id,optional"`
+	Company_name           string `json:"company_name,optional"`
+	Contact_person         string `json:"contact_person"`
+	Contact_phone          string `json:"contact_phone"`
+	Introduce_owner_id     string `json:"introduce_owner_id,optional"`
+	Introduce_owner_name   string `json:"introduce_owner_name,optional"`
+	Introduce_project_id   string `json:"introduce_project_id,optional"`
+	Introduce_project_name string `json:"introduce_project_name,optional"`
+	Id                     int64  `json:"id,optional"`
+	Type                   string `json:"type"`
 }
 
-type InfoReply struct {
-	Error_code  int64       `json:"error_code"`
-	Error_msg   string      `json:"error_msg"`
-	Data        interface{} `json:"data"`
-	BatchEmploy int64       `json:"batchEmploy"`
+type AllprojectReq struct {
+	EntAccountId int64  `header:"entAccountId"`
+	PositionId   int64  `header:"positionId"`
+	Name         string `json:"name,optional"`
+	Type         int64  `json:"type,optional"`
+	Id           string `json:"id,optional"`
+}
+
+type AssociateReq struct {
+	EntAccountId int64  `header:"entAccountId"`
+	EntName      string `header:"entName"`
+	Name         string `json:"name"`
+	Type         string `json:"type"`
+}
+
+type CanAddReq struct {
+	AppId          string `header:"appId,default=10000"`
+	BaseUserId     int64  `header:"newUserId"`
+	PositionId     int64  `header:"positionId,optional"`
+	EntUserId      int64  `header:"entUserId,optional"`
+	EntId          int64  `header:"entId,optional"`
+	AccountId      int64  `header:"accountId,optional"`
+	EntDeptId      int64  `header:"entDeptId,optional"`
+	EmployInfoId   int64  `json:"employInfoId"`            //资讯收录id
+	EmployCustomId int64  `json:"employCustomId,optional"` //客户收录id
+	Key            string `json:"key"`                     //创建线索:more_create_clue 创建机会:more_create_chance 创建客户:more_create_custom
+}
+
+type ChannelListReq struct {
+	PartyA       string `json:"partyA,optional"`       //甲方
+	Supplier     string `json:"supplier,optional"`     //供应商
+	Heterotophy  string `json:"heterotophy,optional"`  //同甲异业
+	Intermediary string `json:"intermediary,optional"` //中间人
+	Agency       string `json:"agency,optional"`       //代理机构
+	PositionId   int64  `header:"positionId,optional"`
 }
 
 type ClueAddReq struct {
@@ -33,81 +74,22 @@ type ClueAddReq struct {
 	Channel      string  `json:"channel"`               //渠道来源:网页、手动创建
 }
 
-type SaleChanceReq struct {
-	AppId             string  `header:"appId,default=10000"`
-	BaseUserId        int64   `header:"newUserId"`
-	PositionId        int64   `header:"positionId,optional"`
-	EntUserId         int64   `header:"entUserId,optional"`
-	EntId             int64   `header:"entId,optional"`
-	AccountId         int64   `header:"accountId,optional"`
-	EntDeptId         int64   `header:"entDeptId,optional"`
-	ChanceName        string  `json:"chanceName"`                 //机会名称
-	Summary           string  `json:"summary"`                    //概要信息
-	ChanceClassify    int64   `json:"chanceClassify"`             //机会分类
-	ExpectedOrderTime int64   `json:"expectedOrderTime,optional"` //最初预计落单段时间 时间戳
-	ExpectedMoney     float64 `json:"expectedMoney,optional"`     //最初预计落单金额
-	CustomName        string  `json:"customName"`                 //客户全称
-	BusinessType      int64   `json:"businessType"`               //业务类型  1新客户需求 2老客户需求 3简易项目流程
-	Remarks           string  `json:"remarks,optional"`           //备注
-	NextfollowUpTime  int64   `json:"nextfollowUpTime,optional"`  //下次跟进时间戳
-	Types             int64   `json:"types"`                      //处理方式 1自办;2转办;3待处理
-	User              []int64 `json:"user,optional"`              //企业用户id
-	EmployInfoId      int64   `json:"employInfoId,optional"`      //资讯收录id
-	CustomId          int64   `json:"customId,optional"`          //客户id
-	CreateName        string  `json:"createName"`                 //创建人
-	ChanceSource      int64   `json:"chanceSource"`               //机会来源
-	OwnerId           int64   `json:"ownerId,optional"`           //潜客收录id(人脉)
-	BusinessId        int64   `json:"businessId,optional"`        //商机收录id(人脉)
-}
-
-type EmployOperateReq struct {
-	AppId      string `header:"appId,default=10000"`
-	BaseUserId int64  `header:"newUserId"`
-	PositionId int64  `header:"positionId,optional"`
-	EntUserId  int64  `header:"entUserId,optional"`
-	EntId      int64  `header:"entId,optional"`
-	IdArr      string `json:"idArr"`      //信息id多条信息
-	IsEmploy   bool   `json:"isEmploy"`   //是否收录true收录 false取消收录
-	EmployType int64  `json:"employType"` //来源方式来源;1招标采购、2企业、3采购单位、4拟在建项目
-	EntDeptId  int64  `header:"entDeptId,optional"`
-	From       string `json:"from,optional"` //来源
-}
-
-type TransferReq struct {
-	AppId         string   `header:"appId,default=10000"`
-	BaseUserId    int64    `header:"newUserId"`
-	PositionId    int64    `header:"positionId,optional"`
-	EntUserId     int64    `header:"entUserId,optional"`
-	EntId         int64    `header:"entId,optional"`
-	EmplouIdArr   []string `json:"emplouIdArr"`
-	PositionIdArr []string `json:"positionIdArr"`
-}
-
-type IgnoreOperateReq struct {
-	AppId      string `header:"appId,default=10000"`
-	BaseUserId int64  `header:"newUserId"`
-	PositionId int64  `header:"positionId,optional"`
-	EntUserId  int64  `header:"entUserId,optional"`
-	EntId      int64  `header:"entId,optional"`
-	IdArr      string `json:"idArr"`      //id集合
-	IsIgnore   bool   `json:"isIgnore"`   //是否忽略 true 忽略 false取消忽略
-	EmployType int64  `json:"employType"` //来源方式来源;1招标采购、2企业、3采购单位、4拟在建项目
+type CoopHistoryReq struct {
+	EntAccountId int64  `header:"entAccountId,optional"` //企业账户id
+	PositionId   int64  `header:"positionId,optional"`
+	EntId        string `header:"entId,optional"`
+	EntUserId    string `header:"entUserId,optional"`
+	DeptId       string `header:"deptId,optional"` //部门id
+	Pid          string `json:"projectId"`
+	ChannelType  string `json:"channelType"`
 }
 
-type InfoEmployinfoReq struct {
-	AppId        string `header:"appId,default=10000"`
-	BaseUserId   int64  `header:"newUserId"`
-	PositionId   int64  `header:"positionId,optional"`
-	EntUserId    int64  `header:"entUserId,optional"`
-	EntId        int64  `header:"entId,optional"`
-	EmployType   int64  `json:"employType"` //1标采购、2企业、3采购单位、4拟在建项目
-	IdArr        string `json:"idArr"`      //id
-	EntNicheDis  int64  `header:"entNicheDis,optional"`
-	EntDeptId    int64  `header:"entDeptId,optional"`
-	PositionType int64  `header:"positionType,optional"` //职位类型 0个人 1企业
-	AccountId    int64  `header:"accountId,optional"`    //账户id
-	EntAccountId int64  `header:"entAccountId,optional"` //企业账户id
-	From         string `json:"from,optional"`           //来源
+type CooperateOwnerListReq struct {
+	BuyerId       string `json:"buyerId,optional"`
+	BuyerName     string `json:"buyerName,optional"`
+	WinnerId      string `json:"winnerId,optional"`
+	WinnerName    string `json:"winnerName,optional"`
+	CooperateType string `json:"cooperateType,optional"`
 }
 
 type CustomAddReq struct {
@@ -142,15 +124,10 @@ type CustomAddReq struct {
 	BusinessId           int64   `json:"businessId,optional"`              //商机收录id(人脉)
 }
 
-type FileUploadReq struct {
-	AppId      string `header:"appId,default=10000"`
-	BaseUserId int64  `header:"newUserId"`
-	PositionId int64  `header:"positionId,optional"`
-	EntUserId  int64  `header:"entUserId,optional"`
-	EntId      int64  `header:"entId,optional"`
-	BusinessId int64  `form:"businessId"` //业务id
-	Types      int64  `form:"type"`       //类型;1:跟进记录-线下 2:跟进记录-线上 3:跟进记录-备忘 4:销售机会-项目文档 5:客户-客户档案
-	FileType   int64  `form:"fileType"`   //文件类型,产品介绍、项目方案、立项报告、报价文件、招标文件、投标文件、中标通知书、合同、发票、其他文件
+type DistributePerson struct {
+	PositionId int64 `json:"positionId"`
+	EntUserId  int64 `json:"entUserId"`
+	EntDeptId  int64 `json:"entDeptId"`
 }
 
 type EmployDistributeReq struct {
@@ -165,127 +142,80 @@ type EmployDistributeReq struct {
 	EntDeptId   int64              `header:"entDeptId,optional"`
 }
 
-type DistributePerson struct {
-	PositionId int64 `json:"positionId"`
-	EntUserId  int64 `json:"entUserId"`
-	EntDeptId  int64 `json:"entDeptId"`
+type EmployOperateReq struct {
+	AppId      string `header:"appId,default=10000"`
+	BaseUserId int64  `header:"newUserId"`
+	PositionId int64  `header:"positionId,optional"`
+	EntUserId  int64  `header:"entUserId,optional"`
+	EntId      int64  `header:"entId,optional"`
+	IdArr      string `json:"idArr"`      //信息id多条信息
+	IsEmploy   bool   `json:"isEmploy"`   //是否收录true收录 false取消收录
+	EmployType int64  `json:"employType"` //来源方式来源;1招标采购、2企业、3采购单位、4拟在建项目
+	EntDeptId  int64  `header:"entDeptId,optional"`
+	From       string `json:"from,optional"` //来源
 }
 
 type EntInfoReq struct {
 	EntName string `json:"entName"`
 }
 
-type PushMsgReq struct {
-	AppId      string  `header:"appId,default=10000"`
-	BaseUserId int64   `header:"newUserId"`
-	PositionId int64   `header:"positionId,optional"`
-	EntUserId  int64   `header:"entUserId,optional"`
-	EntId      int64   `header:"entId,optional"`
-	Title      string  `json:"title"`         //标题
-	Content    string  `json:"content"`       //内容
-	PcHref     string  `json:"pcHref"`        //pc跳转地址
-	MobileHref string  `json:"mobileHref"`    //移动端跳转地址
-	User       []int64 `json:"user,optional"` //企业用户id
-	MsgType    string  `json:"msgType"`       //消息类型 1-活动优惠 2-服务通知 3-订阅消息 4-项目动态 5-企业动态 6-分析报告 7-系统通知 11-待办
-}
-
-type CanAddReq struct {
-	AppId          string `header:"appId,default=10000"`
-	BaseUserId     int64  `header:"newUserId"`
-	PositionId     int64  `header:"positionId,optional"`
-	EntUserId      int64  `header:"entUserId,optional"`
-	EntId          int64  `header:"entId,optional"`
-	AccountId      int64  `header:"accountId,optional"`
-	EntDeptId      int64  `header:"entDeptId,optional"`
-	EmployInfoId   int64  `json:"employInfoId"`            //资讯收录id
-	EmployCustomId int64  `json:"employCustomId,optional"` //客户收录id
-	Key            string `json:"key"`                     //创建线索:more_create_clue 创建机会:more_create_chance 创建客户:more_create_custom
+type FileUploadReq struct {
+	AppId      string `header:"appId,default=10000"`
+	BaseUserId int64  `header:"newUserId"`
+	PositionId int64  `header:"positionId,optional"`
+	EntUserId  int64  `header:"entUserId,optional"`
+	EntId      int64  `header:"entId,optional"`
+	BusinessId int64  `form:"businessId"` //业务id
+	Types      int64  `form:"type"`       //类型;1:跟进记录-线下 2:跟进记录-线上 3:跟进记录-备忘 4:销售机会-项目文档 5:客户-客户档案
+	FileType   int64  `form:"fileType"`   //文件类型,产品介绍、项目方案、立项报告、报价文件、招标文件、投标文件、中标通知书、合同、发票、其他文件
 }
 
-type OwnerListReq struct {
-	PartyA           string `json:"partyA,optional"`           //甲方
-	Supplier         string `json:"supplier,optional"`         //供应商
-	Heterotophy      string `json:"heterotophy,optional"`      //同甲异业
-	Intermediary     string `json:"intermediary,optional"`     //中间人
-	Agency           string `json:"agency,optional"`           //代理机构
-	SearchEntName    string `json:"searchEntName,optional"`    //搜索企业名称
-	SourceType       string `json:"sourceType,optional"`       //搜索类型 1 只看转介绍成功率高2只看已监控的
-	ProcessingStatus string `json:"processingStatus,optional"` //处理状态1未处理2已忽略3已建客户
-	Area             string `json:"area,optional"`             //项目地区
-	PositionId       int64  `header:"positionId,optional"`
-	PageSize         int64  `json:"pageSize,optional"`
-	PageIndex        int64  `json:"pageIndex,optional"`
+type IgnoreOperateReq struct {
+	AppId      string `header:"appId,default=10000"`
+	BaseUserId int64  `header:"newUserId"`
+	PositionId int64  `header:"positionId,optional"`
+	EntUserId  int64  `header:"entUserId,optional"`
+	EntId      int64  `header:"entId,optional"`
+	IdArr      string `json:"idArr"`      //id集合
+	IsIgnore   bool   `json:"isIgnore"`   //是否忽略 true 忽略 false取消忽略
+	EmployType int64  `json:"employType"` //来源方式来源;1招标采购、2企业、3采购单位、4拟在建项目
 }
 
-type ProjectListReq struct {
-	PositionId   int64  `header:"positionId,optional"`
-	EntId        string `header:"entId,optional"`
-	EntUserId    string `header:"entUserId,optional"`
-	DeptId       string `header:"deptId,optional"`     //部门id
-	PartyA       string `json:"partyA,optional"`       //甲方
-	Supplier     string `json:"supplier,optional"`     //供应商
-	Heterotophy  string `json:"heterotophy,optional"`  //同甲异业
-	Intermediary string `json:"intermediary,optional"` //中间人
-	Agency       string `json:"agency,optional"`       //代理机构
-	PageNum      int    `json:"pageNum"`
-	PageSize     int    `json:"pageSize"`
-	BusinessType string `json:"businessType"`
-	SaleStatus   string `json:"saleStatus"`
-	ProjectName  string `json:"projectName,optional"`
-	StartTime    int64  `json:"startTime,optional"`
-	EntTime      int64  `json:"entTime,optional"`
-	Area         string `json:"area,optional"`
-	City         string `json:"city,optional"`
-	District     string `json:"district,optional"`
-	PropertyForm string `json:"propertyForm,optional"`
-	SubClass     string `json:"subClass,optional"`
-	Amount       string `json:"amount,optional"`
+type IgnoreReq struct {
+	PositionId int64  `header:"positionId"`
+	EntUserId  int64  `header:"entUserId,optional"`
+	EntId      int64  `header:"entId,optional"`
+	EntDeptId  int64  `header:"entDeptId,optional"`
+	RelateId   string `json:"relateId,optional"`
+	Source     string `json:"source,optional"`
+	Action     string `json:"action,optional"`
 }
 
-type PnameAssReq struct {
-	ProjectName string `json:"projectName"`
+type InfoDetailReq struct {
+	InfoId string `json:"infoId"`
 }
 
-type CoopHistoryReq struct {
-	EntAccountId int64  `header:"entAccountId,optional"` //企业账户id
+type InfoEmployinfoReq struct {
+	AppId        string `header:"appId,default=10000"`
+	BaseUserId   int64  `header:"newUserId"`
 	PositionId   int64  `header:"positionId,optional"`
-	EntId        string `header:"entId,optional"`
-	EntUserId    string `header:"entUserId,optional"`
-	DeptId       string `header:"deptId,optional"` //部门id
-	Pid          string `json:"porjectId"`
-	ChannelType  int    `json:"channelType"`
-}
-
-type AddOrUpdateReq struct {
-	PositionId             int64  `header:"positionId"`
-	EntUserId              int64  `header:"entUserId,optional"`
-	EntId                  int64  `header:"entId,optional"`
-	EntDeptId              int64  `header:"entDeptId,optional"`
-	Company_id             string `json:"company_id,optional"`
-	Company_name           string `json:"company_name,optional"`
-	Contact_person         string `json:"contact_person"`
-	Contact_phone          string `json:"contact_phone"`
-	Introduce_owner_id     string `json:"introduce_owner_id,optional"`
-	Introduce_owner_name   string `json:"introduce_owner_name,optional"`
-	Introduce_project_id   string `json:"introduce_project_id,optional"`
-	Introduce_project_name string `json:"introduce_project_name,optional"`
-	Id                     int64  `json:"id,optional"`
-	Type                   string `json:"type"`
-}
-
-type AssociateReq struct {
-	EntAccountId int64  `header:"entAccountId"`
-	EntName      string `header:"entName"`
-	Name         string `json:"name"`
-	Type         string `json:"type"`
+	EntUserId    int64  `header:"entUserId,optional"`
+	EntId        int64  `header:"entId,optional"`
+	EmployType   int64  `json:"employType"` //1标采购、2企业、3采购单位、4拟在建项目
+	IdArr        string `json:"idArr"`      //id
+	EntNicheDis  int64  `header:"entNicheDis,optional"`
+	EntDeptId    int64  `header:"entDeptId,optional"`
+	PositionType int64  `header:"positionType,optional"` //职位类型 0个人 1企业
+	AccountId    int64  `header:"accountId,optional"`    //账户id
+	EntAccountId int64  `header:"entAccountId,optional"` //企业账户id
+	From         string `json:"from,optional"`           //来源
 }
 
-type AllprojectReq struct {
-	EntAccountId int64  `header:"entAccountId"`
-	PositionId   int64  `header:"positionId"`
-	Name         string `json:"name,optional"`
-	Type         int64  `json:"type,optional"`
-	Id           string `json:"id,optional"`
+type InfoReply struct {
+	Error_code  int64       `json:"error_code"`
+	Error_msg   string      `json:"error_msg"`
+	Data        interface{} `json:"data"`
+	BatchEmploy int64       `json:"batchEmploy"`
 }
 
 type NetWorkListReq struct {
@@ -307,18 +237,23 @@ type NetWorkListReq struct {
 	Monitorcount_end   int64  `json:"monitorcount_end,optional"`
 }
 
-type IgnoreReq struct {
-	PositionId int64  `header:"positionId"`
-	EntUserId  int64  `header:"entUserId,optional"`
-	EntId      int64  `header:"entId,optional"`
-	EntDeptId  int64  `header:"entDeptId,optional"`
-	RelateId   string `json:"relateId,optional"`
-	Source     string `json:"source,optional"`
-	Action     string `json:"action,optional"`
+type OwnerListReq struct {
+	PartyA           string `json:"partyA,optional"`           //甲方
+	Supplier         string `json:"supplier,optional"`         //供应商
+	Heterotophy      string `json:"heterotophy,optional"`      //同甲异业
+	Intermediary     string `json:"intermediary,optional"`     //中间人
+	Agency           string `json:"agency,optional"`           //代理机构
+	SearchEntName    string `json:"searchEntName,optional"`    //搜索企业名称
+	SourceType       string `json:"sourceType,optional"`       //搜索类型 1 只看转介绍成功率高2只看已监控的
+	ProcessingStatus string `json:"processingStatus,optional"` //处理状态1未处理2已忽略3已建客户
+	Area             string `json:"area,optional"`             //项目地区
+	PositionId       int64  `header:"positionId,optional"`
+	PageSize         int64  `json:"pageSize,optional"`
+	PageIndex        int64  `json:"pageIndex,optional"`
 }
 
-type InfoDetailReq struct {
-	InfoId string `json:"infoId"`
+type PnameAssReq struct {
+	ProjectName string `json:"projectName"`
 }
 
 type PrjectHistoryReq struct {
@@ -326,13 +261,49 @@ type PrjectHistoryReq struct {
 	WinnerId string `json:"winnerId"`
 }
 
-type ChannelListReq struct {
+type ProjectListReq struct {
+	PositionId   int64  `header:"positionId,optional"`
+	EntId        string `header:"entId,optional"`
+	EntUserId    string `header:"entUserId,optional"`
+	DeptId       string `header:"deptId,optional"`     //部门id
 	PartyA       string `json:"partyA,optional"`       //甲方
 	Supplier     string `json:"supplier,optional"`     //供应商
 	Heterotophy  string `json:"heterotophy,optional"`  //同甲异业
 	Intermediary string `json:"intermediary,optional"` //中间人
 	Agency       string `json:"agency,optional"`       //代理机构
-	PositionId   int64  `header:"positionId,optional"`
+	PageNum      int    `json:"pageNum"`
+	PageSize     int    `json:"pageSize"`
+	BusinessType string `json:"businessType"`
+	SaleStatus   string `json:"saleStatus"`
+	ProjectName  string `json:"projectName,optional"`
+	StartTime    int64  `json:"startTime,optional"`
+	EntTime      int64  `json:"entTime,optional"`
+	Area         string `json:"area,optional"`
+	City         string `json:"city,optional"`
+	District     string `json:"district,optional"`
+	PropertyForm string `json:"propertyForm,optional"`
+	SubClass     string `json:"subClass,optional"`
+	Amount       string `json:"amount,optional"`
+}
+
+type PushMsgReq struct {
+	AppId      string  `header:"appId,default=10000"`
+	BaseUserId int64   `header:"newUserId"`
+	PositionId int64   `header:"positionId,optional"`
+	EntUserId  int64   `header:"entUserId,optional"`
+	EntId      int64   `header:"entId,optional"`
+	Title      string  `json:"title"`         //标题
+	Content    string  `json:"content"`       //内容
+	PcHref     string  `json:"pcHref"`        //pc跳转地址
+	MobileHref string  `json:"mobileHref"`    //移动端跳转地址
+	User       []int64 `json:"user,optional"` //企业用户id
+	MsgType    string  `json:"msgType"`       //消息类型 1-活动优惠 2-服务通知 3-订阅消息 4-项目动态 5-企业动态 6-分析报告 7-系统通知 11-待办
+}
+
+type Reply struct {
+	Error_code int64       `json:"error_code"`
+	Error_msg  string      `json:"error_msg"`
+	Data       interface{} `json:"data"`
 }
 
 type RouteOwnerListReq struct {
@@ -340,10 +311,39 @@ type RouteOwnerListReq struct {
 	BuyerName string `json:"buyerName,optional"`
 }
 
-type CooperateOwnerListReq struct {
-	BuyerId       string `json:"buyerId,optional"`
-	BuyerName     string `json:"buyerName,optional"`
-	WinnerId      string `json:"winnerId,optional"`
-	WinnerName    string `json:"winnerName,optional"`
-	CooperateType string `json:"cooperateType,optional"`
+type SaleChanceReq struct {
+	AppId             string  `header:"appId,default=10000"`
+	BaseUserId        int64   `header:"newUserId"`
+	PositionId        int64   `header:"positionId,optional"`
+	EntUserId         int64   `header:"entUserId,optional"`
+	EntId             int64   `header:"entId,optional"`
+	AccountId         int64   `header:"accountId,optional"`
+	EntDeptId         int64   `header:"entDeptId,optional"`
+	ChanceName        string  `json:"chanceName"`                 //机会名称
+	Summary           string  `json:"summary"`                    //概要信息
+	ChanceClassify    int64   `json:"chanceClassify"`             //机会分类
+	ExpectedOrderTime int64   `json:"expectedOrderTime,optional"` //最初预计落单段时间 时间戳
+	ExpectedMoney     float64 `json:"expectedMoney,optional"`     //最初预计落单金额
+	CustomName        string  `json:"customName"`                 //客户全称
+	BusinessType      int64   `json:"businessType"`               //业务类型  1新客户需求 2老客户需求 3简易项目流程
+	Remarks           string  `json:"remarks,optional"`           //备注
+	NextfollowUpTime  int64   `json:"nextfollowUpTime,optional"`  //下次跟进时间戳
+	Types             int64   `json:"types"`                      //处理方式 1自办;2转办;3待处理
+	User              []int64 `json:"user,optional"`              //企业用户id
+	EmployInfoId      int64   `json:"employInfoId,optional"`      //资讯收录id
+	CustomId          int64   `json:"customId,optional"`          //客户id
+	CreateName        string  `json:"createName"`                 //创建人
+	ChanceSource      int64   `json:"chanceSource"`               //机会来源
+	OwnerId           int64   `json:"ownerId,optional"`           //潜客收录id(人脉)
+	BusinessId        int64   `json:"businessId,optional"`        //商机收录id(人脉)
+}
+
+type TransferReq struct {
+	AppId         string   `header:"appId,default=10000"`
+	BaseUserId    int64    `header:"newUserId"`
+	PositionId    int64    `header:"positionId,optional"`
+	EntUserId     int64    `header:"entUserId,optional"`
+	EntId         int64    `header:"entId,optional"`
+	EmplouIdArr   []string `json:"emplouIdArr"`
+	PositionIdArr []string `json:"positionIdArr"`
 }