/**
* @author QiaoChu
* @codeName 根据银行回款信息自动回填信息
* @description 根据银行回款信息自动回填信息
* @函数需求编号
*/
//原始银行回款信息
String repayment_info = context.data["repayment_info__c"] as String
//String repayment_info = "贵公司尾号3333的账户11月23日10时16分货款收入人民币9999.00元,可用余额123456.78元。对方户名:中国钢铁分公司。【建设银行】"
//String repayment_info ="贵账户*6666于2024年11月24日10:18在北京分行 汇款入账 转入资金88888.00元,现余额876543.21元,对方户名:中国建筑有限公司,附言:货款【交通银行】";
//String repayment_info = "【中国农业银行】尊敬的客户:中国物业有限公司于11月25日15:00向贵公司的农行账户(尾号7777)完成转入交易,金额为7777.00,余额为8886666.99。"
//String repayment_info = "贵单位尾号为8888账户26日09:10工商银行收入(跨行)78,566元,当前账户余额为999,888.55元。详情请咨询网点对公客户经理【工商银行】";
// 获取银行回款信息
def resultInfo = extractRepaymentInfo(repayment_info)
// 客户名称
String payer_account_name = resultInfo['payer_account_name']
// 到款金额
String amount_received = resultInfo['amount_received']
// 付款方银行
String payer_bank = resultInfo['payer_bank']
// 收款账户尾号
String account_suffix = resultInfo['account_suffix']
// 交易日期
Date transaction_date;
// 交易日期时间戳
String transDate;
String trans_date = resultInfo['transaction_date'] as String
if (trans_date != "") {
transaction_date = Date.of(trans_date)
transDate = transaction_date.toTimestamp() as String
}
// 收款账户
String account_val = "";
switch (account_suffix) {
case "3333":
account_val = "1";
break;
case "6666":
account_val = "2";
break;
case "7777":
account_val = "3";
break;
case "8888":
account_val = "4";
break;
default:
break;
}
log.info("客户名称: ${payer_account_name}")
log.info("到款金额: ${amount_received}")
log.info("付款方银行: ${payer_bank}")
log.info("收款账户尾号: ${account_suffix}")
log.info("交易日期: ${transaction_date}")
log.info("交易日期时间戳: ${transDate}")
log.info("收款账户: ${account_val}")
def extractRepaymentInfo(String info) {
String payer_account_name = ''
String amount_received = ''
String payer_bank = ''
String account_suffix = ''
String transaction_date = ''
// 根据银行类型提取不同信息
if (info =~ /(?s).*【建设银行】.*/) {
def matchAccountName = (info =~ /(?s).*对方户名:(.+?)。.*/)
def matchAmount = (info =~ /(?s).*收入人民币(.+?)元.*/)
def matchAccountSuffix = (info =~ /(?s).*尾号(\d+).*/)
def matchDate = (info =~ /(?s).*账户(\d+月\d+日).*/)
if (matchAccountName.find()) {
payer_account_name = matchAccountName.group(1).trim() // 使用 group(1)
}
if (matchAmount.find()) {
amount_received = matchAmount.group(1).trim() // 使用 group(1)
}
if (matchAccountSuffix.find()) {
account_suffix = matchAccountSuffix.group(1).trim() // 使用 group(1)
}
if (matchDate.find()) {
String rawDate = matchDate.group(1).trim() // 使用 group(1)
//获取当前年份
Date nowDate = Date.now()
def currentYear = nowDate.year as String
def formattedDate = "${currentYear}-${rawDate}".replaceAll("月", "-").replaceAll("日", "")
transaction_date = formatDateString(formattedDate)
}
payer_bank = "建设银行"
} else if (info =~ /(?s).*【工商银行】.*/) {
def matchAccountSuffix = (info =~ /(?s).*尾号为(\d+).*/)
def matchAmount = (info =~ /(?s).*收入(跨行)([\d,]+)元.*/)
def matchDate = (info =~ /(?s).*账户(\d+)日.*/)
payer_account_name = ''
if (matchAccountSuffix.find()) {
account_suffix = matchAccountSuffix.group(1).trim()
}
if (matchAmount.find()) {
amount_received = matchAmount.group(1).replace(",", "").trim()
}
if (matchDate.find()) {
def day = matchDate.group(1).trim()
Date nowDate = Date.now()
def currentYear = nowDate.year as String
def currentMonth = nowDate.month as String
def formattedDate = "${currentYear}-${currentMonth}-${day}"
transaction_date = formattedDate
}
payer_bank = "工商银行"
} else if (info =~ /(?s).*【中国农业银行】.*/) {
def matchAccountName = (info =~ /(?s).*尊敬的客户:([^,]+).*于.*/)
def matchAmount = (info =~ /(?s).*金额为([^,]+).*/)
def matchAccountSuffix = (info =~ /(?s).*尾号(\d+).*/)
def matchDate = (info =~ /(?s).*于([^日]+)日.*/)
if (matchAccountName.find()) {
payer_account_name = matchAccountName.group(1).trim() // 使用 group(1)
}
if (matchAmount.find()) {
amount_received = matchAmount.group(1).trim() // 使用 group(1)
}
if (matchAccountSuffix.find()) {
account_suffix = matchAccountSuffix.group(1).trim() // 使用 group(1)
}
if (matchDate.find()) {
String rawDate = matchDate.group(1).trim() // 使用 group(1)
Date nowDate = Date.now()
def currentYear = nowDate.year as String
def formattedDate = "${currentYear}-${rawDate}".replaceAll("月", "-").replaceAll("日", "")
transaction_date = formattedDate
}
payer_bank = "中国农业银行"
} else if (info =~ /(?s).*【交通银行】.*/) {
def matchAccountName = (info =~ /对方户名:([^,]+)/)
def matchAmount = (info =~ /(?s).*转入资金?(.+?)元.*/)
def matchAccountSuffix = (info =~ /(?s).*账户\*(\d+).*/)
def matchDate = (info =~ /(?s).*于(\d{4}年\d{1,2}月\d{1,2}日).*/)
if (matchAccountName.find()) {
payer_account_name = matchAccountName.group(1).trim().replace("【交通银行】", "") // 使用 group(1)
}
if (matchAmount.find()) {
amount_received = matchAmount.group(1).trim().replaceAll("人民币", "") // 使用 group(1)
}
if (matchAccountSuffix.find()) {
account_suffix = matchAccountSuffix.group(1).trim() // 使用 group(1)
}
if (matchDate.find()) {
// 格式化日期
String originalDate = matchDate.group(1).trim() // 使用 group(1)
transaction_date = originalDate.replaceAll(/(\d{4})年(\d{1,2})月(\d{1,2})日/, '$1-$2-$3')
}
payer_bank = "交通银行"
} else {
// 对于不支持的银行类型,返回空字符串
payer_account_name = ''
amount_received = ''
account_suffix = ''
transaction_date = ''
payer_bank = ''
}
// 使用 Map 返回结果
return [
payer_account_name: payer_account_name,
amount_received : amount_received,
payer_bank : payer_bank,
account_suffix : account_suffix,
transaction_date : transaction_date
]
}
def formatDateString(String dateStr) {
def parts = dateStr.split("-")
if (parts.size() == 3) {
def year = parts[0]
def month = parts[1].padLeft(2, '0')
def day = parts[2].padLeft(2, '0')
return "${year}-${month}-${day}"
}
return dateStr
}
UIEvent event = UIEvent.build(context) {
//主对象修改数据
editMaster(
"payer_account_name": payer_account_name,
"amount_received": amount_received,
"payer_bank": payer_bank,
"transaction_date": transDate,
"account_bank": account_val
)
}
return event
参考:
1、UI事件-数据更新事件
配置步骤 | 纷享销客 | 帮助中心
2、Groovy代码-数据更新事件
Groovy代码示例 | 纷享销客 | 帮助中心
3、Date数据类型
Date类型 | 纷享销客 | 帮助中心