|
@@ -46,6 +46,7 @@ func Task(ctx context.Context) {
|
|
|
g.Log().Error(ctx, "获取规则失败", err)
|
|
|
return
|
|
|
}
|
|
|
+ g.Log().Infof(ctx, "共%d个规则", len(rules))
|
|
|
// 遍历规则
|
|
|
for i := 0; i < len(rules); i++ {
|
|
|
g.Log().Infof(ctx, "开始处理第%v个规则:id-%v name:%v \n", i, rules[i].Id, rules[i].Name)
|
|
@@ -125,14 +126,14 @@ func getFromRegisterBehavior(ctx context.Context, rule entity.NewUserSendRule) (
|
|
|
filterQuery := regQuery
|
|
|
if rule.BehaviorTagIds != "" {
|
|
|
//拼接行为标签sql
|
|
|
- behQuery := fmt.Sprintf(consts.OrSQL, rule.BehaviorTagIds)
|
|
|
- filterQuery = fmt.Sprintf(consts.BitMapSQL, regQuery, behQuery)
|
|
|
+ filterQuery = processBehaviorSQL(regQuery, rule)
|
|
|
}
|
|
|
// 处理mgoid和手机号 拼接sql
|
|
|
finalQuery := fmt.Sprintf(consts.QueryUserIdSQL, filterQuery)
|
|
|
g.Log().Info(ctx, "getFromRegisterBehavior 查询sql", finalQuery)
|
|
|
err = dao.DwdDUserTag.DB().Raw(finalQuery).Scan(&userList)
|
|
|
if err != nil {
|
|
|
+
|
|
|
return nil, err
|
|
|
}
|
|
|
for j := 0; j < len(userList); j++ {
|
|
@@ -143,6 +144,43 @@ func getFromRegisterBehavior(ctx context.Context, rule entity.NewUserSendRule) (
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+func processBehaviorSQL(regQuery string, rule entity.NewUserSendRule) string {
|
|
|
+ tags := strings.Split(rule.BehaviorTagIds, ",")
|
|
|
+ narmalTags := []string{}
|
|
|
+ notTags := []string{}
|
|
|
+ for i := 0; i < len(tags); i++ {
|
|
|
+ if strings.HasPrefix(tags[i], "#") && len(tags[i]) > 1 {
|
|
|
+ // 非标签
|
|
|
+ notTags = append(notTags, tags[i][1:])
|
|
|
+ } else {
|
|
|
+ narmalTags = append(narmalTags, tags[i])
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var notQ, narmalQ, finalQ string
|
|
|
+ finalQ = regQuery
|
|
|
+ if len(narmalTags) != 0 {
|
|
|
+ //拼接行为标签sql
|
|
|
+ behQuery := fmt.Sprintf(consts.OrSQL, strings.Join(narmalTags, ""))
|
|
|
+ narmalQ = fmt.Sprintf(consts.BitMapAndSQL, regQuery, behQuery)
|
|
|
+ finalQ = narmalQ
|
|
|
+ }
|
|
|
+ if len(notTags) != 0 {
|
|
|
+ behQuery := fmt.Sprintf(consts.OrSQL, strings.Join(notTags, ","))
|
|
|
+ notQ = fmt.Sprintf(consts.BitMapAndNotSQL, regQuery, behQuery)
|
|
|
+ finalQ = notQ
|
|
|
+ }
|
|
|
+ if len(narmalTags) != 0 && len(notTags) != 0 {
|
|
|
+ finalQ = fmt.Sprintf(consts.BitMapOrSQL, narmalQ, notQ)
|
|
|
+ }
|
|
|
+ // // 第一种情况 行为标签都是正常标签
|
|
|
+ // // 第二种情况 行为标签都是非标签 用Andnot
|
|
|
+ // // 第三种情况 一行为标签部分正常标签 一部分非标签
|
|
|
+ // // (注册时间 and 行为正常标签) U (注册时间 AndNOT 行为非标签) // 先这样处理后续有其他标签再优化
|
|
|
+ //}
|
|
|
+ return finalQ
|
|
|
+}
|
|
|
+
|
|
|
// 外呼状态
|
|
|
func filterCallState(ctx context.Context, rule entity.NewUserSendRule, userList []entity.NewUserSendLog) (newUserList []entity.NewUserSendLog, err error) {
|
|
|
start := time.Now()
|