xingzai 1 ano atrás
pai
commit
eff3eff680

+ 2 - 2
controllers/activity_special.go

@@ -370,7 +370,7 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 			//	itemBill.Total = strings.TrimRight(itemBill.Total, "+")
 			//}
 
-			totalText, err := services.HandleActivitySpecialTripBillTotalText(user)
+			totalText, err := services.HandleActivitySpecialTripBillTotalText(user.CompanyId)
 			if err != nil {
 				br.Msg = "报名失败,"
 				br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
@@ -521,7 +521,7 @@ func (this *ActivitySpecialCoAntroller) Tripcancel() {
 	//	itemBill.Total = strings.TrimRight(itemBill.Total, "+")
 	//}
 
-	totalText, err := services.HandleActivitySpecialTripBillTotalText(user)
+	totalText, err := services.HandleActivitySpecialTripBillTotalText(user.CompanyId)
 	if err != nil {
 		br.Msg = "操作失败,"
 		br.ErrMsg = "HandleActivitySpecialTripBillTotalText,Err:" + err.Error()

+ 7 - 0
models/activity_special_permission_points.go

@@ -16,6 +16,13 @@ type CygxActivitySpecialPermissionPoints struct {
 	ModifyTime          time.Time `description:"更新时间"`
 }
 
+// 添加
+func AddCygxActivitySpecialPermissionPoints(item *CygxActivitySpecialPermissionPoints) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
 // 获取公司每个行业剩余研选点数列表
 func GetCygxActivitySpecialPermissionPointsList(condition string, pars []interface{}) (items []*CygxActivitySpecialPermissionPoints, err error) {
 	o := orm.NewOrm()

+ 67 - 0
models/company/company_product.go

@@ -0,0 +1,67 @@
+package company
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CompanyProduct struct {
+	CompanyProductId    int       `orm:"column(company_product_id);pk" description:"客户产品id"`
+	CompanyId           int       `description:"客户id"`
+	ProductId           int       `description:"产品id"`
+	ProductName         string    `description:"产品名称"`
+	CompanyName         string    `description:"客户名称"`
+	Source              string    `description:"来源"`
+	Reasons             string    `description:"新增理由"`
+	Status              string    `description:"客户状态"`
+	IndustryId          int       `description:"行业id"`
+	IndustryName        string    `description:"行业名称"`
+	SellerId            int       `description:"销售id"`
+	SellerName          string    `description:"销售名称"`
+	GroupId             int       `description:"销售分组id"`
+	DepartmentId        int       `description:"销售部门id"`
+	IsSuspend           int       `description:"1:暂停,0:启用"`
+	SuspendTime         time.Time `description:"暂停启用时间"`
+	TryOutTime          time.Time `description:"正式转试用时间"`
+	RenewalReason       string    `description:"正式转试用后的续约情况说明"`
+	RenewalTodo         string    `description:"未续约说明中的待办事项说明"`
+	LastDescriptionTime time.Time `description:"上次添加说明时间"`
+	RenewalIntention    int       `description:"是否勾选无续约意向,1:确认,0:未确认"`
+	ApproveStatus       string    `description:"审批状态:'审批中','通过','驳回'"`
+	FreezeTime          time.Time `description:"冻结时间"`
+	FreezeReason        time.Time `description:"冻结理由"`
+	Remark              string    `description:"备注信息"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"修改时间"`
+	StartDate           string    `description:"开始日期"`
+	EndDate             string    `description:"结束日期"`
+	ContractEndDate     time.Time `description:"合同结束日期"`
+	LoseReason          string    `description:"流失原因"`
+	LossTime            time.Time `description:"流失时间"`
+	CompanyType         string    `description:"客户类型"`
+	OpenCode            string    `description:"开放给第三方的编码,不让第三方定位我们的客户信息"`
+	Scale               string    `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。"`
+	ViewTotal           int       `description:"总阅读次数"`
+	RoadShowTotal       int       `description:"累计路演次数"`
+	LastViewTime        time.Time `description:"最后一次阅读时间"`
+	PackageType         int       `description:"套餐类型"`
+	IsFormal            int       `description:"是否已经转正式,0是没有转正式,1是已经转过正式"`
+	TodoStatus          string    `description:"任务处理状态;枚举值:'无任务','未完成','已完成'"`
+	TodoCreateTime      time.Time `description:"任务创建时间"`
+	TodoApproveTime     time.Time `description:"任务审批时间"`
+	TryStage            int       `description:"试用客户子标签:1未分类、2  推进、3 跟踪、4 预备"`
+	TryOutDayTotal      int       `description:"客户总试用天数"`
+	CloseReason         string    `description:"关闭原因"`
+	CloseTime           time.Time `description:"关闭时间"`
+	OverseasLabel       int       `description:"海外客户试用子标签:1未分类、2  推进、3 跟踪、4 预备、"`
+	IsOverseas          int       `description:"是否显示在海外客户0:显示,1:不显示"`
+}
+
+func GetCompanyProductByCompanyIdAndProductId(companyId, productId int) (item *CompanyProduct, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := `SELECT b.* FROM company AS a
+			INNER JOIN company_product AS b ON a.company_id=b.company_id
+			WHERE a.company_id=? AND b.product_id=? LIMIT 1 `
+	err = o.Raw(sql, companyId, productId).QueryRow(&item)
+	return
+}

+ 77 - 23
services/activity_special_trip.go

@@ -4,6 +4,7 @@ import (
 	"errors"
 	"fmt"
 	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/models/company"
 	"hongze/hongze_cygx/utils"
 	"strconv"
 	"strings"
@@ -226,29 +227,65 @@ func DeductTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *model
 	msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
 	companyId := user.CompanyId
 	chartPermissionName := activityInfo.ChartPermissionName
+
+	companyProduct, e := company.GetCompanyProductByCompanyIdAndProductId(companyId, utils.COMPANY_PRODUCT_RAI_ID)
+	if e != nil {
+		err = errors.New("GetCompanyProductByCompanyIdAndProductId, Err:" + e.Error())
+		return
+	}
+
 	var condition string
 	var pars []interface{}
-	condition = " AND  company_id  = ?  AND points  > 0   ORDER BY  points DESC LIMIT 1   "
-	pars = append(pars, companyId)
+	var maxChartPermissionId int // 剩余点数最多的行业
+	var points int               // 剩余点数
+	var activitySpecialPermissionPointsList []*models.CygxActivitySpecialPermissionPoints
+	//永续客户不限次数需要单独处理
+	if companyProduct.Status == utils.COMPANY_STATUS_FOREVER {
+		condition = " AND  company_id  = ?   ORDER BY  points DESC LIMIT 1   "
+		pars = append(pars, companyId)
+		activitySpecialPermissionPointsList, e = models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+			return
+		}
+		//如果永续客户不存在单独的行业剩余点数记录,那么就添加一条 -1 的记录作为初始化数据
+		if len(activitySpecialPermissionPointsList) == 0 {
+			item := new(models.CygxActivitySpecialPermissionPoints)
+			item.CompanyId = companyProduct.CompanyId
+			item.Points = -1
+			item.CompanyName = companyProduct.CompanyName
+			//item.ChartPermissionId = activityInfo.ChartPermissionId
+			//item.ChartPermissionName = activityInfo.ChartPermissionName
+			item.CreateTime = time.Now()
+			item.ModifyTime = time.Now()
+			e = models.AddCygxActivitySpecialPermissionPoints(item)
+			if e != nil {
+				err = errors.New("AddCygxActivitySpecialPermissionPoints, Err:" + e.Error())
+				return
+			}
+			return
+		}
+	} else {
+		condition = " AND  company_id  = ?  AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+		pars = append(pars, companyId)
 
-	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
-	if chartPermissionName != utils.CE_LUE_NAME {
-		pars = make([]interface{}, 0)
-		condition = " AND  company_id  = ?  AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )  AND points  > 0   ORDER BY  points DESC LIMIT 1   "
-		pars = append(pars, companyId, activityInfo.ChartPermissionId)
-	}
-	activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
-		return
+		//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+		if chartPermissionName != utils.CE_LUE_NAME {
+			pars = make([]interface{}, 0)
+			condition = " AND  company_id  = ?  AND ( chart_permission_id  = ? OR  chart_permission_id =0 )    AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+			pars = append(pars, companyId, activityInfo.ChartPermissionId)
+		}
+		activitySpecialPermissionPointsList, e = models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+			return
+		}
 	}
 	//如果没有剩余的点数,就返回
 	if len(activitySpecialPermissionPointsList) == 0 {
 		err = errors.New(msgTemplate)
 		return
 	}
-	var maxChartPermissionId int // 剩余点数最多的行业
-	var points int               // 剩余点数
 	for _, v := range activitySpecialPermissionPointsList {
 		maxChartPermissionId = v.ChartPermissionId
 		points = v.Points - 1
@@ -309,18 +346,14 @@ func RebateTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *model
 }
 
 // 预处理专项调研流水明细表描述内容
-func HandleActivitySpecialTripBillTotalText(user *models.WxUserItem) (totalText string, err error) {
-	companyId := user.CompanyId
+func HandleActivitySpecialTripBillTotalText(companyId int) (totalText string, err error) {
+	//companyId := user.CompanyId
 	companyDetail, e := models.GetCompanyDetailByIdGroup(companyId)
 	if e != nil {
 		err = errors.New("GetCompanyDetailByIdGroup, Err:" + e.Error())
 		return
 	}
-	//永续客户不限制次数
-	if companyDetail.Status == utils.COMPANY_STATUS_FOREVER {
-		totalText = "0次"
-		return
-	}
+
 	var condition string
 	var pars []interface{}
 	pars = make([]interface{}, 0)
@@ -331,18 +364,39 @@ func HandleActivitySpecialTripBillTotalText(user *models.WxUserItem) (totalText
 		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
 		return
 	}
+	//永续客户次数累加
+	if companyDetail.Status == utils.COMPANY_STATUS_FOREVER {
+		var points int
+		for _, v := range activitySpecialPermissionPointsList {
+			points += v.Points
+		}
+		totalText = fmt.Sprint(points, "次") //追加永续客户展示规则(2024-02-23)
+		return
+	}
 
 	var itemBillTotal []string
+	itemBillTotalMap := make(map[string]string)
 	for _, v := range activitySpecialPermissionPointsList {
 		if v.ChartPermissionId > 0 {
 			itemBillTotal = append(itemBillTotal, fmt.Sprint(v.ChartPermissionName, v.Points, "次")) // 行业套餐客户展示规则
+			itemBillTotalMap[v.ChartPermissionName] = fmt.Sprint(v.ChartPermissionName, v.Points, "次")
 		}
 		if v.ChartPermissionId == 0 {
-			totalText = fmt.Sprint(v.Points, "次") // 大套餐客户展示规则
+			totalText = fmt.Sprint(v.Points, "次") // 大套餐客户展示规则
 		}
 	}
+
 	if len(itemBillTotal) > 0 {
-		totalText = strings.Join(itemBillTotal, "+")
+		permissionNameSlice := []string{"医药", "消费", "科技", "智造"}
+		var itemBillTotalNew []string
+		for _, v := range permissionNameSlice {
+			if itemBillTotalMap[v] == "" {
+				itemBillTotalNew = append(itemBillTotalNew, fmt.Sprint(v, "0次"))
+			} else {
+				itemBillTotalNew = append(itemBillTotalNew, itemBillTotalMap[v])
+			}
+		}
+		totalText = strings.Join(itemBillTotalNew, "+")
 	}
 	return
 }