From a5eba12ed5c8214f0a334a40309837fd000a4fdd Mon Sep 17 00:00:00 2001 From: wjj <2069666735@qq.com> Date: Thu, 4 Jun 2026 15:55:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B5=81=E6=B0=B4=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=90=86=E8=B4=A2=E5=89=94=E9=99=A4=E4=B8=8E=E6=8F=90?= =?UTF-8?q?=E7=8E=B0=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/CcdiBankTagAnalysisMapper.java | 4 +- .../impl/BankTagRuleConfigResolver.java | 1 + .../service/impl/CcdiBankTagServiceImpl.java | 4 +- .../project/CcdiBankTagAnalysisMapper.xml | 121 ++++++++++++++---- ...04-bank-tag-financial-product-exclusion.md | 38 ++++++ ...4-bank-tag-wechat-alipay-withdraw-rules.md | 42 ++++++ ...deposit-and-gambling-keyword-adjustment.md | 32 +++++ 7 files changed, 213 insertions(+), 29 deletions(-) create mode 100644 docs/reports/implementation/2026-06-04-bank-tag-financial-product-exclusion.md create mode 100644 docs/reports/implementation/2026-06-04-bank-tag-wechat-alipay-withdraw-rules.md create mode 100644 docs/reports/implementation/2026-06-04-large-cash-deposit-and-gambling-keyword-adjustment.md diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java index 6559dd54..fb1c67e8 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapper.java @@ -272,9 +272,11 @@ public interface CcdiBankTagAnalysisMapper { * 微信支付宝提现超额 * * @param projectId 项目ID + * @param amountThreshold 提现金额阈值 * @return 对象命中结果 */ - List selectWithdrawAmtObjects(@Param("projectId") Long projectId); + List selectWithdrawAmtObjects(@Param("projectId") Long projectId, + @Param("amountThreshold") BigDecimal amountThreshold); /** * 工资快速转出 diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolver.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolver.java index e7128b04..7558397b 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolver.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/BankTagRuleConfigResolver.java @@ -34,6 +34,7 @@ public class BankTagRuleConfigResolver { Map.entry("FOREX_BUY_AMT", Set.of("SINGLE_PURCHASE_AMOUNT")), Map.entry("FOREX_SELL_AMT", Set.of("SINGLE_SETTLEMENT_AMOUNT")), Map.entry("WITHDRAW_CNT", Set.of("WITHDRAW_CNT")), + Map.entry("WITHDRAW_AMT", Set.of("WITHDRAW_AMT")), Map.entry("STOCK_TFR_LARGE", Set.of("STOCK_TFR_LARGE")), Map.entry("LARGE_STOCK_TRADING", Set.of("STOCK_TFR_LARGE")), Map.entry("MULTI_PARTY_GAMBLING_TRANSFER", Set.of("MULTI_PARTY_AMT_MIN", "MULTI_PARTY_AMT_MAX")), diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java index 1665f81f..9ada2cbc 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankTagServiceImpl.java @@ -285,7 +285,9 @@ public class CcdiBankTagServiceImpl implements ICcdiBankTagService { case "WITHDRAW_CNT" -> analysisMapper.selectWithdrawCntObjects( projectId, toInteger(config.getThresholdValue("WITHDRAW_CNT")) ); - case "WITHDRAW_AMT" -> analysisMapper.selectWithdrawAmtObjects(projectId); + case "WITHDRAW_AMT" -> analysisMapper.selectWithdrawAmtObjects( + projectId, toBigDecimal(config.getThresholdValue("WITHDRAW_AMT")) + ); case "SALARY_QUICK_TRANSFER" -> analysisMapper.selectSalaryQuickTransferObjects(projectId); case "SALARY_UNUSED" -> analysisMapper.selectSalaryUnusedObjects(projectId); case "SUDDEN_ACCOUNT_CLOSURE" -> analysisMapper.selectSuddenAccountClosureObjects(projectId); diff --git a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml index 2b94aed9..49192656 100644 --- a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml +++ b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml @@ -146,6 +146,60 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) + + not ( + ( + ( + IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '理财|理财产品|结构.*存款|结构性存款|理财.*托管|余额宝|朝朝宝|朝朝盈|现金宝|金添利|定存宝' + or IFNULL(bs.USER_MEMO, '') REGEXP '理财|理财产品|结构.*存款|结构性存款|本金划出|本金返还|余额宝|朝朝宝|朝朝盈|现金宝|金添利|定存宝|整存整取|智能存款|通知存款' + or IFNULL(bs.CASH_TYPE, '') REGEXP '受托理财|表内理财|购买理财|理财购买|理财扣款|理财申购|理财认购|结构性存款|存款产品|朝朝宝' + or ( + IFNULL(bs.USER_MEMO, '') REGEXP '申购|认购|赎回' + and IFNULL(bs.USER_MEMO, '') REGEXP '理财|产品|存款|本金|余额宝|朝朝宝|朝朝盈' + ) + ) + and IFNULL(bs.USER_MEMO, '') NOT REGEXP '财务|经理|代理财税' + and IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') NOT LIKE '%代理财政%' + ) + ) + + + + ( + ( + bs.BANK in ('ALIPAY', 'WECHAT') + and ( + IFNULL(bs.CASH_TYPE, '') LIKE '%提现%' + or IFNULL(bs.USER_MEMO, '') LIKE '%提现%' + or IFNULL(bs.USER_MEMO, '') LIKE '%转出到%银行%' + or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%提现%' + or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%转出到%银行%' + ) + ) + or ( + ( + bs.BANK is null + or bs.BANK = '' + or bs.BANK not in ('ALIPAY', 'WECHAT') + ) + and ( + IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '支付宝|Alipay|财付通|Tenpay|微信|wechat|WeChat|微信零钱' + or IFNULL(bs.USER_MEMO, '') REGEXP '支付宝|Alipay|财付通|Tenpay|微信|wechat|WeChat|微信零钱' + or IFNULL(bs.CASH_TYPE, '') REGEXP '支付宝|Alipay|财付通|Tenpay|微信|wechat|WeChat|微信零钱' + ) + and ( + IFNULL(bs.CASH_TYPE, '') LIKE '%提现%' + or IFNULL(bs.USER_MEMO, '') LIKE '%提现%' + or IFNULL(bs.USER_MEMO, '') LIKE '%转出到%银行%' + or IFNULL(bs.USER_MEMO, '') LIKE '%提现到账%' + or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%提现%' + or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%转出到%银行%' + or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%提现到账%' + ) + ) + ) + + select staff.id_card as subjectCertNo, @@ -200,6 +254,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" IFNULL(bs.USER_MEMO, '') REGEXP '(购|买).*房|(购|买).*车|车款|房款|首付|(房|车).*贷' or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '汽车销售|汽车金融|4S店|汽贸|车行|房地产|置业|置地|地产|房产|不动产|链家|贝壳|我爱我家|房管局' ) + and and ( exists ( select 1 @@ -231,6 +286,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" IFNULL(bs.USER_MEMO, '') REGEXP '税务|缴税|税款' or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '税务|税务局|国库|国家金库|财政' ) + and and ( exists ( select 1 @@ -268,6 +324,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and IFNULL(bs.LE_ACCOUNT_NAME, '') <> IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') and relation.person_id is null and + and @@ -373,6 +425,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where bs.project_id = #{projectId} and IFNULL(bs.AMOUNT_CR, 0) > #{amountThreshold} and + and ) source group by source.object_key, source.cash_date having COUNT(1) > #{frequencyThreshold} @@ -396,8 +449,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" or IFNULL(bs.USER_MEMO, '') REGEXP '转帐|转账|汇入|转存|红包|汇款|网转|转入' or IFNULL(bs.CASH_TYPE, '') REGEXP '转帐|转账|汇入|转存|红包|汇款|网转|转入' ) - and IFNULL(bs.USER_MEMO, '') NOT LIKE '%款%' and IFNULL(bs.LE_ACCOUNT_NAME, '') <> IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') + and and ( exists ( select 1 @@ -644,8 +697,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where bs.project_id = #{projectId} and IFNULL(bs.AMOUNT_DR, 0) > 0 and ( - IFNULL(bs.USER_MEMO, '') REGEXP '游戏|抖币|体彩|福彩|彩票|赌|球|外围|博彩|六合|时时彩|赛车|赌场|筹码|盘口|返水|洗码|庄家|闲家|百家乐|斗牛|炸金花|牌九|麻将|捕鱼|电子游艺|投注' - or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '游戏|抖币|体彩|福彩|彩票|赌|球|外围|博彩|六合|时时彩|赛车|赌场|筹码|盘口|返水|洗码|庄家|闲家|百家乐|斗牛|炸金花|牌九|麻将|捕鱼|电子游艺|投注' + IFNULL(bs.USER_MEMO, '') REGEXP '游戏|抖币|体彩|福彩|彩票|赌博|赌球|下注|投注|球赛投注|外围|博彩|六合|时时彩|赛车|赌场|筹码|盘口|返水|洗码|庄家|闲家|百家乐|斗牛|炸金花|牌九|麻将|捕鱼|电子游艺|VIP666|USDT下注' + or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '游戏|抖币|体彩|福彩|彩票|赌博|赌球|下注|投注|球赛投注|外围|博彩|六合|时时彩|赛车|赌场|筹码|盘口|返水|洗码|庄家|闲家|百家乐|斗牛|炸金花|牌九|麻将|捕鱼|电子游艺|VIP666|USDT下注' ) @@ -1205,6 +1258,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" or IFNULL(bs.USER_MEMO, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|资金存管|第三方存管|银证转账|银证|证转银|银转证' or IFNULL(bs.CASH_TYPE, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|资金存管|第三方存管|银证转账|银证|证转银|银转证' ) + and select 'STAFF_ID_CARD' AS objectType, - '' AS objectKey, - '占位SQL,待补充真实规则' AS reasonDetail - from ccdi_bank_statement bs - where 1 = 0 + t.objectKey AS objectKey, + CONCAT( + '单日微信/支付宝提现到账金额 ', CAST(t.withdrawAmount AS CHAR), + ' 元,超过阈值 ', CAST(#{amountThreshold} AS CHAR), + ' 元,交易日:', t.transDate + ) AS reasonDetail + from ( + select + staff.id_card AS objectKey, + LEFT(TRIM(bs.TRX_DATE), 10) AS transDate, + ROUND(SUM(IFNULL(bs.AMOUNT_CR, 0)), 2) AS withdrawAmount + from ccdi_bank_statement bs + inner join ccdi_base_staff staff on staff.id_card = bs.cret_no + where bs.project_id = #{projectId} + and IFNULL(bs.AMOUNT_CR, 0) > 0 + and + group by staff.id_card, LEFT(TRIM(bs.TRX_DATE), 10) + having SUM(IFNULL(bs.AMOUNT_CR, 0)) > #{amountThreshold} + ) t