浏览代码

Merge branch 'crm/crm_16.6' of http://8.136.199.33:3000/hongze/hz_crm_api into debug

zhangchuanxing 1 月之前
父节点
当前提交
d43aa650b9

+ 30 - 2
controllers/roadshow/report.go

@@ -19,7 +19,7 @@ import (
 // ResearcherReportList
 // @Title 研究员路演统计
 // @Description 研究员路演统计接口
-// @Param   DataType   query   string  true       "枚举值:week、month、time_interval"
+// @Param   DataType   query   string  true       "枚举值:week、month、time_interval、quarter(季度)"
 // @Param   StartDate   query   string  true       "开始日期,格式:2022-04-06"
 // @Param   EndDate   query   string  true       "结束日期,格式:2022-04-06"
 // @Param   CompanyType   query   string  true       "客户类型:'ficc','权益',传空默认为ficc,"
@@ -73,6 +73,18 @@ func (this *CalendarController) ResearcherReportList() {
 			br.ErrMsg = "数据异常,Err:" + err.Error()
 			return
 		}
+	case "quarter":
+		adminDataList, _, err = roadshowService.GetQuarterData("researcher", "company_status")
+		if err != nil {
+			br.Msg = "数据异常"
+			br.ErrMsg = "数据异常,Err:" + err.Error()
+			return
+		}
+		if err != nil {
+			br.Msg = "数据异常"
+			br.ErrMsg = "数据异常,Err:" + err.Error()
+			return
+		}
 	}
 
 	var group []*roadshow.ResearcherGroup
@@ -187,6 +199,7 @@ func (this *CalendarController) ResearcherReportList() {
 	tmpAllMeetingNumMap := make(map[int]int)
 	tmpAllRoadShowNumMap := make(map[int]int)
 	tmpAllSalonNumMap := make(map[int]int)
+	tmpAllAskNumMap := make(map[int]int)
 	for _, v := range group {
 		v.ResearcherList = groupMap[v.GroupId]
 		tmpGroupAdminReportRecord := make([]roadshow.AdminReportRecord, 0)
@@ -200,6 +213,7 @@ func (this *CalendarController) ResearcherReportList() {
 		tmpGroupMeetingNumMap := make(map[int]int)
 		tmpGroupRoadShowNumMap := make(map[int]int)
 		tmpGroupSalonMapNumMap := make(map[int]int)
+		tmpGroupAskMapNumMap := make(map[int]int)
 		for _, researcher := range groupMap[v.GroupId] {
 			//组内研究员数据
 			//每个区间的数据
@@ -208,7 +222,7 @@ func (this *CalendarController) ResearcherReportList() {
 				startDateIndexList[index] = adminData.StartDate
 				endDateIndexList[index] = adminData.EndDate
 
-				var tmpTryOutNum, tmpFormalNum, tmpMeetingNum, tmpRoadShowNum, tmpSalonNum int
+				var tmpTryOutNum, tmpFormalNum, tmpMeetingNum, tmpRoadShowNum, tmpSalonNum, tmpAskNum int
 				if num, ok := adminData.TryOutMap[researcher.AdminId]; ok {
 					tmpTryOutNum = num
 				}
@@ -225,12 +239,17 @@ func (this *CalendarController) ResearcherReportList() {
 					tmpSalonNum = num
 				}
 
+				if num, ok := adminData.AskMap[researcher.AdminId]; ok { //路演总次数
+					tmpAskNum = num
+				}
+
 				tmpAdminRsReportRecordNum := roadshow.RsReportRecordNum{
 					TryOutNum:   tmpTryOutNum,
 					FormalNum:   tmpFormalNum,
 					MeetingNum:  tmpMeetingNum,
 					RoadShowNum: tmpRoadShowNum,
 					SalonNum:    tmpSalonNum,
+					AskNum:      tmpAskNum,
 					StartDate:   adminData.StartDate,
 					EndDate:     adminData.EndDate,
 				}
@@ -252,11 +271,15 @@ func (this *CalendarController) ResearcherReportList() {
 				if _, ok := tmpGroupSalonMapNumMap[index]; !ok {
 					tmpGroupSalonMapNumMap[index] = 0
 				}
+				if _, ok := tmpGroupAskMapNumMap[index]; !ok {
+					tmpGroupAskMapNumMap[index] = 0
+				}
 				tmpGroupTryOutNumMap[index] += tmpTryOutNum
 				tmpGroupFormalNumMap[index] += tmpFormalNum
 				tmpGroupMeetingNumMap[index] += tmpMeetingNum
 				tmpGroupRoadShowNumMap[index] += tmpRoadShowNum
 				tmpGroupSalonMapNumMap[index] += tmpSalonNum
+				tmpGroupAskMapNumMap[index] += tmpAskNum
 
 				//总数据汇总
 				if _, ok := tmpAllTryOutNumMap[index]; !ok {
@@ -274,11 +297,15 @@ func (this *CalendarController) ResearcherReportList() {
 				if _, ok := tmpGroupSalonMapNumMap[index]; !ok {
 					tmpGroupSalonMapNumMap[index] = 0
 				}
+				if _, ok := tmpGroupAskMapNumMap[index]; !ok {
+					tmpGroupAskMapNumMap[index] = 0
+				}
 				tmpAllTryOutNumMap[index] += tmpTryOutNum
 				tmpAllFormalNumMap[index] += tmpFormalNum
 				tmpAllMeetingNumMap[index] += tmpMeetingNum
 				tmpAllRoadShowNumMap[index] += tmpRoadShowNum
 				tmpAllSalonNumMap[index] += tmpSalonNum
+				tmpAllAskNumMap[index] += tmpAskNum
 			}
 			tmpAdminReportRecord := roadshow.AdminReportRecord{
 				Name:                  researcher.RealName,
@@ -295,6 +322,7 @@ func (this *CalendarController) ResearcherReportList() {
 				MeetingNum:  tmpGroupMeetingNumMap[i],
 				RoadShowNum: tmpGroupRoadShowNumMap[i],
 				SalonNum:    tmpGroupSalonMapNumMap[i],
+				AskNum:      tmpGroupAskMapNumMap[i],
 				StartDate:   startDateIndexList[i],
 				EndDate:     endDateIndexList[i],
 			}

+ 4 - 20
controllers/seal/seal_approval.go

@@ -464,32 +464,16 @@ func (this *SealApprovalController) Apply() {
 		br.ErrMsg = "参数解析异常!Err:" + err.Error()
 		return
 	}
-	creditCode := req.CreditCode
-	startDate := req.StartDate
-
 	reqVerify := utils.Rules{
-		"Use":         {utils.NotEmpty()},
-		"CompanyName": {utils.NotEmpty()},
-		"CreditCode":  {utils.NotEmpty()},
-		//"ServiceType":       {utils.NotEmpty()}, //权益非标合同不校验合同类型
+		"Use":               {utils.NotEmpty()},
+		"CompanyName":       {utils.NotEmpty()},
+		"CreditCode":        {utils.NotEmpty()},
+		"ServiceType":       {utils.NotEmpty()},
 		"SealType":          {utils.NotEmpty()},
 		"FileUrls":          {utils.NotEmpty()},
 		"AffiliatedCompany": {utils.NotEmpty()},
 	}
 
-	if startDate != "" {
-		companyInfo, tmpErr := company.GetCompanyByCreditCode(creditCode)
-		//如果查询异常,且并不是在系统中找不到该社会信用码,那么就异常返回
-		if tmpErr != nil {
-			br.Msg = "根据社会信用码获取客户信息失败!"
-			br.ErrMsg = "根据社会信用码获取客户信息失败!Err:" + err.Error()
-			return
-		}
-		req.CompanyId = companyInfo.CompanyId
-	} else {
-		reqVerify["ServiceType"] = []string{utils.NotEmpty()}
-	}
-
 	err = utils.Verify(req, reqVerify, utils.LANG_CN)
 	if err != nil {
 		br.Msg = "参数丢失!"

+ 1 - 0
models/roadshow/report_record.go

@@ -66,6 +66,7 @@ type RsReportRecordNum struct {
 	OfflineNum  int    `description:"线上路演次数"`
 	RoadShowNum int    `description:"路演总次数"`
 	SalonNum    int    `description:"沙龙路演次数"`
+	AskNum      int    `description:"提交过问答的路演次数"`
 	StartDate   string `description:"开始日期"`
 	EndDate     string `description:"结束日期"`
 	IsLook      bool   `description:"是否可以查看详情"`

+ 20 - 40
models/seal/seal.go

@@ -34,10 +34,6 @@ type Seal struct {
 	CreateTime        time.Time `description:"添加时间"`
 	CheckBackFileTime time.Time `description:"签回用印附件时间"`
 	AffiliatedCompany string    `description:"归属公司"`
-	ProductId         int       `description:"产品id,1:ficc;2:权益"`
-	CompanyId         int       `description:"客户id"`
-	StartDate         string    `description:"开始日期"`
-	EndDate           string    `description:"结束日期"`
 }
 
 var EnumUse = []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议", "代付合同", "总对总协议"}
@@ -130,21 +126,6 @@ func GetSealCode() (code string, err error) {
 	return
 }
 
-// GetSealCodeRai 生成权益合同编号
-func GetSealCodeRai() (code string, err error) {
-	var num int
-	o := orm.NewOrm()
-	today := utils.GetToday(utils.FormatDate)
-	sql := `SELECT COUNT(1) AS num FROM seal where create_time>=?`
-	err = o.Raw(sql, today).QueryRow(&num)
-	if err != nil {
-		return
-	}
-
-	code = "HZEQ" + time.Now().Format("20060102") + fmt.Sprintf("%03d", num)
-	return
-}
-
 type CompanyNameList struct {
 	CompanyName string `description:"客户名称,甲方名称,长度32位"`
 }
@@ -194,25 +175,25 @@ func GetList(condition string, pars []interface{}, startSize, pageSize int) (lis
 }
 
 type SealApprovalItem struct {
-	ContractApprovalId       int                     `description:"审批单ID"`
-	ContractId               int                     `description:"合同ID"`
-	ContractApprovalRecordId int                     `description:"审批流ID"`
-	Code                     string                  `description:"合同编号"`
-	Use                      string                  `description:"用印用途,枚举值:'销售合同','渠道合同','付款通知函','招投标','战略合作协议'"`
-	ContractType             string                  `description:"合同类型,枚举值:'新签合同','续约合同','补充协议','代付合同'"`
-	Status                   string                  `description:"合同状态,枚举值:待审批','已审批','已驳回','已撤回','已签回',默认待审批"`
-	ApproveStatus            string                  `json:"-" description:"审批单状态,枚举值:待审批','已审批','已驳回','已撤回',默认待审批"`
-	ApplyContent             string                  `description:"申请内容"`
-	ApplyUserId              int                     `description:"申请人ID"`
-	ApplyUserName            string                  `description:"申请人名称"`
-	ContractDetail           string                  `json:"-" description:"提交审批时的合同信息;用印快照"`
-	ContractInfo             contract.ContractDetail `json:"-" description:"提交审批时的合同信息;用印快照"`
-	ApproveRemark            string                  `description:"审核备注"`
-	SealType                 string                  `description:"用印类型"`
-	CompanyName              string                  `description:"客户名称"`
-	FileUrl                  string                  `description:"合同下载地址"`
-	CurrNodeId               int                     `description:"当前审批节点id"`
-	StartNodeId              int                     `description:"开始审批节点id"`
+	ContractApprovalId       int `description:"审批单ID"`
+	ContractId               int `description:"合同ID"`
+	ContractApprovalRecordId int `description:"审批流ID"`
+	//ContractCode             string                  `description:"合同编号"`
+	Use            string                  `description:"用印用途,枚举值:'销售合同','渠道合同','付款通知函','招投标','战略合作协议'"`
+	ContractType   string                  `description:"合同类型,枚举值:'新签合同','续约合同','补充协议','代付合同'"`
+	Status         string                  `description:"合同状态,枚举值:待审批','已审批','已驳回','已撤回','已签回',默认待审批"`
+	ApproveStatus  string                  `json:"-" description:"审批单状态,枚举值:待审批','已审批','已驳回','已撤回',默认待审批"`
+	ApplyContent   string                  `description:"申请内容"`
+	ApplyUserId    int                     `description:"申请人ID"`
+	ApplyUserName  string                  `description:"申请人名称"`
+	ContractDetail string                  `json:"-" description:"提交审批时的合同信息;用印快照"`
+	ContractInfo   contract.ContractDetail `json:"-" description:"提交审批时的合同信息;用印快照"`
+	ApproveRemark  string                  `description:"审核备注"`
+	SealType       string                  `description:"用印类型"`
+	CompanyName    string                  `description:"客户名称"`
+	FileUrl        string                  `description:"合同下载地址"`
+	CurrNodeId     int                     `description:"当前审批节点id"`
+	StartNodeId    int                     `description:"开始审批节点id"`
 	//UserId                   int                     `description:"申请人id"`
 	//UserName                 string                  `description:"申请人名称"`
 	SealId               int       `description:"用印审批ID"`
@@ -230,14 +211,13 @@ type SealApprovalItem struct {
 	CheckBackFileTimeStr string    `description:"签回用印附件时间(字符串)"`
 	ContractCode         string    `description:"合同编码"`
 	AffiliatedCompany    string    `description:"归属公司"`
-	ProductId            int       `description:"产品id,1:ficc;2:权益"`
 }
 
 // GetSealApprovalListByWhere 获取用印审批列表-分页
 func GetSealApprovalListByWhere(condition, joinCondition string, pars []interface{}, startSize, pageSize int) (list []*SealApprovalItem, total int, err error) {
 	o := orm.NewOrm()
 	fields := `a.contract_approval_id,c.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,c.create_time,a.modify_time,a.status approval_status,
-			   c.status,c.seal_id,c.seal_type,c.service_type contract_type,c.use,c.company_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.credit_code,c.check_back_file_time,c.check_back_file_url,c.product_id,c.affiliated_company `
+			   c.status,c.seal_id,c.seal_type,c.service_type contract_type,c.use,c.company_name,c.file_url,c.approve_time,c.invalid_time,c.code,c.credit_code,c.check_back_file_time,c.check_back_file_url,c.affiliated_company `
 	sql := `SELECT ` + fields + ` from contract_approval a JOIN ( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 and approval_type = "seal" `
 	sql += ` GROUP BY contract_id ) b on a.contract_approval_id=b.max_id
 	JOIN seal c ON c.seal_id = a.contract_id 

+ 48 - 0
services/roadshow/report.go

@@ -137,6 +137,41 @@ func GetMonthData(adminType, dimensionType string) (adminDataMapList []AdminData
 	return
 }
 
+// GetQuarterData 季度数据
+func GetQuarterData(adminType, dimensionType string) (adminDataMapList []AdminDataMap, firstDate time.Time, err error) { //三个协程返回
+	nowQuarterFirstDay := utils.GetNowQuarterFirstDay()                            //本季度第一天
+	nowQuarterLastDay := nowQuarterFirstDay.AddDate(0, 3, 0).Add(-1 * time.Second) //本季度最后一天
+
+	lastQuarterFirstDay1 := nowQuarterFirstDay.AddDate(0, -3, 0)                       //上个季度第一天
+	lastQuarterLastDay1 := lastQuarterFirstDay1.AddDate(0, 1, 0).Add(-1 * time.Second) //上个季度最后一天
+
+	lastQuarterFirstDay2 := nowQuarterFirstDay.AddDate(0, -6, 0)                       //上上个季度第一天
+	lastQuarterLastDay2 := lastQuarterFirstDay2.AddDate(0, 1, 0).Add(-1 * time.Second) //上上个季度最后一天
+
+	ch1 := make(chan AdminDataMap, 0)
+	ch2 := make(chan AdminDataMap, 0)
+	ch3 := make(chan AdminDataMap, 0)
+
+	go getSectionData(nowQuarterFirstDay, nowQuarterLastDay, adminType, dimensionType, ch1)
+	go getSectionData(lastQuarterFirstDay1, lastQuarterLastDay1, adminType, dimensionType, ch2)
+	go getSectionData(lastQuarterFirstDay2, lastQuarterLastDay2, adminType, dimensionType, ch3)
+
+	var nowMonthAdminDataMap, lastMonthAdminDataMap1, lastMonthAdminDataMap2, lastMonthAdminDataMap3 AdminDataMap
+
+	nowMonthAdminDataMap = <-ch1
+	close(ch1)
+
+	lastMonthAdminDataMap1 = <-ch2
+	close(ch2)
+
+	lastMonthAdminDataMap2 = <-ch3
+	close(ch3)
+
+	adminDataMapList = make([]AdminDataMap, 0)
+	adminDataMapList = append(adminDataMapList, nowMonthAdminDataMap, lastMonthAdminDataMap1, lastMonthAdminDataMap2, lastMonthAdminDataMap3)
+	return
+}
+
 // GetMonthDataV2 月度数据
 func GetMonthDataV2(adminType, dimensionType string, dataNum int) (adminDataMapList []AdminDataMap, firstDate time.Time, err error) { //三个协程返回
 	nowMonthFirstDay := utils.GetNowMonthFirstDay() //本月第一天
@@ -197,6 +232,7 @@ type AdminDataMap struct {
 	OfflineMap  map[int]int `description:"线上路演次数"`
 	RoadShowMap map[int]int `description:"路演总次数"`
 	SalonMap    map[int]int `description:"沙龙路演次数"`
+	AskMap      map[int]int `description:"沙龙路演次数"`
 	StartDate   string      `description:"开始日期"`
 	EndDate     string      `description:"开始日期"`
 }
@@ -223,6 +259,7 @@ func getResearcherSectionData(startDate, endDate time.Time) (adminDataMap AdminD
 	meetingMap := make(map[int]int)
 	roadShowMap := make(map[int]int) // 路演总次数
 	salonMap := make(map[int]int)    //沙龙路演次数
+	askMap := make(map[int]int)      //填写过客户问答的路演次数
 	//正式客户
 	{
 		var condition string
@@ -237,6 +274,16 @@ func getResearcherSectionData(startDate, endDate time.Time) (adminDataMap AdminD
 		for _, v := range data {
 			formalMap[v.AdminId] = v.Num
 		}
+
+		condition += ` and  question_status = 1  `
+		dataAsk, tmpErr := roadshow.GetGroupResearcherRecordList(condition, pars)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range dataAsk {
+			askMap[v.AdminId] = v.Num
+		}
 	}
 
 	//试用客户
@@ -314,6 +361,7 @@ func getResearcherSectionData(startDate, endDate time.Time) (adminDataMap AdminD
 		MeetingMap:  meetingMap,
 		RoadShowMap: roadShowMap,
 		SalonMap:    salonMap,
+		AskMap:      askMap,
 		StartDate:   startDate.Format(utils.FormatDate),
 		EndDate:     endDate.Format(utils.FormatDate),
 	}

+ 4 - 31
services/seal/seal.go

@@ -123,7 +123,7 @@ func ApplySeal(sysUser *system.Admin, req request.SealApprovalApplyReq) (err err
 	}()
 
 	// 添加用印
-	sealInfo, err := addSeal(sysUser.AdminId, req.ContractId, req.FileNum, req.CompanyId, sysUser.RealName, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls, req.AffiliatedCompany, req.StartDate, req.EndDate)
+	sealInfo, err := addSeal(sysUser.AdminId, req.ContractId, req.FileNum, sysUser.RealName, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrls, req.AffiliatedCompany)
 	if err != nil {
 		return
 	}
@@ -140,7 +140,7 @@ func ApplySeal(sysUser *system.Admin, req request.SealApprovalApplyReq) (err err
 }
 
 // addSeal 新增用印
-func addSeal(userId, contractId, fileNum, companyId int, userName, use, companyName, useCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, affiliatedCompany, startDate, endDate string) (sealInfo *seal.Seal, err error) {
+func addSeal(userId, contractId, fileNum int, userName, use, companyName, useCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, affiliatedCompany string) (sealInfo *seal.Seal, err error) {
 	if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
 		err = errors.New("用印用途异常")
 		return
@@ -149,27 +149,8 @@ func addSeal(userId, contractId, fileNum, companyId int, userName, use, companyN
 		err = errors.New("业务类型异常")
 		return
 	}
-	adminAll, err := system.GetAdminList()
-	if err != nil {
-		return
-	}
-	//adminMap := make(map[int]*system.AdminView)
-	mapRaiSllerId := make(map[int]bool) // 是否为权益销售
-	for _, v := range adminAll {
-		//adminMap[v.AdminId] = v
-		if v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
-			mapRaiSllerId[v.AdminId] = true
-		}
-	}
 
-	var sealCode string
-	var productId int
-	if mapRaiSllerId[userId] {
-		sealCode, err = seal.GetSealCodeRai()
-		productId = utils.COMPANY_PRODUCT_RAI_ID
-	} else {
-		sealCode, err = seal.GetSealCode()
-	}
+	sealCode, err := seal.GetSealCode()
 	if err != nil {
 		return
 	}
@@ -197,12 +178,7 @@ func addSeal(userId, contractId, fileNum, companyId int, userName, use, companyN
 		ModifyTime:        now,
 		CreateTime:        now,
 		AffiliatedCompany: affiliatedCompany,
-		ProductId:         productId,
-		CompanyId:         companyId,
-		StartDate:         startDate,
-		EndDate:           endDate,
 	}
-
 	err = seal.AddSeal(sealInfo)
 	if err != nil {
 		return
@@ -610,13 +586,10 @@ func GetSealApprovalPageList(condition, joinCondition string, pars []interface{}
 					}*/
 				}
 			}
+
 			// 合同编码
 			if selfContract, has := selfContractMap[item.ContractId]; has {
 				list[i].ContractCode = selfContract.ContractCode
-			} else {
-				if item.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
-					list[i].ContractCode = item.Code
-				}
 			}
 
 			// 取出item对应approval_id的审批流