/**
* 关联对象【object_api_name】:销售线索-LeadsObj
* 对象字段【stage_field_api_name】:线索阶段-leads_stage
* 流程名称【workflow_name】:线索推荐
* 所属阶段【stage_id】:潜在线索(Lead)-Lead
* 任务状态【state】:进行中-in_progress
* 待处理人【candidate_ids】:张三-1
*/
def objectApiName = "LeadsObj";
def stageFieldApiName = "leads_stage";
def workflowName = "线索推荐";
def stageId = "Lead";
def state = "in_progress";
//张三
def owners = "1";
def searchCondition = QueryTemplate.AND(
["object_api_name": QueryOperator.EQ(objectApiName)],
["stage_field_api_name": QueryOperator.EQ(stageFieldApiName)],
["workflow_name": QueryOperator.EQ(workflowName)],
["stage_id": QueryOperator.EQ(stageId)],
["state": QueryOperator.EQ(state)],
["candidate_ids": QueryOperator.EQ(owners)],
)
Fx.log.info("查询条件为 :" + searchCondition)
//查询条件 要以id 进行排序,find默认的排序是最后修改时间,如果排序字段存在重复,数据库是不能保证每次查询出来顺序是一致的
//分页的时候可能会出现重复数据,导致执行遗漏。
Map orderBy = ["_id": -1]
boolean hasData = true
Integer limit = 100
//循环聚合所有数据
List dataAllList = [];
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("StageTaskObj",
FQLAttribute.builder()
.orderBy(orderBy)
.limit(limit)
.skip(skip)
.columns(["_id", "workflow_name", "workflow_id", "stage_id", "state", "candidate_ids"])
.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
}
//合并所有数据
dataAllList.addAll(dataList)
}
//极端情况,所有查询都失败了
if (!dataAllList) {
Fx.log.info("循环查询出来数据为空")
return
}
List idList = dataAllList.collect {
x -> x["_id"]
}
log.info(idList.size())
def result = Fx.object.update("StageTaskObj", QueryTemplate.AND(["_id": QueryOperator.IN(idList)]), ["state": "cancel"], UpdateAttribute.builder().build()).result() as String
if (result) {
log.info("更新成功")
} else {
log.info("更新失败")
}
参考:
1、Fx.object.find
Fx.object | 纷享销客 | 帮助中心
2、Fx.object.update
Fx.object | 纷享销客 | 帮助中心