xingzai 7 месяцев назад
Родитель
Сommit
076b5e4974

+ 186 - 19
controllers/cygx/rai_serve.go

@@ -1,14 +1,17 @@
 package cygx
 
 import (
+	"errors"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/cygx"
+	"hongze/hz_crm_api/models/roadshow"
 	"hongze/hz_crm_api/utils"
 	"strconv"
 	"strings"
+	"time"
 )
 
 // 权益服务类型
@@ -345,6 +348,18 @@ func (this *RaiServeCoAntroller) List() {
 		sortStr = " ORDER BY end_date DESC "
 	}
 
+	//如果不是权益管理员和admin、财务,就做可见权限限制
+	if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_RESEARCHR {
+		if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER {
+			condition = " AND  (seller_id = ? OR  share_seller_id  = ? ) "
+			pars = append(pars, sysUser.AdminId, sysUser.AdminId)
+		}
+		if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
+			condition = " AND  ( seller_id = ? OR  share_seller_id  = ?  OR   group_id = ? OR  share_group_id = ? ) "
+			pars = append(pars, sysUser.AdminId, sysUser.AdminId, sysUser.GroupId, sysUser.GroupId)
+		}
+	}
+
 	total, err := cygx.GetCygxRaiServeCompanyCount(condition, pars)
 	if err != nil {
 		br.Msg = "获取失败"
@@ -358,15 +373,52 @@ func (this *RaiServeCoAntroller) List() {
 		return
 	}
 
-	switch tagType {
-	case 1:
-		fmt.Println(tagId)
-	case 2:
-	case 3:
-
+	var companyIds []int
+	for _, v := range listRaiServeCompany {
+		companyIds = append(companyIds, v.CompanyId)
 	}
-	if serveTypeId > 0 {
 
+	mapWeekAmount := make(map[string]float64) //周度服务量
+
+	lencompanyIds := len(companyIds)
+	if lencompanyIds > 0 {
+		var conditionBill string
+		var parsBill []interface{}
+
+		conditionBill, parsBill, err = getServeBillTag(tagType, tagId) // 标签ID搜索语句处理
+		if err != nil {
+			br.Msg = "获取信息失败!"
+			br.ErrMsg = "获取用户信息失败-getServeBillTag!Err:" + err.Error()
+			return
+		}
+		//服务类型筛选
+		if serveTypeId > 0 {
+			conditionBill += ` AND serve_type_id = ?  `
+			parsBill = append(parsBill, serveTypeId)
+		}
+
+		conditionBill += "  AND   company_id IN  (" + utils.GetOrmInReplace(lencompanyIds) + ")   "
+		parsBill = append(parsBill, companyIds)
+
+		listBill, err := cygx.GetCygxRaiServeBillListAll(conditionBill, parsBill)
+		if err != nil {
+			br.Msg = "获取信息失败!"
+			br.ErrMsg = "获取用户信息失败-GetCygxRaiServeBillListAll!Err:" + err.Error()
+			return
+		}
+
+		now := time.Now()
+		weeks := 4
+		for _, v := range listBill {
+			for i := 0; i < weeks; i++ {
+				// 计算当前周的周一
+				monday := now.AddDate(0, 0, -int(now.Weekday()-time.Monday)-i*7)
+				weekmonday := monday.Format(utils.FormatDate)
+				if v.WeekStartDate == weekmonday {
+					mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", i)] += v.ServeCount
+				}
+			}
+		}
 	}
 
 	if isExport {
@@ -388,10 +440,10 @@ func (this *RaiServeCoAntroller) List() {
 		item.ShareSellerId = v.ShareSellerId
 		item.Status = v.Status
 		item.PermissionName = v.PermissionName
-		item.ThisWeekAmount = 99
-		item.LastWeekAmount = 99
-		item.TwoWeekAmount = 99
-		item.ThreeWeekAmount = 99
+		item.ThisWeekAmount = mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", 0)]
+		item.LastWeekAmount = mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", 1)]
+		item.TwoWeekAmount = mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", 2)]
+		item.ThreeWeekAmount = mapWeekAmount[fmt.Sprintf("CID_", v.CompanyId, "WEEK_", 3)]
 		resp.List = append(resp.List, item)
 	}
 
@@ -404,6 +456,116 @@ func (this *RaiServeCoAntroller) List() {
 	br.Data = resp
 }
 
+// 标签搜索语句筛选
+func getServeBillTag(tagType, tagId int) (conditionBill string, parsBill []interface{}, err error) {
+	var activityIds []int
+	var activitySpecialIds []int
+	var articleIds []int
+	var rsCalendarIds []int
+	switch tagType {
+	case 1:
+		listGroupActivity, e := cygx.GetIndustrialActivityGroupManagementListByIndustriaId(tagId, 1) // 关联的活动
+		if e != nil {
+			err = errors.New("GetIndustrialActivityGroupManagementListByIndustriaId, Err: " + e.Error())
+			return
+		}
+		for _, v := range listGroupActivity {
+			activityIds = append(activityIds, v.ActivityId)
+		}
+
+		listGroupActivitySpecial, e := cygx.GetIndustrialActivityGroupManagementListByIndustriaId(tagId, 2) // 关联的产业
+		if e != nil {
+			err = errors.New("GetIndustrialActivityGroupManagementListByIndustriaId, Err: " + e.Error())
+			return
+		}
+		for _, v := range listGroupActivitySpecial {
+			activitySpecialIds = append(activitySpecialIds, v.ActivityId)
+		}
+
+		listGroupArticle, e := cygx.GetIndustrialArticleGroupManagementListByindustrialId(tagId) // 关联的产业
+		if e != nil {
+			err = errors.New("GetIndustrialArticleGroupManagementListByindustrialId, Err: " + e.Error())
+			return
+		}
+		for _, v := range listGroupArticle {
+			articleIds = append(articleIds, v.ArticleId)
+		}
+
+		listGroupRsCalendar, e := roadshow.GetRsCalendarMeetingLabelGroupDetailByTag(tagType, tagId)
+		if e != nil {
+			err = errors.New("GetRsCalendarMeetingLabelGroupDetailByTag, Err: " + e.Error())
+			return
+		}
+		for _, v := range listGroupRsCalendar {
+			rsCalendarIds = append(rsCalendarIds, v.RsCalendarId)
+		}
+	case 2:
+		listGroupActivity, e := cygx.GetSubjectActivityGroupManagementListBySubjectId(tagId, 1) // 关联的活动
+		if e != nil {
+			err = errors.New("GetSubjectActivityGroupManagementListBySubjectId, Err: " + e.Error())
+			return
+		}
+		for _, v := range listGroupActivity {
+			activityIds = append(activityIds, v.ActivityId)
+		}
+
+		listGroupActivitySpecial, e := cygx.GetSubjectActivityGroupManagementListBySubjectId(tagId, 2) // 关联的产业
+		if e != nil {
+			err = errors.New("GetSubjectActivityGroupManagementListBySubjectId, Err: " + e.Error())
+			return
+		}
+		for _, v := range listGroupActivitySpecial {
+			activitySpecialIds = append(activitySpecialIds, v.ActivityId)
+		}
+
+		listGroupArticle, e := cygx.GetSubjectArticleGroupManagementListBysubjectId(tagId) // 关联的产业
+		if e != nil {
+			err = errors.New("GetSubjectArticleGroupManagementListBysubjectId, Err: " + e.Error())
+			return
+		}
+		for _, v := range listGroupArticle {
+			articleIds = append(articleIds, v.ArticleId)
+		}
+
+		listGroupRsCalendar, e := roadshow.GetRsCalendarMeetingLabelGroupDetailByTag(tagType, tagId)
+		if e != nil {
+			err = errors.New("GetRsCalendarMeetingLabelGroupDetailByTag, Err: " + e.Error())
+			return
+		}
+		for _, v := range listGroupRsCalendar {
+			rsCalendarIds = append(rsCalendarIds, v.RsCalendarId)
+		}
+	case 3:
+		conditionBill += "  AND   chart_permission_id  = ?   "
+		parsBill = append(parsBill, tagId)
+	}
+
+	lenactivityIds := len(activityIds)
+	if lenactivityIds > 0 {
+		conditionBill += ` AND IF ( source = 'activity', source_id IN  (` + utils.GetOrmInReplace(lenactivityIds) + `) , 1 = 1 ) `
+		parsBill = append(parsBill, activityIds)
+	}
+
+	lenactivitySpecialIds := len(activitySpecialIds)
+	if lenactivitySpecialIds > 0 {
+		conditionBill += ` AND IF ( source = 'activityspecial', source_id IN  (` + utils.GetOrmInReplace(lenactivitySpecialIds) + `) , 1 = 1 ) `
+		parsBill = append(parsBill, activitySpecialIds)
+	}
+
+	lenarticleIds := len(articleIds)
+	if lenarticleIds > 0 {
+		conditionBill += ` AND IF ( source = 'article', source_id IN  (` + utils.GetOrmInReplace(lenarticleIds) + `) , 1 = 1 ) `
+		parsBill = append(parsBill, articleIds)
+	}
+
+	lenrsCalendarIds := len(rsCalendarIds)
+	if lenrsCalendarIds > 0 {
+		conditionBill += ` AND IF ( source = 'rscalendar', source_id IN  (` + utils.GetOrmInReplace(lenrsCalendarIds) + `) , 1 = 1 ) `
+		parsBill = append(parsBill, rsCalendarIds)
+	}
+	return
+}
+
 // @Title 近四周覆盖率
 // @Description 近四周覆盖率接口
 // @Param   CompanyId   query   int	  false       "公司ID"
@@ -422,18 +584,23 @@ func (this *RaiServeCoAntroller) CoverageRate() {
 		br.Ret = 408
 		return
 	}
-	companyId := this.GetString("CompanyId")
-	fmt.Println(companyId)
+	companyId, _ := this.GetInt("CompanyId")
+	listWeekBill, err := cygx.GetCygxRaiServeBillListWeek4(companyId)
+	if err != nil {
+		br.Msg = "获取信息失败!"
+		br.ErrMsg = "获取用户信息失败-GetCygxRaiServeBillListWeek4!Err:" + err.Error()
+		return
+	}
+	mapWeek := make(map[int]float64)
+	for k, v := range listWeekBill {
+		mapWeek[k] = v.ServeCount
+	}
+	//fmt.Sprintf(mapWeek[1])
 	resp := new(cygx.RaiServeCoverageRateResp)
-	//ThisWeekAmount  string `comment:"本周互动量"`
-	//LastWeekAmount  string `comment:"上周互动量"`
-	//TwoWeekAmount   string `comment:"上上周互动量"`
-	//ThreeWeekAmount string `comment:"上三周互动量"`
-	resp.ThisWeekAmount = "22%"
+	//resp.ThisWeekAmount = fmt.Sprintf(,"%")
 	resp.LastWeekAmount = "33%"
 	resp.TwoWeekAmount = "44%"
 	resp.ThreeWeekAmount = "55%"
-	//resp.List = []string{"22%", "33%", "44%", "55%"}
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 15 - 0
models/cygx/industrial_activity_group_management.go

@@ -18,6 +18,7 @@ type IndustrialActivityGroupManagementRep struct {
 	IndustryName           string `description:"产业名称"`
 	ChartPermissionId      int    `description:"权限id"`
 	PermissionName         string `description:"行业名称"`
+	ActivityId             int    `description:"活动ID"`
 }
 
 type IndustryAndSubjectName struct {
@@ -42,6 +43,20 @@ func GetIndustrialActivityGroupManagementList(activityId, source int) (items []*
 	return
 }
 
+// 根据产业ID获取关联的对应活动
+func GetIndustrialActivityGroupManagementListByIndustriaId(industrialId, source int) (items []*IndustrialActivityGroupManagementRep, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT
+			am.activity_id
+			FROM
+			cygx_industrial_activity_group_management AS am
+			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = am.industrial_management_id
+			WHERE
+			am.industrial_management_id = ? AND am.source = ?`
+	_, err = o.Raw(sql, industrialId, source).QueryRows(&items)
+	return
+}
+
 // 获取产业关联的活动数量
 func GetIndustrialManagementGroupActCount(industrialManagementId int) (count int, err error) {
 	sqlCount := `SELECT

+ 17 - 0
models/cygx/industrial_activity_group_subject.go

@@ -16,6 +16,7 @@ type CygxIndustrialActivityGroupSubject struct {
 type SubjectActivityGroupManagementRep struct {
 	IndustrialSubjectId int    `description:"产业id"`
 	SubjectName         string `description:"标的名称"`
+	ActivityId          int    `description:"活动ID"`
 }
 
 // 列表
@@ -33,6 +34,22 @@ func GetSubjectActivityGroupManagementList(activityId, source int) (items []*Sub
 	return
 }
 
+// 列表
+func GetSubjectActivityGroupManagementListBySubjectId(subjectId, source int) (items []*SubjectActivityGroupManagementRep, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT
+    	    ag.activity_id,
+			s.subject_name,
+			s.industrial_subject_id 
+			FROM
+			cygx_industrial_activity_group_subject AS ag
+			INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = ag.industrial_subject_id 
+			WHERE
+			ag.industrial_subject_id = ? AND ag.source = ?`
+	_, err = o.Raw(sql, subjectId, source).QueryRows(&items)
+	return
+}
+
 func GetActivityIdsByIndustrialSubjectId(industrialSubjectId string) (activityId string, err error) {
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT activity_id ORDER BY id ASC SEPARATOR ',' ) AS activity_id 

+ 22 - 0
models/cygx/industrial_article_group_management.go

@@ -41,6 +41,28 @@ func GetIndustrialArticleGroupManagementList(articleId int) (items []*Industrial
 	return
 }
 
+type IndustrialArticleGroupManagementRep struct {
+	IndustrialManagementId int    `description:"cygx_industrial_management表的主键ID"`
+	IndustryName           string `description:"产业名称"`
+	ChartPermissionId      int    `description:"权限id"`
+	PermissionName         string `description:"行业名称"`
+	ArticleId              int    `description:"cygx_article表的文章ID"`
+}
+
+// 列表
+func GetIndustrialArticleGroupManagementListByindustrialId(articleId int) (items []*IndustrialArticleGroupManagementRep, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT
+			am.article_id
+			FROM
+			cygx_industrial_article_group_management AS am
+			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = am.industrial_management_id
+			WHERE
+			am.industrial_management_id = ?`
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
+	return
+}
+
 // 通过名称获取详情
 func GetIndustrialManagemenDetailByAaticle(articleId int) (item *CygxIndustrialArticleGroupManagement, err error) {
 	o := orm.NewOrmUsingDB("hz_cygx")

+ 20 - 0
models/cygx/industrial_article_group_subject.go

@@ -59,6 +59,26 @@ func GetSubjectArticleGroupManagementList(articleId int) (items []*SubjectActivi
 	return
 }
 
+type SubjectArticleGroupManagementRep struct {
+	IndustrialSubjectId int    `description:"产业id"`
+	SubjectName         string `description:"标的名称"`
+	ArticleId           int    `description:"cygx_article表的文章ID"`
+}
+
+// 列表
+func GetSubjectArticleGroupManagementListBysubjectId(subjectId int) (items []*SubjectArticleGroupManagementRep, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT
+  			ag.article_id
+			FROM
+			cygx_industrial_article_group_subject AS ag
+			INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = ag.industrial_subject_id 
+			WHERE
+			ag.industrial_subject_id = ?`
+	_, err = o.Raw(sql, subjectId).QueryRows(&items)
+	return
+}
+
 type SubjectlArticleGroupResp struct {
 	ArticleId              int    `description:"文章ID"`
 	IndustrialManagementId int    `description:"cygx_industrial_management表的主键ID"`

+ 38 - 0
models/cygx/rai_serve_bill.go

@@ -3,6 +3,7 @@ package cygx
 import (
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
 )
 
 type RaiServeTypeResp struct {
@@ -152,3 +153,40 @@ func GetCygxRaiServeBillRespList(condition string, pars []interface{}, startSize
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+// 权益服务明细表
+type CygxRaiServeBill struct {
+	BillId           int       `orm:"column(bill_id);pk" description:"服务明细主键ID"`
+	Content          string    `comment:"服务内容说明"`
+	ServeTypeId      int       `comment:"服务类型ID"`
+	ServeTypeName    string    `comment:"服务类型"`
+	UserId           int       `comment:"用户ID"`
+	Mobile           string    `comment:"手机号"`
+	Email            string    `comment:"邮箱"`
+	CompanyId        int       `comment:"公司ID"`
+	CompanyName      string    `comment:"公司名称"`
+	RealName         string    `comment:"用户实际名称"`
+	RegisterPlatform int       `comment:"来源 1小程序,2:网页"`
+	ServeCount       float64   `comment:"服务量小计"`
+	IsKp             int       `comment:"是否是KP,1:是、0:否"`
+	SourceId         int       `comment:"来源ID"`
+	Source           string    `comment:"来源 "`
+	WeekStartDate    string    `comment:"周一开始日期"`
+	WeekEndDate      string    `comment:"周日结束日期"`
+	CreateTime       time.Time `comment:"创建时间"`
+	ViewTime         string    `comment:"浏览时间"`
+}
+
+// 列表
+func GetCygxRaiServeBillListAll(condition string, pars []interface{}) (items []*CygxRaiServeBill, err error) {
+	if condition == "" {
+		return
+	}
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_rai_serve_bill   WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 4 - 4
models/cygx/rai_serve_company.go

@@ -37,10 +37,10 @@ type CygxRaiServeCompanyResp struct {
 	ShareSellerId     int     `comment:"共享销售员id"`
 	Status            string  `comment:"客户状态"`
 	PermissionName    string  `comment:"权限名"`
-	ThisWeekAmount    int     `comment:"本周互动量"`
-	LastWeekAmount    int     `comment:"上周互动量"`
-	TwoWeekAmount     int     `comment:"上上周互动量"`
-	ThreeWeekAmount   int     `comment:"上三周互动量"`
+	ThisWeekAmount    float64 `comment:"本周互动量"`
+	LastWeekAmount    float64 `comment:"上周互动量"`
+	TwoWeekAmount     float64 `comment:"上上周互动量"`
+	ThreeWeekAmount   float64 `comment:"上三周互动量"`
 }
 
 type CygxRaiServeCompanyListResp struct {

+ 27 - 0
models/cygx/rai_serve_week_bill.go

@@ -0,0 +1,27 @@
+package cygx
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxRaiServeWeekBill struct {
+	ServeWeekBillId int       `orm:"column(serve_week_bill_id);pk" description:"服务周账单ID"`
+	CompanyId       int       `comment:"公司ID"`
+	CompanyName     string    `comment:"公司名称"`
+	UserTotal       int       `comment:"用户数量"`
+	WeekServeCount  float64   `comment:"周度服务量总计"`
+	CoverageRate    float64   `comment:"覆盖率"`
+	WeekStartDate   string    `comment:"周一开始日期"`
+	WeekEndDate     string    `comment:"周日结束日期"`
+	CreateTime      time.Time `comment:"创建时间"`
+	ModifyTime      time.Time `comment:"修改时间"`
+}
+
+// 最近四周覆盖率列表
+func GetCygxRaiServeBillListWeek4(companyId int) (items []*CygxRaiServeBill, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT  * FROM cygx_rai_serve_week_bill WHERE company_id = ? ORDER BY week_start_date DESC  LIMIT  4  `
+	_, err = o.Raw(sql, companyId).QueryRows(&items)
+	return
+}

+ 8 - 0
models/roadshow/rs_calendar_meeting_label_group.go

@@ -109,3 +109,11 @@ func UpdateProductInterior(item *RsCalendarMeetingLabelGroup) (err error) {
 	_, err = qs.Update(updateParams)
 	return
 }
+
+// 根据类型、id 获取对应的分组信息
+func GetRsCalendarMeetingLabelGroupDetailByTag(tagType, tagId int) (item []*RsCalendarMeetingLabelGroup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM rs_calendar_meeting_label_group WHERE tag_type = ? AND tag_id  = ?  `
+	_, err = o.Raw(sql, tagType, tagId).QueryRows(&item)
+	return
+}