场景:
现有crm系统中保存了几百条线索数据,每个线索都有一个渠道标识,需要进行分组统计,但渠道太多了,用饼图不好展示,所以需要做成文本的格式(方便复制),效果如下图所示;
前期准备:
线索数据表以及样本数据、一张临时表用于选择统计时间范围,示例字段如下。
实现步骤:
1. 新建一个功能,命名为“分组统计渠道数据”;
2. 新增一个步骤,命名为“选择日期范围”,新增数据类型,选择临时表进行新增;
3. 第二步使用编程步骤,编写代码,其中第一步的两个日期作为编程的输入参数;
async function runProcess($model = model,$plugin = plugin,$params = params){
await $model.command("tips",{})//去除功能提交提示
let start_date = $params.start_date;//开始日期
let end_date = $params.end_date;//结束日期
let clue_entity = "612c89b96979d17d3cf7fac1";//线索表entity
let clue_source = "612c89c66979d17d3cf7fad3";//线索渠道field
let clue_date = "612c8c176979d17d3cf7fe77";//线索日期field
let query = {//筛选条件,筛选日期范围,可根据实际需求添加筛选条件
"$and":[
{
[clue_date]:{"$gte":start_date},//大于等于开始日期
},{
[clue_date]:{"$lte":end_date},//小于等于结束日期
}
]
};
//获取分组数据
let clue_data = await $plugin.data.summaryData(clue_entity,"_id",clue_source,query);
//整理分组结果列表
let res_list = clue_data.map(function(item){
return {
"name":item["_id"] || "无渠道",
"count":item["count"]
};
});
let num_list = clue_data.map(v=>+v["count"]);
num_list = num_list || [0];
let total = eval(num_list.join('+'))
let str = ``;
for(let i = 0; i <res_list.length; i++){
str = `${str}${res_list[i]["name"]}:${res_list[i]["count"]}, `
}
await $model.command("confirm",{
title:"统计结果",
content:`${str}共${total}条数据`,
});
}