2020年的数据:
//开始时间
DateTime startTime = '2020-01-01 00:00';
//结束时间
DateTime endTime = '2020-12-31 23:59';
//是否新老客户
List customList = ["option1", "cgpt378qs"];
//配件销售订单数量
def num = 0;
//test发金额
def sendAmount = 3999;
def searchCondition = QueryTemplate.AND(
["field_QlmK7__c": QueryOperator.IN(customList)],
["field_Gy2i7__c": QueryOperator.EQ(num)],
["field_qnWxZ__c": QueryOperator.GT(sendAmount)],
["create_time": QueryOperator.GTE(startTime)],
["create_time": QueryOperator.LTE(endTime)]
)
Fx.log.info("查询条件为 :" + searchCondition)
//查询条件 要以id 进行排序,find默认的排序是最后修改时间,如果排序字段存在重复,数据库是不能保证每次查询出来顺序是一致的
//分页的时候可能会出现重复数据,导致执行遗漏。
Map orderBy = ["_id": -1]
boolean hasData = true
Integer limit = 100
//循环聚合所有数据
Map sendData = [:]
Range range = Ranges.of(0, 200)
range.each { i ->
if (hasData == false) {
return
}
Integer skip = i * limit
def (Boolean error, QueryResult result, String errorMessage) = Fx.object.find("AccountObj",
FQLAttribute.builder()
.orderBy(orderBy)
.limit(limit)
.skip(skip)
.columns(["_id", "name", "create_time", "owner", "remark", "tel"])
.queryTemplate(searchCondition)
.build(),
SelectAttribute.builder().build())
if (error) {
hasData = false
Fx.log.info("查询失败" + "当前跳过的数量为 " + skip + "错误原因为" + errorMessage)
return
}
log.info(result)
//获取所有更新的数据,如果是预设对象,就在循环里面直接更新。
List dataList = result.dataList
if (dataList.size() < limit) {
hasData = false
}
//如果不需要合并数据,在这里就可以100条
dataList.each { item ->
Map objectData = item as Map
//log.info(objectData)
sendData.put(objectData._id, ["owner": objectData.owner, "name": objectData.name])
}
}
//极端情况,所有查询都失败了
if (!sendData) {
Fx.log.info("循环查询出来数据为空")
return
}
//如果是自定义对象,直接调用批量更新即可,更新单次500条限制,所以我们拆分数据
List idList = sendData.keys() as List
//log.info(sendData)
//log.info(idList)
List partitionList = Fx.utils.listPartition(idList, 500)
partitionList.each { item ->
//根据id分批组装数据
List ids = item as List
ids.each { id ->
String stringId = id as String
Map totalMap = sendData
Map updateMap = totalMap[stringId] as Map
String customName = updateMap["name"] as String
List receiverIds = updateMap["owner"] as List
log.info(stringId);
log.info(customName);
log.info(receiverIds);
//指定发送消息给某人,某人ID,测试专用
//List receiverIds = ["1234"]
Notice objectNotify = Notice.objectNotice("AccountObj", stringId)
def (Boolean error, String data, String errorMessage) = Fx.message.sendNotice("成交未购买配件客户回访", "请跟进当前客户的配件销售记录", receiverIds, objectNotify)
if (error) {
log.info(errorMessage)
} else {
log.info(data)
}
}
}
Fx.log.info("实际消息通知的数据为" + idList.size())
备注:2021年、2022年、2023年数据,只需要修改开始时间和结束时间即可。
//开始时间
DateTime startTime = '2021-01-01 00:00';
//结束时间
DateTime endTime = '2021-12-31 23:59';
参考:
1、Fx.object.find
Fx.object | 纷享销客 | 帮助中心
2、Fx.message.sendNotice
Fx.message | 纷享销客 | 帮助中心