zhangxinlei1996 1 жил өмнө
parent
commit
f5d1c2a527

+ 56 - 56
api/application.api

@@ -8,41 +8,41 @@ type (
 	}
 
 	ClueAddReq {
-		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"`
-		CluesSource  string   `json:"cluesSource"`           //线索来源
-		ClueName     string   `json:"clueName"`              //线索名称
-		Summary      string   `json:"summary"`               //概要信息
-		FollowUpTime int64    `json:"followUpTime,optional"` //下次跟进时间(时间戳)
-		Types        int64    `json:"types"`                 //处理方式 1自办;2转办
-		User         []string `json:"user,optional"`         //企业用户id
-		EmployInfoId int64    `json:"employInfoId"`          //资讯收录id
-		CreateName   string   `json:"createName"`            //创建人
+		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"`
+		CluesSource  string  `json:"cluesSource"`           //线索来源
+		ClueName     string  `json:"clueName"`              //线索名称
+		Summary      string  `json:"summary"`               //概要信息
+		FollowUpTime int64   `json:"followUpTime,optional"` //下次跟进时间(时间戳)
+		Types        int64   `json:"types"`                 //处理方式 1自办;2转办
+		User         []int64 `json:"user,optional"`         //企业用户id
+		EmployInfoId int64   `json:"employInfoId"`          //资讯收录id
+		CreateName   string  `json:"createName"`            //创建人
 	}
 
 	SaleChanceReq {
-		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"`
-		ChanceName        string   `json:"chanceName"`                 //机会名称
-		Summary           string   `json:"summary"`                    //概要信息
-		ChanceClassify    int64    `json:"chanceClassify"`             //机会分类
-		ExpectedOrderTime int64    `json:"expectedOrderTime,optional"` //最初预计落单段时间 时间戳
-		ExpectedMoney     int64    `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转办
-		User              []string `json:"user"`                       //企业用户id
-		EmployInfoId      int64    `json:"employInfoId"`               //资讯收录id
-		CustomId          int64    `json:"customId"`                   //客户id
-		CreateName        string   `json:"createName"`                 //创建人
+		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"`
+		ChanceName        string  `json:"chanceName"`                 //机会名称
+		Summary           string  `json:"summary"`                    //概要信息
+		ChanceClassify    int64   `json:"chanceClassify"`             //机会分类
+		ExpectedOrderTime int64   `json:"expectedOrderTime,optional"` //最初预计落单段时间 时间戳
+		ExpectedMoney     int64   `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转办
+		User              []int64 `json:"user,optional"`              //企业用户id
+		EmployInfoId      int64   `json:"employInfoId"`               //资讯收录id
+		CustomId          int64   `json:"customId"`                   //客户id
+		CreateName        string  `json:"createName"`                 //创建人
 	}
 
 	EmployOperateReq {
@@ -88,30 +88,30 @@ type (
 	}
 
 	CustomAddReq {
-		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"`
-		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                 []string `json:"user"`                      //转办用户
-		EmployCustomId       int64    `json:"employCustomId,optional"`   //客户收录id
-		EmployInfoId         int64    `json:"employInfoId,optional"`     //资讯收录id
-		Remarks              string   `json:"remarks,optional"`          //备注
-		CreateName           string   `json:"createName"`                //创建人
+		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"`
+		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"`   //客户收录id
+		EmployInfoId         int64   `json:"employInfoId,optional"`     //资讯收录id
+		Remarks              string  `json:"remarks,optional"`          //备注
+		CreateName           string  `json:"createName"`                //创建人
 	}
 
 	FileUploadReq {

+ 2 - 2
api/etc/crmapplication.yaml

@@ -14,12 +14,12 @@ UserCenterRpc:
 FileCenterRpc:
   Etcd:
     Hosts:
-    - 127.0.0.1:2379
+    - 192.168.3.206:2379
     Key: filecenter.rpc
 ossBucketName: jytest2022
 ossUrl: https://jytest2022.oss-cn-beijing.aliyuncs.com
 BaseCenterRpc:
   Etcd:
     Hosts:
-    - 127.0.0.1:2379
+    - 192.168.3.206:2379
     Key: basecenter.rpc

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

@@ -8,41 +8,41 @@ type Reply struct {
 }
 
 type ClueAddReq 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"`
-	CluesSource  string   `json:"cluesSource"`           //线索来源
-	ClueName     string   `json:"clueName"`              //线索名称
-	Summary      string   `json:"summary"`               //概要信息
-	FollowUpTime int64    `json:"followUpTime,optional"` //下次跟进时间(时间戳)
-	Types        int64    `json:"types"`                 //处理方式 1自办;2转办
-	User         []string `json:"user,optional"`         //企业用户id
-	EmployInfoId int64    `json:"employInfoId"`          //资讯收录id
-	CreateName   string   `json:"createName"`            //创建人
+	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"`
+	CluesSource  string  `json:"cluesSource"`           //线索来源
+	ClueName     string  `json:"clueName"`              //线索名称
+	Summary      string  `json:"summary"`               //概要信息
+	FollowUpTime int64   `json:"followUpTime,optional"` //下次跟进时间(时间戳)
+	Types        int64   `json:"types"`                 //处理方式 1自办;2转办
+	User         []int64 `json:"user,optional"`         //企业用户id
+	EmployInfoId int64   `json:"employInfoId"`          //资讯收录id
+	CreateName   string  `json:"createName"`            //创建人
 }
 
 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"`
-	ChanceName        string   `json:"chanceName"`                 //机会名称
-	Summary           string   `json:"summary"`                    //概要信息
-	ChanceClassify    int64    `json:"chanceClassify"`             //机会分类
-	ExpectedOrderTime int64    `json:"expectedOrderTime,optional"` //最初预计落单段时间 时间戳
-	ExpectedMoney     int64    `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转办
-	User              []string `json:"user"`                       //企业用户id
-	EmployInfoId      int64    `json:"employInfoId"`               //资讯收录id
-	CustomId          int64    `json:"customId"`                   //客户id
-	CreateName        string   `json:"createName"`                 //创建人
+	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"`
+	ChanceName        string  `json:"chanceName"`                 //机会名称
+	Summary           string  `json:"summary"`                    //概要信息
+	ChanceClassify    int64   `json:"chanceClassify"`             //机会分类
+	ExpectedOrderTime int64   `json:"expectedOrderTime,optional"` //最初预计落单段时间 时间戳
+	ExpectedMoney     int64   `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转办
+	User              []int64 `json:"user,optional"`              //企业用户id
+	EmployInfoId      int64   `json:"employInfoId"`               //资讯收录id
+	CustomId          int64   `json:"customId"`                   //客户id
+	CreateName        string  `json:"createName"`                 //创建人
 }
 
 type EmployOperateReq struct {
@@ -88,30 +88,30 @@ type InfoEmployinfoReq struct {
 }
 
 type CustomAddReq 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"`
-	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                 []string `json:"user"`                      //转办用户
-	EmployCustomId       int64    `json:"employCustomId,optional"`   //客户收录id
-	EmployInfoId         int64    `json:"employInfoId,optional"`     //资讯收录id
-	Remarks              string   `json:"remarks,optional"`          //备注
-	CreateName           string   `json:"createName"`                //创建人
+	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"`
+	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"`   //客户收录id
+	EmployInfoId         int64   `json:"employInfoId,optional"`     //资讯收录id
+	Remarks              string  `json:"remarks,optional"`          //备注
+	CreateName           string  `json:"createName"`                //创建人
 }
 
 type FileUploadReq struct {

+ 11 - 9
entity/db.go

@@ -45,13 +45,15 @@ type EsStruct struct {
 }
 
 const (
-	TASK              = "task"          //任务表
-	FOLLOW_RECORD     = "follow_record" //跟进记录表
-	SALE_CHANCE       = "sale_chance"   //销售机会
-	CUSTOM            = "custom"        //客户表
-	EMPLOY_INFO       = "employ_info"   //商业资讯收录表
-	EMPLOY_CUSTOM     = "employ_custom" //候选客户收录表
-	SALE_CLUE         = "sale_clue"
-	EMPLOY_SUMMARY    = "employ_summary"
-	TASK_EXECUTE_PLAN = "task_execute_plan"
+	TASK              = "task"              //任务表
+	FOLLOW_RECORD     = "follow_record"     //跟进记录表
+	SALE_CHANCE       = "sale_chance"       //销售机会
+	CUSTOM            = "custom"            //客户表
+	EMPLOY_INFO       = "employ_info"       //商业资讯收录表
+	EMPLOY_CUSTOM     = "employ_custom"     //候选客户收录表
+	SALE_CLUE         = "sale_clue"         //销售线索
+	EMPLOY_SUMMARY    = "employ_summary"    //收录汇总表
+	TASK_EXECUTE_PLAN = "task_execute_plan" //任务执行计划
+	TASK_TRANSFER     = "task_transfer"     //转办记录表
+	TASK_TEAM         = "task_team"         //任务团队
 )

+ 36 - 34
service/custom.go

@@ -9,12 +9,10 @@ import (
 
 	qu "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/date"
-	"app.yhyue.com/moapp/jybase/encrypt"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	cm "bp.jydev.jianyu360.cn/CRM/application/api/common"
 	"bp.jydev.jianyu360.cn/CRM/application/entity"
 	baseC "bp.jydev.jianyu360.cn/CRM/baseCenter/rpc/pb"
-	"github.com/gogf/gf/v2/util/gconv"
 )
 
 //客户相关
@@ -23,25 +21,25 @@ type CustomService struct {
 	PositionId           int64
 	EntUserId            int64
 	EntId                int64
-	CustomType           int64    //客户类型
-	Summary              string   //概要信息
-	CustomAllName        string   //客户全称
-	CustomAbbreviation   string   //客户简称
-	CustomLevel          int64    //客户级别
-	CustomIndustry       int64    //客户行业
-	CustomDetailIndustry int64    //客户细分行业
-	Province             string   //省份
-	City                 string   //城市
-	District             string   //地区
-	Address              string   //详细地址
-	CompanyPhone         string   //公司电话
-	NextfollowUpTime     int64    //下次跟进时间戳
-	Types                int64    //处理方式 1自办;2转办
-	User                 []string //转办用户
-	EmployCustomId       int64    //客户收录id
-	EmployInfoId         int64    //资讯收录id
-	Remarks              string   //备注
-	CreateName           string   //创建人
+	CustomType           int64   //客户类型
+	Summary              string  //概要信息
+	CustomAllName        string  //客户全称
+	CustomAbbreviation   string  //客户简称
+	CustomLevel          int64   //客户级别
+	CustomIndustry       int64   //客户行业
+	CustomDetailIndustry int64   //客户细分行业
+	Province             string  //省份
+	City                 string  //城市
+	District             string  //地区
+	Address              string  //详细地址
+	CompanyPhone         string  //公司电话
+	NextfollowUpTime     int64   //下次跟进时间戳
+	Types                int64   //处理方式 1自办;2转办
+	User                 []int64 //转办用户
+	EmployCustomId       int64   //客户收录id
+	EmployInfoId         int64   //资讯收录id
+	Remarks              string  //备注
+	CreateName           string  //创建人
 }
 
 //Add 创建客户
@@ -50,12 +48,13 @@ func (this *CustomService) Add(ctx context.Context) int64 {
 	nextFollowTime := time.Unix(this.NextfollowUpTime, 0).Format(date.Date_Full_Layout)
 	args := []interface{}{}
 	argsTask := []interface{}{}
+	argsTaskTeam := []interface{}{}
 	//判断处理方式
 	//转办
 	if this.Types == 2 {
+		transferArr := []int64{}
 		for _, v := range this.User {
-			entuserid := encrypt.SE.Decode4Hex(v)
-			i_entuserid := gconv.Int64(entuserid)
+			i_entuserid := v
 			resp, err := cm.UserCenterRpc.IdentityByEntUserId(ctx, &pb.IdentityReq{
 				Id: i_entuserid,
 			})
@@ -66,23 +65,26 @@ func (this *CustomService) Add(ctx context.Context) int64 {
 				log.Println("entuser用户", i_entuserid, "没有找到职位信息")
 				return 0
 			}
-			positionid := resp.PositionId
-			//线索
-			//args = append(args, positionid, this.EntId, i_entuserid, this.EmployInfoId, this.EmployCustomId, this.Types, this.CustomAllName, this.CustomAbbreviation, this.Summary, this.CustomLevel, this.CustomIndustry, this.CustomDetailIndustry, this.Province, this.City, this.District, this.Address, this.CompanyPhone, this.Remarks, nowtime)
-			//任务
-			//argsTask = append(argsTask, positionid, this.EntId, this.EntUserId, this.ClueName+"的跟进任务", this.CluesSource, this.EmployInfoId, positionid, 1, this.PositionId, nowtime, 1)
+			transferArr = append(transferArr, resp.PositionId)
+		}
 
-			if !SaveCustom(ctx, args, argsTask, this.EmployInfoId, this.EmployCustomId, positionid, this.CreateName) {
-				return 0
-			}
+		//客户
+		args = append(args, this.PositionId, this.EntId, this.EntUserId, this.EmployInfoId, this.EmployCustomId, this.CustomType, this.CustomAllName, this.CustomAbbreviation, this.Summary, qu.If(this.CustomLevel == 0, nil, this.CustomLevel), this.CustomIndustry, this.CustomDetailIndustry, qu.If(this.Province == "", nil, this.Province), qu.If(this.City == "", nil, this.City), qu.If(this.District == "", nil, this.District), qu.If(this.Address == "", nil, this.Address), qu.If(this.CompanyPhone == "", nil, this.CompanyPhone), qu.If(this.Remarks == "", nil, this.Remarks), this.CreateName, nowtime)
+		//任务
+		argsTask = append(argsTask, this.PositionId, this.EntId, this.EntUserId, this.CustomAllName+"的跟进任务", 3, this.PositionId, 1, nowtime, 1, qu.If(this.NextfollowUpTime == 0, nil, nextFollowTime))
+
+		if !SaveCustom(ctx, args, argsTask, argsTaskTeam, this.EmployInfoId, this.EmployCustomId, this.PositionId, this.CreateName, transferArr) {
+			return 0
 		}
 	} else if this.Types == 1 {
 		//客户
 		args = append(args, this.PositionId, this.EntId, this.EntUserId, this.EmployInfoId, this.EmployCustomId, this.CustomType, this.CustomAllName, this.CustomAbbreviation, this.Summary, qu.If(this.CustomLevel == 0, nil, this.CustomLevel), this.CustomIndustry, this.CustomDetailIndustry, qu.If(this.Province == "", nil, this.Province), qu.If(this.City == "", nil, this.City), qu.If(this.District == "", nil, this.District), qu.If(this.Address == "", nil, this.Address), qu.If(this.CompanyPhone == "", nil, this.CompanyPhone), qu.If(this.Remarks == "", nil, this.Remarks), this.CreateName, nowtime)
 		//任务
 		argsTask = append(argsTask, this.PositionId, this.EntId, this.EntUserId, this.CustomAllName+"的跟进任务", 3, this.PositionId, 1, nowtime, 1, qu.If(this.NextfollowUpTime == 0, nil, nextFollowTime))
+		//任务团队
+		argsTaskTeam = append(argsTaskTeam, this.PositionId, this.EntUserId, this.CreateName, 1, nowtime)
 		//存库
-		if !SaveCustom(ctx, args, argsTask, this.EmployInfoId, this.EmployCustomId, this.PositionId, this.CreateName) {
+		if !SaveCustom(ctx, args, argsTask, argsTaskTeam, this.EmployInfoId, this.EmployCustomId, this.PositionId, this.CreateName, []int64{}) {
 			return 0
 		}
 	}
@@ -114,7 +116,7 @@ func CustomUpdate(tx *sql.Tx, employ_info_id, employ_custom_id, positionId int64
 	return cm.CrmMysql.UpdateByTx(tx, tablename, map[string]interface{}{"id": id, "position_id": positionId}, map[string]interface{}{"is_create_custom": 1})
 }
 
-func SaveCustom(ctx context.Context, argsCustom, argsTask []interface{}, employ_info_id, employ_custom_id, positionId int64, createPerson string) bool {
+func SaveCustom(ctx context.Context, argsCustom, argsTask, argsTaskTeam []interface{}, employ_info_id, employ_custom_id, positionId int64, createPerson string, transferArr []int64) bool {
 	//存库
 	return cm.CrmMysql.ExecTx("创建客户", func(tx *sql.Tx) bool {
 		//插入客户
@@ -122,7 +124,7 @@ func SaveCustom(ctx context.Context, argsCustom, argsTask []interface{}, employ_
 		//传过来的argTask没有来源id,需要append
 		argsTask = append(argsTask, customId)
 		//任务车存储
-		taskId := TaskAdd(tx, argsTask)
+		taskId := TaskAdd(tx, argsTask, argsTaskTeam, transferArr, positionId)
 		ok := CustomUpdate(tx, employ_info_id, employ_custom_id, positionId)
 		//插入台账
 		ok2 := SaveLedger(ctx, positionId, customId, taskId, "创建客户", fmt.Sprintf("%s创建了客户", createPerson), createPerson)

+ 29 - 30
service/sale_chance.go

@@ -9,7 +9,6 @@ import (
 
 	qu "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/date"
-	"app.yhyue.com/moapp/jybase/encrypt"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	cm "bp.jydev.jianyu360.cn/CRM/application/api/common"
 	"bp.jydev.jianyu360.cn/CRM/application/entity"
@@ -22,20 +21,20 @@ type SaleChanceService struct {
 	PositionId        int64
 	EntUserId         int64
 	EntId             int64
-	ChanceName        string   //机会名称
-	Owner             string   //机会所有者
-	Summary           string   //概要信息
-	ChanceClassify    int64    //机会分类
-	ExpectedOrderTime int64    //最初预计落单段时间 时间戳
-	ExpectedMoney     int64    //最初预计落单金额
-	CustomName        string   //客户全称
-	BusinessType      int64    //业务类型
-	Remarks           string   //备注
-	NextfollowUpTime  int64    //下次跟进时间戳
-	Types             int64    //处理方式 1自办;2转办
-	User              []string //企业用户id
-	EmployInfoId      int64    //资讯收录id
-	CustomId          int64    //客户id
+	ChanceName        string  //机会名称
+	Owner             string  //机会所有者
+	Summary           string  //概要信息
+	ChanceClassify    int64   //机会分类
+	ExpectedOrderTime int64   //最初预计落单段时间 时间戳
+	ExpectedMoney     int64   //最初预计落单金额
+	CustomName        string  //客户全称
+	BusinessType      int64   //业务类型
+	Remarks           string  //备注
+	NextfollowUpTime  int64   //下次跟进时间戳
+	Types             int64   //处理方式 1自办;2转办
+	User              []int64 //企业用户id
+	EmployInfoId      int64   //资讯收录id
+	CustomId          int64   //客户id
 	CreateName        string
 }
 
@@ -44,7 +43,7 @@ func (this *SaleChanceService) Add(ctx context.Context) int64 {
 	nowtime := time.Now().Format(date.Date_Full_Layout)
 	args := []interface{}{}
 	argsTask := []interface{}{}
-	argsFollowRecord := []interface{}{}
+	argsTaskTeam := []interface{}{}
 	//落单时间戳转时间
 	expect_deal_time := time.Unix(this.ExpectedOrderTime, 0).Format(date.Date_Full_Layout)
 	//下次跟进时间
@@ -53,9 +52,9 @@ func (this *SaleChanceService) Add(ctx context.Context) int64 {
 	//判断处理方式
 	//转办
 	if this.Types == 2 {
+		transferArr := []int64{}
 		for _, v := range this.User {
-			entuserid := encrypt.SE.Decode4Hex(v)
-			i_entuserid := gconv.Int64(entuserid)
+			i_entuserid := v
 			resp, err := cm.UserCenterRpc.IdentityByEntUserId(ctx, &pb.IdentityReq{
 				Id: i_entuserid,
 			})
@@ -66,24 +65,24 @@ func (this *SaleChanceService) Add(ctx context.Context) int64 {
 				log.Println("entuser用户", i_entuserid, "没有找到职位信息")
 				return 0
 			}
-			// positionid := resp.PositionId
-			//线索机会
-			// []string{"position_id", "ent_id", "ent_user_id", "employ_info_id", "name", "summary", "classify", "expect_deal_time", "expect_deal_amount", "custom_id", "tpl_id", "remark", "create_time"}
-			//args = append(args, positionid, this.EntId, i_entuserid, this.EmployInfoId, this.ChanceName, this.Summary, expect_deal_time, this.ExpectedMoney, this.CustomId, this.BusinessType, this.Remarks, nowtime)
-			//任务
-			//argsTask = append(argsTask, positionid, this.EntId, this.EntUserId, this.ClueName, this.CluesSource, this.EmployInfoId, positionid, 1, this.PositionId, nowtime, 1)
+			transferArr = append(transferArr, resp.PositionId)
+		}
+		args = append(args, this.PositionId, this.EntId, this.EntUserId, this.EmployInfoId, this.CustomId, this.BusinessType, this.ChanceName, this.Summary, this.ChanceClassify, qu.If(this.ExpectedOrderTime == 0, nil, expect_deal_time), qu.If(this.ExpectedMoney == 0, nil, this.ExpectedMoney), qu.If(this.Remarks == "", nil, this.Remarks), nowtime)
+		//任务
+		argsTask = append(argsTask, this.PositionId, this.EntId, this.EntUserId, this.ChanceName+"的跟进任务", 2, this.PositionId, 1, nowtime, 1, qu.If(this.NextfollowUpTime == 0, nil, nextFollowTime))
 
-			//if !Save_(args, argsTask, argsFollowRecord) {
-			//	return 0
-			//}
+		if !SaveChange(ctx, args, argsTask, argsTaskTeam, this.PositionId, this.BusinessType, this.CreateName, transferArr) {
+			return 0
 		}
 	} else if this.Types == 1 {
 		//线索
 		args = append(args, this.PositionId, this.EntId, this.EntUserId, this.EmployInfoId, this.CustomId, this.BusinessType, this.ChanceName, this.Summary, this.ChanceClassify, qu.If(this.ExpectedOrderTime == 0, nil, expect_deal_time), qu.If(this.ExpectedMoney == 0, nil, this.ExpectedMoney), qu.If(this.Remarks == "", nil, this.Remarks), nowtime)
 		//任务
 		argsTask = append(argsTask, this.PositionId, this.EntId, this.EntUserId, this.ChanceName+"的跟进任务", 2, this.PositionId, 1, nowtime, 1, qu.If(this.NextfollowUpTime == 0, nil, nextFollowTime))
+		//任务团队
+		argsTaskTeam = append(argsTaskTeam, this.PositionId, this.EntUserId, this.CreateName, 1, nowtime)
 		//存库
-		if !SaveChange(ctx, args, argsTask, argsFollowRecord, this.PositionId, this.BusinessType, this.CreateName) {
+		if !SaveChange(ctx, args, argsTask, argsTaskTeam, this.PositionId, this.BusinessType, this.CreateName, []int64{}) {
 			return 0
 		}
 	}
@@ -99,7 +98,7 @@ func SaleChangeAdd(tx *sql.Tx, args []interface{}) int64 {
 }
 
 // Save 存库
-func SaveChange(ctx context.Context, argsChange, argsTask, argsFollowRecord []interface{}, positionId, tplId int64, createName string) bool {
+func SaveChange(ctx context.Context, argsChange, argsTask, argsTaskTeam []interface{}, positionId, tplId int64, createName string, transferArr []int64) bool {
 	//存库
 	return cm.CrmMysql.ExecTx("创建机会", func(tx *sql.Tx) bool {
 		//插入机会
@@ -107,7 +106,7 @@ func SaveChange(ctx context.Context, argsChange, argsTask, argsFollowRecord []in
 		//传过来的argTask没有来源id,需要append
 		argsTask = append(argsTask, changeId)
 		//任务车存储
-		taskId := TaskAdd(tx, argsTask)
+		taskId := TaskAdd(tx, argsTask, argsTaskTeam, transferArr, positionId)
 		//操作台帐
 		ok := SaveLedger(ctx, positionId, changeId, taskId, "创建销售机会", fmt.Sprintf("%s创建了销售机会", createName), createName)
 		//任务执行计划

+ 42 - 27
service/sale_clue.go

@@ -9,11 +9,9 @@ import (
 
 	qu "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/date"
-	"app.yhyue.com/moapp/jybase/encrypt"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	cm "bp.jydev.jianyu360.cn/CRM/application/api/common"
 	"bp.jydev.jianyu360.cn/CRM/application/entity"
-	"github.com/gogf/gf/v2/util/gconv"
 )
 
 //线索相关
@@ -26,7 +24,7 @@ type SaleClueService struct {
 	Summary      string
 	EmployInfoId int64
 	Types        int64
-	User         []string
+	User         []int64
 	FollowUpTime int64
 	CreateName   string
 }
@@ -37,13 +35,13 @@ func (this *SaleClueService) Add(ctx context.Context) int64 {
 	nextFollowTime := time.Unix(this.FollowUpTime, 0).Format(date.Date_Full_Layout)
 	args := []interface{}{}
 	argsTask := []interface{}{}
-	argsFollowRecord := []interface{}{}
+	argsTaskTeam := []interface{}{}
 	//判断处理方式
 	//转办
 	if this.Types == 2 {
+		transferArr := []int64{}
 		for _, v := range this.User {
-			entuserid := encrypt.SE.Decode4Hex(v)
-			i_entuserid := gconv.Int64(entuserid)
+			i_entuserid := v
 			resp, err := cm.UserCenterRpc.IdentityByEntUserId(ctx, &pb.IdentityReq{
 				Id: i_entuserid,
 			})
@@ -54,24 +52,25 @@ func (this *SaleClueService) Add(ctx context.Context) int64 {
 				log.Println("entuser用户", i_entuserid, "没有找到职位信息")
 				return 0
 			}
-			positionid := resp.PositionId
-			createName := resp.EntUserName
-			//线索
-			args = append(args, positionid, this.EntId, i_entuserid, this.ClueName, this.CluesSource, this.Summary, this.EmployInfoId, 0, nowtime)
-			//任务
-			argsTask = append(argsTask, positionid, this.EntId, this.EntUserId, this.ClueName+"的跟进任务", this.CluesSource, positionid, 1, nowtime, 1, nextFollowTime)
+			transferArr = append(transferArr, resp.PositionId)
+		}
+		//线索
+		args = append(args, this.PositionId, this.EntId, this.EntUserId, this.ClueName, this.CluesSource, this.Summary, this.EmployInfoId, 0, nowtime)
+		//任务
+		argsTask = append(argsTask, this.PositionId, this.EntId, this.EntUserId, this.ClueName+"的跟进任务", 1, this.PositionId, 1, nowtime, 1, qu.If(this.FollowUpTime == 0, nil, nextFollowTime))
 
-			if !Save(ctx, args, argsTask, argsFollowRecord, positionid, createName) {
-				return 0
-			}
+		if !Save(ctx, args, argsTask, argsTaskTeam, this.PositionId, this.CreateName, transferArr) {
+			return 0
 		}
 	} else if this.Types == 1 {
 		//线索
 		args = append(args, this.PositionId, this.EntId, this.EntUserId, this.ClueName, this.CluesSource, this.Summary, this.EmployInfoId, 0, time.Now().Format(date.Date_Full_Layout))
 		//任务
 		argsTask = append(argsTask, this.PositionId, this.EntId, this.EntUserId, this.ClueName+"的跟进任务", 1, this.PositionId, 1, nowtime, 1, qu.If(this.FollowUpTime == 0, nil, nextFollowTime))
+		//任务团队
+		argsTaskTeam = append(argsTaskTeam, this.PositionId, this.EntUserId, this.CreateName, 1, nowtime)
 		//存库
-		if !Save(ctx, args, argsTask, argsFollowRecord, this.PositionId, this.CreateName) {
+		if !Save(ctx, args, argsTask, argsTaskTeam, this.PositionId, this.CreateName, []int64{}) {
 			return 0
 		}
 	}
@@ -87,21 +86,37 @@ func SaleClueAdd(tx *sql.Tx, args []interface{}) int64 {
 }
 
 //TaskAdd 任务车存储
-func TaskAdd(tx *sql.Tx, args []interface{}) int64 {
+/*创建任务
+taskTransferMap 自办的map
+transferArr 转办的用户职位id
+*/
+func TaskAdd(tx *sql.Tx, args, taskTeamArgs []interface{}, transferArr []int64, positionId int64) int64 {
 	fields := []string{"position_id", "ent_id", "ent_user_id", "name", "source", "create_person", "status", "create_time", "create_way", "next_follow_time", "source_id"}
 	_, id := cm.CrmMysql.InsertBatchByTx(tx, entity.TASK, fields, args)
-	return id
-}
-
-//FollowRecordAdd 跟进记录存储
-func FollowRecordAdd(tx *sql.Tx, args []interface{}) int64 {
-	fields := []string{"position_id", "task_id"}
-	_, id := cm.CrmMysql.InsertBatchByTx(tx, entity.FOLLOW_RECORD, fields, args)
-	return id
+	teamId, transferId := int64(0), int64(0)
+	if len(taskTeamArgs) > 0 {
+		//自办
+		taskTeamFields := []string{"position_id", "ent_user_id", "name", "role", "create_time", "task_id"}
+		taskTeamArgs = append(taskTeamArgs, id)
+		_, teamId = cm.CrmMysql.InsertBatchByTx(tx, entity.TASK_TEAM, taskTeamFields, taskTeamArgs)
+	} else if len(transferArr) > 0 {
+		//转办
+		taskTransferFields := []string{"transfer_id", "responsible_id", "create_time", "task_id"}
+		taskTransferArgs := []interface{}{}
+		for _, v := range transferArr {
+			taskTransferArgs = append(taskTransferArgs, positionId, v, time.Now().Format(date.Date_Full_Layout), id)
+		}
+		_, transferId = cm.CrmMysql.InsertBatchByTx(tx, entity.TASK_TRANSFER, taskTransferFields, taskTransferArgs)
+	}
+	if transferId > 0 || teamId > 0 {
+		return id
+	}
+	log.Println("task add err :", id, len(taskTeamArgs), teamId, len(transferArr), transferId)
+	return -1
 }
 
 //Save 存库
-func Save(ctx context.Context, argsClue, argsTask, argsFollowRecord []interface{}, positionId int64, createName string) bool {
+func Save(ctx context.Context, argsClue, argsTask, argsTaskTeam []interface{}, positionId int64, createName string, transferArr []int64) bool {
 	//存库
 	return cm.CrmMysql.ExecTx("创建线索", func(tx *sql.Tx) bool {
 		//插入线索
@@ -109,7 +124,7 @@ func Save(ctx context.Context, argsClue, argsTask, argsFollowRecord []interface{
 		//传过来的argTask没有来源id,需要append
 		argsTask = append(argsTask, clueId)
 		//任务车存储
-		taskId := TaskAdd(tx, argsTask)
+		taskId := TaskAdd(tx, argsTask, argsTaskTeam, transferArr, positionId)
 		//操作台帐
 		ok := SaveLedger(ctx, positionId, clueId, taskId, "创建销售线索", fmt.Sprintf("%s创建了销售线索", createName), createName)
 		if clueId > 0 && taskId > 0 && ok {