引言:因为业务需要根据报表的内容进行消息推送,所以我们根据CRM提供的函数,根据自己的情况自行编写。
备注:引用代码前,需要查出filterId,在CRM系统中是有对应方法的,查出来了,可以根据我的方法去写。本文逻辑是,查客户--查职位--查BI报表--组合数据--按条件推送。
List ids = context.objectIds as List
def ret = Fx.object.findByIds("PersonnelObj", //查询客户对象
ids,
FQLAttribute.builder()
.columns(["_id","name","owner","position","life_status"])
.build(),
SelectAttribute.builder()
.build()).result() as List;
log.info("符合条件的数据:" + ret)
ret.each { item ->
Map PDmap = item as Map
String wantowner=PDmap.owner as String //获取当前负责人
String wantownerjob = PDmap.position as String //获取当前负责人职位
if (wantownerjob == null || wantownerjob.isEmpty()) {
log.debug("当前记录的职位信息为空,跳过处理。")
return; // 跳过当前迭代的剩余部分并继续下一个,职位为空的不继续。
}
String wantownerno=wantowner.replaceAll(/\[|\]/, '')
//log.debug(wantowner+wantownerjob)
//String role = "经理"
if( wantownerjob!=null){
log.debug("当前人员ID:"+wantownerno+",职位为:"+wantownerjob)
String newId = wantownerno;
String idd = "[{\"id\":\"" + newId + "\",\"type\":\"p\"}]";
List filterList = [["filterId":"BI_669f709c938fxxxxxxxx","value1": idd,"dateRangeId":4]]
def(isError,data,errorMsg) = Fx.BI.queryLwtViewDataByFilter("BI_lwt_1711xxxxxxxx",filterList)
if(!isError){
//log.info("分页信息:"+data["page"])
//log.info("表头信息:"+data["displayFields"])
//log.debug("数据集:"+data["dataSet"])
}else{
log.info("查询失败:"+errorMsg)
}
List datta = data["dataSet"] as List
//log.debug(datta)
if( data["dataSet"]!=[] ){
转换方法集
def want = datta.first() as List
def qichucundian = want.get(5) as Map //存量网点数据
def fqichucundianStr = qichucundian.'value' as String
def qichucundianValue = fqichucundianStr.substring(fqichucundianStr.indexOf(':') + 1).trim() as String
BigDecimal qichucundianValueX = new BigDecimal(qichucundianValue)
BigDecimal qichucundianValueZero = qichucundianValueX.stripTrailingZeros()
String qichucundianValueZero1 = qichucundianValueZero.toPlainString()
log.debug("期初存量网点:"+qichucundianValueZero1)//存量网点值剥离
def newsopen = want.get(6) as Map //新开网点数据
def newsopenStr = newsopen.'value' as String
def newsopenValue = newsopenStr.substring(newsopenStr.indexOf(':') + 1).trim() as String
BigDecimal newsopenValueX = new BigDecimal(newsopenValue)
BigDecimal newsopenValueZero = newsopenValueX.stripTrailingZeros()
String newsopenValueZero1 = newsopenValueZero.toPlainString()
log.debug("本月新开网点:"+newsopenValueZero1)//新开网点值剥离
def allopen = want.get(7) as Map //网点数据
def allopenStr = allopen.'value' as String
def allopenValue = allopenStr.substring(allopenStr.indexOf(':') + 1).trim() as String
BigDecimal allopenValueX = new BigDecimal(allopenValue)
BigDecimal allopenValueZero = allopenValueX.stripTrailingZeros()
String allopenValueZero1 = allopenValueZero.toPlainString()
log.debug("累计开发网点:"+allopenValueZero1)//网点数据剥离
def target = want.get(8) as Map //目标数据
def targetStr = target.'value' as String
def targetValue = targetStr.substring(targetStr.indexOf(':') + 1).trim() as String
BigDecimal targetValueX = new BigDecimal(targetValue)
BigDecimal targetValueZero = targetValueX.stripTrailingZeros()
String targetValueZero1 = targetValueZero.toPlainString()
log.debug("本月目标:"+targetValueZero1)//目标值剥离
def diffrence = want.get(9) as Map // 任务数据
def diffrenceStr = diffrence.'value' as String
def diffrenceValue = diffrenceStr.substring(diffrenceStr.indexOf(':') + 1).trim() as String
BigDecimal diffrenceValueX = new BigDecimal(diffrenceValue)
BigDecimal diffrenceValueZero = diffrenceValueX.stripTrailingZeros()
String diffrenceValueZero1 = diffrenceValueZero.toPlainString()
log.debug("任务差额:"+diffrenceValueZero1)//任务值剥离
/转换方法集
if( diffrenceValueZero>0){
List receiverIds = [wantownerno]
Notice notice = Notice.defaultNotice()
def (Boolean error3, String data3, String errorMessage3) = Fx.message.sendNotice("本月客户经理网点任务提醒","【${PDmap.name}】\n本月任务为:【${targetValueZero1}】家网点\n当前累计开发:【${allopenValueZero1}】家网点\n当月距离网点目标还有【${diffrenceValueZero1}】家,请加油!",receiverIds, notice)
if (error3) {
log.info("失败:"+errorMessage3)
} else {
log.info("推送成功:"+data3)
}
}else{
log.info("当前用户已达到目标,不进行推送");
}//此处判断任务完成情况,到此结束。
}//if data 判断
}//if wantownerjob判断
}//ret.each循环