CRM批量终止待处理的阶段任务

 

/**
 * 关联对象【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 | 纷享销客 | 帮助中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值