|
@@ -11,6 +11,7 @@ import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.ibatis.annotations.Param;
|
|
|
import org.springblade.useranalysis.dto.TagHistory;
|
|
|
import org.springblade.useranalysis.entity.AdsUserprofileTag;
|
|
|
import org.springblade.useranalysis.entity.TagColumn;
|
|
@@ -44,7 +45,7 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
|
|
|
@Autowired
|
|
|
private UserProfileService userProfileService;
|
|
|
-
|
|
|
+
|
|
|
@Autowired
|
|
|
private DynamicQueryMapper dynamicQueryMapper;
|
|
|
|
|
@@ -52,17 +53,22 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
@Override
|
|
|
public List<TagHistory> userTagFlowHisSearch(String userId, String level2Id, String startDate, String endDate) {
|
|
|
List<TagHistory> rtHis = new ArrayList<TagHistory>();
|
|
|
-// TagColumn weiduColumn = userProfileService.getColumName(tagId, null);
|
|
|
+ // TagColumn weiduColumn = userProfileService.getColumName(tagId, null);
|
|
|
TagColumn weiduColumn = userProfileService.getColumNameExport(level2Id);
|
|
|
-// SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
|
|
|
-// QueryWrapper<ZUserTagEntity> queryWrapper = new QueryWrapper<>();
|
|
|
-// queryWrapper.eq("USERID_V", userId)
|
|
|
-// .ge("THEMONTH_V", format.format(start_date))
|
|
|
-// .le("THEMONTH_V", format.format(end_date));
|
|
|
-// queryWrapper.select("THEMONTH_V",weiduColumn.columnE, weiduColumn.columnC, weiduColumn.columnV).orderBy(true,true,"THEMONTH_V");
|
|
|
-// List<Map<String, Object>> maps = baseMapper.selectMaps(queryWrapper);
|
|
|
- List<Map<String, Object>> maps = baseMapper.findOnceTag(userId, startDate,
|
|
|
- endDate, weiduColumn.columnC, weiduColumn.columnE, weiduColumn.columnV);
|
|
|
+ // SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
|
|
|
+ // QueryWrapper<ZUserTagEntity> queryWrapper = new QueryWrapper<>();
|
|
|
+ // queryWrapper.eq("USERID_V", userId)
|
|
|
+ // .ge("THEMONTH_V", format.format(start_date))
|
|
|
+ // .le("THEMONTH_V", format.format(end_date));
|
|
|
+ // queryWrapper.select("THEMONTH_V",weiduColumn.columnE, weiduColumn.columnC,
|
|
|
+ // weiduColumn.columnV).orderBy(true,true,"THEMONTH_V");
|
|
|
+ // List<Map<String, Object>> maps = baseMapper.selectMaps(queryWrapper);
|
|
|
+ List<Map<String, Object>> maps = baseMapper.findOnceTag(userId,
|
|
|
+ startDate,
|
|
|
+ endDate,
|
|
|
+ weiduColumn.columnC,
|
|
|
+ weiduColumn.columnE,
|
|
|
+ weiduColumn.columnV);
|
|
|
Map<Object, List<Map<String, Object>>> groupMap = maps.stream()
|
|
|
.collect(Collectors.groupingBy(item -> item.get("THEMONTH_V")));
|
|
|
|
|
@@ -74,7 +80,8 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
List<Map<String, Object>> valueList = entry.getValue();
|
|
|
for (Map<String, Object> item : valueList) {
|
|
|
Map<String, Object> tMaps = JSONObject.parseObject(
|
|
|
- JSONObject.toJSONString(item.get(weiduColumn.englishName.toUpperCase())), HashMap.class);
|
|
|
+ JSONObject.toJSONString(item.get(weiduColumn.englishName.toUpperCase())),
|
|
|
+ HashMap.class);
|
|
|
_tags.addAll((List<String>) tMaps.get("C"));
|
|
|
_values.addAll((List<String>) tMaps.get("V"));
|
|
|
}
|
|
@@ -99,16 +106,22 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
|
|
|
@Override
|
|
|
public List<JSONObject> userTagHisSearch(String userId, String level2Id, String startDate, String endDate) {
|
|
|
-// TagColumn weiduColumn = userProfileService.getColumName(tagId, null);
|
|
|
+ // TagColumn weiduColumn = userProfileService.getColumName(tagId, null);
|
|
|
TagColumn weiduColumn = userProfileService.getColumNameExport(level2Id);
|
|
|
-// SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
|
|
|
-// QueryWrapper<ZUserTagEntity> queryWrapper = new QueryWrapper<>();
|
|
|
-// queryWrapper.eq("USERID_V", userId).ge("THEMONTH_V", format.format(start_date))
|
|
|
-// .le("THEMONTH_V", format.format(end_date)).isNotNull(weiduColumn.columnV);
|
|
|
-// queryWrapper.select("THEMONTH_V",weiduColumn.columnE, weiduColumn.columnC, weiduColumn.columnV).orderBy(true,true,"THEMONTH_V");
|
|
|
-// List<Map<String, Object>> maps = baseMapper.selectMaps(queryWrapper);
|
|
|
- List<Map<String, Object>> maps = baseMapper.findOnceTag(userId, startDate,
|
|
|
- endDate, weiduColumn.columnC, weiduColumn.columnE, weiduColumn.columnV);
|
|
|
+ // SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
|
|
|
+ // QueryWrapper<ZUserTagEntity> queryWrapper = new QueryWrapper<>();
|
|
|
+ // queryWrapper.eq("USERID_V", userId).ge("THEMONTH_V",
|
|
|
+ // format.format(start_date))
|
|
|
+ // .le("THEMONTH_V", format.format(end_date)).isNotNull(weiduColumn.columnV);
|
|
|
+ // queryWrapper.select("THEMONTH_V",weiduColumn.columnE, weiduColumn.columnC,
|
|
|
+ // weiduColumn.columnV).orderBy(true,true,"THEMONTH_V");
|
|
|
+ // List<Map<String, Object>> maps = baseMapper.selectMaps(queryWrapper);
|
|
|
+ List<Map<String, Object>> maps = baseMapper.findOnceTag(userId,
|
|
|
+ startDate,
|
|
|
+ endDate,
|
|
|
+ weiduColumn.columnC,
|
|
|
+ weiduColumn.columnE,
|
|
|
+ weiduColumn.columnV);
|
|
|
List<JSONObject> resultList = new ArrayList<JSONObject>();
|
|
|
|
|
|
Map<Object, List<Map<String, Object>>> groupMap = maps.stream()
|
|
@@ -121,7 +134,8 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
List<Map<String, Object>> valueList = entry.getValue();
|
|
|
for (Map<String, Object> item : valueList) {
|
|
|
Map<String, Object> tMaps = JSONObject.parseObject(
|
|
|
- JSONObject.toJSONString(item.get(weiduColumn.englishName.toUpperCase())), HashMap.class);
|
|
|
+ JSONObject.toJSONString(item.get(weiduColumn.englishName.toUpperCase())),
|
|
|
+ HashMap.class);
|
|
|
List<String> cList = (List<String>) tMaps.get("C");
|
|
|
valueSet.addAll(cList);
|
|
|
}
|
|
@@ -161,17 +175,26 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
// 字符串格式,形如:SELECT USERID_V,THEMONTH_V,TAG_PROVINCE AS tId,TAG_PROVINCE_C as
|
|
|
// tCode,TAG_PROVINCE_V as tValue FROM Z_USER_TAG_LAST
|
|
|
if (tagColumn.columnType.equalsIgnoreCase("string")) {
|
|
|
- String columnV = !"string".equalsIgnoreCase(tagColumn.searchType) ? "toString(" + tagColumn.columnV + ")" : tagColumn.columnV;
|
|
|
+ String columnV = !"string".equalsIgnoreCase(tagColumn.searchType)
|
|
|
+ ? "toString(" + tagColumn.columnV + ")"
|
|
|
+ : tagColumn.columnV;
|
|
|
sql = String.format(
|
|
|
"select distinct USERID_V, THEMONTH_V, %s as tId, %s as tCode, %s as tValue from %s",
|
|
|
- tagColumn.columnE, tagColumn.columnC, columnV, clickhouseTableName);
|
|
|
+ tagColumn.columnE,
|
|
|
+ tagColumn.columnC,
|
|
|
+ columnV,
|
|
|
+ clickhouseTableName);
|
|
|
} else { // 数组格式,形如:SELECT USERID_V, THEMONTH_V, tId, tCode,tValue FROM Z_USER_TAG_LAST
|
|
|
// array join EVENT_SPNAME.E as tId,EVENT_SPNAME.C as tCode,EVENT_SPNAME.V as
|
|
|
// tValue
|
|
|
String columnV = !"string".equalsIgnoreCase(tagColumn.searchType) ? "toString(tValue)" : "tValue";
|
|
|
sql = String.format(
|
|
|
"select distinct USERID_V, THEMONTH_V, tId, tCode, %s from %s array join %s as tId, %s as tCode, %s as tValue",
|
|
|
- columnV, clickhouseTableName, tagColumn.columnE, tagColumn.columnC, tagColumn.columnV);
|
|
|
+ columnV,
|
|
|
+ clickhouseTableName,
|
|
|
+ tagColumn.columnE,
|
|
|
+ tagColumn.columnC,
|
|
|
+ tagColumn.columnV);
|
|
|
}
|
|
|
sqlList.add(String.format(sqlFragment, sql));
|
|
|
}
|
|
@@ -200,7 +223,7 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
*/
|
|
|
@Override
|
|
|
public JSONObject checkTagNum(String tagId, String startDate, String endDate) {
|
|
|
-// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ // SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
TagColumn tagColumn = userProfileService.getColumName(tagId, null);
|
|
|
String sql = "";
|
|
|
String whereSql = "";
|
|
@@ -213,7 +236,9 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
if (tagColumn.columnType.equals("string")) {
|
|
|
sql = String.format("where %s = '%s' %s", tagColumn.englishName.toUpperCase(), tagId, whereSql);
|
|
|
} else { // 列存的是Array
|
|
|
- sql = String.format("array join %s as t1 where t1.E = '%s' %s", tagColumn.englishName.toUpperCase(), tagId,
|
|
|
+ sql = String.format("array join %s as t1 where t1.E = '%s' %s",
|
|
|
+ tagColumn.englishName.toUpperCase(),
|
|
|
+ tagId,
|
|
|
whereSql);
|
|
|
}
|
|
|
List<JSONObject> tagNumList = baseMapper.checkTagNum(sql);
|
|
@@ -237,13 +262,15 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
whereSql = String.format("array join %s as t1 %s ", tagColumn.englishName.toUpperCase(), whereSql);
|
|
|
}
|
|
|
List<JSONObject> tagNumList = baseMapper.checkTagRatio(columnName, whereSql);
|
|
|
- if(tagNumList != null && !tagNumList.isEmpty()) {
|
|
|
- //根据leve2Name查询列表
|
|
|
- List<AdsUserprofileTag> tagList = userProfileService.list(Wrappers.<AdsUserprofileTag>lambdaQuery().eq(AdsUserprofileTag::getLevel2Name, tagColumn.cnName));
|
|
|
- Map<String, String> tagName2IdMap = tagList.stream().collect(Collectors.toMap(AdsUserprofileTag::getTagName, AdsUserprofileTag::getTagId));
|
|
|
- //根据tagName反查tagId
|
|
|
+ if (tagNumList != null && !tagNumList.isEmpty()) {
|
|
|
+ // 根据leve2Name查询列表
|
|
|
+ List<AdsUserprofileTag> tagList = userProfileService.list(
|
|
|
+ Wrappers.<AdsUserprofileTag>lambdaQuery().eq(AdsUserprofileTag::getLevel2Name, tagColumn.cnName));
|
|
|
+ Map<String, String> tagName2IdMap = tagList.stream()
|
|
|
+ .collect(Collectors.toMap(AdsUserprofileTag::getTagName, AdsUserprofileTag::getTagId));
|
|
|
+ // 根据tagName反查tagId
|
|
|
tagNumList.forEach(item -> item.put("tagid", tagName2IdMap.get(item.get("tagname"))));
|
|
|
- //库里面已经不存在该标签值,则不显示
|
|
|
+ // 库里面已经不存在该标签值,则不显示
|
|
|
tagNumList.removeIf(it -> StrUtil.isEmpty(it.getString("tagid")));
|
|
|
}
|
|
|
map.put("list", tagNumList);
|
|
@@ -251,43 +278,73 @@ public class UserTagsServiceImpl extends ServiceImpl<UserTagsMapper, ZUserTagEnt
|
|
|
}
|
|
|
|
|
|
public List<Map<String, Object>> exportTagList(String fields, QueryWrapper<ZUserTagEntity> TagWrapper,
|
|
|
- String importId,String sqlLimit) {
|
|
|
+ String importId, String sqlLimit) {
|
|
|
if (StringUtils.isBlank(importId)) {
|
|
|
return baseMapper.exportTagList(fields, TagWrapper);
|
|
|
}
|
|
|
- return baseMapper.exportTagListBaseImport(fields, TagWrapper, importId,sqlLimit);
|
|
|
+ return baseMapper.exportTagListBaseImport(fields, TagWrapper, importId, sqlLimit);
|
|
|
}
|
|
|
-
|
|
|
- public List<Map<String, Object>> exportTagListMonths(String fields,String monthStart,
|
|
|
- String monthEnd,QueryWrapper<ZUserTagEntity> childWrapper,String sqlLimit){
|
|
|
- return baseMapper.exportTagListMonths(fields,monthStart,monthEnd, childWrapper,sqlLimit);
|
|
|
+
|
|
|
+ public List<Map<String, Object>> exportTagListMonths(String fields, String monthStart,
|
|
|
+ String monthEnd, QueryWrapper<ZUserTagEntity> childWrapper, String sqlLimit) {
|
|
|
+ return baseMapper.exportTagListMonths(fields, monthStart, monthEnd, childWrapper, sqlLimit);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 人群导出新方法(关联BIZ_USER_GROUP_USERID表)
|
|
|
+ *
|
|
|
+ * @param fields 要查询的字段
|
|
|
+ * @param groupId 人群ID
|
|
|
+ * @param monthStart 开始月份
|
|
|
+ * @param monthEnd 结束月份
|
|
|
+ * @param sqlLimit 分页子语句
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<Map<String, Object>> exportUserGroup(String fields,String groupId,String monthStart,String monthEnd,String sqlLimit) {
|
|
|
+ return baseMapper.exportUserGroup(fields, groupId, monthStart, monthEnd, sqlLimit);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<JSONObject> userTagHisDataListByUserId(String userId, String level2Id, String startMonth, String endMonth) {
|
|
|
+ public List<JSONObject> userTagHisDataListByUserId(String userId, String level2Id, String startMonth,
|
|
|
+ String endMonth) {
|
|
|
TagColumn tagColumn = userProfileService.getColumNameExport(level2Id);
|
|
|
- if(tagColumn == null) {
|
|
|
+ if (tagColumn == null) {
|
|
|
return null;
|
|
|
}
|
|
|
String sql = "";
|
|
|
String clickhouseTableName = "ads.Z_USER_TAG_FLAT_ALL";
|
|
|
if (tagColumn.columnType.equals("string")) {
|
|
|
- String columnV = !"string".equalsIgnoreCase(tagColumn.searchType) ? "toString(" + tagColumn.columnV + ")" : tagColumn.columnV;
|
|
|
- sql = String.format("select distinct THEMONTH_V as the_month, %s as tag_id, %s as tag_name, %s as tag_value from %s where USERID_V = '%s'",
|
|
|
- tagColumn.columnE, tagColumn.columnC, columnV, clickhouseTableName, userId);
|
|
|
+ String columnV = !"string".equalsIgnoreCase(tagColumn.searchType) ? "toString(" + tagColumn.columnV + ")"
|
|
|
+ : tagColumn.columnV;
|
|
|
+ sql = String.format(
|
|
|
+ "select distinct THEMONTH_V as the_month, %s as tag_id, %s as tag_name, %s as tag_value from %s where USERID_V = '%s'",
|
|
|
+ tagColumn.columnE,
|
|
|
+ tagColumn.columnC,
|
|
|
+ columnV,
|
|
|
+ clickhouseTableName,
|
|
|
+ userId);
|
|
|
} else { // 列存的是Array
|
|
|
- String columnV = !"string".equalsIgnoreCase(tagColumn.searchType) ? "toString(tmp_tag_value)" : "tmp_tag_value";
|
|
|
- sql = String.format("select distinct THEMONTH_V as the_month, tag_id, tag_name, %s as tag_value from %s array join `%s` as tag_id, `%s` as tag_name, `%s` as tmp_tag_value where USERID_V = '%s'",
|
|
|
- columnV, clickhouseTableName, tagColumn.columnE, tagColumn.columnC, tagColumn.columnV, userId);
|
|
|
+ String columnV = !"string".equalsIgnoreCase(tagColumn.searchType) ? "toString(tmp_tag_value)"
|
|
|
+ : "tmp_tag_value";
|
|
|
+ sql = String.format(
|
|
|
+ "select distinct THEMONTH_V as the_month, tag_id, tag_name, %s as tag_value from %s array join `%s` as tag_id, `%s` as tag_name, `%s` as tmp_tag_value where USERID_V = '%s'",
|
|
|
+ columnV,
|
|
|
+ clickhouseTableName,
|
|
|
+ tagColumn.columnE,
|
|
|
+ tagColumn.columnC,
|
|
|
+ tagColumn.columnV,
|
|
|
+ userId);
|
|
|
}
|
|
|
- if(startMonth != null && endMonth != null) {
|
|
|
+ if (startMonth != null && endMonth != null) {
|
|
|
sql += String.format(" and THEMONTH_V >= '%s' and THEMONTH_V <= '%s'", startMonth, endMonth);
|
|
|
- }else {
|
|
|
- //获取半年的数据
|
|
|
+ } else {
|
|
|
+ // 获取半年的数据
|
|
|
LocalDate now = LocalDate.now().minusMonths(1);
|
|
|
LocalDate halfYear = now.minusMonths(6);
|
|
|
- sql += String.format(" and THEMONTH_V >= '%s' and THEMONTH_V <= '%s'", DateUtil.format(halfYear.atStartOfDay(), "yyyyMM"), DateUtil.format(now.atStartOfDay(), "yyyyMM"));
|
|
|
-
|
|
|
+ sql += String.format(" and THEMONTH_V >= '%s' and THEMONTH_V <= '%s'",
|
|
|
+ DateUtil.format(halfYear.atStartOfDay(), "yyyyMM"),
|
|
|
+ DateUtil.format(now.atStartOfDay(), "yyyyMM"));
|
|
|
+
|
|
|
}
|
|
|
return dynamicQueryMapper.list(sql);
|
|
|
}
|