Browse Source

fix:新增海外客户路演统计

Roc 1 year ago
parent
commit
4cfcdcfc40
3 changed files with 284 additions and 0 deletions
  1. 107 0
      controllers/roadshow/report.go
  2. 159 0
      models/roadshow/calendar.go
  3. 18 0
      routers/commentsRouter.go

+ 107 - 0
controllers/roadshow/report.go

@@ -2,6 +2,7 @@ package roadshow
 
 import (
 	"encoding/json"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/roadshow"
@@ -1152,3 +1153,109 @@ func (this *CalendarController) ResearcherBusinessTrip() {
 	br.Data = resp
 	return
 }
+
+// OverseasCustomReportCalendarList
+// @Title 路演详情列表
+// @Description 路演详情列表接口
+// @Param   CompanyStatus   query   string  true       "客户状态,枚举值:正式、试用、关闭"
+// @Param   SellerId   query   int  true       "销售id列表;多个用英文,分割"
+// @Param   ResearcherId   query   int  true       "销售id列表;多个用英文,分割"
+// @Param   StartDate   query   string  true       "开始日期,格式:2022-04-06"
+// @Param   EndDate   query   string  true       "结束日期,格式:2022-04-06"
+// @Success 200 {object} []roadshow.RsReportRecordList
+// @router /overseas_custom/calendar/list [get]
+func (this *CalendarController) OverseasCustomReportCalendarList() {
+	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
+	}
+	companyStatus := this.GetString("CompanyStatus")
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	sellerId := this.GetString("SellerId")
+	researcherId := this.GetString("ResearcherId")
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	total, list, err := roadshow.GetOverseaCustomCalendarList(sellerId, researcherId, startDate, endDate, companyStatus, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,ERR:" + err.Error()
+		return
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	resp := new(roadshow.OverseaCustomRecordInfoResp)
+	resp.Paging = page
+	resp.List = list
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+	return
+}
+
+// OverseasCustomCalendarAdminList
+// @Title 海外客户路演用户列表接口
+// @Description 海外客户路演用户列表接口
+// @Param   AdminType   query   string  true       "枚举值:researcher、seller"
+// @Success 200 {object} []roadshow.AdminInfo
+// @router /overseas_custom/sys_user/list [get]
+func (this *CalendarController) OverseasCustomCalendarAdminList() {
+	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
+	}
+	adminType := this.GetString("AdminType")
+
+	var list []*roadshow.AdminInfo
+	var err error
+	//选择的人员类型(发起人还是被发起人)
+	if adminType == "seller" {
+		list, err = roadshow.GetOverseaCustomCalendarSellerList()
+	} else if adminType == "researcher" {
+		list, err = roadshow.GetOverseaCustomCalendarResearcherList()
+	} else {
+		br.Msg = "错误的类型"
+		br.IsSendEmail = false
+	}
+
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,ERR:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+	return
+}

+ 159 - 0
models/roadshow/calendar.go

@@ -1,10 +1,12 @@
 package roadshow
 
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/system"
+	"hongze/hz_crm_api/utils"
 	"time"
 )
 
@@ -726,3 +728,160 @@ func GetPublicCalendarDetailList(condition string, pars []interface{}) (list []*
 	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
+
+type AdminInfo struct {
+	AdminId  int
+	RealName string
+}
+
+func GetOverseaCustomCalendarSellerList() (list []*AdminInfo, err error) {
+	o := orm.NewOrm()
+	sql1 := `SELECT a.sys_user_id FROM  rs_calendar AS a
+    INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
+        LEFT JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+        LEFT JOIN company AS d ON c.company_id=d.company_id 
+		where d.region_type= "海外" and  a.english_company= 0 AND a.source = 0  AND b.status=2 AND a.sys_user_id != 0 `
+
+	sql2 := `SELECT aa.sys_user_id FROM  rs_calendar AS aa
+    INNER JOIN rs_calendar_researcher AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+		where aa.english_company= 1 AND aa.source = 0  AND bb.status=2 AND aa.sys_user_id != 0`
+
+	sql := `SELECT n.admin_id,n.real_name FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += `		) AS m 
+ JOIN admin n on m.sys_user_id=n.admin_id
+WHERE 1=1 Group by sys_user_id order by sys_user_id asc`
+	_, err = o.Raw(sql).QueryRows(&list)
+
+	return
+}
+
+func GetOverseaCustomCalendarResearcherList() (list []*AdminInfo, err error) {
+	o := orm.NewOrm()
+	sql1 := `SELECT b.researcher_id FROM  rs_calendar AS a
+    INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
+        LEFT JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+        LEFT JOIN company AS d ON c.company_id=d.company_id 
+		where d.region_type= "海外" and  a.english_company= 0 AND a.source = 0  AND b.status=2 AND b.researcher_id != 0`
+
+	sql2 := `SELECT bb.researcher_id FROM  rs_calendar AS aa
+    INNER JOIN rs_calendar_researcher AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+		where aa.english_company= 1 AND aa.source = 0  AND bb.status=2 AND bb.researcher_id != 0 `
+
+	sql := `SELECT n.admin_id,n.real_name FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += `		) AS m 
+JOIN admin n on m.researcher_id=n.admin_id
+WHERE 1=1 Group by researcher_id order by researcher_id asc`
+	_, err = o.Raw(sql).QueryRows(&list)
+
+	return
+}
+
+type OverseaCustomRecordInfoResp struct {
+	Paging *paging.PagingItem
+	List   []*OverseaCustomRecordInfo
+}
+
+type OverseaCustomRecordInfo struct {
+	RsCalendarId     int
+	RoadshowType     string
+	RoadshowPlatform string
+	SellerName       string
+	ResearcherName   string
+	CompanyName      string
+	CompanyStatus    string
+	StartDate        string
+}
+
+func GetOverseaCustomCalendarList(sellerId, researcherId, startDate, endDate, companyStatus string, startSize, pageSize int) (total int, list []*OverseaCustomRecordInfo, err error) {
+	var databaseName string
+	if utils.RunMode == "debug" {
+		databaseName = "test_v2_hongze_rddp"
+	} else {
+		databaseName = "hongze_rddp"
+	}
+	o := orm.NewOrm()
+
+	pars := make([]interface{}, 0)
+
+	sql1 := `SELECT d.company_name,c.status company_status,b.start_date,a.rs_calendar_id,a.roadshow_type,a.roadshow_platform,a.sys_user_real_name seller_name,b.researcher_name as base_researcher_name FROM  rs_calendar AS a
+    INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
+        LEFT JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+        LEFT JOIN company AS d ON c.company_id=d.company_id 
+		where c.is_overseas = 0 and  a.english_company= 0 AND a.source = 0  AND b.status=2 AND b.researcher_id != 0`
+
+	if sellerId != "" {
+		sql1 += fmt.Sprintf(` AND a.sys_user_id in (%s) `, sellerId)
+	}
+	if startDate != "" {
+		sql1 += ` AND b.start_date >= ? `
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		sql1 += ` AND b.start_date <= ? `
+		pars = append(pars, endDate)
+	}
+	if companyStatus != "" {
+		sql1 += ` AND c.status = ? `
+		pars = append(pars, companyStatus)
+	}
+
+	sql2 := fmt.Sprintf(`SELECT cc.company_name,cc.overseas_status company_status,bb.start_date,aa.rs_calendar_id,aa.roadshow_type,aa.roadshow_platform,aa.sys_user_real_name seller_name,bb.researcher_name as base_researcher_name FROM rs_calendar AS aa
+    INNER JOIN rs_calendar_researcher AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+    INNER JOIN %s.english_company AS cc ON aa.company_id=cc.company_id
+		where aa.english_company= 1 AND aa.source = 0  AND bb.status=2 AND bb.researcher_id != 0 `, databaseName)
+
+	if sellerId != "" {
+		sql2 += fmt.Sprintf(` AND aa.sys_user_id in (%s) `, sellerId)
+	}
+
+	if startDate != "" {
+		sql2 += ` AND bb.start_date >= ?  `
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		sql2 += ` AND bb.start_date <= ?  `
+		pars = append(pars, endDate)
+	}
+	if companyStatus != "" {
+		sql2 += ` AND cc.overseas_status = ? `
+		pars = append(pars, companyStatus)
+	}
+	rsCalendarIdList := make([]int, 0)
+	if researcherId != `` {
+		rsCalendarIdSql := fmt.Sprintf("select rs_calendar_id from rs_calendar_researcher where researcher_id in (%s) group by rs_calendar_id", researcherId)
+		_, err = o.Raw(rsCalendarIdSql).QueryRows(&rsCalendarIdList)
+		if err != nil {
+			return
+		}
+	}
+	rsCalendarIdNum := len(rsCalendarIdList)
+
+	// 汇总数据
+	totalSql := `SELECT COUNT(1) FROM (SELECT rs_calendar_id FROM (` + sql1 + ` UNION ALL ` + sql2
+	totalSql += ` ) AS m  WHERE 1=1 `
+
+	if rsCalendarIdNum > 0 {
+		totalSql += fmt.Sprintf(` AND rs_calendar_id IN (` + utils.GetOrmInReplace(rsCalendarIdNum) + `)`)
+		pars = append(pars, rsCalendarIdList)
+	}
+
+	totalSql += ` Group by rs_calendar_id) fff`
+	err = o.Raw(totalSql, pars).QueryRow(&total)
+	if err != nil {
+		return
+	}
+
+	// 列表数据
+	sql := `SELECT m.*,GROUP_CONCAT(DISTINCT base_researcher_name ORDER BY rs_calendar_id ASC SEPARATOR ',') AS researcher_name  FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += ` ) AS m  WHERE 1=1 `
+
+	if rsCalendarIdNum > 0 {
+		sql += fmt.Sprintf(` AND rs_calendar_id IN (` + utils.GetOrmInReplace(rsCalendarIdNum) + `)`)
+	}
+
+	sql += ` Group by rs_calendar_id order by start_date desc `
+	sql += ` LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+
+	return
+}

+ 18 - 0
routers/commentsRouter.go

@@ -7387,6 +7387,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
+        beego.ControllerComments{
+            Method: "OverseasCustomReportCalendarList",
+            Router: `/overseas_custom/calendar/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
+        beego.ControllerComments{
+            Method: "OverseasCustomCalendarAdminList",
+            Router: `/overseas_custom/sys_user/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
         beego.ControllerComments{
             Method: "PublicMeetingDetail",