|
@@ -3,6 +3,7 @@ package roadshow
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
+ "github.com/tealeg/xlsx"
|
|
|
"hongze/hz_crm_api/models"
|
|
|
"hongze/hz_crm_api/models/company"
|
|
|
"hongze/hz_crm_api/models/cygx"
|
|
@@ -11,6 +12,8 @@ import (
|
|
|
"hongze/hz_crm_api/services"
|
|
|
roadshowService "hongze/hz_crm_api/services/roadshow"
|
|
|
"hongze/hz_crm_api/utils"
|
|
|
+ "os"
|
|
|
+ "path/filepath"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
@@ -19,7 +22,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 +76,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 +202,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 +216,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 +225,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 +242,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 +274,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 +300,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 +325,7 @@ func (this *CalendarController) ResearcherReportList() {
|
|
|
MeetingNum: tmpGroupMeetingNumMap[i],
|
|
|
RoadShowNum: tmpGroupRoadShowNumMap[i],
|
|
|
SalonNum: tmpGroupSalonMapNumMap[i],
|
|
|
+ AskNum: tmpGroupAskMapNumMap[i],
|
|
|
StartDate: startDateIndexList[i],
|
|
|
EndDate: endDateIndexList[i],
|
|
|
}
|
|
@@ -662,6 +693,8 @@ func (this *CalendarController) SellerReportList() {
|
|
|
// @Param AdminId query int true "用户id"
|
|
|
// @Param StartDate query string true "开始日期,格式:2022-04-06"
|
|
|
// @Param EndDate query string true "结束日期,格式:2022-04-06"
|
|
|
+// @Param Status query int true "0:全部,1:已完成"
|
|
|
+// @Param EnglishCompany query int true "-1:全部,0:国内,1:海外"
|
|
|
// @Success 200 {object} []roadshow.RsReportRecordList
|
|
|
// @router /report/calendar/list [get]
|
|
|
func (this *CalendarController) ReportCalendarList() {
|
|
@@ -687,6 +720,10 @@ func (this *CalendarController) ReportCalendarList() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ status, _ := this.GetInt("Status")
|
|
|
+
|
|
|
+ englishCompany, _ := this.GetInt("EnglishCompany")
|
|
|
+
|
|
|
//正式客户
|
|
|
var condition string
|
|
|
var pars []interface{}
|
|
@@ -739,12 +776,43 @@ func (this *CalendarController) ReportCalendarList() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ if status == 1 {
|
|
|
+ condition += ` and c.question_status = ? `
|
|
|
+ pars = append(pars, 1)
|
|
|
+ }
|
|
|
+
|
|
|
+ if englishCompany > 0 {
|
|
|
+ condition += ` and b.english_company = ? `
|
|
|
+ pars = append(pars, englishCompany)
|
|
|
+ }
|
|
|
+
|
|
|
list, err := roadshow.GetRsReportRecordList(condition, pars)
|
|
|
if err != nil {
|
|
|
br.Msg = "获取失败"
|
|
|
br.ErrMsg = "获取失败,ERR:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+ ficcSellerMap := make(map[int]int)
|
|
|
+ //raiSellerMap := make(map[int]int)
|
|
|
+ _, groupIdRelationMap, err := services.GetFiccSystemGroup()
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取信息失败!"
|
|
|
+ br.ErrMsg = "获取FICC销售信息失败!Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ ficcSellerList, err := services.GetFiccSeller(time.Now(), groupIdRelationMap)
|
|
|
+ for _, v := range ficcSellerList {
|
|
|
+ ficcSellerMap[v.AdminId] = v.AdminId
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range list {
|
|
|
+ if _, ok := ficcSellerMap[v.SellerId]; ok {
|
|
|
+ v.CompanyType = "FICC"
|
|
|
+ } else {
|
|
|
+ v.CompanyType = "权益"
|
|
|
+ }
|
|
|
+ }
|
|
|
br.Ret = 200
|
|
|
br.Success = true
|
|
|
br.Msg = "获取成功"
|
|
@@ -1878,3 +1946,190 @@ func (this *CalendarController) OverseasCalendarList() {
|
|
|
br.Data = list
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// @Title 导出研究员路演统计
|
|
|
+// @Description 导出研究员路演统计接口
|
|
|
+// @Param DataType query string true "枚举值:week、month、time_interval"
|
|
|
+// @Param StartDate query string true "开始日期,格式:2022-04-06"
|
|
|
+// @Param EndDate query string true "结束日期,格式:2022-04-06"
|
|
|
+// @Param CompanyType query string true "客户类型:'ficc','权益',传空默认为ficc,"
|
|
|
+// @Success 200 {object} roadshow.RsReportRecordResp
|
|
|
+// @router /report/researcher/export [get]
|
|
|
+func (this *CalendarController) ResearcherReportExport() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ dataType := this.GetString("DataType")
|
|
|
+ startDate := this.GetString("StartDate")
|
|
|
+ endDate := this.GetString("EndDate")
|
|
|
+ companyType := this.GetString("CompanyType", "ficc")
|
|
|
+
|
|
|
+ var err error
|
|
|
+ //获取列表
|
|
|
+ switch dataType {
|
|
|
+ case "week":
|
|
|
+ startDate = utils.GetNowWeekMonday().AddDate(0, 0, -7).Format(utils.FormatDate)
|
|
|
+ endDate = utils.GetNowWeekLastDay().AddDate(0, 0, 7).Format(utils.FormatDate)
|
|
|
+ case "month":
|
|
|
+ startDate = utils.GetNowMonthFirstDay().AddDate(0, -4, 0).Format(utils.FormatDate)
|
|
|
+ endDate = utils.GetNowMonthLastDay().Format(utils.FormatDate)
|
|
|
+ case "time_interval":
|
|
|
+ if startDate == `` || endDate == `` {
|
|
|
+ br.Msg = "开始日期或结束日期不能为空"
|
|
|
+ br.ErrMsg = "开始日期或结束日期不能为空,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var researcherIdArr []string
|
|
|
+ ficcSellerMap := make(map[int]int)
|
|
|
+ //raiSellerMap := make(map[int]int)
|
|
|
+ switch companyType {
|
|
|
+ case utils.COMPANY_CLASSIFY_FICC:
|
|
|
+ researcherList, err := roadshow.GetResearcherV2()
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取信息失败!"
|
|
|
+ br.ErrMsg = "获取分组信息失败!,GetResearcherV2 Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range researcherList {
|
|
|
+ if v.AdminId > 0 {
|
|
|
+ researcherId := strconv.Itoa(v.AdminId)
|
|
|
+ researcherIdArr = append(researcherIdArr, researcherId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ _, groupIdRelationMap, err := services.GetFiccSystemGroup()
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取信息失败!"
|
|
|
+ br.ErrMsg = "获取FICC销售信息失败!Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ ficcSellerList, err := services.GetFiccSeller(time.Now(), groupIdRelationMap)
|
|
|
+ for _, v := range ficcSellerList {
|
|
|
+ ficcSellerMap[v.AdminId] = v.AdminId
|
|
|
+ }
|
|
|
+ case utils.COMPANY_CLASSIFY_RAI:
|
|
|
+ askUserList, err := cygx.GetAskEmailListResearcher()
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取失败,GetAskEmailListResearcher Err: " + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range askUserList {
|
|
|
+ if v.AdminId > 0 {
|
|
|
+ researcherId := strconv.Itoa(v.AdminId)
|
|
|
+ researcherIdArr = append(researcherIdArr, researcherId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //_, groupIdRelationMap, err := services.GetRaiSystemGroup()
|
|
|
+ //if err != nil {
|
|
|
+ // br.Msg = "获取信息失败!"
|
|
|
+ // br.ErrMsg = "获取分组信息失败!Err:" + err.Error()
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ //raiSellList, err := services.GetRaiSeller(groupIdRelationMap)
|
|
|
+ //if err != nil {
|
|
|
+ // br.Msg = "获取信息失败!"
|
|
|
+ // br.ErrMsg = "获取权益销售信息失败!Err:" + err.Error()
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ //
|
|
|
+ //for _, v := range raiSellList {
|
|
|
+ // raiSellerMap[v.AdminId] = v.AdminId
|
|
|
+ //}
|
|
|
+ }
|
|
|
+
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+
|
|
|
+ condition += ` AND c.researcher_id IN(` + strings.Join(researcherIdArr, ",") + `) `
|
|
|
+
|
|
|
+ if startDate != "" {
|
|
|
+ condition += ` AND c.start_date >= ? `
|
|
|
+ pars = append(pars, startDate)
|
|
|
+ }
|
|
|
+
|
|
|
+ if endDate != "" {
|
|
|
+ condition += ` AND c.start_date <= ? `
|
|
|
+ pars = append(pars, endDate)
|
|
|
+ }
|
|
|
+
|
|
|
+ condition += ` AND b.activity_type = '路演' `
|
|
|
+ condition += ` AND b.roadshow_type <> '' `
|
|
|
+ condition += ` AND c.question_status = 1 `
|
|
|
+
|
|
|
+ list, err := roadshow.GetReportResearcherExport(condition, pars)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取信息失败!"
|
|
|
+ br.ErrMsg = "获取数据失败!Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ dir, _ := os.Executable()
|
|
|
+ exPath := filepath.Dir(dir)
|
|
|
+ downloadPath := exPath + "/" + time.Now().Format(utils.FormatDateUnSpace) + "研究员已完成路演统计" + ".xlsx"
|
|
|
+ xlsxFile := xlsx.NewFile()
|
|
|
+ sheet, e := xlsxFile.AddSheet("已完成路演统计")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "新增Sheet失败"
|
|
|
+ br.ErrMsg = "新增Sheet失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ titleRow := sheet.AddRow()
|
|
|
+ titleRow.AddCell().SetString("研究员")
|
|
|
+ titleRow.AddCell().SetString("路演时间")
|
|
|
+ titleRow.AddCell().SetString("客户名称")
|
|
|
+ titleRow.AddCell().SetString("路演形式")
|
|
|
+ titleRow.AddCell().SetString("发起人")
|
|
|
+ titleRow.AddCell().SetString("客户类型")
|
|
|
+ titleRow.AddCell().SetString("客户状态")
|
|
|
+ titleRow.AddCell().SetString("客户行业")
|
|
|
+ titleRow.AddCell().SetString("客户分类")
|
|
|
+ titleRow.AddCell().SetString("所属区域")
|
|
|
+
|
|
|
+ for _, v := range list {
|
|
|
+ dataRow := sheet.AddRow()
|
|
|
+ dataRow.AddCell().SetString(v.ResearcherName)
|
|
|
+ dataRow.AddCell().SetString(v.StartDate + " " + v.StartTime)
|
|
|
+ dataRow.AddCell().SetString(v.CompanyName)
|
|
|
+ dataRow.AddCell().SetString(v.RoadshowType)
|
|
|
+ dataRow.AddCell().SetString(v.SellerName)
|
|
|
+ if _, ok := ficcSellerMap[v.SellerId]; ok {
|
|
|
+ dataRow.AddCell().SetString("FICC")
|
|
|
+ } else {
|
|
|
+ dataRow.AddCell().SetString("权益")
|
|
|
+ }
|
|
|
+ dataRow.AddCell().SetString(v.CompanyStatus)
|
|
|
+ dataRow.AddCell().SetString(v.CompanyIndustry)
|
|
|
+ dataRow.AddCell().SetString(v.CompanyClassify)
|
|
|
+ if v.EnglishCompany == 0 {
|
|
|
+ dataRow.AddCell().SetString("国内")
|
|
|
+ } else {
|
|
|
+ dataRow.AddCell().SetString("海外")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if e = xlsxFile.Save(downloadPath); e != nil {
|
|
|
+ br.Msg = "导出失败"
|
|
|
+ br.ErrMsg = "保存文件失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fileName := time.Now().Format(utils.FormatDateUnSpace) + "研究员已完成路演统计" + ".xlsx"
|
|
|
+ this.Ctx.Output.Download(downloadPath, fileName)
|
|
|
+ defer func() {
|
|
|
+ _ = os.Remove(downloadPath)
|
|
|
+ }()
|
|
|
+ return
|
|
|
+}
|