diff --git a/.scratch/customer-demo-ref/HANDOFF-2026-09-12.md b/.scratch/customer-demo-ref/HANDOFF-2026-09-12.md new file mode 100644 index 0000000..afb354a --- /dev/null +++ b/.scratch/customer-demo-ref/HANDOFF-2026-09-12.md @@ -0,0 +1,61 @@ +# HANDOFF — customer-demo-ref wayfinder 全图收官(2026-09-12) + +> 写给接续 agent:地图已 **done**,无剩余开发工作。本文档只覆盖「状态快照 + 用户回来后的可能动作 + 复跑速查 + 本会话新踩的坑」。细节一律引用落盘工件,不重复。 + +## 1. 状态快照(一句话) + +`e:\code\crm-backend-matt\.scratch\customer-demo-ref\` 的 15 票全部 resolved,map.md Status=done;票 14 冒烟第八跑 **40/0 ALL_PASS(176.4s)**;票 15 四标准自检与双仓清单已落盘;**唯一待办 = 用户审查双仓未提交变更并自行提交**(agent 纪律不碰 git)。 + +- 权威状态:`map.md`(Decisions 15 行 + Destination 验收对照块) +- 各票结论:`issues/01..15-*.md` 的 `## Answer` 节(全部已写) +- 验收自检:`assets/acceptance-selfcheck.md`(四标准逐条 ✓) +- 未提交清单:`assets/uncommitted-changes.md` + +## 2. 本段会话(收尾段)完成了什么 + +1. **票 14 第七/八轮**:诊断脚本 `demo/_t14d7.py` 实锤三大根因(seed 联系人职务不在字典→batchEdit 被校验拦截;quickAdd 后 _contacts 旧快照;pool+ASSIGNED 视图与公海口径恒互斥)→ 第七轮 39/1;第八轮实锤 **demo onclick 陷阱**并修复 → 40/0 全绿。全程记录在 `issues/14-smoke-script.md` Answer。 +2. **票 15**:`assets/acceptance-selfcheck.md` + `assets/uncommitted-changes.md` 落盘 + map 收口(Status=done、验收对照块、Not yet specified 清空、Decisions 补 09/10/11/14 四行)。 +3. **环境**:重建 fat jar 并重启 8080(旧 jar 落后源码导致 project/page 404);构建通道与 jar 文件锁坑已沉淀到记忆「crm-backend-matt 构建与脚本执行通道」。 + +## 3. 用户回来后最可能的动作(按概率排序) + +| 动作 | 做法 | +|------|------| +| 审查未提交变更 | 打开 `assets/uncommitted-changes.md`:backend 51 行全属 `.scratch/customer-demo-ref`(M10+??37,其中诊断脚本/日志标注可删);文档仓 `E:\code\crm-api-docs` 仅 2 个前序迁移遗留目录。**提交由用户执行** | +| 试跑 Demo | 直接浏览器打开 `demo/index.html?api=http://localhost:8080`(服务若已停,见 §4 起服);登录页 uid 填 `739564171091247104`(admin 罗伟健)debug 直登;验收指北同 `assets/acceptance-selfcheck.md` §4 | +| 复跑冒烟 | 见 §4 速查;脚本幂等(sweep→seed 自举),可重复执行 | +| 处置 8080 服务 | 本会话起的服务仍在后台运行(新 jar);若不需要可 taskkill,不影响任何落盘工件 | + +## 4. 复跑速查(冒烟/起服) + +- 解释器(唯一可用组合):`E:\code\crm-backend-matt\.scratch\customer-e2e\.venv10\Scripts\python.exe -X utf8 .scratch/customer-demo-ref/demo/smoke.py`(playwright+pymysql+openpyxl 齐备;长任务**必须前台跑**,后台进程树会被会话压缩杀死)。 +- 起服:`SPRING_PROFILES_ACTIVE=verify` + MinIO env(AK/SK 凭据已内置 `crm-app/src/main/resources/application.yml` 默认值,无需明文传入)+ `java -jar crm-app\target\crm-app-1.0.0-SNAPSHOT.jar`(corretto-17)。 +- DB=远程共享库(凭据同上内置);seed 幂等自举(sweep 先于 ensure_seeds,e2c-dr\* 用后硬删;2d 把查重模式归位 FUZZY(2));报告落 `demo/smoke-report.json`。 +- **fat jar 重建**:先 taskkill 占 8080 的 java(文件锁→repackage rename 失败),删 target 旧 jar,再走 IDEA bundled mvn(沙箱需越权;通道详见记忆「crm-backend-matt 构建与脚本执行通道」)。 + +## 5. 本会话新踩/复用的坑(未沉淀进记忆的部分) + +- **demo onclick 陷阱**:`dlgOpen` 把 `fn` 直接挂 `btn.onclick` → 浏览器把 PointerEvent 作为首参传入。任何 `async function doX(confirmSimilar)` 形态的按钮回调都会把事件对象序列化进表单(如 `confirmSimilar=[object PointerEvent]` → 后端 400)。修法=首参防御:`(cf === true || cf === 'true') ? true : undefined`(qs 会跳过 undefined)。doEdit/doCreate 已修;**给新对话框按钮回调加参数时必踩,先想这个**。 +- **edit 的 L2 needConfirm 假成功**:后端 edit 相似命中时返回 code=0 + `needConfirm:true` 不落库——demo 侧必须显式处理(doEdit 已补 simbox 分支,同 doCreate 契约),否则「toast 成功但 DB 没变」。 +- **pool 工作台视图互斥**:`fViewType` 默认 ASSIGNED 与公海 owner IS NULL 恒冲突(CustomerMapper L83)——demo pool 页签在默认视图下恒空,冒烟侧先呈现现象再清视图。 +- **seed 自举顺序**:sweep 必须先于 ensure_seeds,否则上轮 seed 被 find 命中不重建、随即被 sweep 清掉,整轮查重基线缺失(冒烟步 9/27 假阴)。 +- **中文 URL**:任何拼接中文查询参数必须 `urllib.parse.quote`(本 effort 已三次踩)。 +- **诊断脚本临时文件**:`demo/_t14d7.py`(DB 职务+pool+edit 三合一取证)保留作证据,其余 `_quickcheck*/_q.py` 类可删。 + +## 6. Suggested skills(按场景) + +| 场景 | skill | +|------|-------| +| 用户要求把本次成果同步成 Bruno 文档/新 .bru | `bruno-sync`(注意 config sourceRoots 需含目标模块目录) | +| 用户要继续下一张 wayfinder 地图/大块工作 | `wayfinder` | +| 用户报 demo/后端行为异常要求诊断 | `diagnosing-bugs`;浏览器层验证用 `webapp-testing` | +| 用户要求 review 本次全部改动 | `code-review`(review_scope=explicit_target,指定 `.scratch/customer-demo-ref`) | +| 需要看图/截图(非多模态会话) | `vision-mcp`(AGENTS.md 有调用规范) | + +## 7. 关键文件索引 + +- 地图/票/资产:`e:\code\crm-backend-matt\.scratch\customer-demo-ref\`(map.md、issues/、assets/、demo/) +- 冒烟报告:`demo/smoke-report.json`(第八跑 40/0 + api_urls 91 路径 + http_fails 空) +- 取证脚本:`demo/_t14d7.py`、`demo/_run7.log`、`demo/_run8.log`、`demo/_jarbuild.log` +- 契约权威:`.scratch/customer-module/API-SUMMARY.md`(85 端点);原型树:`.scratch/api-docs-reorg/lanhu-tree-v29.md` +- 缺陷台账:`.scratch/customer-frontend-handover/gap-report.md` + `customer-defectfix/FIX-REPORT.md` diff --git a/.scratch/customer-demo-ref/_quickcheck.py b/.scratch/customer-demo-ref/_quickcheck.py new file mode 100644 index 0000000..ceb8f0d --- /dev/null +++ b/.scratch/customer-demo-ref/_quickcheck.py @@ -0,0 +1,22 @@ +import json +from playwright.sync_api import sync_playwright + +URL = 'file:///E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/index.html' +errors = [] +with sync_playwright() as p: + b = p.chromium.launch() + pg = b.new_page(viewport={'width': 1720, 'height': 1080}) + pg.on('pageerror', lambda e: errors.append(str(e))) + pg.goto(URL) + pg.wait_for_timeout(800) + n_sub = pg.eval_on_selector_all('#detailPanel .subtabs button', 'els => els.length') + projects_btn = pg.eval_on_selector_all('#detailPanel .subtabs button[data-s="projects"]', 'els => els.length') + g5 = pg.eval_on_selector_all('[data-defect="G5"]', 'els => els.length') + # 打开缺陷面板,统计台账行数 + pg.click('[data-defect-panel]') + pg.wait_for_timeout(300) + panel_rows = pg.eval_on_selector_all('[data-defect-row]', 'els => els.length') + pg.screenshot(path='E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/shots/t11-quick-detail.png') + b.close() +print(json.dumps({'pageerror': errors, 'subtabs': n_sub, 'projects_tab': projects_btn, + 'g5_badge': g5, 'panel_rows': panel_rows}, ensure_ascii=False)) diff --git a/.scratch/customer-demo-ref/_quickcheck12.py b/.scratch/customer-demo-ref/_quickcheck12.py new file mode 100644 index 0000000..f781ccd --- /dev/null +++ b/.scratch/customer-demo-ref/_quickcheck12.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +"""票 12 快验:联系人顶级菜单 + 商机侧三入口(UI 层 + 登录链路尽力)""" +import io, json, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +from playwright.sync_api import sync_playwright + +URL = 'file:///E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/index.html' +errors = [] +out = {} +with sync_playwright() as p: + b = p.chromium.launch() + pg = b.new_page(viewport={'width': 1720, 'height': 1080}) + pg.on('pageerror', lambda e: errors.append(str(e))) + pg.goto(URL) + pg.wait_for_timeout(800) + + # 1) nav tabs = 6,联系人按钮存在 + out['tabs'] = pg.eval_on_selector_all('nav.tabs button', 'els => els.map(e => e.dataset.tab)') + # 2) 切联系人 tab + pg.click('nav.tabs button[data-tab="contacts"]') + pg.wait_for_timeout(300) + out['contacts_section_visible'] = pg.eval_on_selector('#tab-contacts', 'e => e.style.display !== "none"') + out['g5_badge'] = pg.eval_on_selector_all('#tab-contacts [data-defect="G5"]', 'els => els.length') + out['cform_options'] = pg.eval_on_selector('#cForm', 'e => e.options.length') + # 3) 未登录 hint(尽力;登录后此值会被覆盖) + out['ct_hint_before_login'] = pg.eval_on_selector('#ctPageInfo', 'e => e.textContent') + # 4) 登录链路(远程 debug token;失败不阻塞 UI 断言) + try: + pg.fill('#uidInput', '739564171091247104') + pg.evaluate('loginByUid()') + pg.wait_for_timeout(2500) + out['token_set'] = pg.evaluate('!!localStorage.getItem("e2c_token")') + if out['token_set']: + pg.click('nav.tabs button[data-tab="contacts"]') + pg.evaluate('loadContactPage()') + pg.wait_for_timeout(2000) + out['ct_rows'] = pg.eval_on_selector_all('#ctPageBody tr', 'els => els.length') + out['ct_head'] = pg.eval_on_selector('#ctPageHead', 'e => e.textContent.slice(0, 120)') + out['ct_info'] = pg.eval_on_selector('#ctPageInfo', 'e => e.textContent') + out['phone_masked'] = pg.evaluate('''() => { + const tds = [...document.querySelectorAll('#ctPageBody td')]; + const phone = tds.map(t => t.textContent).find(t => /^\\d{3}\\*{4}\\d{4}$/.test(t)); + return phone || null; + }''') + # 行点开详情弹窗(contact/detail 回显 + G6 空态) + has_row = pg.eval_on_selector_all('#ctPageBody tr td.row', 'els => els.length') + if has_row: + pg.click('#ctPageBody tr td.row') + pg.wait_for_timeout(1200) + out['detail_dlg'] = pg.eval_on_selector('dialog#dlg[open]', 'e => !!e') + out['ct_info_kv'] = pg.eval_on_selector_all('#ctPaneInfo .kv', 'els => els.length') + pg.click('#ctTabBtn1') + pg.wait_for_timeout(200) + out['g6_log'] = pg.eval_on_selector_all('#ctPaneLog[data-defect="G6"]', 'els => els.length') + pg.keyboard.press('Escape') + pg.wait_for_timeout(200) + except Exception as e: + out['login_error'] = str(e)[:200] + # 5) 商机侧三入口 UI + pg.click('nav.tabs button[data-tab="list"]') + pg.wait_for_timeout(200) + out['opp_entry_buttons'] = pg.evaluate('''() => ({ + quick: [...document.querySelectorAll('button')].some(b => b.textContent.includes('快建客户')), + search3d: [...document.querySelectorAll('button')].some(b => b.textContent.includes('三维搜索')), + })''') + # 快建弹窗打开(7 必填控件) + pg.evaluate('dlgQuickCreate()') + pg.wait_for_timeout(200) + out['quick_fields'] = pg.evaluate('''() => ['qName','qType','qProv','qCity','qInd','qStar','qRStar'].filter(id => !!document.getElementById(id)).length''') + pg.keyboard.press('Escape') + pg.wait_for_timeout(200) + # 全局搜索弹窗 + pg.click('nav.tabs button[data-tab="contacts"]') + pg.evaluate('dlgContactSearch()') + pg.wait_for_timeout(200) + out['search_dlg'] = pg.eval_on_selector('dialog#dlg[open]', 'e => !!e') + pg.keyboard.press('Escape') + pg.screenshot(path='E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/shots/t12-quick-contacts.png', full_page=False) + b.close() +out['pageerror'] = errors +print(json.dumps(out, ensure_ascii=False, indent=1)) diff --git a/.scratch/customer-demo-ref/_quickcheck12b.py b/.scratch/customer-demo-ref/_quickcheck12b.py new file mode 100644 index 0000000..1bad020 --- /dev/null +++ b/.scratch/customer-demo-ref/_quickcheck12b.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +"""票 12 补验:contact/search + customer/search 真请求(只读端点)""" +import io, json, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +from playwright.sync_api import sync_playwright + +URL = 'file:///E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/index.html' +errors = [] +out = {} +with sync_playwright() as p: + b = p.chromium.launch() + pg = b.new_page(viewport={'width': 1720, 'height': 1080}) + pg.on('pageerror', lambda e: errors.append(str(e))) + pg.goto(URL) + pg.wait_for_timeout(600) + pg.fill('#uidInput', '739564171091247104') + pg.evaluate('loginByUid()') + pg.wait_for_timeout(2500) + # contact/search:keyword=张关键(seed 联系人) + r1 = pg.evaluate('''async () => { + const arr = await api('/api/customer/contact/search?keyword=' + encodeURIComponent('张关键') + '&limit=20'); + return { n: (arr || []).length, first: arr && arr[0] ? { name: arr[0].name, phone: arr[0].phone, customerName: arr[0].customerName, source: arr[0].source } : null }; + }''') + out['contact_search'] = r1 + # customer/search:keyword=e2c 三维模糊 + excludeCustomerIds 重复键 + r2 = pg.evaluate('''async () => { + const d = await api('/api/customer/search', { method: 'POST', body: 'keyword=e2c&archiveStatus=1&excludeCustomerIds=750844487390986240' }); + return { total: d && d.total, row0: d && d.content && d.content[0] ? { customerNo: d.content[0].customerNo, ownerName: d.content[0].ownerName, customerStage: d.content[0].customerStage } : null }; + }''') + out['customer_search'] = r2 + b.close() +out['pageerror'] = errors +print(json.dumps(out, ensure_ascii=False, indent=1)) diff --git a/.scratch/customer-demo-ref/_quickcheck12c.py b/.scratch/customer-demo-ref/_quickcheck12c.py new file mode 100644 index 0000000..3e6f3d6 --- /dev/null +++ b/.scratch/customer-demo-ref/_quickcheck12c.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +"""票 12 补验 r2:取 contact/page 首行真值,回查 contact/search/customer/search""" +import io, json, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +from playwright.sync_api import sync_playwright + +URL = 'file:///E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/index.html' +errors = [] +out = {} +with sync_playwright() as p: + b = p.chromium.launch() + pg = b.new_page(viewport={'width': 1720, 'height': 1080}) + pg.on('pageerror', lambda e: errors.append(str(e))) + pg.goto(URL) + pg.wait_for_timeout(600) + pg.fill('#uidInput', '739564171091247104') + pg.evaluate('loginByUid()') + pg.wait_for_timeout(2500) + out['page0'] = pg.evaluate('''async () => { + const d = await api('/api/customer/contact/page?current=1&size=3'); + return (d && d.content || []).map(r => ({ name: r.name, phone: r.phone, source: r.source, customerName: r.customerName })); + }''') + out['search_by_row_name'] = pg.evaluate('''async () => { + const d = await api('/api/customer/contact/page?current=1&size=1'); + const nm = d && d.content && d.content[0] && d.content[0].name; + if (!nm) return 'no-row'; + const arr = await api('/api/customer/contact/search?keyword=' + encodeURIComponent(nm) + '&limit=20'); + return { kw: nm, n: (arr || []).length, phone0: arr && arr[0] ? arr[0].phone : null }; + }''') + out['ws_page0'] = pg.evaluate('''async () => { + const d = await api('/api/customer/workspace/page', { method: 'POST', body: 'workspace=mine¤t=1&size=3&archiveStatus=1' }); + return { total: d && d.total, rows: (d && d.content || []).map(r => ({ customerName: r.customerName, ownerNameSnapshot: r.ownerNameSnapshot })) }; + }''') + b.close() +out['pageerror'] = errors +print(json.dumps(out, ensure_ascii=False, indent=1)) diff --git a/.scratch/customer-demo-ref/_quickcheck12d.py b/.scratch/customer-demo-ref/_quickcheck12d.py new file mode 100644 index 0000000..6978e29 --- /dev/null +++ b/.scratch/customer-demo-ref/_quickcheck12d.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +"""票 12 补验 r3:customer/search 用库内真名(三维模糊含联系人名)""" +import io, json, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +from playwright.sync_api import sync_playwright + +URL = 'file:///E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/index.html' +errors = [] +out = {} +with sync_playwright() as p: + b = p.chromium.launch() + pg = b.new_page(viewport={'width': 1720, 'height': 1080}) + pg.on('pageerror', lambda e: errors.append(str(e))) + pg.goto(URL) + pg.wait_for_timeout(600) + pg.fill('#uidInput', '739564171091247104') + pg.evaluate('loginByUid()') + pg.wait_for_timeout(2500) + out['by_customer_name'] = pg.evaluate('''async () => { + const d = await api('/api/customer/search', { method: 'POST', body: 'keyword=' + encodeURIComponent('佛山季华铝业') }); + return { total: d && d.total, row0: d && d.content && d.content[0] ? { customerNo: d.content[0].customerNo, customerType: d.content[0].customerType, ownerDeptId: d.content[0].ownerDeptId, archiveStatus: d.content[0].archiveStatus } : null }; + }''') + out['by_contact_name_3d'] = pg.evaluate('''async () => { + // 三维模糊验证:用联系人姓名「梁诗敏」搜——应命中其所属客户 + const d = await api('/api/customer/search', { method: 'POST', body: 'keyword=' + encodeURIComponent('梁诗敏') }); + return { total: d && d.total, name0: d && d.content && d.content[0] ? d.content[0].customerName : null }; + }''') + out['exclude_dup_key'] = pg.evaluate('''async () => { + // excludeCustomerIds 重复键排除后 total 应减少 + const a = await api('/api/customer/search', { method: 'POST', body: 'keyword=' + encodeURIComponent('佛山') }); + const d = await api('/api/customer/search', { method: 'POST', body: 'keyword=' + encodeURIComponent('佛山') + '&excludeCustomerIds=' + (a.content && a.content[0] ? a.content[0].id : '0') }); + return { before: a && a.total, after: d && d.total }; + }''') + b.close() +out['pageerror'] = errors +print(json.dumps(out, ensure_ascii=False, indent=1)) diff --git a/.scratch/customer-demo-ref/_quickcheck13.py b/.scratch/customer-demo-ref/_quickcheck13.py new file mode 100644 index 0000000..33d5ea6 --- /dev/null +++ b/.scratch/customer-demo-ref/_quickcheck13.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +"""票 13 快验:工商联想 NO_HIT / 导入过滤 / POOL-CFG 占位卡 / P3-3 / D-G1 注记""" +import io, json, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +from playwright.sync_api import sync_playwright + +URL = 'file:///E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/index.html' +errors = [] +out = {} +with sync_playwright() as p: + b = p.chromium.launch() + pg = b.new_page(viewport={'width': 1720, 'height': 1080}) + pg.on('pageerror', lambda e: errors.append(str(e))) + pg.goto(URL) + pg.wait_for_timeout(600) + pg.fill('#uidInput', '739564171091247104') + pg.evaluate('loginByUid()') + pg.wait_for_timeout(2500) + out['token'] = pg.evaluate('!!localStorage.getItem("e2c_token")') + + # 1) 工商联想 NO_HIT(#24 真请求:stub 恒空数组) + out['lookup_raw'] = pg.evaluate('''async () => { + const arr = await api('/api/customer/company-lookup?companyName=' + encodeURIComponent('恒信达')); + return Array.isArray(arr) ? arr : ('type=' + typeof arr); + }''') + pg.evaluate('dlgCreate()') + pg.wait_for_timeout(200) + pg.fill('#cLk', '恒信达') + pg.evaluate('doLookup()') + pg.wait_for_timeout(1200) + out['lookup_no_hit'] = pg.eval_on_selector('#cOut', 'e => e.textContent.includes("未查询到匹配企业")') + out['lookup_stub_note'] = pg.eval_on_selector_all('#cOut [data-defect="STUB-LOOKUP"]', 'els => els.length') + pg.keyboard.press('Escape') + pg.wait_for_timeout(200) + + # 2) 导入任务过滤(#63 真请求) + pg.click('nav.tabs button[data-tab="import"]') + pg.evaluate('loadImportPage()') + pg.wait_for_timeout(1200) + out['imp_all'] = pg.eval_on_selector_all('#impBody tr', 'els => els.length') + pg.select_option('#impFStatus', '2') + pg.wait_for_timeout(1200) + out['imp_status2_rows'] = pg.evaluate('''() => { + const trs = [...document.querySelectorAll('#impBody tr')]; + return { n: trs.length, allDone: trs.every(tr => tr.textContent.includes('已完成') || tr.textContent.includes('暂无')) }; + }''') + pg.select_option('#impFStatus', '') + pg.select_option('#impFMode', 'UPSERT') + pg.wait_for_timeout(1200) + out['imp_mode_upsert'] = pg.evaluate('''() => { + const trs = [...document.querySelectorAll('#impBody tr')]; + return { n: trs.length, allUpsert: trs.every(tr => tr.textContent.includes('UPSERT') || tr.textContent.includes('暂无')) }; + }''') + out['p3_3_note'] = pg.eval_on_selector_all('#tab-import [data-defect="P3-3"]', 'els => els.length') + + # 3) POOL-CFG 占位卡(设置页) + pg.click('nav.tabs button[data-tab="settings"]') + pg.wait_for_timeout(200) + out['pool_cfg'] = pg.eval_on_selector_all('#tab-settings [data-defect="POOL-CFG"]', 'els => els.length') + out['pool_disabled'] = pg.evaluate('''() => { + const inputs = [...document.querySelectorAll('#tab-settings [data-defect="POOL-CFG"]')]; + const panel = inputs[0] ? inputs[0].closest('.panel') : null; + return panel ? [...panel.querySelectorAll('input')].every(i => i.disabled && i.readOnly) : false; + }''') + + # 4) D-G1 注记(详情页签联系人工具栏) + pg.click('nav.tabs button[data-tab="detail"]') + pg.wait_for_timeout(200) + out['dg1_note'] = pg.eval_on_selector_all('[data-defect="D-G1"]', 'els => els.length') + # 5) F6 stub 钩子(列表 tab) + pg.click('nav.tabs button[data-tab="list"]') + pg.wait_for_timeout(200) + out['f6_stub_hook'] = pg.eval_on_selector_all('[data-defect="STUB-LOOKUP"]', 'els => els.length') + pg.screenshot(path='E:/code/crm-backend-matt/.scratch/customer-demo-ref/demo/shots/t13-quick-settings.png') + b.close() +out['pageerror'] = errors +print(json.dumps(out, ensure_ascii=False, indent=1)) diff --git a/.scratch/customer-demo-ref/_scan.py b/.scratch/customer-demo-ref/_scan.py new file mode 100644 index 0000000..2162388 --- /dev/null +++ b/.scratch/customer-demo-ref/_scan.py @@ -0,0 +1,19 @@ +import sys, re +sys.stdout.reconfigure(encoding='utf-8') +p = r'e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\index.html' +lines = open(p, encoding='utf-8').read().splitlines() +mode = sys.argv[1] if len(sys.argv) > 1 else 'func' +if mode == 'func': + for i, l in enumerate(lines, 1): + if i <= 705 and ('function ' in l or 'async ' in l): + print(i, l.rstrip()[:130]) +elif mode == 'id': + lo, hi = int(sys.argv[2]), int(sys.argv[3]) + for i, l in enumerate(lines, 1): + if lo <= i <= hi and re.search(r"id=[\"']", l): + print(i, l.strip()[:150]) +elif mode == 'range': + lo, hi = int(sys.argv[2]), int(sys.argv[3]) + for i, l in enumerate(lines, 1): + if lo <= i <= hi: + print(i, l.rstrip()) diff --git a/.scratch/customer-demo-ref/_t12scan.py b/.scratch/customer-demo-ref/_t12scan.py new file mode 100644 index 0000000..a7768c9 --- /dev/null +++ b/.scratch/customer-demo-ref/_t12scan.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +"""票12 前侦察:扫描 demo/index.html 全部 function / section / dialog / 关键 id 行号""" +import io, re, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') + +p = r'e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\index.html' +lines = open(p, 'r', encoding='utf-8').read().splitlines() + +pat = re.compile(r'^(async )?function (\w+)|
用途:`.scratch/customer-demo-ref/demo/index.html` 的冒烟断言 + 人工验收双用。入口编号对齐 `assets/coverage-matrix.md`(缺口动作≠豁免)。 -> 契约权威优先级:**Bruno `.bru` 出参示例 > DTO/Param 源码 > API-SUMMARY(下称 AS,`.scratch/customer-module/API-SUMMARY.md`)**。字段名逐字取自源码/`.bru`;「示例」列取 `.bru` E2E 实测真值或任务书 seed。 -> **envelope**:统一 `Result = {code, success, message, data}`(code=0 成功,错误码见 AS §1);本表只写 `data` 内字段。 - -## 通用口径(各入口共用,正文不再重复) - -- **分页请求**(`BaseParam`,crm-base):`current`(默认 1)/ `size`(默认 10,上限 500)/ `keyword` / `orderBy` / `asc`(默认 false=倒序)。 -- **分页出参**(`PageResult`):`content[]` / `total` / `size` / `current` / `pages` / `empty`(=total==0)。 -- **Long 序列化**:雪花 id 与 Long 计数 JSON 序列化为**字符串**(E2E 实测 `"opportunityCount":"0"`、`"total":"5"`);前端勿做 Number 运算,判空按 `=== null` / `!= null`。 -- **时间格式**:LocalDateTime `yyyy-MM-dd HH:mm:ss`;LocalDate `yyyy-MM-dd`;表单提交 LocalDateTime 用 ISO `T` 分隔(空格分隔报 400,见 #40 follow/add)。 -- **空值"--"口径**:demo 渲染 `value || '--'`(grid 兜底,旧 demo L1124-1135 同);契约 null 字段显 `--`,不显 0/空串。 -- **脱敏总述**:核心域唯一脱敏位=查重两 DTO 的 `masked` 布尔标志——无权命中时 `customerId/customerName/ownerName/customerNo` 等**业务字段不透出(null)+ masked=true**,前端只渲染「存在匹配记录」(check-name)/「系统已存在该企业」(check-credit-code)。客户列表/详情 V1 **无字段级脱敏**:`unifiedCreditCode`、`presidentClassPhone` 等明文回显(E2E 实测 `"13800000001"`;敏感信息三档脱敏定稿划出,AS §0/§5.4)。联系人电话脱敏 + `contact/reveal` 明文端点属 contact 域,不在本表。 -- **冒烟 seed**(e2e 种子库):admin `userId=739564171091247104`(罗伟健);客户 `750844477165273088`(e2c-全字段-科技,编号 KH202609030010,负责人=admin);公海客户 `750844487390986240`(e2c-公海-甲,无主);联系人 `750844500171030528`(张关键)。 - ---- - -### #1 workspace 列表分页 — `POST /api/customer/workspace/page`(mine/overview/pool 三 workspace 共用一份契约) - -- 出处:`A4 客户管理\我的客户\workspace 列表分页.bru`(客户总览/客户公海同名 .bru 各一件)+ `crm-customer/.../domain/param/CustomerWorkspacePageParam.java` + `domain/dto/CustomerListRowDTO.java`(出参 SQL 见 `mapper/CustomerMapper.java` pageWorkspace) -- 数据范围:overview=裸表+`@DataScope`(管理员可见全部);mine=负责人**或**协同人(子查询包裹);pool=owner 空且按部门可见范围(子查询包裹)。 - -**请求参数**(form 表单绑定;含 BaseParam 五参): - -| 名 | 类型 | 必填 | 示例 | 口径 | -|---|---|---|---|---| -| workspace | string | 是 | `mine` | `mine`/`overview`/`pool`;未知值 67001「未知 workspace」 | -| viewType | string | 否 | `ASSIGNED` | 内置五视图(硬编码不落库),空=基础集;适配矩阵见下 | -| savedViewId | string | 否 | | 叠加自定义视图(#7)检索条件于数据集之上,不改 @DataScope 边界;**RECENT 视图不接**;视图不存在静默不叠加;**board/cards 不接** | -| archiveStatus | number | 否 | `1` | 1 有效 / 2 已归档;默认 1(D19 归档=删除语义) | -| customerStage | number | 否 | `1` | 1 潜在 / 2 重潜 / 3 已成交 | -| customerType | string | 否 | `customer_type_01` | customer_type 字典 code | -| customerStarLevel | number | 否 | `3` | 1~5 | -| relationStarLevel | number | 否 | `3` | 1~5 | -| industryCode | string | 否 | `gov` | 行业一级 code | -| provinceCode | string | 否 | `440000` | 省国标 code | -| groupColumn | string | 否 | `stage` | 仅看板两端点有意义:白名单 `stage`/`star`/`relation`,越界静默忽略 | -| groupValue | number | 否 | `1` | 仅 board/cards(与 groupColumn 配对) | -| current / size / keyword / orderBy / asc | — | 否 | `1` / `50` / `恒信达` | BaseParam;keyword 按名称/编号等业务列模糊 | - -**viewType 内置五视图 × workspace 适配矩阵**(越界视图不硬拒,SQL 自然空集;F7 口径:ownerOnly 等布尔未做,单 viewType 参数承载五视图): - -| viewType | 文案 | mine | overview | pool | -|---|---|---|---|---| -| ASSIGNED | 我负责的 | ✅ | ✅ | ❌ | -| COLLABORATING | 我协同的 | ✅ | ✅ | ❌ | -| FOLLOW_UP_DUE | 待跟进(next_follow_time 到期未跟) | ✅ | ❌ | ❌ | -| FOCUSED | 我关注的 | ✅ | ✅ | ✅ | -| RECENT | 最近访问(customer_view_log 倒序锚点) | ✅ | ✅ | ✅(不接 saved-view) | - -**出参**(`PageResult`,data 内 24 字段;示例值=E2E 公海行 + mine 行): - -| 字段路径 | 类型 | 口径/文案 | 脱敏 | 示例 | -|---|---|---|---|---| -| content[].id | Long→str | 客户 ID | - | `"750844487390986240"` | -| content[].customerNo | string | 客户编号 KH+yyyyMMdd+4 位 | - | `"KH202609030020"` | -| content[].customerName | string | 客户名称(固定列不可隐藏) | - | `"e2c-公海-甲"` | -| content[].customerType | string | 字典 code(前端字典缓存翻译,**后端不回显名**) | - | `"customer_type_01"` | -| content[].provinceCode / cityCode / districtCode | string | 国标 code(名称前端字典渲染) | - | `"440000"` / `"440100"` / `"440103"` | -| content[].industryCode / industryChildCode | string | 行业一级/二级 code | - | `"gov"` / `"gov_1"` | -| content[].customerStage | number | 1 潜在 2 重潜 3 已成交 | - | `1` | -| content[].customerStarLevel / relationStarLevel | number | 1~5 | - | `3` / `3` | -| content[].strategicAgreementLevel | number | 战略协议等级快照,null=未签 | - | `null` | -| content[].vipCustomerLevel | number | 已成交 VIP 客户等级快照,null=无 | - | `null` | -| content[].opportunityCount | Long→str | **真算**:SQL 标量子查询 `opportunity_customer join opportunity`(oc.delete_key=0 且 o.deleted=0) | - | `"0"` | -| content[].projectCount | Long→str | **恒空**:SQL `SELECT 0 AS project_count`(A5 未接);AS §2.1 写「恒 null 显--」、DTO @Schema 注「恒 0」、E2E 实测 `"0"`——demo 按「恒空显 --」渲染即可,值不具业务含义 | - | `"0"` | -| content[].lastValidFollowTime | string | 最近有效跟进时间(超期锚点) | - | `"2026-09-03 22:55:18"` | -| content[].ownerUserId | Long→str | 销售负责人 ID;**pool 行恒 null** | - | `null`(pool)/ `"739564171091247104"`(mine) | -| content[].ownerUserNameSnapshot | string | 负责人姓名快照 | - | `null` / `"罗伟健"` | -| content[].ownerDeptId | Long→str | 销售部门 ID 快照 | - | `"744841292348915712"` | -| content[].ownerDeptNameSnapshot | string | 部门名快照 | - | `"广东保伦电子股份有限公司"` | -| content[].enterPoolTime | string | 进入公海时间;**pool 固定列可排序**(D29 pool 默认排序=enter_pool_time 倒序;其余 workspace 默认 create_time 倒序) | - | `"2026-09-11 11:45:49"` / `null` | -| content[].archiveStatus | number | 1 有效 2 已归档 | - | `1` | -| content[].lastViewTime | string | 最近访问时间;**仅 RECENT 视图非 null**(同时是 RECENT 排序锚点) | - | `null` | -| content[].focusFlag | number | 是否关注:customer_focus 行存在=1(**按当前登录用户**),0=未关注;三 workspace 通用 | - | `0` | -| total / size / current / pages | Long→str | 分页元信息 | - | `"5"` / `"1"` / `"1"` / `"5"` | -| empty | boolean | total==0 | - | `false` | - -- 备注:原型差异列=mine/overview 加负责人+部门四件,pool 加 enterPoolTime 且无负责人列;demo 现 11 列,类型/行业/战略协议等级/VIP 等级/进入公海时间列未渲染(矩阵 #11 字段级挂 07 票)。字典列后端一律回 code 不回名(CustomerListRowDTO 类注释明示)。 - ---- - -### #9 看板分组汇总 — `POST /api/customer/workspace/board/summary` - -- 出处:`A4 客户管理\我的客户\看板列表\看板分组汇总.bru`(客户总览同名一件;**公海无看板 .bru**)+ `domain/dto/CustomerBoardSummaryDTO.java` + `service/impl/CustomerWorkspaceServiceImpl.java` -- 请求参数:复用 `CustomerWorkspacePageParam`(同 #1),**groupColumn 必填**(stage/star/relation),**无需 groupValue**;分页/keyword 意义有限(同 WHERE 口径)。示例载荷:`workspace=mine&groupColumn=stage¤t=1&size=1&keyword=恒信达` -- 出参(`List`,数组元素两字段): - -| 字段路径 | 类型 | 口径/文案 | 示例 | -|---|---|---|---| -| [].groupValue | number | 分组取值(stage 1~3 / star 1~5) | `1` | -| [].cnt | Long→str | 该分组客户数(**仅返回有数据分组**,空列骨架前端补全;本期重潜/已成交恒空=D20 预期) | `"28"` | - -- 备注(**demo 旧代码字段名漂移**):旧 demo `loadSummary`(L590-592)读 `it.count` / `it.name`——**契约字段是 `cnt` / `groupValue`,旧读法必显 "--"**,改造时按 `groupValue`→文案、`cnt`→数字渲染。E2E 实测:`[{"groupValue":1,"cnt":"28"},{"groupValue":2,"cnt":"6"},{"groupValue":3,"cnt":"3"}]`。 - -### #9 看板单列卡片 — `POST /api/customer/workspace/board/cards` - -- 出处:`A4 客户管理\我的客户\看板列表\看板单列卡片.bru`(总览同名)+ 同上源码 -- 请求参数:同 #1 + `groupColumn`(stage/star/relation)+ **`groupValue` 必填**(缺省 67001「看板取卡必须指定分组值」)。示例载荷:`groupColumn=stage&groupValue=2&workspace=mine¤t=1&size=20&keyword=恒信达` -- 出参:`PageResult`——**与列表 #1 逐字段同构**(24 字段,E2E 卡片样例:customerStage=2、customerStarLevel=4、ownerUserId=`"739564171091247104"`、total=`"6"`)。 -- 备注:仅 mine/overview 可用;**pool 调看板两端口一律 67001「公海无卡片视图,看板仅支持客户总览/我的客户」**(源码 `assertBoardAllowed` 守卫在,AS §2.1 文档口径一致;GR §六.1 记 jar 实测 code=0 漂移待 04 票核实);board/cards 不接 saved-view;summary 与 page/cards 同一 WHERE 口径,数字自洽。 - ---- - -### #7 preference 自定义视图四端点(saved-view) — `GET|POST /api/preference/view/list|save|delete|set-default` - -- 出处:**A4 无 saved-view `.bru` 文档**(契约源=AS §2.14 + crm-preference 源码 `controller/SavedViewController.java`、`domain/dto/SavedView.java`、`SavedViewCondition.java`);示例形态借 `A3 商机管理\销售机会\自定义视图\*.bru` 四件(字段结构同源,商机域 scopeKey 实测 `opportunity`) -- **scopeKey**(客户域,`CustomerConstants` L67-69):`customer.mine` / `customer.overview` / `customer.pool`;userId 取登录态,不接受前端传入。 -- 端点逐个: - -| 端点 | 请求参数 | 出参 data | -|---|---|---| -| `GET /api/preference/view/list?scopeKey=` | scopeKey | `List`,按 seqNo 排序;出参不回显 scopeKey | -| `POST /api/preference/view/save?scopeKey=` | scopeKey(query 表单参)+ **`@RequestBody SavedView` JSON**——全平台唯一 JSON 例外(ADR-0017 范围外) | `String` viewId(新建/覆盖后服务端生成) | -| `POST /api/preference/view/delete?scopeKey=&viewId=` | scopeKey、viewId | `null` | -| `POST /api/preference/view/set-default?scopeKey=&viewId=` | scopeKey、viewId(单值互斥,设默认自动取消原默认) | `null` | - -- **SavedView 字段**(JSON body): - -| 字段 | 类型 | 必填 | 口径 | -|---|---|---|---| -| viewId | string | 新建可空;编辑/删除/设默认须回传 | 服务端生成 32 位 hex(样例 `"e7b9595f7ea54641b093e9d6bfb096f9"`) | -| name | string | 是 | 检索名称(用户填) | -| conditions | array | 否 | 本期前端只提交 1 组(契约按列表预留复合扩展) | -| conditions[].field | string | - | 业务方字段池稳定 code(如 `industryCode`) | -| conditions[].operator | string | - | 业务方自定义:等于/不等于/包含/不包含/为空/不为空(demo 用 eq/like 等) | -| conditions[].value | string | - | 为空/不为空操作符时可为 null | -| sortField / sortDirection | string | 否 | 排序字段 key / `asc`|`desc` | -| isDefault | boolean | 否 | 默认视图图钉,单值互斥 | -| seqNo | number | 否 | 列表排序序号 | - -- 备注:内置五视图(viewType)不走本接口;workspace/page 的 `savedViewId` 消费本接口存的 viewId(#1);视图为用户私有。 - -### #8 preference 视图形态两件 — `GET|POST /api/preference/view-form/get|save` - -- 出处:`A4 客户管理\我的客户\读取视图形态.bru` + `保存视图形态.bru`(总览/公海同名共 6 件)+ `ViewFormController.java`、`ViewFormServiceImpl.java` -- `GET /api/preference/view-form/get?scopeKey=` → `String`:`list`/`split`/`board`;**null=未设置,前端默认 list**(E2E:`"data": "list"`) -- `POST /api/preference/view-form/save`(form:`scopeKey` + `viewForm`)→ `null`;白名单 {list,split,board},非法 68001(平台段位,不在 67xxx) -- 备注:scopeKey 同 #7 三码位(`customer.mine/overview/pool`)。文档口径「pool 仅 list/split,board 被拒 680xx」**实现侧无 pool 特判——pool 保存 board 实回 code=0**(AS §2.14 ⚠ I-06 r2 漂移),前端不得依赖拒绝行为。 - - ---- - -### #13-19 归属/关注/重点 动作族(合并表,每端点一行;全 POST,id/ids 走查询参数) - -- 出处:`crm-customer/.../controller/CustomerOwnershipController.java`、`CustomerFocusController.java`;.bru 逐件:`客户公海\领取客户.bru`、`批量领取.bru`、`分配客户.bru`、`批量分配.bru`、`抛公海.bru`、`批量抛公海.bru`、`归档客户.bru`、`批量归档.bru`、`恢复客户.bru`、`关注客户.bru`、`取消关注客户.bru`、`批量关注客户.bru`、`客户详情\标记重点客户.bru`、`取消重点标记.bru` -- 示例值:单条 `id=750844487390986240`;批量 `ids=750844487390986240`(重复键 `ids=..&ids=..`);分配目标 `userId=744842318024015872`。 - -| 端点 | 参数 | 返回 data | 主要错误码 | 口径 | -|---|---|---|---|---| -| `POST /api/customer/focus?id=` | id | `null`(Result) | 67002 | 幂等;行存在性=关注态;不写 oplog | -| `POST /api/customer/unfocus?id=` | id | `null` | — | 幂等;物理删行,连带清重点标记 | -| `POST /api/customer/focus-batch?ids=` | ids[] | **`null`(注意:非 BatchResult**——controller 循环逐个 focus 后恒 success) | 67002 | 逐个幂等关注,对称商机 | -| `POST /api/customer/star?id=` | id | `null` | 67002 | 幂等;未关注自动建行 starred=1;不写 oplog | -| `POST /api/customer/unstar?id=` | id | `null` | — | 幂等;保留行仅置 starred=0 | -| `POST /api/customer/assign?id=&userId=` | id、userId | `null` | 67002/67012 | 目标人员启用在职+非原负责人;不校验进行中商机 | -| `POST /api/customer/assign-batch?ids=&userId=` | ids[]、userId | `BatchResult` | 67002/67012 | 目标人员统一校验一次(无效**整批拒绝**);其余逐条独立事务 | -| `POST /api/customer/claim?id=` | id | `null` | 67002/67004 | 校验仍在公海;D25 领取即赋 last_valid_follow_time 锚点(为空时赋当下) | -| `POST /api/customer/claim-batch?ids=` | ids[] | `BatchResult` | 67002/67004 | 逐条独立事务,部分成功 | -| `POST /api/customer/release-pool?id=` | id | `null` | 67002/67007 | 清 owner+协同人(部门锚点保留),软删 team_member;进行中商机 67007 阻断 | -| `POST /api/customer/release-pool-batch?ids=` | ids[] | `BatchResult` | 67002/67007 | 逐条独立事务,部分成功 | -| `POST /api/customer/archive?id=` | id | `null` | 67002/67004/67006 | 仅销售负责人;归档=删除语义(D19);进行中商机 67006 阻断 | -| `POST /api/customer/archive-batch?ids=` | ids[] | `BatchResult` | 67002/67004/67006 | **整批预检:任一失败整批不执行**(预检失败=顶层非 0,E2E 实测顶层 `code:67006`);预检过后逐条独立事务 | -| `POST /api/customer/restore?id=` | id | `null` | 67002/67004 | 仅销售负责人(已归档→有效) | - -- **BatchResult 结构**(`crm-base/.../result/BatchResult.java`):`{total:int, successCount:int, failCount:int, failures:[{id:Long→str, reason:string, message:string}]}`。`reason` 语义枚举(`CustomerBatchFailReason`):`NOT_FOUND / STATUS_NOT_ALLOWED / CONCURRENT_MODIFIED / ARCHIVE_BLOCKED / POOL_BLOCKED / ASSIGN_INVALID / UNKNOWN`。E2E 失败行样例:`{"id":"753612204858671104","reason":"STATUS_NOT_ALLOWED","message":"客户已被领取,不在公海"}`。 -- **错误码含义**(AS §1):67004 当前状态不允许(归档/恢复/抛公海守卫);67006 归档被阻断:存在进行中商机;67007 抛公海被阻断:存在进行中商机;67012 分配非法(明细已分配/对象越权/为发起人本人/为当前负责人)。 -- 单条动作 CAS 乐观锁 + 写 oplog(TRANSFER/CLAIM/POOL/ARCHIVE/RESTORE 均入 #45 oplog 值域);关注/重点族不写 oplog。 - ---- - -### #21 新建客户 — `POST /api/customer/create`(form 绑定 `CustomerCreateDTO`,禁 @RequestBody) - -- 出处:`A4 客户管理\我的客户\新增客户.bru` + `domain/dto/CustomerCreateDTO.java`;出参 `CustomerSaveResultDTO.java` + `CustomerSimilarHitDTO.java` -- 三层查重内建:L1 停输防抖(check-name,只提示)→ L2 名称相似 needConfirm 弹窗(未落库)→ L3 信用代码硬拦(67003)。`ownerUserId` 空=直接进公海并记 `enter_pool_time`(D25,锚点 NULL);有值=直接指派(快照服务端补齐,不信任前端传部门)。 -- 请求参数(DTO 全字段,按区块分组;「必填」以 .bru 参数表+DTO @Schema 为准): - -| 名 | 类型 | 必填 | 示例 | 值域/口径 | -|---|---|---|---|---| -| customerName | string | 是 | `e2c-查重-撞码-003045` | 停输防抖触发相似查重 | -| customerType | string | 是 | `customer_type_01` | customer_type 字典(6 值,见字典节) | -| provinceCode / cityCode | string | 是 | `440000` / `440100` | 国标 code | -| districtCode | string | 否 | `440103` | 国标 code | -| industryCode | string | 是 | `gov` | 行业一级 code | -| industryChildCode | string | 否 | `gov_1` | 行业二级 code | -| customerStarLevel / relationStarLevel | number | 是 | `3` | 1~5 | -| networkUnits | string | 否 | | 人脉关系单位 JSON 数组(标签名) | -| ownerUserId | string(Long) | 否 | `739564171091247104` | 空=进公海;无效/停用 67012 | -| companyDecisionMaker | string | 否 | `王总` | 公司决策人 | -| isBizNegotiated | number | 是 | `0` | 1 是 / 0 否 | -| directorVisitTime | string | 否 | | 总监近期拜访时间 yyyy-MM-dd HH:mm:ss | -| isChild | number | 是 | `0` | 1 是 / 0 否(默认 0) | -| parentCustomerId | string(Long) | 否 | | isChild=1 时必填,服务端防环校验 | -| cooperationSystem | string | 否 | `OA对接` | 合作系统 | -| nonCoopReason | string | 否 | | 不合作原因 | -| joinedPresidentClass | number | 否 | `1` | 1/0/null(未选) | -| presidentClassPerson / presidentClassPhone | string | 条件 | `王总` / `13800000001` | joinedPresidentClass=1 时 Person 必填 | -| joinedProductClass | number | 否 | | 1/0/null | -| productClassPerson / productClassPhone | string | 条件 | | joinedProductClass=1 时 Person 必填 | -| unifiedCreditCode | string | 否 | `91440101E2CHXDA001` | 18 位数字或大写字母;撞码 L3 硬拦 67003 | -| legalRepresentative | string | 否 | `王测试` | | -| establishedDate | string | 否 | `2018-05-20` | yyyy-MM-dd,不得晚于当前日期 | -| registeredCapital / businessScope / staffSize / annualRevenue / businessAddress | string | 否 | `1000万元人民币` 等 | 工商信息区文本 | -| bizNameFromLookup | string | 否 | | 企查查确认的工商名称(只存不覆盖客户名称) | -| remark | string | 否 | `e2e 实测备注` | ≤500 字 | -| confirmSimilar | boolean | 否 | `true` | L2 弹窗后「仍要创建」重发置 true | - -- 出参(`CustomerSaveResultDTO`,data 内 5 字段):`id`(Long→str,落库成功时)、`needConfirm`(Boolean,true=名称相似需确认**未落库**)、`similarHits[]`(见 #22)、`customerNo`(落库成功时,`"KH202609110010"`)、`customerName`。 -- 错误码:67001 入参非法 / 67003 信用代码撞码 / 67012 销售负责人无效 / 67015 查重设置单例缺失。 -- E2E 落库成功样例:`{"id":"753584451841163264","needConfirm":null,"similarHits":null,"customerNo":"KH202609110010","customerName":"e2c-cg-A-098932"}`。 - -### #22 名称相似查重 — `GET /api/customer/check-name?name=&excludeId=` - -- 出处:`A4 客户管理\客户查重\名称相似提示.bru` + `CustomerSimilarHitDTO.java`(L1 停输防抖 / L2 弹窗共用载荷;create/quick-create 内建查重同款) -- 请求参数:`name`(string,必填,待查客户名称);`excludeId`(string,可选,编辑页传自身排除)。 -- 出参(`List`,data 内 6 字段/行): - -| 字段路径 | 类型 | 口径 | 脱敏 | 示例 | -|---|---|---|---|---| -| [].customerId | Long→str | 命中客户 ID | **无权命中=null** | `"750844478243209216"` | -| [].customerName | string | 命中客户名称 | 无权命中=null | `"e2c-恒信达科技有限公司"` | -| [].ownerName | string | 命中客户负责人 | 无权命中=null | `"罗伟健"` | -| [].customerStage | number | 1 潜在 2 重潜 3 已成交 | 无权命中=null | `1` | -| [].archiveStatus | number | 1 有效 2 已归档 | 无权命中=null | `1` | -| [].masked | boolean | 无权命中=true | **true 时以上五字段全 null,前端只渲染「存在匹配记录」** | `false` | - -- 备注:**masked 脱敏形态(契约=DTO 注释,E2E 无 masked=true 样例)**:不是打星号字符串,而是「字段置 null + masked=true + 固定文案」。匹配方式/阈值走查重设置(AS §2.13:nameMatchMode 1 精确 / 2 模糊,similarityThreshold 0~100 出厂 80;.bru docs 提 ngram 阈值 70/80/90 为旧口径,以查重设置单例为准)。错误码 67015(单例未落地时走出厂默认不报)。 - -### #23 信用代码查重 — `GET /api/customer/check-credit-code?creditCode=` - -- 出处:`A4 客户管理\客户查重\信用代码查重.bru` + `CreditCodeCheckDTO.java` -- 请求参数:`creditCode`(string,必填,18 位)。示例 `91440101MA9ABC1234`。 -- 出参(`CreditCodeCheckDTO`,data 内 6 字段): - -| 字段路径 | 类型 | 口径 | 脱敏 | 示例 | -|---|---|---|---|---| -| exists | boolean | 是否已存在同码客户 | - | `true` | -| masked | boolean | 无权命中=true | **true 时只提示「系统已存在该企业」** | `false` | -| customerId | Long→str | 命中客户 ID | 有权可见时给 | `"750844478243209216"` | -| customerName | string | 命中客户名称 | 有权可见时给 | `"e2c-恒信达科技有限公司"` | -| customerNo | string | 命中客户编号 | 有权可见时给 | `"KH202609030011"` | -| ownerName | string | 命中客户负责人 | 有权可见时给 | `"罗伟健"` | - -- 备注:L1 即时校验(失焦/企查查回填后调用);L3 保存时硬拦 67003;系统强制无开关(AS §2.13)。 - -### #24 工商联想 — `GET /api/customer/company-lookup?companyName=`(**参数名是 companyName 不是 name**) - -- 出处:`A4 客户管理\我的客户\工商信息查询.bru` + `port/CompanyLookupPort.java` -- 请求参数:`companyName`(string,必填,公司名称关键字)。示例 `恒信达`。 -- 出参(`List`,9 字段/候选):`bizName` / `unifiedCreditCode` / `legalRepresentative` / `establishedDate`(LocalDate)/ `registeredCapital` / `businessScope` / `staffSize` / `annualRevenue` / `address`。 -- 备注:**一期 stub 恒返回空数组**(E2E:`"data": []`),前端按「未查询到匹配企业」渲染,可手工录入;真实企查查接入后自动激活。前端职责:只回填当前为空的字段,已填字段再选须弹「受影响字段确认」;回填后立即调 check-credit-code;无结果/失败/超时均不阻断手工提交。 - -### #25 编辑客户 — `POST /api/customer/edit?id=`(form 绑定 `CustomerUpdateDTO` + CAS) - -- 出处:`A4 客户管理\客户详情\编辑客户.bru` + `CustomerUpdateDTO.java` -- 请求参数:查询参数 `id` + 表单(与 #21 create 的差异): - - **多**:`version`(number,**必传**,乐观锁 CAS,不匹配报 **67005**「乐观锁冲突」;编辑回显取 `GET /detail` 的 `version` 带回)。 - - **少**:无 `ownerUserId`(**归属字段不可改**——负责人/部门「✅(新增时)」;服务端忽略任何归属入参,归属变更走 assign/transfer)。 - - 其余 33 字段与 create 同名同义(customerName…remark + confirmSimilar),必填区相同(isBizNegotiated/isChild 必填)。 -- 出参:同 `CustomerSaveResultDTO`(needConfirm 相似确认流同样适用,`confirmSimilar=true` 重发)。 -- 错误码:67001 / 67002 / 67003 / 67005。 -- 备注(AS §2.3 edit 行注):冒烟实测需一并提交 `version`+`isBizNegotiated`+`isChild`,缺省因 DB NOT NULL 无默认而失败(关联 AS §5 D-05 已修,冒烟口径保守保留)。E2E 反例样例:`{"code":67005,"success":false,"message":"缺少乐观锁版本号","data":null}`。 - -### #47 快速创建客户 — `POST /api/customer/quick-create`(`CustomerQuickCreateDTO` 最小集) - -- 出处:`A4 客户管理\我的客户\快速创建客户.bru` + `CustomerQuickCreateDTO.java` -- 请求参数(7+1 字段,DTO `requiredMode=REQUIRED` 全 7 必填): - -| 名 | 类型 | 必填 | 示例 | -|---|---|---|---| -| customerName | string | 是 | `e2c-快创-448049` | -| customerType | string | 是 | `customer_type_01` | -| provinceCode / cityCode | string | 是 | `440000` / `440100` | -| industryCode | string | 是 | `gov` | -| customerStarLevel / relationStarLevel | number | 是 | `2` | -| confirmSimilar | boolean | 否(默认 false) | 命中相似确认后重发置 true(返工票 04 补齐) | - -- 出参:`CustomerSaveResultDTO`(同 #21)。E2E needConfirm 样例:`{"needConfirm":true,"similarHits":[{"customerId":"753620871771324416","customerName":"e2c-t05qc-相似源甲科技有限公司","ownerName":"罗伟健","customerStage":1,"archiveStatus":1,"masked":false}],"customerNo":null,"customerName":null}`。 -- 错误码:67001 / 67003。 -- 备注(**两处 .bru 漂移,以源码/AS 为准**):① .bru 参数表把 industryCode/两星级标「否」且**漏 `confirmSimilar`**——DTO 源码有该字段(返工票 04 已补);② .bru docs 文本「QuickCreateDTO 无 confirmSimilar 字段」为陈旧描述。服务端默认:owner=当前用户、is_child=否、isBizNegotiated=否;查重三层与编号生成复用主表 create。 - -### #48 商机侧客户搜索 — `POST /api/customer/search`(form 绑定 `CustomerSearchParam`) - -- 出处:**无 A4 `.bru`**(契约源=源码 `CustomerSearchParam.java` + `CustomerSearchItemDTO.java` + AS §2.4);A3 侧演示形态待 03 票 -- 请求参数:BaseParam 五参(keyword=**名称/联系人/电话三维模糊**)+ `customerType`(string,字典 code 精确,可空)+ `archiveStatus`(number,1/2,可空=全部)+ `excludeCustomerIds`(Long 数组,重复键;商机候选池排除已关联客户,可空)。 -- 出参(`PageResult`,行 9 字段): - -| 字段路径 | 类型 | 口径 | 示例 | -|---|---|---|---| -| content[].id | Long→str | 客户 id | — | -| content[].customerNo | string | 客户编号 | — | -| content[].customerName | string | 客户名称 | — | -| content[].customerType | string | 字典 code | — | -| content[].ownerUserId | Long→str | 销售负责人 id | — | -| content[].ownerName | string | 负责人姓名(快照) | — | -| content[].ownerDeptId | Long→str | 负责人部门 id | — | -| content[].customerStage | number | 1 潜在/2 重潜/3 已成交 | — | -| content[].archiveStatus | number | 1 有效/2 已归档 | — | - -- 备注:轻量出参;选中后走 `GET /api/customer/detail?id=` 带出全量;DataScope 注入可见范围。 - ---- - -### #29 详情公共头部 — `GET /api/customer/detail-head?id=` - -- 出处:`A4 客户管理\客户详情\详情公共头部.bru` + `domain/dto/CustomerDetailHeadDTO.java` -- 请求参数:`id`(string,必填,查询参数)。示例 `750844477165273088`。 -- **副作用**:upsert `customer_view_log` 刷新「最近访问」锚点(F7 viewTouch 收口;UNIQUE(user_id,customer_id) 去重;高频行为不落 oplog)——冒烟断言 RECENT 视图排序前先打一次详情头。 -- 出参(`CustomerDetailHeadDTO`,data 内 24 字段;示例=E2E 客户甲): - -| 字段路径 | 类型 | 口径/文案 | 示例 | -|---|---|---|---| -| id | Long→str | 客户 ID | `"750844477165273088"` | -| customerNo | string | 客户编号 | `"KH202609030010"` | -| customerName | string | 客户名称 | `"e2c-全字段-科技"` | -| customerStage | number | 1 潜在 2 重潜 3 已成交(只读条,不可手动改) | `1` | -| customerStageName | string | 阶段名回显(CustomerStageEnum) | `"潜在客户"` | -| customerStarLevel / relationStarLevel | number | 1~5 | `3` / `3` | -| strategicAgreementLevel | number | 快照,null=未签 | `null` | -| vipCustomerLevel | number | 已成交 VIP 等级快照,null=无 | `null` | -| archiveStatus | number | 1 有效 2 已归档(已归档态 badge 数据源) | `1` | -| ownerUserId | Long→str | 销售负责人 ID(公海 null) | `"739564171091247104"` | -| ownerUserNameSnapshot | string | 负责人姓名快照 | `"罗伟健"` | -| ownerDeptNameSnapshot | string | 部门名快照 | `"广东保伦电子股份有限公司"` | -| lastFollowSummary | string | 最近跟进摘要(最新一条跟进内容) | `"e2c-F08 跟进实测:电话沟通年度合作意向"` | -| lastFollowTime | string | 最近跟进时间 | `"2026-09-11 11:45:33"` | -| nextFollowTime | string | 待跟进提醒(未来最近一条下次跟进时间,null=无待跟进) | `"2026-09-12 22:34:06"` | -| opportunityCount | Long→str | 关联商机数(外部反查,失败前端显 "--") | `"0"` | -| projectCount | Long→str | DTO @Schema=「恒 null 显 --」;E2E 实测 `"0"`——按恒空渲染 | `"0"` | -| wonProjectAmount | BigDecimal | 汇总卡①已中标项目总额——**恒 null 显 "--"**(A5/投标 seam 未接入) | `null` | -| planEstimateAmount | BigDecimal | 汇总卡②跟进中方案预估总额——恒 null 显 "--"(方案卡 seam) | `null` | -| ongoingOpportunityAmount | BigDecimal | 汇总卡③进行中商机总额——恒 null 显 "--"(可经 port 扩展后切真值) | `null` | -| contractAmount | BigDecimal | 汇总卡④合同总额——恒 null 显 "--"(合同模块未建) | `null` | -| paidAmount | BigDecimal | 汇总卡④累计回款——恒 null 显 "--"(与合同总额同卡) | `null` | - -- 备注:**金额 5 字段恒 null 显 "--" 是 grill Q18 契约:前端渲染 4 张汇总卡、显 "--" 不显 0**(矩阵 #29=P3-6 改造点:demo 未渲染卡)。错误码 67002。 - -### #30 客户详情(页签1 客户信息 / 编辑页回显同源) — `GET /api/customer/detail?id=` - -- 出处:`A4 客户管理\客户详情\客户详情.bru` + `domain/dto/CustomerDetailDTO.java`(extends BaseDTO) -- 请求参数:`id`(string,必填,查询参数)。错误码 67002。 -- 出参(`CustomerDetailDTO`,data 内 48 字段=BaseDTO 3 + 本类 45;示例=E2E 客户甲): - -| 字段路径 | 类型 | 口径/文案 | 脱敏 | -|---|---|---|---| -| id | Long→str | 主键 | - | -| createTime / updateTime | string | **经 BaseDTO 带出,E2E 实测有值** `"2026-09-03 22:27:53"`(见下方 G4 备注) | - | -| customerNo | string | KH+yyyyMMdd+4 位序,只读 | - | -| customerStage | number | 1 潜在 2 重潜 3 已成交(只读条) | - | -| archiveStatus | number | 1 有效 2 已归档 | - | -| version | number | 乐观锁版本号(**编辑回传**,E2E `3`) | - | -| customerName | string | 客户名称 | - | -| customerType / customerTypeName | string | code + **字典名回显**(`customer_type_01`/`总包`) | - | -| provinceCode / cityCode / districtCode | string | 国标 code(名称前端字典渲染,后端不回名) | - | -| industryCode / industryName | string | `gov`/`政府机关`(一级字典名回显) | - | -| industryChildCode / industryChildName | string | `gov_1`/`人大政协`(二级字典名回显) | - | -| customerStarLevel / relationStarLevel | number | 1~5 | - | -| networkUnits | string | 人脉关系单位 JSON 数组 | - | -| ownerUserId | Long→str | 销售负责人 ID(公海 null) | - | -| ownerUserNameSnapshot / ownerDeptId / ownerDeptNameSnapshot | — | 负责人姓名/部门 ID/部门名快照 | - | -| enterPoolTime | string | 进入公海时间(公海客户才有值) | - | -| lastValidFollowTime | string | 最近有效跟进时间(超期锚点) | - | -| strategicAgreementLevel / vipCustomerLevel | number | 快照(null=未签/无) | - | -| companyDecisionMaker | string | 公司决策人 | - | -| isBizNegotiated | number | 是否商机勾兑 1/0 | - | -| directorVisitTime | string | 总监近期拜访时间 | - | -| isChild / parentCustomerId / parentCustomerNameSnapshot | — | 子客户标志/父客户 ID/父客户名快照 | - | -| cooperationSystem / nonCoopReason | string | 合作系统/不合作原因 | - | -| joinedPresidentClass / presidentClassPerson / presidentClassPhone | — | 总裁班三件(**电话明文**,E2E `"13800000001"`) | **无脱敏** | -| joinedProductClass / productClassPerson / productClassPhone | — | 产品班三件(电话明文) | **无脱敏** | -| unifiedCreditCode | string | 统一社会信用代码(E2E `91440101E2CTEST001` 明文) | **无脱敏(V1 三档脱敏划出)** | -| legalRepresentative / establishedDate / registeredCapital / businessScope / staffSize / annualRevenue / businessAddress / bizNameFromLookup | — | 工商信息区(establishedDate=LocalDate) | - | -| remark | string | 备注 | - | - -- 备注(**G4 校准**):矩阵 #30 记档「系统信息四件套 creatorId/createTime/updaterId/updateTime 不在 DTO 恒"–"」——**逐字核对源码后应修正为:`creatorId`/`updaterId` 确实不在 CustomerDetailDTO(无字段);但 `createTime`/`updateTime` 由 BaseDTO 继承带出且 E2E 实测有值**。demo 现渲染四件套恒 "--" 是保守可行口径;若要显示创建/更新时间可直接取值,只有操作人两件必须 "--"。 - -### #40 跟进记录分页 — `GET /api/customer/follow/page?id=` + 新增跟进 — `POST /api/customer/follow/add?id=` - -- 出处:`A4 客户管理\客户详情\跟进记录\跟进记录分页.bru` + `新增跟进.bru` + `domain/param/FollowPageParam.java`、`domain/dto/FollowCreateDTO.java`、`domain/entity/CustomerFollow.java`(出参=实体直出) -- **page 请求参数**(GET query):`id`(必填)+ `followWay`(string,follow_way 字典 code 精确,例 `follow_way_01`)+ `startTime`/`endTime`(string,yyyy-MM-dd HH:mm:ss 含端)+ BaseParam 五参。 - - **G1 标注**:原型有「操作人」筛选,`FollowPageParam` **无 operatorUserId 参数**——后端无此过滤能力,demo 侧豁免该筛选(P2-G1 记档)。 -- **page 出参**(`PageResult`,行 13 字段,实体直出含审计四件套): - -| 字段路径 | 类型 | 口径 | 示例 | -|---|---|---|---| -| content[].id / creatorId / createTime / updaterId / updateTime / deleted | — | BaseEntity 审计字段(E2E 实测序列化;`"deleted":false`) | `"750854396027338752"` | -| content[].customerId | Long→str | 所属客户 ID | `"750844477165273088"` | -| content[].followWay | string | follow_way 字典 code(5 值见字典节;**后端不回名**) | `"follow_way_01"` | -| content[].followContent | string | 跟进内容(长文本) | `"e2c-F08 跟进实测:电话沟通年度合作意向"` | -| content[].nextFollowTime | string | 下次跟进时间(有值进「待跟进」筛选) | `"2026-09-10 23:07:18"` | -| content[].followBy | Long→str | 跟进人用户 ID | `"739564171091247104"` | -| content[].followByName | string | 跟进人姓名(服务端快照,前端不传) | `"罗伟健"` | -| content[].followDeptName | string | 跟进人部门名 | `"广东保伦电子股份有限公司"` | - -- **add 请求参数**(form):`followWay`(必填,5 值域)、`followContent`(必填,空→67009)、`nextFollowTime`(选填,**ISO `T` 分隔** `2026-09-10T10:00:00`;空格分隔报 400;有值进待跟进)。 -- **add 出参**:`Result` 跟进 id(E2E `"753583108837605376"`)。 -- 备注:append-only 提交后不可改删(纠错=新增补充);同客户同内容 30 秒窗口防重复提交;写库刷新 `last_valid_follow_time` 超期锚点(旧未发提醒自动置已失效)。错误码 67002/67009。已知缺陷 D-02(P2):nextFollowTime 早于当前未拦截(.bru docs 记档)。 - -### #45 操作日志分页 — `GET /api/customer/oplog/page?id=` - -- 出处:`A4 客户管理\客户详情\操作日志\操作日志分页.bru` + `domain/param/OplogPageParam.java`、`domain/entity/CustomerOplog.java`(出参=实体直出) -- **请求参数**(GET query):`id`(必填)+ `startTime`/`endTime`(yyyy-MM-dd HH:mm:ss 含端)+ `action`(string,操作类型精确)+ BaseParam 五参(keyword 匹配 `detail` 叙事)。 -- **action 值域**:权威=`CustomerConstants` 全部 ACTION_* 常量,**18 种**:`CREATE / UPDATE / FOLLOW / ARCHIVE / RESTORE / TRANSFER / CLAIM / POOL / STAGE_CHANGE / MEMBER_ADD / MEMBER_REMOVE / CONTACT_ADD / CONTACT_EDIT / CONTACT_DELETE / AGREEMENT_ADD / AGREEMENT_EDIT / AGREEMENT_DELETE / GRAPH_EDIT`。(漂移标注:AS §3 写「17 种」未含 GRAPH_EDIT,未同步;demo 筛选下拉按 18 种渲染。) -- **出参**(`PageResult`,行 12 字段): - -| 字段路径 | 类型 | 口径 | 示例 | -|---|---|---|---| -| content[].id / creatorId / createTime / updaterId / updateTime / deleted | — | BaseEntity 审计字段 | `"750854380575522816"` | -| content[].customerId | Long→str | 所属客户 ID | `"750844477165273088"` | -| content[].action | string | 18 种值域(见上) | `"UPDATE"` | -| content[].detail | string | 叙事形态 `把 {字段} 从 {旧} 修改为 {新}`(D13;多字段变更串联一条) | `"把人脉关系单位从[...]修改为空;把公司决策人从王总修改为空;…"` | -| content[].operatorId | Long→str | 操作人用户 ID(**系统动作为 null**,如阶段自动流转/导入) | `"739564171091247104"` | -| content[].operatorName | string | 操作人姓名(系统动作记「系统」) | `"罗伟健"` | -| content[].operatorDeptName | string | 操作人部门名快照 | `"广东保伦电子股份有限公司"` | - -- 备注:append-only 审计、无限期保留;时间倒序;日期分组由前端渲染。错误码 67002。导出按钮无端点=豁免(P3-4)。 - -### #41 关联商机页签 — `GET /api/customer/opportunity/page?id=`(port 反查 crm-opportunity) - -- 出处:`A4 客户管理\客户详情\关联商机\关联商机页签.bru` + `port/CustomerOpportunityQueryPort.java`(record OpportunityItem,7 字段真名逐字如下) -- 请求参数:`id`(必填)+ BaseParam 五参。 -- 出参(`PageResult`,**契约 7 字段**;G2:原型 13 列 vs 契约 7 字段,demo 现 5 列): - -| 字段路径 | 类型 | 口径 | 示例 | -|---|---|---|---| -| content[].id | Long→str | 商机 ID | `"750844498195513344"` | -| content[].oppName | string | 商机名称 | `"e2c-联动-交割"` | -| content[].stageName | string | 商机阶段名(已回显名) | `"客户圈定"` | -| content[].estimateAmount | BigDecimal | 预计金额 | `null` | -| content[].ownerUserId | Long→str | 销售负责人 ID | `"739564171091247104"` | -| content[].ownerNameSnapshot | string | 负责人姓名快照(可 null→"--") | `null` | -| content[].updateTime | string | 最近更新时间 | `"2026-09-03 22:27:58"` | - -- 备注:port 失败前端显 "--" 不显 0(issues-07 §A);列清单以 03 票实现实返为准收口 G2。错误码 67002。 - -### #43 战略协议五端点 — `CustomerAgreementController /api/customer/agreement/*` - -- 出处:`A4 客户管理\战略协议\*.bru` 五件 + `domain/dto/AgreementDTO.java`(ADR-0017 Route A:写入参/出参双向同类) -- **AgreementDTO 字段**(双向): - -| 字段 | 类型 | 必填(写) | 口径 | -|---|---|---|---| -| customerId | Long→str | 新增必填;**编辑传入忽略**(归属不可换客户,以库内为准) | 所属客户 | -| agreementLevel | number | 是 | 1~3=一级/二级/三级;越界 67017 | -| amount | string | 否 | 签订金额**文本**(数字/区间/含单位,E2E `"500万"`、`"128000"`) | -| remark | string | 否 | 备注 | -| fileFileId | string | 否 | 附件 fileId(crm-file 引用字符串,单文件可空);**demo 以纯文本框呈现**(附件上传位豁免 D2),下载由前端走 crm-file 通用端点 | -| customerName | string | 仅出参 | 所属客户名称(卡片带出) | -| id / createTime / updateTime | — | 仅出参 | BaseDTO(E2E detail 实测有值) | - -| 端点 | 参数 | 出参 data | 错误码 | -|---|---|---|---| -| `GET /api/customer/agreement/list?customerId=` | customerId | `List`(页签卡片,时间倒序**非分页**;E2E 空列表 `[]`) | 67002 | -| `GET /api/customer/agreement/detail?id=` | id | `AgreementDTO` 全量 | 67017/67002 | -| `POST /api/customer/agreement/create`(form) | AgreementDTO | `Long` 协议 id | 67001/67017/67002 | -| `POST /api/customer/agreement/edit?id=`(form) | id + AgreementDTO | `null` | 67001/67017/67002 | -| `POST /api/customer/agreement/delete?id=` | id | `null`(软删) | 67002/67017 | - -- 备注(**快照联动**):新增/编辑/删除协议同步刷新客户主表 `strategic_agreement_level`(删除=删空后快照回 NULL=未签);oplog 记 `AGREEMENT_ADD/EDIT/DELETE`;67017 语义=等级缺失或越界/协议不存在或无权访问。权限继承所属客户(无独立 ACL,无权 67002/67017)。 - -### #44 团队成员三端点 — `GET member/list?id=` + `POST member/add?id=` + `POST member/remove?id=&memberUserId=` - -- 出处:`A4 客户管理\客户详情\团队成员\*.bru` 三件 + `domain/dto/CustomerMemberDTO.java`、`MemberAddDTO.java` -- `GET /api/customer/member/list?id=` 出参(`List`,**data 内仅 4 字段**;负责人 ROLE_OWNER 在前): - -| 字段路径 | 类型 | 口径 | 示例 | -|---|---|---|---| -| [].userId | Long→str | 成员用户 ID | `"739564171091247104"` | -| [].userName | string | 姓名(负责人=主表快照,协同人=团队成员快照) | `"罗伟健"` | -| [].deptName | string | 部门名(负责人=主表快照,协同人=**实时回显**) | `"广东保伦电子股份有限公司"` | -| [].role | string | 角色枚举:`OWNER` 负责人 / `COLLABORATOR` 协同人(**字段名是 role,不是 memberRole**) | `"OWNER"` | - - - **G3 标注**:原型另有职务/加入时间两列——`memberRole`、`createTime` **均不在此 DTO**(不暴露),demo 恒 "--" 渲染=记档口径(P2-G3,字段级挂 07 票)。 -- `POST /api/customer/member/add?id=`:form 绑定 `MemberAddDTO{memberUserIds: List}`(**重复键** `memberUserIds=..&memberUserIds=..`,示例 `744842318024015872`)→ `null`。两阶段校验**整批拒绝**:名单空/含销售负责人/重复加入/用户停用→67016;批内幂等去重;姓名快照;oplog `MEMBER_ADD`。E2E 反例:`{"code":67016,"message":"成员名单不能为空"}`。 -- `POST /api/customer/member/remove?id=&memberUserId=`:查询参数两件 → `null`。软删保留历史(delete_key 复用键,可重复加入);oplog `MEMBER_REMOVE`;错误码 67002/67016。 - -### #42 关联项目页签 — 占位(demo 无端点调用,内容恒 "--") - -- 矩阵 #42 口径:**demo 侧无入口调用、页签占位显 "--"**(「新增占位页签」动作)。漂移提示:契约面实际已存在 `GET /api/customer/project/page?id=`(`CustomerDetailController.pageProjects`,`CustomerProjectQueryPort.ProjectItem` 9 字段),且 `A4 客户管理\客户详情\关联项目\关联项目页签.bru` 已有 E2E 真值(projectName=e2c-r3d-n3-项目甲、stageName=冲突处理、statusName=进行中、filingStatusName=报备审核中)——AS §5.3「A5 未建恒 --」记档已过时;demo 维持占位,切真值属后续票,本表不展开。 - ---- - -## 字典与枚举(值域 + 文案 + 出处) - -| 字典/枚举 | 值域与文案 | 出处 | -|---|---|---| -| customer_stage | 1 潜在客户 / 2 重潜客户 / 3 已成交客户(三态只前进,CAS;**本期两个跃迁均不触发,实际只有「潜在」**,D20 seam) | `domain/enums/CustomerStageEnum.java`;detail-head `customerStageName` 回显「潜在客户」;AS §3 | -| customer_star_level | 1~5 整数,无文案字典(星级组件渲染) | DTO @Schema;AS §2.1 | -| relation_star_level | 1~5 整数(导入 INSERT 缺省补 0=未评估占位,D-05 修复口径);看板 groupColumn=`relation` 分组 1~5 | AS §5.7/§2.1 | -| customer_type | `customer_type_01` 总包 / `_02` 工程商 / `_03` 投资方 / `_04` 设计院 / `_05` 集成商 / `_06` 投标公司 | `crm-dict/.../config/DictDataInitializer.java` L325-332 | -| industryCode | 运行时字典接口/字典树核对(industry 分组两级行业树,客户用二级/商机用一级);E2E 样例 `gov`=政府机关、`gov_1`=人大政协 | DictDataInitializer L95;E2E detail 实测 | -| follow_way | `follow_way_01` 电话沟通 / `_02` 上门拜访 / `_03` 微信对接 / `_04` 线上会议 / `_05` 展会沟通 | DictDataInitializer L293-299;FollowCreateDTO @Schema | -| viewType(内置五视图) | `ASSIGNED` 我负责的 / `COLLABORATING` 我协同的 / `FOLLOW_UP_DUE` 待跟进 / `FOCUSED` 我关注的 / `RECENT` 最近访问;适配矩阵见 #1 | AS §2.1/§3 | -| archiveStatus | 1 有效 / 2 已归档(无合并态,D19 归档=删除语义) | AS §3 | -| view-form | `list` / `split` / `board`(白名单外 68001;pool 拒 board 文档口径未实现=I-06 漂移) | ViewFormController/Impl;.bru 保存视图形态.bru;AS §2.14 | -| oplog action | 18 种(含 `GRAPH_EDIT`),逐值见 #45;AS §3「17 种」为未同步漂移 | `CustomerConstants` L97-114 | -| BatchFailReason | `NOT_FOUND / STATUS_NOT_ALLOWED / CONCURRENT_MODIFIED / ARCHIVE_BLOCKED / POOL_BLOCKED / ASSIGN_INVALID / UNKNOWN` | `domain/enums/CustomerBatchFailReason.java` | -| member role | `OWNER` / `COLLABORATOR` | CustomerMemberDTO 常量 | -| transferReason(交割,本表外引用) | `resign` 离职 / `transfer_post` 岗位调动 / `region_adjust` 区域调整 | AS §3 | -| job_title | 运行时两级字典树(demo 动态拉取),无静态值域,不落本表 | AS §2.7(jobTitleId/Name/Category/Level 联动 D1/D2) | - ---- - -## 来源文件清单 - -**Bruno 仓 `D:\code\crm-api-docs\`**(相对根): -- `A4 客户管理\我的客户\workspace 列表分页.bru`、`新增客户.bru`、`快速创建客户.bru`、`编辑客户.bru`(客户详情\)、`工商信息查询.bru` -- `A4 客户管理\客户总览\workspace 列表分页.bru`、`看板列表\看板分组汇总.bru`、`看板单列卡片.bru`(我的客户同名) -- `A4 客户管理\客户查重\名称相似提示.bru`、`信用代码查重.bru` -- `A4 客户管理\客户详情\详情公共头部.bru`、`客户详情.bru`、`标记重点客户.bru`、`取消重点标记.bru`、`跟进记录\跟进记录分页.bru`、`跟进记录\新增跟进.bru`、`操作日志\操作日志分页.bru`、`关联商机\关联商机页签.bru`、`关联项目\关联项目页签.bru`、`团队成员\团队成员页签.bru`、`团队成员\添加团队成员.bru`、`团队成员\移除团队成员.bru` -- `A4 客户管理\客户公海\关注客户.bru`、`取消关注客户.bru`、`批量关注客户.bru`、`领取客户.bru`、`批量领取.bru`、`分配客户.bru`、`批量分配.bru`、`抛公海.bru`、`批量抛公海.bru`、`归档客户.bru`、`批量归档.bru`、`恢复客户.bru`、`读取视图形态.bru`、`保存视图形态.bru`(我的客户/客户总览同名) -- `A4 客户管理\战略协议\战略协议页签列表.bru`、`战略协议详情.bru`、`新增战略协议.bru`、`编辑战略协议.bru`、`删除战略协议.bru` -- `A3 商机管理\销售机会\自定义视图\自定义视图列表.bru`、`保存自定义视图.bru`(saved-view 形态佐证,A4 无同名 .bru) - -**后端源码 `D:\code\crm-backend-matt\`**(绝对路径根同上): -- `crm-customer\src\main\java\com\crm\customer\domain\dto\`:CustomerListRowDTO、CustomerBoardSummaryDTO、CustomerCreateDTO、CustomerUpdateDTO、CustomerQuickCreateDTO、CustomerSaveResultDTO、CustomerSimilarHitDTO、CreditCodeCheckDTO、CustomerSearchItemDTO、CustomerDetailHeadDTO、CustomerDetailDTO、FollowCreateDTO、AgreementDTO、CustomerMemberDTO、MemberAddDTO、CustomerBatchFailItem -- `crm-customer\...\domain\param\`:CustomerWorkspacePageParam、CustomerSearchParam、FollowPageParam、OplogPageParam -- `crm-customer\...\domain\enums\`:CustomerStageEnum、CustomerBatchFailReason;`constant\CustomerConstants.java` -- `crm-customer\...\port\`:CustomerOpportunityQueryPort、CompanyLookupPort;`mapper\CustomerMapper.java`(pageWorkspace SQL:opportunityCount 真算/projectCount 恒 0/focusFlag/lastViewTime);`service\impl\CustomerWorkspaceServiceImpl.java`(board 守卫/排序/viewType);`controller\`:CustomerWorkspaceController、CustomerOwnershipController、CustomerFocusController、CustomerController、CustomerDetailController、CustomerAgreementController -- `crm-preference\src\main\java\com\crm\preference\`:controller\SavedViewController、controller\ViewFormController、domain\dto\SavedView、domain\dto\SavedViewCondition -- `crm-base\src\main\java\com\crm\base\domain\`:param\BaseParam、dto\BaseDTO、result\PageResult、result\BatchResult、result\Result -- `crm-dict\src\main\java\com\crm\dict\config\DictDataInitializer.java`(customer_type/follow_way 种子) - -**仓内文档**: -- `.scratch\customer-module\API-SUMMARY.md`(§0/§1/§2.1-2.6/§2.9/§2.14/§3/§5) -- `.scratch\customer-demo-ref\assets\coverage-matrix.md`(入口编号/G1-G6/P3-x 依据) -- `.scratch\customer-frontend-handover\mapping-a4-pages.md`(原型列文案) -- `.scratch\customer-e2e\demo\index.html`(fork 基线渲染口径:`|| '--'`、maskPhone/reveal、旧 loadSummary 读 count/name 的漂移证据) diff --git a/.scratch/customer-demo-ref/assets/acceptance-selfcheck.md b/.scratch/customer-demo-ref/assets/acceptance-selfcheck.md new file mode 100644 index 0000000..59e366e --- /dev/null +++ b/.scratch/customer-demo-ref/assets/acceptance-selfcheck.md @@ -0,0 +1,50 @@ +# 交付四标准自检表(票 15) + +> 对照 map.md Destination 四标准逐条自检;证据均落盘可复查。2026-09-12,票 14 第八跑(40/0 全绿)为验收时点。 + +## 结论速览 + +| # | 标准 | 结论 | 核心证据 | +|---|------|------|----------| +| 1 | 功能覆盖 | **达标** | 69 入口对账零缺口(33 免改+9 新增+16 改造全落地)+ 冒烟唯一路径 91 | +| 2 | 字段对齐 | **达标** | field-alignment.md #1-#69 三表 + K1-K11 校准全落 demo | +| 3 | 流程闭环 | **达标** | 冒烟步 9-25 全链 PASS(create→edit CAS→archive/restore→release→claim→assign→交割→oplog) | +| 4 | 交付物齐备 | **达标** | demo/index.html + smoke.py + smoke-report.json + 4 assets + shots 9 张 + 双仓清单 | + +## 1. 功能覆盖(原型可见入口全部可点且触发对应端点) + +- 对账基线:蓝湖 v29 原型 A4 页族 × API-SUMMARY 85 端点 → [assets/coverage-matrix.md](coverage-matrix.md) 69 入口逐行:无缺口 33 / 新增 9 / 改造 16 / 豁免 14(均有台账依据:01 号票 Answer + gap-report/defectfix/F-15)。 +- 实施对账:16 改造+9 新增入口全部出票落地(09 基建 → 10 列表层 → 11 详情层 → 12 联系人菜单+商机侧 → 13 重流程收尾),无遗留半成品;豁免 14 项在 demo「已知缺陷」面板 C 区静态明示。 +- 端点触达实证:第八跑冒烟 api_urls **唯一路径 91 条**(GET 147 + POST 79),含 workspace/page、pool/board、交割三段、导入三段式、规则族读写、saved-view、focus/star 等全部动作族。 +- 缺陷呈现:14 开放现象(G1-G6/P3-*/D-G1/I-06/POOL-CFG/STUB-LOOKUP)三档呈现(渲染即现象+data-defect 角标+面板),冒烟步 30/31/35 断言角标 11 类目 87 处。 + +## 2. 字段对齐(与 Bruno 出参一致,含脱敏与 "--" 口径) + +- 权威对齐表:[assets/field-alignment.md](field-alignment.md)(1091 行,核心域 #1-#49 / 联系人族+重流程+规则族 #31-#69),逐入口请求参数/出参字段/空值"--"与枚举字典口径三表,每表附 .bru+DTO 出处。 +- K1-K11 校准注记(07 号票收口回写):G4 收窄、关联项目真端点 Noop、看板 summary=cnt/groupValue、oplog action 18 种、contact_source 字典真值、focus-batch Void、quick-create 七必填、电话脱敏 138\*\*\*\*1234、transfer assign_status 契约——demo 冒烟全部按 K 口径断言通过(步 11 金额卡 4 卡恒 "--"、步 16 列头无「负责人」+明文/脱敏切换、步 22/24 交割明细 assignStatus)。 +- 冒烟侧 40 步的 note 全部携带字段级实证值(qaRet successCount/failedRows、import result 计数、pool total、dedup mode/threshold),报告落盘可追溯。 + +## 3. 流程闭环(新增→归档/抛公海全链路 + 操作日志留痕) + +- 主链(冒烟步 8-25 连续 PASS):登录→新建(L2 相似 needConfirm→confirmSimilar 重发)→编辑 CAS(version 0→1 名字-改落库)→详情 8 页签→归档/恢复(archive_status 2→1→2 + oplog≥2)→导入三段式(预检 1 失败行→确认执行→失败明细)→联系人 quickAdd/batchEdit/check-phone/delete→抛公海 release→pool 勾选→claim→archive→restore→再 archive→assign(successCount=1)。 +- 商机联动链(步 23-24):从客户发起建商机→抛公海被进行中商机 67007 阻断→关闭商机→放行→交割 preview→initiate→detail assignStatus 变化(assign 目标动态取 assignable[0],排除发起人与总监本人)。 +- oplog 留痕:ARCHIVE/RESTORE/CREATE action 断言(步 19 action=CREATE 筛选、步 25 oplog=3)。 +- 规则族回写还原(步 26-28):dedup 阈值 80→90→80 还原+匹配方式不被污染(mode==2)、reminder 非法 0→64023→还原 30/7——共享库无污染退出。 + +## 4. 交付物齐备 + +| 交付物 | 路径 | 状态 | +|--------|------|------| +| 单文件 Demo | `.scratch/customer-demo-ref/demo/index.html`(2925+ 行) | OK | +| 冒烟脚本 | `demo/smoke.py`(40 步,py_compile 通过,无 BOM) | OK | +| PASS/FAIL 报告 | `demo/smoke-report.json`(ALL_PASS=true,40/0,176.4s) | OK | +| 冒烟截图 | `demo/shots/`(9 张关键现场) | OK | +| 对账矩阵 | `assets/coverage-matrix.md` | OK | +| 字段对齐清单 | `assets/field-alignment.md` | OK | +| 冒烟步骤表 | `assets/smoke-plan.md` | OK | +| 商机依赖清单 | `assets/opp-deps.md` | OK | +| 四标准自检 | `assets/acceptance-selfcheck.md`(本文件) | OK | +| 双仓未提交变更清单 | `assets/uncommitted-changes.md` | OK | + +- 纪律自证:零 PUT/DELETE(方法分布 GET 147+POST 79)、console error=0、http_fails=0、4xx 走业务弹窗通道(67003/64023/67007 三处实证)。 +- 环境观察(非缺陷,面板 D 区):共享库存量 source 旧 code 未迁移;e2c seed 需冒烟重建(票 14 ensure_seeds 幂等自举解决)。 diff --git a/.scratch/customer-demo-ref/assets/smoke-plan.md b/.scratch/customer-demo-ref/assets/smoke-plan.md index aa1b652..02ec0da 100644 --- a/.scratch/customer-demo-ref/assets/smoke-plan.md +++ b/.scratch/customer-demo-ref/assets/smoke-plan.md @@ -47,8 +47,8 @@ py -X utf8 .scratch/customer-demo-ref/demo/smoke.py # 系统 Python 3.13 + | 10 | 编辑客户:回显(version CAS)→改备注→保存 | edit?id= 成功;列表刷新生效 | UI+NET | | 11 | 详情头部:detail-head 渲染 + 金额卡 | 4 张金额卡恒"--"(P3-6 data-defect)〔D〕;计数/负责人/跟进摘要有值 | UI | | 12 | 8 页签全遍历可切换 | 信息/联系人/跟进/关联商机/关联项目/战略协议/团队成员/操作日志 8 页签 | UI | -| 13 | 页签1 信息:16 字段栅格 | 系统信息四件套恒"--"(G4 data-defect)〔D〕;creditCode 脱敏形态断言 | UI | -| 14 | 页签4/5:关联商机 7 列真名 + 关联项目恒"--" | 商机列头数=7(G2 data-defect)〔D〕;项目页签"--"(#42 占位) | UI | +| 13 | 页签1 信息:16 字段栅格 | 创建人/更新人恒"--"、创建/更新时间实测有值(G4 data-defect)〔D〕;creditCode 明文回显断言(K10 核心域无字段级脱敏) | UI | +| 14 | 页签4/5:关联商机 7 列真名 + 关联项目恒"--" | 商机列头数=7(G2 data-defect)〔D〕;项目页签"--"(K2 真端点 CustomerProjectQueryPort·Noop 空态) | UI+NET | | 15 | 页签7 团队成员:添加 BUDDY→渲染→移除 | member/add·remove 成功;**无职务/加入时间列**(G3 data-defect)〔D〕 | UI+DB | | 16 | 页签2 联系人:quickAdd 2 行→列表 8 列→编辑→reveal | 列表**无负责人列**(G5)〔D〕;reveal 明文+DB reveal_log;电话脱敏形态 | UI+NET+DB | | 17 | 联系人 batchEdit(含 D-G1 注记)+ check-phone + 删除 | batchEdit 空串提交=不改(D-G1 注记可见)〔D〕;check-phone 命中王重复;删除双刷 | UI+DB | @@ -83,7 +83,7 @@ py -X utf8 .scratch/customer-demo-ref/demo/smoke.py # 系统 Python 3.13 + | 31 | 角标钩子扫描 | `[data-defect]` 计数≥12(G1-G6/P3-3/P3-4/P3-5/P3-6/D-G1/I-06/POOL-CFG/STUB-LOOKUP) | UI | | 32 | I-06 双现象注记(pool workspace) | pool 汇总条注记文本含「67001」+「记忆成功」;pool 形态下拉无 board 选项 | UI | | 33 | 豁免入口不出现 | 换负责人按钮/操作日志导出/完整金额开关/导入触发校验复选框 count=0 | UI | -| 34 | G 系列现象复核(合并断言) | 跟进筛选无操作人项(G1)、商机 7 列(G2)、成员 2 列缺(G3)、四件套"--"(G4)、联系人无负责人列(G5)、联系人日志空态(G6) | UI | +| 34 | G 系列现象复核(合并断言) | 跟进筛选无操作人项(G1)、商机 7 列(G2)、成员 2 列缺(G3)、创建人/更新人"--"(G4)、联系人无负责人列(G5)、联系人日志空态(G6) | UI | | 35 | 金额卡与页签5 "--" 口径 | P3-6 四卡"--";关联项目页签"--" | UI | | 36 | company-lookup NO_HIT 现象 | 表单联想无命中提示+F6 批量更新按钮 stub 文案 | UI | diff --git a/.scratch/customer-demo-ref/assets/uncommitted-changes.md b/.scratch/customer-demo-ref/assets/uncommitted-changes.md new file mode 100644 index 0000000..45746d4 --- /dev/null +++ b/.scratch/customer-demo-ref/assets/uncommitted-changes.md @@ -0,0 +1,44 @@ +# 双仓未提交变更清单(票 15) + +> 实测时点:2026-09-12(票 14 第八跑全绿后)。**agent 不提交 git**——本清单仅供用户审查后自行处置。 +> 勘误:Bruno 文档仓实际路径 = **`E:\code\crm-api-docs`**(map.md Notes 与票 15 Scope 中的 `D:\code\crm-api-docs` 为换机前旧路径,已实测不存在)。 + +## 一、backend 仓(e:\code\crm-backend-matt) + +`git status --porcelain` 共 51 行,**全部属于本 effort(.scratch/customer-demo-ref)与运行时日志;前序 effort 的 java/.bru 变更已不在工作区(用户已提交)**。 + +### 本 effort 修改(M/D,10 项) + +| 状态 | 文件 | 说明 | +|------|------|------| +| D | `.scratch/customer-demo-ref/assets/_fa-core.md` | 票 07 收口:中间分片已并入 field-alignment.md 后删除 | +| M | `.scratch/customer-demo-ref/assets/smoke-plan.md` | 票 08/14 迭代:40 步表随冒烟实跑校准 | +| M | `.scratch/customer-demo-ref/demo/index.html` | 票 09-13 改造 + 票 14 doEdit/doCreate needConfirm 与 onclick 修复 | +| M | `.scratch/customer-demo-ref/issues/07-field-alignment-checklist.md` | K1-K11 校准注记回写 | +| M | `.scratch/customer-demo-ref/issues/10-core-list.md` | Answer + resolved | +| M | `.scratch/customer-demo-ref/issues/11-core-detail.md` | Answer + resolved | +| M | `.scratch/customer-demo-ref/issues/12-contacts-opp-entry.md` | Answer + resolved | +| M | `.scratch/customer-demo-ref/issues/13-flow-rules-tail.md` | Answer + resolved | +| M | `.scratch/customer-demo-ref/issues/14-smoke-script.md` | Answer + resolved | +| M | `.scratch/customer-demo-ref/map.md` | Decisions 09/10/11/14 回填 + 收口 | + +### 本 effort 新增(??,交付物与取证) + +- **核心交付**:`demo/smoke.py`、`demo/smoke-report.json`、`demo/shots/`(15 张:s01-s40 现场图 + t10-t13 快验图)、`assets/acceptance-selfcheck.md`、`assets/uncommitted-changes.md`(本文件) +- **诊断/扫描临时脚本**(可删):`demo/_t14*.py`(diag/db/org/org2/org3/api/cols/scan)、`_quickcheck*.py`×6、`_scan.py`、`_t12scan.py`、`demo/_q.py` +- **运行日志/临时**(可删):`demo/_jarbuild.log`、`_run7.log`、`_run8.log`、`_server.log`、`demo/tmp_xlsx/`、`demo/__pycache__/` + +### 前序遗留 / 运行时 + +- `logs/crm-app.log`(M)与 `logs/crm-app.log.2026-09-11.0.gz`(??):本地起服运行日志,非源码变更。 + +## 二、Bruno 文档仓(E:\code\crm-api-docs) + +`git status --porcelain` 共 2 行,**均为前序 effort(customer-frontend-handover 收官时 A4 目录迁移)遗留,非本 effort 产物**;本 effort 未改动文档仓任何文件。 + +| 状态 | 路径(八进制转义已还原) | 说明 | +|------|------|------| +| ?? | `A4 客户管理/客户详情/战略协议/` | frontend-handover 票 05 迁移产物:战略协议 .bru 自客户详情根部迁入独立目录(未 git add) | +| ?? | `A4 客户管理/联系人/联系人导入/` | 同上:联系人导入 .bru 迁入「联系人」子目录(未 git add) | + +> 前序记忆(frontend-handover 收官时)为 M3+D11+??11——当前仅余上述 2 个 untracked 目录,其余变更用户已在收官后提交。 diff --git a/.scratch/customer-demo-ref/demo/__pycache__/_t14d7.cpython-313.pyc b/.scratch/customer-demo-ref/demo/__pycache__/_t14d7.cpython-313.pyc new file mode 100644 index 0000000..6cff004 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/__pycache__/_t14d7.cpython-313.pyc differ diff --git a/.scratch/customer-demo-ref/demo/__pycache__/smoke.cpython-313.pyc b/.scratch/customer-demo-ref/demo/__pycache__/smoke.cpython-313.pyc new file mode 100644 index 0000000..def6125 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/__pycache__/smoke.cpython-313.pyc differ diff --git a/.scratch/customer-demo-ref/demo/_jarbuild.log b/.scratch/customer-demo-ref/demo/_jarbuild.log new file mode 100644 index 0000000..00bd539 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_jarbuild.log @@ -0,0 +1,335 @@ +[INFO] Scanning for projects... +[WARNING] +[WARNING] Some problems were encountered while building the effective model for com.crm:crm-auth:jar:1.0.0-SNAPSHOT +[WARNING] 'dependencies.dependency.version' for org.projectlombok:lombok:jar is either LATEST or RELEASE (both of them are being deprecated) @ line 60, column 22 +[WARNING] +[WARNING] Some problems were encountered while building the effective model for com.crm:crm-file:jar:1.0.0-SNAPSHOT +[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.projectlombok:lombok:jar -> duplicate declaration of version (?) @ line 49, column 21 +[WARNING] +[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. +[WARNING] +[WARNING] For this reason, future Maven versions might no longer support building such malformed projects. +[WARNING] +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Build Order: +[INFO] +[INFO] crm [pom] +[INFO] crm-base [jar] +[INFO] crm-file [jar] +[INFO] crm-auth [jar] +[INFO] crm-dict [jar] +[INFO] crm-rule [jar] +[INFO] crm-preference [jar] +[INFO] crm-lead [jar] +[INFO] crm-customer [jar] +[INFO] crm-opportunity [jar] +[INFO] crm-project [jar] +[INFO] crm-log [jar] +[INFO] crm-app [jar] +[INFO] +[INFO] ----------------------------< com.crm:crm >----------------------------- +[INFO] Building crm 1.0.0-SNAPSHOT [1/13] +[INFO] from pom.xml +[INFO] --------------------------------[ pom ]--------------------------------- +[INFO] +[INFO] --------------------------< com.crm:crm-base >-------------------------- +[INFO] Building crm-base 1.0.0-SNAPSHOT [2/13] +[INFO] from crm-base\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-base --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-base\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-base\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-base --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-base --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-base\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-base --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-base --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-base --- +[INFO] +[INFO] --------------------------< com.crm:crm-file >-------------------------- +[INFO] Building crm-file 1.0.0-SNAPSHOT [3/13] +[INFO] from crm-file\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-file --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-file\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-file\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-file --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-file --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-file\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-file --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-file --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-file --- +[INFO] +[INFO] --------------------------< com.crm:crm-auth >-------------------------- +[INFO] Building crm-auth 1.0.0-SNAPSHOT [4/13] +[INFO] from crm-auth\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-auth --- +[INFO] Copying 1 resource from src\main\resources to target\classes +[INFO] Copying 0 resource from src\main\resources to target\classes +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-auth --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-auth --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-auth\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-auth --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-auth --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-auth --- +[INFO] +[INFO] --------------------------< com.crm:crm-dict >-------------------------- +[INFO] Building crm-dict 1.0.0-SNAPSHOT [5/13] +[INFO] from crm-dict\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-dict --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-dict\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-dict\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-dict --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-dict --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-dict\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-dict --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-dict --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-dict --- +[INFO] +[INFO] --------------------------< com.crm:crm-rule >-------------------------- +[INFO] Building crm-rule 1.0.0-SNAPSHOT [6/13] +[INFO] from crm-rule\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-rule --- +[INFO] Copying 0 resource from src\main\resources to target\classes +[INFO] Copying 1 resource from src\main\resources to target\classes +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-rule --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-rule --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-rule\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-rule --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-rule --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-rule --- +[INFO] +[INFO] -----------------------< com.crm:crm-preference >----------------------- +[INFO] Building crm-preference 1.0.0-SNAPSHOT [7/13] +[INFO] from crm-preference\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-preference --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-preference\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-preference\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-preference --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-preference --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-preference\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-preference --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-preference --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-preference --- +[INFO] +[INFO] --------------------------< com.crm:crm-lead >-------------------------- +[INFO] Building crm-lead 1.0.0-SNAPSHOT [8/13] +[INFO] from crm-lead\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-lead --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-lead\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-lead\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-lead --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-lead --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-lead\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-lead --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-lead --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-lead --- +[INFO] +[INFO] ------------------------< com.crm:crm-customer >------------------------ +[INFO] Building crm-customer 1.0.0-SNAPSHOT [9/13] +[INFO] from crm-customer\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-customer --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-customer\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-customer\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-customer --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-customer --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-customer\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-customer --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-customer --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-customer --- +[INFO] +[INFO] ----------------------< com.crm:crm-opportunity >----------------------- +[INFO] Building crm-opportunity 1.0.0-SNAPSHOT [10/13] +[INFO] from crm-opportunity\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-opportunity --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-opportunity\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-opportunity\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-opportunity --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-opportunity --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-opportunity\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-opportunity --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-opportunity --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-opportunity --- +[INFO] +[INFO] ------------------------< com.crm:crm-project >------------------------- +[INFO] Building crm-project 1.0.0-SNAPSHOT [11/13] +[INFO] from crm-project\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-project --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-project\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-project\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-project --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-project --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-project\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-project --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-project --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-project --- +[INFO] +[INFO] --------------------------< com.crm:crm-log >--------------------------- +[INFO] Building crm-log 1.0.0-SNAPSHOT [12/13] +[INFO] from crm-log\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-log --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-log\src\main\resources +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-log\src\main\resources +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-log --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-log --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-log\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-log --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-log --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-log --- +[INFO] +[INFO] --------------------------< com.crm:crm-app >--------------------------- +[INFO] Building crm-app 1.0.0-SNAPSHOT [13/13] +[INFO] from crm-app\pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ crm-app --- +[INFO] Copying 2 resources from src\main\resources to target\classes +[INFO] Copying 0 resource from src\main\resources to target\classes +[INFO] +[INFO] --- compiler:3.13.0:compile (default-compile) @ crm-app --- +[INFO] Nothing to compile - all classes are up to date. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ crm-app --- +[INFO] skip non existing resourceDirectory E:\code\crm-backend-matt\crm-app\src\test\resources +[INFO] +[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ crm-app --- +[INFO] No sources to compile +[INFO] +[INFO] --- surefire:3.2.5:test (default-test) @ crm-app --- +[INFO] Tests are skipped. +[INFO] +[INFO] --- jar:3.4.2:jar (default-jar) @ crm-app --- +[INFO] +[INFO] --- spring-boot:3.3.5:repackage (repackage) @ crm-app --- +[INFO] Replacing main artifact E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar with repackaged archive, adding nested dependencies in BOOT-INF/. +[INFO] The original artifact has been renamed to E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar.original +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Summary for crm 1.0.0-SNAPSHOT: +[INFO] +[INFO] crm ................................................ SUCCESS [ 0.002 s] +[INFO] crm-base ........................................... SUCCESS [ 1.312 s] +[INFO] crm-file ........................................... SUCCESS [ 0.182 s] +[INFO] crm-auth ........................................... SUCCESS [ 0.253 s] +[INFO] crm-dict ........................................... SUCCESS [ 0.119 s] +[INFO] crm-rule ........................................... SUCCESS [ 0.185 s] +[INFO] crm-preference ..................................... SUCCESS [ 0.118 s] +[INFO] crm-lead ........................................... SUCCESS [ 0.145 s] +[INFO] crm-customer ....................................... SUCCESS [ 0.197 s] +[INFO] crm-opportunity .................................... SUCCESS [ 0.176 s] +[INFO] crm-project ........................................ SUCCESS [ 0.144 s] +[INFO] crm-log ............................................ SUCCESS [ 0.138 s] +[INFO] crm-app ............................................ SUCCESS [ 1.167 s] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 4.467 s +[INFO] Finished at: 2026-09-12T00:11:07+08:00 +[INFO] ------------------------------------------------------------------------ diff --git a/.scratch/customer-demo-ref/demo/_run7.log b/.scratch/customer-demo-ref/demo/_run7.log new file mode 100644 index 0000000..28baf67 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_run7.log @@ -0,0 +1,58 @@ +sweep 娓呯悊娈嬬暀 0 琛? +seed 鑷妇锛坖obc=chairman锛?.. + [seed] 鏌ラ噸鍖归厤鏂瑰紡褰掍綅 FUZZY(2) + [seed] 鏌ラ噸鍩虹嚎鍛戒腑鏁?1 +python.exe : E:\code\crm-backend-matt\.scratch\customer-e2e\.venv10\Lib\site-packages\openpyxl\styles\stylesheet.py:237 +: UserWarning: Workbook contains no default style, apply openpyxl's default +所在位置 行:1 字符: 1 ++ & "E:\code\crm-backend-matt\.scratch\customer-e2e\.venv10\Scripts\pyt ... ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo : NotSpecified: (E:\code\crm-bac...npyxl's default:String) [], RemoteException + + FullyQualifiedErrorId : NativeCommandError + + warn("Workbook contains no default style, apply openpyxl's default") + xlsx 灏辩华: e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\tmp_xlsx\cust.xlsx / e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\tmp_xlsx\cont.xlsx +PASS 01 鎵撳紑Demo+uid鐧诲綍+棣栧睆鍒楄〃娓叉煋 | rows=10 +PASS 02 涓墂orkspace鍒囨崲;pool涓嶅彂board+I-06娉ㄨ[D] | overview璇锋眰OK=True;pool鏂拌姹?鏉?i06鍙=True +PASS 03 鍐呯疆瑙嗗浘涓嬫媺浜斿€?鍒嘑OLLOW_UP_DUE | opts=['ASSIGNED', 'COLLABORATING', 'FOLLOW_UP_DUE', 'FOCUSED', 'RECENT'] +PASS 04 鍒楃瓫閫夐樁娈?宸叉垚浜? | 璇锋眰鍙傛暟 customerStage=3 宸插懡涓? +PASS 05 褰掓。鎬佸紑鍏?e2c-宸插綊妗e彲瑙? | archiveStatus=2鍛戒腑=True;鏍蜂緥鍙=True +PASS 06 saved-view 鏂板缓鈫掗€変腑鏌ヨ鈫掑垹闄? | save=True;閫変腑甯avedViewId=True;鍒犲悗娑堝け=True;body=POST /api/preference/view/save?scopeKey=customer.mine # {"name":"e2c-dr-瑙嗗浘","isDefault":false,"seqNo":10,"conditions":[{"field":"keyword","operator":" +PASS 07 褰㈡€佸亸濂給verview鍒囩湅鏉库啋娓叉煋鈫掕繕鍘焞ist | 鐪嬫澘鍒?3;cards璇锋眰=True;杩樺師=True +PASS 08 宸ュ晢鑱旀兂(companyName)+NO_HIT鐜拌薄+STUB-LOOKUP娉ㄨ[D] | 鏈煡璇㈠埌鍖归厤浼佷笟锛堜竴鏈熶紒鏌ユ煡 port 涓?stub 鎭?NO_HIT锛屽瀹炲憟鐜帮紱鍙墜宸ュ綍鍏ワ紝鐪熷疄婧愭帴鍏ュ悗鑷姩婵€娲伙級銆? +PASS 09 鍚嶇О鏌ラ噸needConfirm+similarHits鈫抍onfirmSimilar閲嶅彂鈫掑垱寤烘垚鍔? | simbox=鐩镐技鍛戒腑 1 鏉★細e2c-dr-鎭掍俊杈剧鎶€鏈夐檺璐d换鍏徃锛堣礋璐d汉=缃椾紵鍋ワ紝娼滃湪瀹㈡埛锛屾湁鏁堬級浠嶈鍒涘缓锛?纭鍒涘缓锛坈onfirmSimilar=;toast=鍒涘缓鎴愬姛 id=753770502094323712;澶瑰叿A=753770502094323712 +FAIL 10 缂栬緫瀹㈡埛鍥炴樉+CAS淇濆瓨(鍚浉浼肩‘璁ら噸鍙? | 鍥炴樉鍚?e2c-dr-鎭掍俊杈剧鎶€鏈夐檺璐d换鍏徃;simbox=-;toast=;db=e2c-dr-鎭掍俊杈剧鎶€鏈夐檺璐d换鍏徃 v0 +PASS 11 璇︽儏澶撮儴娓叉煋+4閲戦鍗℃亽--[D] | cards=['--', '--', '--', '-- / --'];P3-6瑙掓爣=1 +PASS 12 8椤电鍏ㄩ亶鍘?鑱旂郴浜洪《绾ц彍鍗昪ontact/page | subs=['info', 'contacts', 'follow', 'opps', 'projects', 'agreements', 'members', 'oplog'];contact/page琛?10;鏂板errs=[] +PASS 13 淇℃伅鏍呮牸16瀛楁+G4鍒涘缓/鏇存柊浜?-[D]+creditCode鏄庢枃 | kv=18;鍒涘缓浜?--;淇$敤浠g爜=91440101E2CTEST001 +PASS 14 鍟嗘満7鍒?G2-D)+椤圭洰椤电Noop绌烘€?contact/search鍛戒腑 | 鍟嗘満鍒?['鍟嗘満ID', '鍟嗘満鍚嶇О', '闃舵', '棰勮閲戦', '璐熻矗浜篒D', '璐熻矗浜?, '鏈€杩戞洿鏂?];Noop绌烘€?True;search=濮撳悕鑱屽姟鐢佃瘽鍏抽敭鑱旂郴浜烘潵婧愭墍灞炲鎴峰鎴风紪鍙峰紶鍏抽敭钁d簨闀?38****0001鏄痗ontact_source_01e2c- +PASS 15 鎴愬憳鍔燘UDDY鈫掓覆鏌撯啋绉婚櫎(G3-D鏃犺亴鍔?鍔犲叆鏃堕棿鍒? | 鍒楀ご=['鎴愬憳', '瑙掕壊', '鎿嶄綔'];DB鎴愬憳琛?27;memberUserIds閲嶅閿?True +PASS 16 鑱旂郴浜簈uickAdd2琛?G5鏃犺礋璐d汉鍒梉D]+鐢佃瘽鑴辨晱+reveal鏄庢枃+DB鍩嬬偣 | 鑴辨晱=True;DB鑱旂郴浜?5;reveal_log=7;鏄庢枃=True;鍒楀ご=['', '#', '濮撳悕', '鑱屽姟', '鑱旂郴鐢佃瘽', '鍏抽敭', '鍐呯嚎', '鏉ユ簮', '绀煎搧澶囨敞', '鎿嶄綔'];qaRet={"successCount":2,"failedRows":[]} +PASS 17 batchEdit绌轰覆=DB涓嶆敼(D-G1)[D]+check-phone鍛戒腑+鍒犻櫎鍙屽埛 | DB phone=13812340001;D-G1瑙掓爣=1;check-phone=瀹㈡埛缂栧彿--瀹㈡埛鍚嶇О--瀹㈡埛绫诲瀷--闃舵--瀹㈡埛鏄熺骇--鍏崇郴鏄熺骇--鎴樼暐鍗忚--;鍒犲悗琛?4(鍒犲墠5,del_ok=True,errs+0);lid=753770624404422656;names=鏉庡啋鐑?璧靛啋鐑?鏉庢櫘閫?鐜嬮噸澶?寮犲叧閿? +PASS 18 鍐欒窡杩?鏃ユ湡鍒嗙粍+followWay绛涢€? | way閫夐」=6(绌?5);鏃ユ湡鍒嗙粍=5;绛涢€?True +PASS 19 鍏虫敞/閲嶇偣鏍囪+oplog鐣欑棔+action绛涢€? | action=CREATE绛涢€夊惈鏂板瀹㈡埛=True;action=FOLLOW绛涢€?True;DB璺熻繘=23 +PASS 20 瀹㈡埛瀵煎叆涓夋寮?缂虹渷浠介妫€FAIL鈫扗ONE璁℃暟=棰勬鈫掓槑缁嗗惢鍚? | 棰勬 t=2 ins=1 fail=1;taskId=753770723947839488;result={'taskId': '753770723947839488', 'importMode': 'APPEND_ONLY', 'templateVersion': 'V1', 'status': 2, 'totalCount': 2, 'insertCount': 1, 'updateCount': 0, 'unchangedCount': 0, 'failCount': 1, 'suspectCount': 0, 'failReason': None, 'creatorName': Non +PASS 21 瀵煎叆浠诲姟鍒楄〃+status/importMode杩囨护+P3-3娉ㄨ[D] | status杩囨护=True;mode杩囨护=True;P3-3=1 +PASS 22 鑱旂郴浜哄鍏ヤ笁娈靛紡+P3-3鏃犳牎楠屽閫夋[D] | 棰勬=棰勬瀹屾垚锛堜换鍔?753770764947161088 寰呯‘璁わ級锛氬叡 2 琛岋紝棰勮鏂板 2銆佹洿鏂?0銆佸け璐?0銆佺枒浼奸噸澶?;result={'taskId': '753770764947161088', 'customerId': '753770502094323712', 'importMode': 'APPEND_ONLY', 'templateVersion': 'V1', 'status': 2, 'totalCount': 2, 'insertCount': 2, 'updateCount': 0, 'unchangedCount': 0, 'failCount': 0, 'su +PASS 23 鍟嗘満鑱斿姩閾?UI寤哄晢鏈衡啋鎶涘叕娴锋嫤鎴啋鍏冲晢鏈衡啋鏀捐) | 鍟嗘満=753770801903173632;鐘舵€?鈫?;涓€娆elease鎷︽埅=True(toast=鍟嗘満宸插垱寤?id=753770801903173632锛涘鎴疯鎯呫€屽叧鑱斿晢鏈恒€嶉〉绛惧彲鍙嶆煡 || {"total":1,"s);杩涘叕娴?True +PASS 24 浜ゅ壊(preview鍦堝畾鈫抜nitiate鈫抪age鈫抎etail鈫抋ssignable鈫抋ssign鏄庣粏鎬佸彉鍖?F-13娓卨eftover=0) | 鍗曞彿=JG202609120001;鍦堝畾鍚す鍏?True;鏄庣粏=1鈫抋ssign鍚庡彉鍖?True(assign瀵硅薄=99021002);UI琛?10 +PASS 25 褰掑睘鍔ㄤ綔鏃?release鈫抍laim鈫抋rchive鈫抮estore鈫掑啀archive+oplog+assign) | 杩涘叕娴?True(pool榛樿瑙嗗浘琛?0,娓呰鍥惧悗琛?1);claim=True({"total":1,"successCount":1,"failCount":);archive=True({"total":1,"successCount":1,"failCount":);assign=True(success=1 fail=0);鎭㈠1鈫掑啀褰掓。2;oplog=3 +PASS 26 鏌ラ噸璁剧疆璇烩啋鏀?0鈫抯ave鐢熸晥鈫掕繕鍘?鍚尮閰嶆柟寮忎笉琚薄鏌? | 鍘?80鈫?0鈫掕繕鍘?80;mode=2(鍘?) +PASS 27 check-name鍛戒腑e2c-鎭掍俊杈?淇$敤浠g爜鎾炵爜67003(L3纭嫤)+check-credit-code L1 | check-name=check-name锛歔{"customerId":"753770361971015680","customerName;err=缁熶竴绀句細淇$敤浠g爜宸茶鍗犵敤锛氱郴缁熷凡瀛樺湪璇ヤ紒涓?(code=67003);creditCode.exists=True +PASS 28 瓒呮湡鎻愰啋save闈炴硶0鈫?4023toast鈫掕繕鍘?0/7 | 64023=True;杩樺師=30/7(鍘?0/7) +PASS 29 鍏捣姹犻厤缃崰浣嶅崱鍙[D] | 瑙掓爣=1;绂佺敤杈撳叆=2 +PASS 30 缂洪櫡鍙拌处闈㈡澘(A鈮?4/B4/C14/D1+鍥哄畾澹版槑) | A=14 B=4 C=14 D=1;娓叉煋琛?33 +PASS 31 data-defect瑙掓爣鈮?2涓斿叧閿被鐩綈鍏?澶氶〉绛剧疮璁? | 绱=87;绫荤洰=['D-G1', 'G1', 'G2', 'G3', 'G4', 'G5', 'I-06', 'P3-3', 'P3-6', 'POOL-CFG', 'STUB-LOOKUP'] +PASS 32 I-06鍙岀幇璞?pool鏃燽oard閫夐」+娉ㄨ鍚?7001/璁板繂鎴愬姛) | fForm閫夐」=['list', 'split'] +PASS 33 璞佸厤鍏ュ彛涓嶅嚭鐜?鎹㈣礋璐d汉/鏃ュ織瀵煎嚭/瀹屾暣閲戦寮€鍏?瀵煎叆鏍¢獙澶嶉€夋) | 鍛戒腑=0 +PASS 34 G绯诲垪鍚堝苟澶嶆牳(G1鏃犳搷浣滀汉绛涢€?G2涓冨垪/G3涓ゅ垪缂?G4--[D]/G5鏃犺礋璐d汉鍒?G6绌烘€? | G1=True G2=True G3=True G4=True G5=True G6=True +PASS 35 閲戦鍗3-6鍥涘崱--鍙e緞+鍏宠仈椤圭洰Noop绌烘€? | cards=['--', '--', '--', '-- / --'] +PASS 36 company-lookup NO_HIT+F6 stub鏂囨 | NO_HIT=True;F6stub=True +PASS 37 console/pageerror=0 | 鏃犻敊璇? +PASS 38 闆禤UT/DELETE(ADR-0017) | 杩濅緥=[] +PASS 39 绔偣瑕嗙洊骞垮害(鍞竴璺緞鈮?0+鐭╅樀娓呭崟50鏉? | 鍞竴璺緞=92;缂哄け=[] +PASS 40 澶瑰叿姝i棬娓呮壂+瑙勫垯/褰㈡€佸亸濂借繕鍘熸牳瀵? | 娓呮壂=4琛?娈嬬暀=0;dedup=80(鍘?0);reminder=30(鍘?0);overview褰㈡€?list + +==== summary ==== 40 steps, 1 failed (178.6s) 鈫?e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\smoke-report.json + FAIL 10 缂栬緫瀹㈡埛鍥炴樉+CAS淇濆瓨(鍚浉浼肩‘璁ら噸鍙? | 鍥炴樉鍚?e2c-dr-鎭掍俊杈剧鎶€鏈夐檺璐d换鍏徃;simbox=-;toast=;db=e2c-dr-鎭掍俊杈剧鎶€鏈夐檺璐d换鍏徃 v0 +ALL_PASS: False diff --git a/.scratch/customer-demo-ref/demo/_run8.log b/.scratch/customer-demo-ref/demo/_run8.log new file mode 100644 index 0000000..ac45f48 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_run8.log @@ -0,0 +1,56 @@ +sweep 娓呯悊娈嬬暀 0 琛? +seed 鑷妇锛坖obc=chairman锛?.. + [seed] 鏌ラ噸鍩虹嚎鍛戒腑鏁?1 +python.exe : E:\code\crm-backend-matt\.scratch\customer-e2e\.venv10\Lib\site-packages\openpyxl\styles\stylesheet.py:237 +: UserWarning: Workbook contains no default style, apply openpyxl's default +所在位置 行:1 字符: 1 ++ & "E:\code\crm-backend-matt\.scratch\customer-e2e\.venv10\Scripts\pyt ... ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo : NotSpecified: (E:\code\crm-bac...npyxl's default:String) [], RemoteException + + FullyQualifiedErrorId : NativeCommandError + + warn("Workbook contains no default style, apply openpyxl's default") + xlsx 灏辩华: e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\tmp_xlsx\cust.xlsx / e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\tmp_xlsx\cont.xlsx +PASS 01 鎵撳紑Demo+uid鐧诲綍+棣栧睆鍒楄〃娓叉煋 | rows=10 +PASS 02 涓墂orkspace鍒囨崲;pool涓嶅彂board+I-06娉ㄨ[D] | overview璇锋眰OK=True;pool鏂拌姹?鏉?i06鍙=True +PASS 03 鍐呯疆瑙嗗浘涓嬫媺浜斿€?鍒嘑OLLOW_UP_DUE | opts=['ASSIGNED', 'COLLABORATING', 'FOLLOW_UP_DUE', 'FOCUSED', 'RECENT'] +PASS 04 鍒楃瓫閫夐樁娈?宸叉垚浜? | 璇锋眰鍙傛暟 customerStage=3 宸插懡涓? +PASS 05 褰掓。鎬佸紑鍏?e2c-宸插綊妗e彲瑙? | archiveStatus=2鍛戒腑=True;鏍蜂緥鍙=True +PASS 06 saved-view 鏂板缓鈫掗€変腑鏌ヨ鈫掑垹闄? | save=True;閫変腑甯avedViewId=True;鍒犲悗娑堝け=True;body=POST /api/preference/view/save?scopeKey=customer.mine # {"name":"e2c-dr-瑙嗗浘","isDefault":false,"seqNo":10,"conditions":[{"field":"keyword","operator":" +PASS 07 褰㈡€佸亸濂給verview鍒囩湅鏉库啋娓叉煋鈫掕繕鍘焞ist | 鐪嬫澘鍒?3;cards璇锋眰=True;杩樺師=True +PASS 08 宸ュ晢鑱旀兂(companyName)+NO_HIT鐜拌薄+STUB-LOOKUP娉ㄨ[D] | 鏈煡璇㈠埌鍖归厤浼佷笟锛堜竴鏈熶紒鏌ユ煡 port 涓?stub 鎭?NO_HIT锛屽瀹炲憟鐜帮紱鍙墜宸ュ綍鍏ワ紝鐪熷疄婧愭帴鍏ュ悗鑷姩婵€娲伙級銆? +PASS 09 鍚嶇О鏌ラ噸needConfirm+similarHits鈫抍onfirmSimilar閲嶅彂鈫掑垱寤烘垚鍔? | simbox=鐩镐技鍛戒腑 1 鏉★細e2c-dr-鎭掍俊杈剧鎶€鏈夐檺璐d换鍏徃锛堣礋璐d汉=缃椾紵鍋ワ紝娼滃湪瀹㈡埛锛屾湁鏁堬級浠嶈鍒涘缓锛?纭鍒涘缓锛坈onfirmSimilar=;toast=鍒涘缓鎴愬姛 id=753771843382411264;澶瑰叿A=753771843382411264 +PASS 10 缂栬緫瀹㈡埛鍥炴樉+CAS淇濆瓨(鍚浉浼肩‘璁ら噸鍙? | 鍥炴樉鍚?e2c-dr-鎭掍俊杈剧鎶€鏈夐檺璐d换鍏徃;simbox=鍛戒腑;toast=淇濆瓨鎴愬姛;db=e2c-dr-鎭掍俊杈剧鎶€鏈夐檺璐d换鍏徃-鏀?v1 +PASS 11 璇︽儏澶撮儴娓叉煋+4閲戦鍗℃亽--[D] | cards=['--', '--', '--', '-- / --'];P3-6瑙掓爣=1 +PASS 12 8椤电鍏ㄩ亶鍘?鑱旂郴浜洪《绾ц彍鍗昪ontact/page | subs=['info', 'contacts', 'follow', 'opps', 'projects', 'agreements', 'members', 'oplog'];contact/page琛?10;鏂板errs=[] +PASS 13 淇℃伅鏍呮牸16瀛楁+G4鍒涘缓/鏇存柊浜?-[D]+creditCode鏄庢枃 | kv=18;鍒涘缓浜?--;淇$敤浠g爜=91440101E2CTEST001 +PASS 14 鍟嗘満7鍒?G2-D)+椤圭洰椤电Noop绌烘€?contact/search鍛戒腑 | 鍟嗘満鍒?['鍟嗘満ID', '鍟嗘満鍚嶇О', '闃舵', '棰勮閲戦', '璐熻矗浜篒D', '璐熻矗浜?, '鏈€杩戞洿鏂?];Noop绌烘€?True;search=濮撳悕鑱屽姟鐢佃瘽鍏抽敭鑱旂郴浜烘潵婧愭墍灞炲鎴峰鎴风紪鍙峰紶鍏抽敭钁d簨闀?38****0001鏄痗ontact_source_01e2c- +PASS 15 鎴愬憳鍔燘UDDY鈫掓覆鏌撯啋绉婚櫎(G3-D鏃犺亴鍔?鍔犲叆鏃堕棿鍒? | 鍒楀ご=['鎴愬憳', '瑙掕壊', '鎿嶄綔'];DB鎴愬憳琛?28;memberUserIds閲嶅閿?True +PASS 16 鑱旂郴浜簈uickAdd2琛?G5鏃犺礋璐d汉鍒梉D]+鐢佃瘽鑴辨晱+reveal鏄庢枃+DB鍩嬬偣 | 鑴辨晱=True;DB鑱旂郴浜?5;reveal_log=8;鏄庢枃=True;鍒楀ご=['', '#', '濮撳悕', '鑱屽姟', '鑱旂郴鐢佃瘽', '鍏抽敭', '鍐呯嚎', '鏉ユ簮', '绀煎搧澶囨敞', '鎿嶄綔'];qaRet={"successCount":2,"failedRows":[]} +PASS 17 batchEdit绌轰覆=DB涓嶆敼(D-G1)[D]+check-phone鍛戒腑+鍒犻櫎鍙屽埛 | DB phone=13812340001;D-G1瑙掓爣=1;check-phone=瀹㈡埛缂栧彿--瀹㈡埛鍚嶇О--瀹㈡埛绫诲瀷--闃舵--瀹㈡埛鏄熺骇--鍏崇郴鏄熺骇--鎴樼暐鍗忚--;鍒犲悗琛?4(鍒犲墠5,del_ok=True,errs+0);lid=753771972256595968;names=鏉庡啋鐑?璧靛啋鐑?鏉庢櫘閫?鐜嬮噸澶?寮犲叧閿? +PASS 18 鍐欒窡杩?鏃ユ湡鍒嗙粍+followWay绛涢€? | way閫夐」=6(绌?5);鏃ユ湡鍒嗙粍=5;绛涢€?True +PASS 19 鍏虫敞/閲嶇偣鏍囪+oplog鐣欑棔+action绛涢€? | action=CREATE绛涢€夊惈鏂板瀹㈡埛=True;action=FOLLOW绛涢€?True;DB璺熻繘=24 +PASS 20 瀹㈡埛瀵煎叆涓夋寮?缂虹渷浠介妫€FAIL鈫扗ONE璁℃暟=棰勬鈫掓槑缁嗗惢鍚? | 棰勬 t=2 ins=1 fail=1;taskId=753772071518994432;result={'taskId': '753772071518994432', 'importMode': 'APPEND_ONLY', 'templateVersion': 'V1', 'status': 2, 'totalCount': 2, 'insertCount': 1, 'updateCount': 0, 'unchangedCount': 0, 'failCount': 1, 'suspectCount': 0, 'failReason': None, 'creatorName': Non +PASS 21 瀵煎叆浠诲姟鍒楄〃+status/importMode杩囨护+P3-3娉ㄨ[D] | status杩囨护=True;mode杩囨护=True;P3-3=1 +PASS 22 鑱旂郴浜哄鍏ヤ笁娈靛紡+P3-3鏃犳牎楠屽閫夋[D] | 棰勬=棰勬瀹屾垚锛堜换鍔?753772113634000896 寰呯‘璁わ級锛氬叡 2 琛岋紝棰勮鏂板 2銆佹洿鏂?0銆佸け璐?0銆佺枒浼奸噸澶?;result={'taskId': '753772113634000896', 'customerId': '753771843382411264', 'importMode': 'APPEND_ONLY', 'templateVersion': 'V1', 'status': 2, 'totalCount': 2, 'insertCount': 2, 'updateCount': 0, 'unchangedCount': 0, 'failCount': 0, 'su +PASS 23 鍟嗘満鑱斿姩閾?UI寤哄晢鏈衡啋鎶涘叕娴锋嫤鎴啋鍏冲晢鏈衡啋鏀捐) | 鍟嗘満=753772150371909632;鐘舵€?鈫?;涓€娆elease鎷︽埅=True(toast=鍟嗘満宸插垱寤?id=753772150371909632锛涘鎴疯鎯呫€屽叧鑱斿晢鏈恒€嶉〉绛惧彲鍙嶆煡 || {"total":1,"s);杩涘叕娴?True +PASS 24 浜ゅ壊(preview鍦堝畾鈫抜nitiate鈫抪age鈫抎etail鈫抋ssignable鈫抋ssign鏄庣粏鎬佸彉鍖?F-13娓卨eftover=0) | 鍗曞彿=JG202609120001;鍦堝畾鍚す鍏?True;鏄庣粏=1鈫抋ssign鍚庡彉鍖?True(assign瀵硅薄=99021002);UI琛?10 +PASS 25 褰掑睘鍔ㄤ綔鏃?release鈫抍laim鈫抋rchive鈫抮estore鈫掑啀archive+oplog+assign) | 杩涘叕娴?True(pool榛樿瑙嗗浘琛?0,娓呰鍥惧悗琛?1);claim=True({"total":1,"successCount":1,"failCount":);archive=True({"total":1,"successCount":1,"failCount":);assign=True(success=1 fail=0);鎭㈠1鈫掑啀褰掓。2;oplog=3 +PASS 26 鏌ラ噸璁剧疆璇烩啋鏀?0鈫抯ave鐢熸晥鈫掕繕鍘?鍚尮閰嶆柟寮忎笉琚薄鏌? | 鍘?80鈫?0鈫掕繕鍘?80;mode=2(鍘?) +PASS 27 check-name鍛戒腑e2c-鎭掍俊杈?淇$敤浠g爜鎾炵爜67003(L3纭嫤)+check-credit-code L1 | check-name=check-name锛歔{"customerId":"753771720497692672","customerName;err=缁熶竴绀句細淇$敤浠g爜宸茶鍗犵敤锛氱郴缁熷凡瀛樺湪璇ヤ紒涓?(code=67003);creditCode.exists=True +PASS 28 瓒呮湡鎻愰啋save闈炴硶0鈫?4023toast鈫掕繕鍘?0/7 | 64023=True;杩樺師=30/7(鍘?0/7) +PASS 29 鍏捣姹犻厤缃崰浣嶅崱鍙[D] | 瑙掓爣=1;绂佺敤杈撳叆=2 +PASS 30 缂洪櫡鍙拌处闈㈡澘(A鈮?4/B4/C14/D1+鍥哄畾澹版槑) | A=14 B=4 C=14 D=1;娓叉煋琛?33 +PASS 31 data-defect瑙掓爣鈮?2涓斿叧閿被鐩綈鍏?澶氶〉绛剧疮璁? | 绱=87;绫荤洰=['D-G1', 'G1', 'G2', 'G3', 'G4', 'G5', 'I-06', 'P3-3', 'P3-6', 'POOL-CFG', 'STUB-LOOKUP'] +PASS 32 I-06鍙岀幇璞?pool鏃燽oard閫夐」+娉ㄨ鍚?7001/璁板繂鎴愬姛) | fForm閫夐」=['list', 'split'] +PASS 33 璞佸厤鍏ュ彛涓嶅嚭鐜?鎹㈣礋璐d汉/鏃ュ織瀵煎嚭/瀹屾暣閲戦寮€鍏?瀵煎叆鏍¢獙澶嶉€夋) | 鍛戒腑=0 +PASS 34 G绯诲垪鍚堝苟澶嶆牳(G1鏃犳搷浣滀汉绛涢€?G2涓冨垪/G3涓ゅ垪缂?G4--[D]/G5鏃犺礋璐d汉鍒?G6绌烘€? | G1=True G2=True G3=True G4=True G5=True G6=True +PASS 35 閲戦鍗3-6鍥涘崱--鍙e緞+鍏宠仈椤圭洰Noop绌烘€? | cards=['--', '--', '--', '-- / --'] +PASS 36 company-lookup NO_HIT+F6 stub鏂囨 | NO_HIT=True;F6stub=True +PASS 37 console/pageerror=0 | 鏃犻敊璇? +PASS 38 闆禤UT/DELETE(ADR-0017) | 杩濅緥=[] +PASS 39 绔偣瑕嗙洊骞垮害(鍞竴璺緞鈮?0+鐭╅樀娓呭崟50鏉? | 鍞竴璺緞=91;缂哄け=[] +PASS 40 澶瑰叿姝i棬娓呮壂+瑙勫垯/褰㈡€佸亸濂借繕鍘熸牳瀵? | 娓呮壂=4琛?娈嬬暀=0;dedup=80(鍘?0);reminder=30(鍘?0);overview褰㈡€?list + +==== summary ==== 40 steps, 0 failed (176.4s) 鈫?e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\smoke-report.json +ALL_PASS: True diff --git a/.scratch/customer-demo-ref/demo/_server.log b/.scratch/customer-demo-ref/demo/_server.log new file mode 100644 index 0000000..e69de29 diff --git a/.scratch/customer-demo-ref/demo/_t14api.py b/.scratch/customer-demo-ref/demo/_t14api.py new file mode 100644 index 0000000..a7e6bf3 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14api.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +"""票14 API 复现:check-name 对库内存量同名客户的真实行为。""" +import io, sys, json, urllib.request, urllib.parse +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') + +BASE = "http://localhost:8080" +ADMIN = "739564171091247104" + +def get_json(url, token=None): + req = urllib.request.Request(url) + if token: req.add_header("Authorization", "Bearer " + token) + with urllib.request.urlopen(req, timeout=20) as r: + return json.loads(r.read().decode()) + +tok = get_json(f"{BASE}/api/auth/debug/token?userId={ADMIN}").get("data") +if isinstance(tok, dict): tok = tok.get("token") +print("token:", (tok or "")[:20], "...") + +def ck(name): + u = f"{BASE}/api/customer/check-name?name={urllib.parse.quote(name)}" + try: + d = get_json(u, tok) + print(f"check-name[{name}] code={d.get('code')} data={json.dumps(d.get('data'), ensure_ascii=False)[:300]}") + except Exception as e: + print(f"check-name[{name}] EXC {e}") + +# 1) 库内现存 13 条同名:EXACT 模式应命中 +ck("e2c-恒信达科技有限公司") +# 2) sweep 已清的 seed 名:应空(无同名) +ck("e2c-dr-恒信达科技有限责任公司") +# 3) 部分词:EXACT 模式不命中 +ck("e2c-恒信达") +# 4) dedup 设置现状 +d = get_json(f"{BASE}/api/rule/customer/dedup", tok) +print("dedup:", json.dumps(d.get("data"), ensure_ascii=False)) diff --git a/.scratch/customer-demo-ref/demo/_t14cols.py b/.scratch/customer-demo-ref/demo/_t14cols.py new file mode 100644 index 0000000..9f9ee3b --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14cols.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +import pymysql, io, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +conn = pymysql.connect(host='8.129.84.155', port=3306, user='root', password='Itc@123456', + database='crm', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) +with conn.cursor() as cur: + for t in ("customer", "customer_contact", "customer_member", "customer_follow", + "customer_transfer", "customer_transfer_detail", "import_task", "contact_import_task"): + try: + cur.execute("SHOW COLUMNS FROM " + t) + cols = [r["Field"] for r in cur.fetchall()] + print(t, "→", cols) + except Exception as e: + print(t, "ERR", e) +conn.close() diff --git a/.scratch/customer-demo-ref/demo/_t14d7.py b/.scratch/customer-demo-ref/demo/_t14d7.py new file mode 100644 index 0000000..58b6521 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14d7.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +"""第七轮诊断:①seed 联系人 jobTitleName ②pool+viewType 复现 ③edit CAS 复现""" +import io, sys, json, urllib.request, urllib.parse +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', line_buffering=True) +sys.path.insert(0, r"e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo") +import pymysql + +BASE = "http://localhost:8080" +ADMIN = "739564171091247104" + +def get_json(url, token=None): + req = urllib.request.Request(url) + if token: req.add_header("Authorization", "Bearer " + token) + with urllib.request.urlopen(req, timeout=30) as r: + return json.loads(r.read().decode()) + +def post(url, data, token=None): + req = urllib.request.Request(url, data=urllib.parse.urlencode(data).encode(), method="POST") + req.add_header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8") + if token: req.add_header("Authorization", "Bearer " + token) + with urllib.request.urlopen(req, timeout=30) as r: + return json.loads(r.read().decode()) + +def db(): + return pymysql.connect(host='8.129.84.155', port=3306, user='root', password='Itc@123456', + database='crm', charset='utf8mb4', autocommit=True, connect_timeout=10, + cursorclass=pymysql.cursors.DictCursor) + +tok = get_json(f"{BASE}/api/auth/debug/token?userId={ADMIN}").get("data") +if isinstance(tok, dict): tok = tok.get("token") + +print("== ① seed 联系人 jobTitleName ==") +with db() as conn, conn.cursor() as cur: + cur.execute("SELECT id, name, job_title_id, job_title_name, phone FROM customer_contact " + "WHERE customer_id=750844477165273088 AND deleted=0 ORDER BY id") + for r in cur.fetchall(): + print(" ", r) + +print("== ② pool+viewType 复现(对 e2c-dr-imp 客户) ==") +with db() as conn, conn.cursor() as cur: + cur.execute("SELECT id, customer_name, owner_user_id, archive_status, version FROM customer " + "WHERE customer_name LIKE 'e2c-dr%' AND deleted=0") + rows = cur.fetchall() + for r in rows: print(" ", r) + +def wsp(view, kw="e2c-dr-imp"): + body = {"workspace": "pool", "current": "1", "size": "50", "viewType": view, "keyword": kw, "archiveStatus": "1"} + return post(f"{BASE}/api/customer/workspace/page", body, tok) + +for v in ("ASSIGNED", "", "COLLABORATING"): + try: + d = wsp(v) + c = (d.get("data") or {}) + rows2 = c.get("content") or [] + print(" pool viewType=%r -> total=%s rows=%s" % (v, c.get("total"), [r.get("customerName") for r in rows2][:5])) + except Exception as e: + print(" pool viewType=%r -> ERR %s" % (v, e)) + +print("== ③ edit CAS 复现(对恒信达 seed) ==") +with db() as conn, conn.cursor() as cur: + cur.execute("SELECT id, customer_name, version FROM customer WHERE customer_name='e2c-dr-恒信达科技有限责任公司' AND deleted=0") + rows3 = cur.fetchall() + for r in rows3: print(" before:", r) +if rows3: + cid = str(rows3[0]["id"]); ver = str(rows3[0]["version"]) + det = get_json(f"{BASE}/api/customer/detail?id={cid}", tok) + dv = ((det.get("data") or {}).get("detail") or {}).get("version") + print(" detail.version =", dv, "| db.version =", ver) + body = {"customerName": "e2c-dr-恒信达科技有限责任公司-改", "customerType": "customer_type_01", + "provinceCode": "440000", "cityCode": "440100", "districtCode": "440103", + "industryCode": "I", "version": ver} + ret = post(f"{BASE}/api/customer/edit?id={cid}", body, tok) + print(" edit ret:", json.dumps(ret, ensure_ascii=False)[:200]) + with db() as conn, conn.cursor() as cur: + cur.execute("SELECT id, customer_name, version FROM customer WHERE id=%s", (int(cid),)) + for r in cur.fetchall(): print(" after:", r) + # 还原 + cur.execute("UPDATE customer SET customer_name='e2c-dr-恒信达科技有限责任公司' WHERE id=%s", (int(cid),)) + print(" (已还原名字)") diff --git a/.scratch/customer-demo-ref/demo/_t14db.py b/.scratch/customer-demo-ref/demo/_t14db.py new file mode 100644 index 0000000..1a668a7 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14db.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +import pymysql, io, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', line_buffering=True) +conn = pymysql.connect(host='8.129.84.155', port=3306, user='root', password='Itc@123456', + database='crm', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) +cur = conn.cursor() +cur.execute("SELECT id, customer_name, archive_status, owner_user_id FROM customer WHERE customer_name LIKE 'e2c-dr-imp%'") +for r in cur.fetchall(): print(r) +print('---- oplog of e2c-dr-imp% customers ----') +cur.execute("SELECT customer_id, action, detail FROM customer_oplog WHERE customer_id IN (SELECT id FROM customer WHERE customer_name LIKE %s) ORDER BY id DESC LIMIT 8", ('e2c-dr-imp%',)) +for r in cur.fetchall(): print(r) +print('---- transfer bills (recent) ----') +cur.execute("SELECT id, transfer_no, status, reason, to_director_id, total_count, assigned_count, create_time FROM customer_transfer ORDER BY id DESC LIMIT 3") +for r in cur.fetchall(): print(r) +conn.close() diff --git a/.scratch/customer-demo-ref/demo/_t14diag.py b/.scratch/customer-demo-ref/demo/_t14diag.py new file mode 100644 index 0000000..4fd03de --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14diag.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +"""票14 取证第二轮:transfer_detail 列结构 / 查重设置现状 / 撞码 seed 客户。""" +import io, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +import pymysql + +def db(): + return pymysql.connect(host='8.129.84.155', port=3306, user='root', password='Itc@123456', + database='crm', charset='utf8mb4', autocommit=True, + connect_timeout=10, cursorclass=pymysql.cursors.DictCursor) + +def q(sql, args=None): + with db() as c, c.cursor() as cur: + cur.execute(sql, args); return cur.fetchall() + +print("== 1) customer_transfer_detail 列结构 ==") +for r in q("SHOW COLUMNS FROM customer_transfer_detail"): + print(r["Field"], r["Type"], r["Null"], r["Default"]) + +print("== 2) customer_dedup_rule 现状(查重设置是否被污染)==") +for r in q("SELECT * FROM customer_dedup_rule"): + print(r) + +print("== 3) 最近 3 张交割单明细(SELECT *)==") +for r in q("SELECT id, transfer_no, status FROM customer_transfer ORDER BY id DESC LIMIT 3"): + print(r) + for d in q("SELECT * FROM customer_transfer_detail WHERE transfer_id=%s", (r["id"],)): + print(" 明细:", d) + +print("== 4) 信用代码 91440101E2CTEST001 占用者 ==") +for r in q("SELECT id, customer_name, archive_status, deleted FROM customer WHERE unified_credit_code=%s", ("91440101E2CTEST001",)): + print(r) diff --git a/.scratch/customer-demo-ref/demo/_t14org.py b/.scratch/customer-demo-ref/demo/_t14org.py new file mode 100644 index 0000000..84f82fb --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14org.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +import pymysql, io, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', line_buffering=True) +conn = pymysql.connect(host='8.129.84.155', port=3306, user='root', password='Itc@123456', + database='crm', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) +cur = conn.cursor() +cur.execute("SHOW TABLES LIKE 'sys%%'") +print('sys tables:', [r[list(r)[0]] for r in cur.fetchall()]) +try: + cur.execute("SELECT id, name, dept_id, enabled, employment_status FROM sys_user WHERE id IN (739564171091247104, 744842318024015872)") + for r in cur.fetchall(): print('user:', r) +except Exception as e: print('sys_user ERR', e) +try: + cur.execute("SELECT id, dept_name, leader_user_id FROM sys_dept") + for r in cur.fetchall(): print('dept:', r) +except Exception as e: print('sys_dept ERR', e) +conn.close() diff --git a/.scratch/customer-demo-ref/demo/_t14org2.py b/.scratch/customer-demo-ref/demo/_t14org2.py new file mode 100644 index 0000000..c2c4266 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14org2.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +import pymysql, io, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', line_buffering=True) +conn = pymysql.connect(host='8.129.84.155', port=3306, user='root', password='Itc@123456', + database='crm', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) +cur = conn.cursor() +cur.execute("SHOW TABLES") +tabs = [r[list(r)[0]] for r in cur.fetchall()] +print('all tables:', tabs) +utabs = [t for t in tabs if 'user' in t.lower()] +for t in utabs: + try: + cur.execute("SHOW COLUMNS FROM " + t) + print(t, 'cols:', [r['Field'] for r in cur.fetchall()]) + except Exception as e: print(t, 'ERR', e) +for t in utabs: + try: + cur.execute("SELECT * FROM " + t + " WHERE user_id IN (739564171091247104, 744842318024015872) OR id IN (739564171091247104, 744842318024015872)") + for r in cur.fetchall(): print(t, r) + except Exception as e: pass +conn.close() diff --git a/.scratch/customer-demo-ref/demo/_t14org3.py b/.scratch/customer-demo-ref/demo/_t14org3.py new file mode 100644 index 0000000..82f42b9 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14org3.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +import pymysql, io, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', line_buffering=True) +conn = pymysql.connect(host='8.129.84.155', port=3306, user='root', password='Itc@123456', + database='crm', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) +cur = conn.cursor() +cur.execute("SELECT id, username, account, dept_id, enabled, employment_status FROM crm_auth_user WHERE id IN (739564171091247104, 744842318024015872)") +for r in cur.fetchall(): print('user:', r) +buddy_dept = None +cur.execute("SELECT dept_id FROM crm_auth_user WHERE id=744842318024015872") +row = cur.fetchone() +if row: buddy_dept = row['dept_id'] +print('buddy dept_id =', buddy_dept) +if buddy_dept: + cur.execute("SELECT id, dept_name, leader_user_id FROM sys_dept WHERE id=%s", (buddy_dept,)) + for r in cur.fetchall(): print('buddy dept:', r) +conn.close() diff --git a/.scratch/customer-demo-ref/demo/_t14scan.py b/.scratch/customer-demo-ref/demo/_t14scan.py new file mode 100644 index 0000000..2c33876 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/_t14scan.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +"""票 14 前置扫描:demo/index.html 函数签名 + 控件 id + 关键 JS 段行号""" +import io, re, sys +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') +P = r"e:\code\crm-backend-matt\.scratch\customer-demo-ref\demo\index.html" +txt = open(P, encoding='utf-8').read() +lines = txt.split('\n') + +# 1) 全部函数签名(行号) +print("== FUNCTIONS ==") +for i, ln in enumerate(lines, 1): + for m in re.finditer(r'(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(([^)]*)\)', ln): + print(f"L{i} {m.group(1)}({m.group(2)[:60]})") + +# 2) HTML/JS 控件 id +ids = sorted(set(re.findall(r'id="([^"]+)"', txt))) +print("\n== IDS(%d) ==" % len(ids)) +print(", ".join(ids)) + +# 3) 关键锚点行号(辅助定向阅读) +anchors = ["dlgCreate", "dlgOppCreate", "doOppCreate", "impUpload", "impConfirm", + "cimpUpload", "cimpConfirm", "transfer/", "dlgTransferEntry", "dedup", + "reminder", "check-name", "check-phone", "reveal", "defect-panel", + "svDelete", "saveForm", "loadForm", "errbox", "memberUserIds", + "batchUnarchive", "unarchive", "openQa", "qaSubmit", "dlgFollow", "act("] +print("\n== ANCHORS ==") +for a in anchors: + hits = [i for i, ln in enumerate(lines, 1) if a in ln][:8] + print(f"{a}: {hits}") diff --git a/.scratch/customer-demo-ref/demo/index.html b/.scratch/customer-demo-ref/demo/index.html index feec12d..cabeb1e 100644 --- a/.scratch/customer-demo-ref/demo/index.html +++ b/.scratch/customer-demo-ref/demo/index.html @@ -177,6 +177,7 @@ tr.err-row td { background:#fef2f2 !important; }
@@ -232,6 +279,7 @@ tr.err-row td { background:#fef2f2 !important; } + @@ -248,6 +296,7 @@ tr.err-row td { background:#fef2f2 !important; } + D-G1:空值提交=不修改(清空语义豁免) @@ -257,6 +306,7 @@ tr.err-row td { background:#fef2f2 !important; }
+ ⚠G5
@@ -296,6 +346,26 @@ tr.err-row td { background:#fef2f2 !important; } + + +
-
导入任务(仅本人可见,creator 过滤) +
导入任务(仅本人可见,creator 过滤;#63 状态/模式过滤已接 ImportPageParam) +
+ + +
任务ID模式状态总数新增更新未变化失败疑似失败原因提交时间操作
@@ -377,6 +456,14 @@ tr.err-row td { background:#fef2f2 !important; }
+
+ 客户公海池配置 POOL-CFG(未实现 · 只读占位) +
+ + +
POOL-CFG(决策票 02 核实):客户公海池配置后端未实现且原型无此页;客户公海=固定准入规则的虚拟池,非可配置池。线索域公海池配置(/api/rule/pool)不属客户域,不得混入。
+
+
查重试玩(消费侧试玩 · 配置走上方查重设置单例;信用代码恒开无配置)
@@ -530,7 +617,7 @@ async function loginByUid() { localStorage.setItem('e2c_me', JSON.stringify(me)); paintWho(); toast('登录成功: ' + (me.userName || me.nickName || uid), 'ok'); - S.page = 1; loadList(); loadSummary(); + switchWs(S.ws); } catch (e) { toast('登录异常: ' + e.message, 'err'); } } function switchUser(uid) { $('uidInput').value = uid; loginByUid(); } @@ -546,11 +633,32 @@ function switchTab(t) { } /* ================= 客户列表 ================= */ -const S = { ws: 'mine', page: 1, size: 10, total: 0, rows: [], picked: new Set() }; -function switchWs(ws) { - S.ws = ws; S.page = 1; S.picked.clear(); paintPick(); +const S = { ws: 'mine', page: 1, size: 10, total: 0, rows: [], picked: new Set(), form: 'list', savedViewId: null, savedViews: [], bCol: 'stage' }; +const CUST_TYPE = { customer_type_01: '总包', customer_type_02: '工程商', customer_type_03: '投资方', customer_type_04: '设计院', customer_type_05: '集成商', customer_type_06: '投标公司' }; // field-alignment 字典专节(DictDataInitializer 种子同值) +const BOARD_GROUP = { stage: { 1: '潜在', 2: '重潜', 3: '已成交' }, star: { 1: '★1', 2: '★2', 3: '★3', 4: '★4', 5: '★5' }, relation: { 1: '★1', 2: '★2', 3: '★3', 4: '★4', 5: '★5' } }; +const wsScope = () => 'customer.' + S.ws; +function typeName(code) { return CUST_TYPE[code] || code || '--'; } +function industryName(code) { + if (!code) return '--'; + for (const g of INDUSTRY) { + if (g.code === code) return g.name; + for (const c of (g.children || [])) if (c.code === code) return c.name; + } + return code; +} +async function switchWs(ws) { + S.ws = ws; S.page = 1; S.picked.clear(); S.savedViewId = null; paintPick(); document.querySelectorAll('#tab-list .viewbar [data-ws]').forEach(b => b.classList.toggle('on', b.dataset.ws === ws)); - loadList(); loadSummary(); + paintFormOptions(); + $('i06Note').style.display = ws === 'pool' ? '' : 'none'; + loadSavedViews(); + loadForm(); + loadList(); +} +function fltReset() { + ['fStage', 'fType', 'fStar', 'fRelStar', 'fIndustry', 'fProvince'].forEach(id => { $(id).value = ''; }); + $('fArchive').value = '1'; + S.page = 1; loadList(); } async function loadList(dir) { if (!TOKEN()) { $('listHint').textContent = '请先登录'; return; } @@ -560,12 +668,19 @@ async function loadList(dir) { try { const d = await api('/api/customer/workspace/page', { method: 'POST', - body: qs({ workspace: S.ws, current: S.page, size: S.size, viewType: $('fViewType').value, keyword: $('fKeyword').value.trim() }) + body: qs({ + workspace: S.ws, current: S.page, size: S.size, viewType: $('fViewType').value, keyword: $('fKeyword').value.trim(), + archiveStatus: $('fArchive').value, customerStage: $('fStage').value, customerType: $('fType').value, + customerStarLevel: $('fStar').value, relationStarLevel: $('fRelStar').value, + industryCode: $('fIndustry').value.trim(), provinceCode: $('fProvince').value.trim(), + savedViewId: ($('fViewType').value === 'RECENT' ? '' : (S.savedViewId || '')) + }) }); S.rows = (d && d.content) || []; S.total = (d && d.total) || 0; if (!S.rows.length && S.page > 1) { S.page = 1; return loadList(); } - $('listBody').innerHTML = S.rows.length ? S.rows.map(rowHtml).join('') : '无数据'; + paintHead(); + $('listBody').innerHTML = S.rows.length ? S.rows.map(rowHtml).join('') : '无数据'; $('pageInfo').textContent = '第 ' + S.page + ' 页 / 共 ' + S.total + ' 条'; $('listHint').textContent = ''; paintPick(); @@ -573,34 +688,158 @@ async function loadList(dir) { } function badge(txt, cls) { return '' + esc(txt) + ''; } function star(n) { return n ? '★'.repeat(Number(n)) : '--'; } +/* 列组随 workspace 切换(原型差异:mine/overview 有负责人+部门,pool 无负责人列、加进入公海时间固定列) */ +function listCols() { + const base = ['关注', '客户名称', '编号', '阶段', '星级', '类型', '行业', '协议等级', 'VIP等级']; + const tail = ['商机数', '项目数', '最近跟进', '操作']; + return S.ws === 'pool' ? base.concat(['进入公海时间'], tail) : base.concat(['负责人', '所属部门'], tail); +} +function paintHead() { + $('listHead').innerHTML = '' + listCols().map(h => '' + h + '').join('') + ''; +} function rowHtml(r) { const ck = S.picked.has(String(r.id)) ? ' checked' : ''; - return '' + - '' + - '' + (Number(r.focusFlag) ? '★' : '☆') + '' + - '' + esc(r.customerName) + '' + - '' + esc(r.customerNo) + '' + - '' + badge(STAGE[r.customerStage] || r.customerStage, r.customerStage === 3 ? 'b2' : 'b1') + '' + - '' + star(r.customerStarLevel) + '' + - '' + esc(r.ownerNameSnapshot || r.ownerUserNameSnapshot || r.ownerUserId) + '' + - '' + esc(r.ownerDeptNameSnapshot || '--') + '' + - '' + (r.opportunityCount == null ? '--' : r.opportunityCount) + '' + - '--' + - '' + esc(r.lastValidFollowTime || '--') + '' + - ''; + const nameClick = (S.form === 'split' ? 'splitPick' : 'openDetail') + '(\'' + r.id + '\')'; + const c = []; + c.push(''); + c.push('' + (Number(r.focusFlag) ? '★' : '☆') + ''); + c.push('' + esc(r.customerName) + ''); + c.push('' + esc(r.customerNo) + ''); + c.push('' + badge(STAGE[r.customerStage] || r.customerStage, r.customerStage === 3 ? 'b2' : 'b1') + ''); + c.push('' + star(r.customerStarLevel) + ''); + c.push('' + esc(typeName(r.customerType)) + ''); + c.push('' + esc(industryName(r.industryCode)) + ''); + c.push('' + (r.strategicAgreementLevel == null ? '--' : esc(r.strategicAgreementLevel)) + ''); + c.push('' + (r.vipCustomerLevel == null ? '--' : esc(r.vipCustomerLevel)) + ''); + if (S.ws === 'pool') c.push('' + esc(r.enterPoolTime || '--') + ''); + else { + c.push('' + esc(r.ownerNameSnapshot || r.ownerUserNameSnapshot || '--') + ''); + c.push('' + esc(r.ownerDeptNameSnapshot || '--') + ''); + } + c.push('' + (r.opportunityCount == null ? '--' : esc(r.opportunityCount)) + ''); + c.push('' + (r.projectCount == null ? '--' : esc(r.projectCount)) + ''); // K5:三方漂移收敛=按实返回,null 兜底 "--" + c.push('' + esc(r.lastValidFollowTime || '--') + ''); + c.push(' '); + return '' + c.join('') + ''; } function pick(id) { const k = String(id); if (S.picked.has(k)) S.picked.delete(k); else S.picked.add(k); paintPick(); } function paintPick() { $('pickHint').textContent = S.picked.size ? '已勾选 ' + S.picked.size + ' 条:' + [...S.picked].join(', ') : '未勾选'; } const pickedIds = () => [...S.picked]; -async function loadSummary() { - const box = $('summaryBox'); - if (!TOKEN()) { box.textContent = '请先登录'; return; } + +/* ---- saved-view 自定义视图(票 10;scopeKey=customer.mine/overview/pool;RECENT 不接) ---- + 契约(field-alignment #7):save 为全平台唯一 @RequestBody JSON 例外(ADR-0017 范围外); + 本期前端只提交 1 组条件(keyword like),conditions 为空数组=基础集。 */ +async function loadSavedViews() { + if (!TOKEN()) { S.savedViews = []; svPaint(); return; } + try { S.savedViews = (await api('/api/preference/view/list?scopeKey=' + wsScope())) || []; } + catch (e) { S.savedViews = []; } + svPaint(); +} +function svPaint() { + const dis = $('fViewType').value === 'RECENT'; + $('svSel').disabled = dis; + $('svSel').innerHTML = '' + + S.savedViews.map(v => '').join(''); +} +async function svNew() { + if ($('fViewType').value === 'RECENT') return toast('RECENT 视图不接 saved-view', 'err'); + const name = prompt('视图名称(存入 customer.' + S.ws + ' 作用域)', ''); + if (!name) return; + const kw = $('fKeyword').value.trim(); + const body = { name: name, isDefault: false, seqNo: (S.savedViews.length + 1) * 10, + conditions: kw ? [{ field: 'keyword', operator: 'like', value: kw }] : [] }; + try { + const viewId = await api('/api/preference/view/save?scopeKey=' + wsScope(), { method: 'POST', headers: { 'Content-Type': 'application/json;charset=UTF-8' }, body: JSON.stringify(body) }); + toast('视图已保存' + (viewId ? ': ' + viewId : ''), 'ok'); + S.savedViewId = viewId || null; + await loadSavedViews(); + S.page = 1; loadList(); + } catch (e) { toast('保存视图失败: ' + e.message + codeSuffix(e), 'err'); } +} +function svPick(v) { S.savedViewId = v || null; S.page = 1; loadList(); } +async function svSetDefault() { + if (!S.savedViewId) return toast('请先在下拉选中一个视图', 'err'); + try { await api('/api/preference/view/set-default?scopeKey=' + wsScope() + '&viewId=' + S.savedViewId, { method: 'POST' }); toast('已设为默认视图', 'ok'); loadSavedViews(); } + catch (e) { toast('失败: ' + e.message + codeSuffix(e), 'err'); } +} +async function svDelete() { + if (!S.savedViewId) return toast('请先在下拉选中一个视图', 'err'); + try { await api('/api/preference/view/delete?scopeKey=' + wsScope() + '&viewId=' + S.savedViewId, { method: 'POST' }); toast('视图已删除', 'ok'); S.savedViewId = null; loadSavedViews(); } + catch (e) { toast('失败: ' + e.message + codeSuffix(e), 'err'); } +} + +/* ---- 形态偏好 view-form(票 10;list/split/board;pool 不给 board 选项=I-06 注记口径) ---- */ +function paintFormOptions() { + $('fForm').innerHTML = '' + (S.ws === 'pool' ? '' : ''); +} +async function loadForm() { + try { S.form = (await api('/api/preference/view-form/get?scopeKey=' + wsScope())) || 'list'; } + catch (e) { S.form = 'list'; } + if (S.form === 'board' && S.ws === 'pool') S.form = 'list'; // I-06:保存侧对 pool+board 记忆成功,渲染侧不提供 + paintForm(); +} +function paintForm() { + const f = S.form === 'board' ? 'board' : (S.form === 'split' ? 'split' : 'list'); + $('fForm').value = f; + $('listTable').style.display = f === 'board' ? 'none' : ''; + $('boardBox').style.display = f === 'board' ? '' : 'none'; + $('splitPanel').style.display = f === 'split' ? '' : 'none'; + $('splitHint').style.display = f === 'split' ? '' : 'none'; + if (f === 'board') loadBoard(); +} +async function saveForm(v) { + if (!v) return; + if (S.ws === 'pool' && v === 'board') { paintForm(); return; } // pool 下拉无 board 选项,兜底不发送 + try { + await api('/api/preference/view-form/save', { method: 'POST', body: qs({ scopeKey: wsScope(), viewForm: v }) }); + S.form = v; toast('形态已保存: ' + v, 'ok'); + } catch (e) { toast('保存形态失败: ' + e.message + codeSuffix(e), 'err'); } + paintForm(); +} + +/* ---- 看板视图(票 10;summary 显式 groupColumn,字段 cnt/groupValue(K3);cards groupValue 必传) ---- */ +function cardHtml(r) { + return '
' + + '' + esc(r.customerName || '--') + ' ' + esc(r.customerNo || '--') + '
' + + '' + esc(STAGE[r.customerStage] || '--') + ' · ' + star(r.customerStarLevel) + ' · ' + esc(r.ownerNameSnapshot || r.ownerUserNameSnapshot || '无主') + '
'; +} +async function loadBoard() { + const box = $('boardRow'); + if (!TOKEN()) { box.innerHTML = '请先登录'; return; } + box.innerHTML = '看板加载中...'; + const col = S.bCol; try { - const d = await api('/api/customer/workspace/board/summary', { method: 'POST', body: qs({ workspace: S.ws, viewType: $('fViewType').value }) }); - const items = Array.isArray(d) ? d : Object.entries(d || {}).map(([k, v]) => ({ key: k, count: (v && typeof v === 'object') ? (v.count != null ? v.count : v.total) : v })); - box.className = 'sumcards'; - box.innerHTML = items.length ? items.map(it => '
' + esc(it.count != null ? it.count : '--') + '' + esc(it.name || it.key || '') + '
').join('') : ''; - } catch (e) { box.className = 'sumcards hint'; box.textContent = '汇总加载失败: ' + e.message; } + const sums = await api('/api/customer/workspace/board/summary', { method: 'POST', body: qs({ workspace: S.ws, viewType: $('fViewType').value, groupColumn: col }) }); + const map = {}; + (Array.isArray(sums) ? sums : []).forEach(it => { map[String(it.groupValue)] = it.cnt; }); + const defs = Object.keys(BOARD_GROUP[col] || {}); // 空列骨架前端补全(summary 仅返回有数据分组) + const cardLists = await Promise.all(defs.map(gv => + api('/api/customer/workspace/board/cards', { method: 'POST', body: qs({ workspace: S.ws, viewType: $('fViewType').value, groupColumn: col, groupValue: gv, current: 1, size: 20 }) }).catch(e => ({ err: e })))); + box.innerHTML = defs.map((gv, i) => { + const d = cardLists[i]; + const rows = (d && d.content) || []; + const cards = d && d.err ? '
加载失败: ' + esc(d.err.message) + '
' + : (rows.length ? rows.map(cardHtml).join('') : '
空列
'); + return '
' + + '' + BOARD_GROUP[col][gv] + ' ' + esc(map[String(gv)] != null ? map[String(gv)] : '0') + '' + + '
' + cards + '
'; + }).join(''); + } catch (e) { box.innerHTML = '看板加载失败: ' + esc(e.message) + codeSuffix(e) + ''; } +} + +/* ---- 分屏形态占位(票 10;卡片=列表行子集) ---- */ +function splitPick(id) { + const r = S.rows.find(x => String(x.id) === String(id)); + if (!r) return; + $('splitCard').innerHTML = '' + esc(r.customerName || '--') + ' ' + esc(r.customerNo || '--') + '' + + '
' + + '
阶段' + esc(STAGE[r.customerStage] || '--') + '
' + + '
星级' + star(r.customerStarLevel) + '
' + + '
类型' + esc(typeName(r.customerType)) + '
' + + '
行业' + esc(industryName(r.industryCode)) + '
' + + '
负责人' + esc(r.ownerNameSnapshot || r.ownerUserNameSnapshot || '--') + '
' + + '
最近跟进' + esc(r.lastValidFollowTime || '--') + '
' + + '
「详情」按钮进入完整详情页。
'; } /* ================= 联系人图谱/页签增强(票02 收编自 customer-contact-graph demo 修订⑧版) ================= */ @@ -622,6 +861,7 @@ const C = { list: [], query: { keyword: '', internal: '' }, checked: {}, editing let revealed = {}; // id -> true(单点临时明文;列表/图谱共享) let JOB_DICT = []; // [{cat, code, jobs:[{name, code, level}]}] let SOURCE_DICT = []; // [{code, name}] +let INDUSTRY = []; // 行业两级树 [{code, name, children:[{code, name}]}](列表行业列字典翻译用) let qaRows = []; const wrap = $('graphWrap'), canvasInner = $('canvasInner'), edgeSvg = $('edgeSvg'); const custName = () => D.cname || ('客户 ' + (D.id || '')); @@ -639,10 +879,12 @@ async function ensureDicts() { if (dictLoaded) return; const pair = await Promise.all([ api('/api/dict/item/tree?groupCode=job_title').catch(() => []), - api('/api/dict/item/enabled-list?groupCode=contact_source').catch(() => []) + api('/api/dict/item/enabled-list?groupCode=contact_source').catch(() => []), + api('/api/dict/item/tree?groupCode=industry').catch(() => []) ]); JOB_DICT = (pair[0] || []).map(g => ({ cat: g.name, code: g.code, jobs: (g.children || []).map(j => ({ name: j.name, code: j.code, level: j.level == null ? null : Number(j.level) })) })); SOURCE_DICT = (pair[1] || []).map(s => ({ code: s.code, name: s.name })); + INDUSTRY = pair[2] || []; dictLoaded = true; } /* 层级变化后一致性清理(用户拍板:同级不应有线;方向规则:上级层级必须 > 下级): @@ -927,7 +1169,7 @@ const DEFECT_LEDGER = { { id: 'G1', level: 'P2', ph: '跟进筛选无「操作人」', loc: '详情·页签3 筛选区', how: '①+②', copy: '后端 FollowPageParam 无操作人参数(G1),操作人筛选暂不可用' }, { id: 'G2', level: 'P2', ph: '关联商机 7 字段 vs 原型 13 列', loc: '详情·页签4', how: '①+②', copy: '原型期望 13 列,后端契约 7 字段(G2,挂账跨模块票);本页按实际契约渲染,缺列不补' }, { id: 'G3', level: 'P2', ph: '团队成员缺职务/加入时间两列', loc: '详情·页签7', how: '①+②', copy: '后端 CustomerMemberDTO 未暴露(G3);真源在实体,待 DTO 补列' }, - { id: 'G4', level: 'P2', ph: '系统信息四件套(创建/更新时间·人)恒 "--"', loc: '详情·页签1 系统信息区', how: '①+②', copy: '后端 CustomerDetailDTO 未暴露(G4),恒显 --' }, + { id: 'G4', level: 'P2', ph: '系统信息创建人/更新人恒 "--"(创建/更新时间实测有值)', loc: '详情·页签1 系统信息区', how: '①+②', copy: '后端 CustomerDetailDTO 未暴露创建人/更新人(G4);创建/更新时间经 BaseDTO 实测有值,如实渲染' }, { id: 'G5', level: 'P2', ph: '联系人列表缺「负责人」列', loc: '详情·页签2 列表', how: '①+②', copy: 'ContactDTO 未暴露负责人快照(G5)' }, { id: 'G6', level: 'P2', ph: '联系人维度操作日志无数据源', loc: '联系人页·日志子页签', how: '①+②', copy: '后端 CustomerOplog 无 contact 维度列(G6),本页签空态' }, { id: 'P3-6', level: 'P3', ph: '头部金额汇总卡 5 字段恒 null', loc: '详情头部·金额卡', how: '①+②', copy: '金额字段装配未接(P3-6),恒显 --' }, @@ -1012,6 +1254,8 @@ const formVal = id => { const el = $(id); return el ? el.value.trim() : ''; }; function dlgCreate() { dlgOpen('新建客户(三层查重内建:L2 名称相似 → needConfirm 确认后重发)', ` + @@ -1032,8 +1276,41 @@ function createForm() { isBizNegotiated: formVal('cBiz'), isChild: formVal('cChild'), ownerUserId: formVal('cOwner'), }; } -async function doCreate(confirmSimilar) { +/* ---- #24 工商联想(company-lookup;一期 stub 恒空数组=NO_HIT):只回填当前为空的字段,回填后立即 check-credit-code ---- */ +async function doLookup() { + const nm = formVal('cLk'); + if (!nm) { $('cOut').innerHTML = '
companyName 必填
'; return; } try { + const arr = await api('/api/customer/company-lookup?companyName=' + encodeURIComponent(nm)); + const list = Array.isArray(arr) ? arr : []; + if (!list.length) { + $('cOut').innerHTML = '
未查询到匹配企业(一期企查查 port 为 stub 恒 NO_HIT,如实呈现;可手工录入,真实源接入后自动激活)。
'; + return; + } + window._lookupHits = list; + $('cOut').innerHTML = '
命中 ' + list.length + ' 条(点「采用」只回填当前为空的字段,已填不覆盖):
' + + list.map((c, i) => '
' + esc(c.bizName || ('候选' + (i + 1))) + '' + + esc(c.unifiedCreditCode || '--') + ' / 法人=' + esc(c.legalRepresentative || '--') + ' / ' + esc(c.establishedDate || '--') + + '
').join(''); + } catch (e) { $('cOut').innerHTML = errHtml(e); } +} +async function applyLookup(i) { + const c = (window._lookupHits || [])[i]; + if (!c) return; + const put = (id, v) => { const el = $(id); if (el && v != null && v !== '' && !el.value.trim()) el.value = v; }; + put('cName', c.bizName); put('cCredit', c.unifiedCreditCode); + if (formVal('cCredit')) { + try { + const hit = await api('/api/customer/check-credit-code?creditCode=' + encodeURIComponent(formVal('cCredit'))); + $('cOut').innerHTML = '
已回填空字段;check-credit-code(回填即查重):' + esc(JSON.stringify(hit)) + '
'; + return; + } catch (e) { $('cOut').innerHTML = '已回填空字段;check-credit-code 失败: ' + errHtml(e); return; } + } + toast('已回填空字段(已填不覆盖)', 'ok'); +} +async function doCreate(cf) { + try { + const confirmSimilar = (cf === true || cf === 'true') ? true : undefined; // 同 doEdit:onclick 首参是事件对象,非显式 true 一律 undefined const d = await api('/api/customer/create', { method: 'POST', body: qs(Object.assign(createForm(), { confirmSimilar: confirmSimilar })) }); if (d && d.needConfirm) { const hits = d.similarHits || []; @@ -1063,15 +1340,25 @@ async function dlgEdit() { window._editBiz = d.isBizNegotiated; window._editChild = d.isChild; // 冒烟实证:edit 必带 isBizNegotiated+isChild(DB NOT NULL 无默认,D-05 关联) } catch (e) { toast(e.message, 'err'); } } -async function doEdit() { +async function doEdit(cf) { + /* dlgOpen 把 fn 直接挂 onclick(浏览器传 PointerEvent 作首参)→ 非显式 true 一律 undefined(qs 跳过) */ + const confirmSimilar = (cf === true || cf === 'true') ? true : undefined; const id = window._editId; try { - await api('/api/customer/edit?id=' + id, { method: 'POST', body: qs({ + const d = await api('/api/customer/edit?id=' + id, { method: 'POST', body: qs({ customerName: formVal('eName'), customerType: formVal('eType'), provinceCode: formVal('eProv'), cityCode: formVal('eCity'), districtCode: formVal('eDist'), industryCode: formVal('eInd'), customerStarLevel: formVal('eStar'), relationStarLevel: formVal('eRStar'), version: window._editVer, isBizNegotiated: window._editBiz, isChild: window._editChild, + confirmSimilar: confirmSimilar, }) }); + if (d && d.needConfirm) { // L2 名称相似(与服务端 needConfirm 契约同 create;不确认不落库) + const hits = d.similarHits || []; + $('eOut').innerHTML = '
相似命中 ' + hits.length + ' 条:
    ' + hits.map(h => + '
  • ' + esc(h.customerName) + '(负责人=' + esc(h.ownerName) + ')
  • ').join('') + + '
仍要保存?
'; + return; + } toast('保存成功', 'ok'); dlgClose(); loadList(); loadHead(); switchSub('info'); } catch (e) { $('eOut').innerHTML = errHtml(e); } } @@ -1102,17 +1389,22 @@ async function toggleFocus(id, target) { try { await api('/api/customer/' + (target ? 'focus' : 'unfocus') + '?id=' + id, { method: 'POST' }); toast(target ? '已关注' : '已取关', 'ok'); - loadList(); loadSummary(); + loadList(); } catch (e) { toast('失败: ' + e.message + codeSuffix(e), 'err'); } } function dlgAssign() { - const id = pickedIds()[0]; - if (!id) return toast('请先勾选客户行', 'err'); - dlgOpen('分配给销售', '' + + const ids = pickedIds(); + if (!ids.length) return toast('请先勾选客户行(支持整批分配)', 'err'); + dlgOpen('分配给销售(整批 ' + ids.length + ' 条 · assign-batch)', '' + '
', [{ text: '分配', ok: true, fn: async () => { - try { await act('/api/customer/assign?id=' + id + '&userId=' + formVal('asUser')); dlgClose(); } - catch (e) { $('asOut').innerHTML = errHtml(e); } + try { + const r = await api('/api/customer/assign-batch?ids=' + ids.join(',') + '&userId=' + formVal('asUser'), { method: 'POST' }); + const fails = (r && r.failures) || []; + $('asOut').innerHTML = '
总 ' + esc(r && r.total != null ? r.total : ids.length) + ' · 成功 ' + esc(r && r.successCount != null ? r.successCount : '-') + ' · 失败 ' + esc(r && r.failCount != null ? r.failCount : '-') + '
' + + (fails.length ? tableHtml(['客户 id', '原因', '说明'], fails.map(f => [esc(f.id || '--'), esc(f.reason || '--'), '' + esc(f.message || '--') + ''])) : ''); + loadList(); + } catch (e) { $('asOut').innerHTML = errHtml(e) + '
目标人员校验失败=整批拒绝(assign-batch 预检语义)。
'; loadList(); } } }]); } function dlgTransferEntry() { switchTab('transfer'); transferPage(0); } @@ -1157,7 +1449,15 @@ async function loadHead() { '|最近跟进:' + esc(d.lastFollowSummary || '--') + '(' + esc(d.lastFollowTime || '--') + ')' + '|下次跟进:' + esc(d.nextFollowTime || '--') + '|商机 ' + (d.opportunityCount == null ? '--' : d.opportunityCount) + - '|项目 ' + (d.projectCount == null ? '--' : d.projectCount) + '(契约恒 null 显 --)
' + + '|项目 ' + (d.projectCount == null ? '--' : d.projectCount) + '
' + + '
金额汇总' + dbadge('P3-6') + + '(4 卡装配未接 seam,契约恒 null 显 "--",不显 0)
' + + '
' + + '
已中标项目总额' + esc(d.wonProjectAmount == null ? '--' : d.wonProjectAmount) + '
' + + '
跟进中方案预估' + esc(d.planEstimateAmount == null ? '--' : d.planEstimateAmount) + '
' + + '
进行中商机总额' + esc(d.ongoingOpportunityAmount == null ? '--' : d.ongoingOpportunityAmount) + '
' + + '
合同/回款' + esc(d.contractAmount == null ? '--' : d.contractAmount) + ' / ' + esc(d.paidAmount == null ? '--' : d.paidAmount) + '
' + + '
' + '
' + '' + '' + @@ -1182,15 +1482,35 @@ async function switchSub(s) { try { if (s === 'info') { const d = await api('/api/customer/detail?id=' + D.id); - box.innerHTML = '
' + grid(d) + '
'; + box.innerHTML = '
客户信息(系统信息区:创建/更新时间经 BaseDTO 实测有值;创建人/更新人不暴露,恒 "--")' + dbadge('G4') + '
' + + '
' + grid(d) + '
'; } else if (s === 'follow') { - const d = await api('/api/customer/follow/page?id=' + D.id + '¤t=1&size=50'); - box.innerHTML = followHtml((d && d.content) || []); + box.innerHTML = '
' + + '' + + '' + + '' + + '' + + '' + dbadge('G1') + + '(原型有「操作人」筛选;FollowPageParam 无此参数,豁免不渲染)
' + + '
加载中...
'; + await loadFollow(); } else if (s === 'opps') { const d = await api('/api/customer/opportunity/page?id=' + D.id); const rows = Array.isArray(d) ? d : ((d && d.content) || []); - box.innerHTML = rows.length ? tableHtml(['商机名称', '阶段', '金额', '负责人', '状态'], rows.map(o => - [esc(o.opportunityName || o.name || o.id), esc(o.stageName || o.stage || '--'), esc(o.estimateAmount == null ? '--' : o.estimateAmount), esc(o.ownerUserName || o.ownerName || '--'), esc(o.statusName || o.status || '--')])) : '
无关联商机(port 反查,失败前端显 --)
'; + box.innerHTML = '
关联商机(契约 7 字段真名渲染;原型期望 13 列,缺列不补;port 失败/无数据显空态)' + dbadge('G2') + '
' + + tableHtml(['商机ID', '商机名称', '阶段', '预计金额', '负责人ID', '负责人', '最近更新'], rows.map(o => + [esc(o.id || '--'), esc(o.oppName || '--'), esc(o.stageName || '--'), + esc(o.estimateAmount == null ? '--' : o.estimateAmount), + esc(o.ownerUserId || '--'), esc(o.ownerNameSnapshot || '--'), esc(o.updateTime || '--')])); + } else if (s === 'projects') { + const d = await api('/api/customer/project/page?id=' + D.id + '¤t=1&size=50'); + const rows = (d && d.content) || []; + box.innerHTML = '
关联项目(真端点 CustomerProjectQueryPort 反查;当前后端为 Noop 实现 → 数据空态显 "--",K2 口径非硬占位)
' + + tableHtml(['项目名称', '阶段', '状态', '报备状态', '项目金额', '负责人', '最近更新'], rows.map(p => + [esc(p.projectName || '--'), esc(p.stageName || '--'), esc(p.statusName || '--'), + esc(p.filingStatusName || '--'), esc(p.projectAmount == null ? '--' : p.projectAmount), + esc(p.ownerNameSnapshot || p.ownerUserId || '--'), esc(p.updateTime || '--')])); } else if (s === 'agreements') { const d = await api('/api/customer/agreement/list?customerId=' + D.id); const rows = Array.isArray(d) ? d : ((d && d.content) || []); @@ -1201,8 +1521,16 @@ async function switchSub(s) { const rows = Array.isArray(d) ? d : ((d && d.content) || []); box.innerHTML = membersHtml(rows); } else if (s === 'oplog') { - const d = await api('/api/customer/oplog/page?id=' + D.id + '¤t=1&size=50'); - box.innerHTML = oplogHtml((d && d.content) || []); + box.innerHTML = '
' + + '' + + '' + + '' + + '' + + '' + + '(action 权威 18 种含 GRAPH_EDIT;AS §3「17 种」未同步——K4)
' + + '
加载中...
'; + await loadOplog(); } } catch (e) { box.innerHTML = errHtml(e); } } @@ -1210,9 +1538,10 @@ function grid(d) { const F = [['客户编号', 'customerNo'], ['客户名称', 'customerName'], ['客户类型', 'customerTypeName|customerType'], ['阶段', 'customerStageName|customerStage'], ['客户星级', 'customerStarLevel'], ['关系星级', 'relationStarLevel'], ['战略协议', 'strategicAgreementLevelName|strategicAgreementLevel'], ['VIP 等级', 'vipCustomerLevel'], - ['信用代码', 'creditCode'], ['省/市/区', 'provinceCode|cityCode|districtCode'], ['行业', 'industryName|industryCode'], + ['信用代码', 'unifiedCreditCode'], ['省/市/区', 'provinceCode|cityCode|districtCode'], ['行业', 'industryName|industryCode'], ['商务谈判', 'isBizNegotiated'], ['子客户', 'isChild'], ['负责人', 'ownerUserNameSnapshot|ownerUserId'], - ['创建时间', 'createTime'], ['更新时间', 'updateTime']]; + ['创建时间', 'createTime'], ['更新时间', 'updateTime'], + ['创建人', 'creatorId'], ['更新人', 'updaterId']]; // G4:creatorId/updaterId 不在 CustomerDetailDTO,恒 "--"(K1 两件口径) return F.map(p => { const v = p[1].split('|').map(k => d[k]).find(x => x !== undefined && x !== null && x !== ''); return '
' + p[0] + '' + esc(v === undefined ? '--' : v) + '
'; @@ -1224,16 +1553,19 @@ function tableHtml(heads, rows) { '无数据') + ''; } /* ---- 联系人:收编为 contactsShell 常驻面板(p4/p6 注入),旧 contactsHtml 退役 ---- */ -function dlgContact(cid) { +async function dlgContact(cid) { + if (!dictLoaded) await ensureDicts(); // K6:来源下拉走 contact_source 字典(group_meeting/group_activity/referral/other),旧硬编码 contact_source_01..04 为字典改版前遗留 const c = (window._contacts || []).find(x => String(x.id) === String(cid)) || {}; + const srcSel = '' + SOURCE_DICT.map(s => + '').join(''); dlgOpen(cid ? '编辑联系人' : '新建联系人(67008=入参非法/不属于该客户)', ` - + - +
`, [{ text: '保存', ok: true, fn: async () => { const fields = { name: formVal('ctName'), jobTitleName: formVal('ctJob'), phone: formVal('ctPhone'), isKeyContact: formVal('ctKey'), isInternal: formVal('ctInternal'), giftRemark: formVal('ctGift'), source: formVal('ctSource') }; @@ -1259,16 +1591,227 @@ function dlgCheckPhone(phone) { } catch (e) { $('cpOut').innerHTML = errHtml(e); } } }]); } +/* ================= 联系人独立菜单(票 12:#50 顶级列表 / contact.list 列偏好+形态偏好) ================= */ +const CT = { page: 1, size: 10, total: 0, rows: [] }; +const CT_COLS = [ + { k: 'jobTitleName', t: '职务' }, { k: 'phone', t: '电话' }, { k: 'isKeyContact', t: '关键联系人' }, + { k: 'isInternal', t: '内线' }, { k: 'source', t: '来源' }, { k: 'giftRemark', t: '礼品备注' }, + { k: 'customerName', t: '所属客户' } +]; +let ctVisibleKeys = null; // null=未取列偏好(全列显);姓名列固定不参与隐显 +function ctCols() { return ctVisibleKeys ? CT_COLS.filter(c => ctVisibleKeys.includes(c.k)) : CT_COLS; } +function ynCell(v) { return v == null ? '--' : (Number(v) === 1 ? '是' : '否'); } +function ctRowHtml(r) { + const c = []; + c.push('' + esc(r.name) + ''); + for (const col of ctCols()) { + let v; + if (col.k === 'phone') v = esc(r.phone || '--'); // K10:服务端已脱敏(138****1234),前端直显 + else if (col.k === 'isKeyContact' || col.k === 'isInternal') v = ynCell(r[col.k]); + else if (col.k === 'source') v = esc(sourceName(r.source)); // K6:字典驱动翻译 + else v = esc(r[col.k] == null ? '--' : r[col.k]); + c.push('' + v + ''); + } + c.push(''); + return '' + c.join('') + ''; +} +async function loadContactPage(dir) { + if (!TOKEN()) { $('ctPageInfo').textContent = '请先登录'; return; } + if (dir === -1) CT.page = Math.max(1, CT.page - 1); + else if (dir === 1) CT.page += 1; + $('ctPageInfo').textContent = '加载中...'; + try { + const d = await api('/api/customer/contact/page?current=' + CT.page + '&size=' + CT.size + '&keyword=' + encodeURIComponent($('cKw').value.trim())); + CT.rows = (d && d.content) || []; + CT.total = (d && d.total) || 0; + if (!CT.rows.length && CT.page > 1) { CT.page = 1; return loadContactPage(); } + $('ctPageHead').innerHTML = '姓名' + ctCols().map(c => '' + c.t + '').join('') + '操作'; + $('ctPageBody').innerHTML = CT.rows.length ? CT.rows.map(ctRowHtml).join('') : '无数据'; + $('ctPageInfo').textContent = '第 ' + CT.page + ' 页 / 共 ' + CT.total + ' 条'; + } catch (e) { $('ctPageInfo').textContent = '加载失败: ' + e.message; } +} +/* ---- 联系人菜单偏好:形态 view-form / 列偏好 preference(scopeKey=contact.list) ---- */ +async function loadContactForm() { + let v = 'list'; + try { v = (await api('/api/preference/view-form/get?scopeKey=contact.list')) || 'list'; } catch (e) { /* 未登录/网络失败回落 */ } + $('cForm').innerHTML = ''; + $('cForm').value = v; +} +async function saveContactForm(v) { + try { await api('/api/preference/view-form/save', { method: 'POST', body: qs({ scopeKey: 'contact.list', viewForm: v }) }); toast('形态偏好已保存(scopeKey=contact.list)', 'ok'); } + catch (e) { toast('失败: ' + e.message, 'err'); } +} +async function dlgCpEdit() { + try { + const p = await api('/api/preference/get?scopeKey=contact.list'); + const vis = (p && p.visibleKeys) || []; + dlgOpen('列偏好(scopeKey=contact.list;GET /api/preference/get + POST /api/preference/save,visibleKeys 重复键)', ` +
姓名列固定不可隐藏(对齐客户侧「客户名称固定列」口径);全不勾=保存空集(后读回落全列显)。
+ +
` + CT_COLS.map(c => + '').join('') + `
+
`, + [{ text: '保存', ok: true, fn: async () => { + const keys = [...document.querySelectorAll('.cpChk:checked')].map(x => x.value); + try { + await api('/api/preference/save?scopeKey=contact.list' + (keys.length ? '&' + keys.map(k => 'visibleKeys=' + encodeURIComponent(k)).join('&') : ''), { method: 'POST' }); + ctVisibleKeys = keys.length ? keys : null; + toast('列偏好已保存', 'ok'); dlgClose(); loadContactPage(); + } catch (e) { $('cpOut').innerHTML = errHtml(e); } + } }]); + } catch (e) { toast('读取列偏好失败: ' + e.message, 'err'); } +} +/* ---- 联系人详情弹窗(#51 contact/detail 回显)+ 操作日志空态(#53/G6)---- */ +async function dlgContactDetail(id) { + try { + const d = await api('/api/customer/contact/detail?id=' + id); + dlgOpen('联系人详情(contact/detail 回显;phone 脱敏形态提交=不改号)', ` +
+ + +
+
${ctInfoHtml(d)}
+ `, []); + } catch (e) { dlgOpen('联系人详情', errHtml(e), []); } +} +function ctInfoHtml(d) { + const kv = (t, v) => '
' + t + '' + (v == null || v === '' ? '--' : esc(v)) + '
'; + return kv('姓名', d.name) + kv('职务名称', d.jobTitleName) + kv('职务类别', d.jobTitleCategory) + kv('职务层级', d.jobTitleLevel) + + kv('电话(服务端脱敏)', d.phone) + kv('关键联系人', ynCell(d.isKeyContact)) + kv('内线', ynCell(d.isInternal)) + + kv('来源', sourceName(d.source)) + kv('礼品备注', d.giftRemark) + + kv('所属客户', d.customerName) + kv('客户编号', d.customerNo) + kv('所属客户 id', d.customerId); +} +function ctSubTab(i) { + $('ctPaneInfo').style.display = i === 0 ? '' : 'none'; + $('ctPaneLog').style.display = i === 1 ? '' : 'none'; + $('ctTabBtn0').classList.toggle('on', i === 0); + $('ctTabBtn1').classList.toggle('on', i === 1); +} +/* ---- 联系人全局搜索(#52 contact/search;商机「关键联系人」数据源演示)---- */ +function dlgContactSearch() { + dlgOpen('联系人全局搜索(GET /api/customer/contact/search?keyword=&limit=)', ` + + +
场景文案:商机表单「关键联系人」数据源——姓名/电话模糊 + 带出所属公司名;电话服务端脱敏(K10);客户可见性收口。
+
`, + [{ text: '搜索', ok: true, fn: async () => { + try { + const kw = formVal('csKw'); + if (!kw) { $('csOut').innerHTML = '
keyword 必填
'; return; } + const lim = formVal('csLimit'); + const arr = await api('/api/customer/contact/search?keyword=' + encodeURIComponent(kw) + (lim ? '&limit=' + lim : '')); + const rows = (arr || []).map(r => [esc(r.name), esc(r.jobTitleName || '--'), esc(r.phone || '--'), ynCell(r.isKeyContact), esc(sourceName(r.source)), esc(r.customerName || '--'), esc(r.customerNo || '--')]); + $('csOut').innerHTML = tableHtml(['姓名', '职务', '电话', '关键联系人', '来源', '所属客户', '客户编号'], rows); + } catch (e) { $('csOut').innerHTML = errHtml(e); } + } }]); +} +/* ================= 商机侧演示入口(票 12:#47 quick-create / #48 customer/search / 建商机) ================= */ +/* ---- #47 快建客户:K9 以 DTO 为准 7 必填 + confirmSimilar(.bru 漏 confirmSimilar/误标星级选填系漂移)---- */ +function dlgQuickCreate() { + dlgOpen('商机表单快建客户(POST /api/customer/quick-create;K9:DTO 全 7 必填,服务端 owner=当前用户)', ` + + + + + + +
confirmSimilar 默认 false(命中相似先回 needConfirm 列表,确认后 true 重发);查重三层与编号生成复用主表 create;similarHits 行级 masked(无权命中不透出业务字段);错误 67001/67003。
+
`, + [{ text: '快建', ok: true, fn: () => doQuickCreate(false) }]); +} +async function doQuickCreate(confirmSimilar) { + try { + const d = await api('/api/customer/quick-create', { method: 'POST', body: qs({ + customerName: formVal('qName'), customerType: formVal('qType'), + provinceCode: formVal('qProv'), cityCode: formVal('qCity'), industryCode: formVal('qInd'), + customerStarLevel: formVal('qStar'), relationStarLevel: formVal('qRStar'), + confirmSimilar: confirmSimilar + }) }); + if (d && d.needConfirm) { + const hits = d.similarHits || []; + $('qOut').innerHTML = '
命中相似客户 ' + hits.length + ' 条:仍要创建?
'; + return; + } + toast('快建成功:' + ((d && d.customerNo) ? d.customerNo + ' / ' : '') + ((d && d.customerName) || ''), 'ok'); dlgClose(); + } catch (e) { $('qOut').innerHTML = errHtml(e); } +} +/* ---- #48 商机候选客户三维搜索:keyword=名称/联系人/电话 ---- */ +function dlgCustSearch() { + dlgOpen('商机候选客户搜索(POST /api/customer/search;keyword 名称/联系人/电话三维模糊)', ` + + + + +
轻量 9 字段出参;选中后走 GET /api/customer/detail?id= 带出全量;DataScope 注入可见范围。
+
`, + [{ text: '搜索', ok: true, fn: async () => { + try { + const ex = formVal('dsEx').split(/[,\s,]+/).filter(Boolean); + const bodyStr = qs({ keyword: formVal('dsKw'), customerType: formVal('dsType'), archiveStatus: formVal('dsArchive') }) + + ex.map(x => '&excludeCustomerIds=' + encodeURIComponent(x)).join(''); + const d = await api('/api/customer/search', { method: 'POST', body: bodyStr }); + const rows = ((d && d.content) || []).map(r => [esc(r.id), esc(r.customerNo || '--'), esc(r.customerName), esc(typeName(r.customerType)), + esc(r.ownerUserId || '--'), esc(r.ownerName || '--'), esc(STAGE[r.customerStage] || r.customerStage || '--'), + esc(r.archiveStatus === 2 ? '已归档' : '有效')]); + $('dsOut').innerHTML = '
共 ' + ((d && d.total) || 0) + ' 条
' + + tableHtml(['id', '客户编号', '客户名称', '类型', '负责人id', '负责人', '阶段', '归档'], rows); + } catch (e) { $('dsOut').innerHTML = errHtml(e); } + } }]); +} +/* ---- 从客户发起建商机:POST /api/opportunity 预填 customerId(opp-deps §4;核心 6 必填 D-14)---- */ +function dlgOppCreate(cid) { + const r = S.rows.find(x => String(x.id) === String(cid)); + if (!r) return toast('行数据缺失,请刷新列表', 'err'); + dlgOpen('从客户发起建商机(POST /api/opportunity,预填 customerId/customerName;关联落 opportunity_customer,客户详情「关联商机」页签立即可见)', ` + + + + + + + + +
核心 6 必填缺一报 66001;直接新建路径不做客户存在性/归档校验(区别于商机详情挂客户 requireLive)。
+
`, + [{ text: '创建商机', ok: true, fn: async () => { + try { + const id = await api('/api/opportunity', { method: 'POST', body: qs({ + opportunityName: formVal('oName'), oppSource: formVal('oSource'), bidForm: formVal('oBid'), localityType: formVal('oLoc'), + provinceCode: formVal('oProv'), cityCode: formVal('oCity'), + customerId: r.id, customerName: r.customerName, + isPrimaryIntended: formVal('oPrimary'), customerRole: formVal('oRole'), remark: formVal('oRemark') + }) }); + toast('商机已创建 id=' + id + ';客户详情「关联商机」页签可反查', 'ok'); dlgClose(); + } catch (e) { $('oOut').innerHTML = errHtml(e); } + } }]); +} /* ---- 跟进 ---- */ +const FOLLOW_WAYS = { follow_way_01: '电话沟通', follow_way_02: '上门拜访', follow_way_03: '微信对接', follow_way_04: '线上会议', follow_way_05: '展会沟通' }; function followHtml(rows) { - if (!rows.length) return '
暂无跟进记录
'; + if (!rows.length) return '
暂无跟进记录
'; const days = {}; rows.forEach(r => { const day = String(r.followTime || r.createTime || '').slice(0, 10) || '未知日期'; (days[day] = days[day] || []).push(r); }); - return '
' + - Object.keys(days).sort().reverse().map(day => - '
' + esc(day) + '
' + days[day].map(r => - '
' + esc(r.followWayName || r.followWay || '--') + ' ' + esc(r.createByName || r.createBy || r.operatorName || '') + - '
' + esc(r.followContent || '') + '
下次跟进:' + esc(r.nextFollowTime || '--') + '
').join('')).join(''); + return Object.keys(days).sort().reverse().map(day => + '
' + esc(day) + '
' + days[day].map(r => + '
' + esc(FOLLOW_WAYS[r.followWay] || r.followWay || '--') + ' ' + esc(r.followByName || r.followBy || '') + + '
' + esc(r.followContent || '') + '
下次跟进:' + esc(r.nextFollowTime || '--') + '
').join('')).join(''); +} +async function loadFollow() { + const box = $('followBox'); + if (!box) return; + try { + const d = await api('/api/customer/follow/page?' + qs({ + id: D.id, followWay: formVal('fFollowWay'), + startTime: formVal('fFollowStart') ? formVal('fFollowStart') + ' 00:00:00' : '', + endTime: formVal('fFollowEnd') ? formVal('fFollowEnd') + ' 23:59:59' : '', current: 1, size: 50 + })); + box.innerHTML = followHtml((d && d.content) || []); + } catch (e) { box.innerHTML = errHtml(e); } } function dlgFollow() { dlgOpen('写跟进(append-only;副作用刷新 last_valid_follow_time 锚点)', ` @@ -1290,7 +1833,8 @@ function membersHtml(rows) { [esc(m.userName || m.memberUserName || m.userId || '--'), isOwner(m) ? badge('负责人', 'b2') : badge('协同人', 'b1'), isOwner(m) ? '--' : ''])); - return '
' + t; + return '
' + dbadge('G3') + + '(原型另有职务/加入时间两列;CustomerMemberDTO 未暴露,缺列不补)
' + t; } function dlgMemberAdd() { dlgOpen('添加协同人(两阶段校验整批拒绝 67016)', '
', @@ -1305,13 +1849,31 @@ async function delMember(uid) { catch (e) { toast('失败: ' + e.message + codeSuffix(e), 'err'); } } /* ---- 操作日志 ---- */ +const OPLOG_ACTIONS = { // K4:权威 18 种(CustomerConstants 全部 ACTION_*,含 GRAPH_EDIT;AS §3「17 种」未同步) + CREATE: '新增客户', UPDATE: '编辑', FOLLOW: '跟进', ARCHIVE: '归档', RESTORE: '恢复', TRANSFER: '交接', + CLAIM: '领取', POOL: '抛公海', STAGE_CHANGE: '阶段流转', MEMBER_ADD: '添加成员', MEMBER_REMOVE: '移除成员', + CONTACT_ADD: '新增联系人', CONTACT_EDIT: '编辑联系人', CONTACT_DELETE: '删除联系人', + AGREEMENT_ADD: '新增协议', AGREEMENT_EDIT: '编辑协议', AGREEMENT_DELETE: '删除协议', GRAPH_EDIT: '图谱编辑' +}; function oplogHtml(rows) { if (!rows.length) return '
暂无日志
'; const days = {}; rows.forEach(r => { const day = String(r.createTime || '').slice(0, 10) || '未知日期'; (days[day] = days[day] || []).push(r); }); return Object.keys(days).sort().reverse().map(day => '
' + esc(day) + '
' + days[day].map(r => - '
' + esc(r.createTime || '') + ' ' + badge(r.action, 'b1') + ' ' + esc(r.operatorName || r.operator || '') + ':' + esc(r.detail || '') + '
').join('')).join(''); + '
' + esc(r.createTime || '') + ' ' + badge(OPLOG_ACTIONS[r.action] || r.action, 'b1') + ' ' + esc(r.operatorName || r.operator || '') + ':' + esc(r.detail || '') + '
').join('')).join(''); +} +async function loadOplog() { + const box = $('oplogBox'); + if (!box) return; + try { + const d = await api('/api/customer/oplog/page?' + qs({ + id: D.id, action: formVal('fOpAction'), keyword: formVal('fOpKw'), + startTime: formVal('fOpStart') ? formVal('fOpStart') + ' 00:00:00' : '', + endTime: formVal('fOpEnd') ? formVal('fOpEnd') + ' 23:59:59' : '', current: 1, size: 50 + })); + box.innerHTML = oplogHtml((d && d.content) || []); + } catch (e) { box.innerHTML = errHtml(e); } } /* ---- 战略协议(详情页签 6,返工票 12) ---- */ @@ -1375,7 +1937,9 @@ async function loadImportPage() { const b = $('impBody'); if (!TOKEN()) { b.innerHTML = '请先登录'; return; } try { - const d = await api('/api/customer/import/page?current=1&size=20'); + const d = await api('/api/customer/import/page?current=1&size=20' + + ($('impFStatus').value !== '' ? '&status=' + $('impFStatus').value : '') + + ($('impFMode').value !== '' ? '&importMode=' + $('impFMode').value : '')); const rows = (d && d.content) || []; b.innerHTML = rows.length ? rows.map(t => '' + '' + esc(t.taskId) + '' + esc(t.importMode || '--') + '' + impBadge(t.status) + @@ -2341,7 +2905,9 @@ function bindContactsUI() { $('apiBox').textContent = 'API: ' + (API_BASE || '同源部署') + (localStorage.getItem('e2c_api') ? '(已记忆,?api=reset 恢复本地)' : ''); paintWho(); bindContactsUI(); - if (TOKEN()) { loadList(); loadSummary(); } + paintFormOptions(); + paintHead(); + if (TOKEN()) switchWs(S.ws); })(); diff --git a/.scratch/customer-demo-ref/demo/shots/s01-list.png b/.scratch/customer-demo-ref/demo/shots/s01-list.png new file mode 100644 index 0000000..a307c1f Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s01-list.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/s02-pool-i06.png b/.scratch/customer-demo-ref/demo/shots/s02-pool-i06.png new file mode 100644 index 0000000..74f9e00 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s02-pool-i06.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/s07-board.png b/.scratch/customer-demo-ref/demo/shots/s07-board.png new file mode 100644 index 0000000..03eceb5 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s07-board.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/s11-head.png b/.scratch/customer-demo-ref/demo/shots/s11-head.png new file mode 100644 index 0000000..065d03f Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s11-head.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/s19-oplog.png b/.scratch/customer-demo-ref/demo/shots/s19-oplog.png new file mode 100644 index 0000000..4bf2698 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s19-oplog.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/s20-import.png b/.scratch/customer-demo-ref/demo/shots/s20-import.png new file mode 100644 index 0000000..701d0ac Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s20-import.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/s24-transfer.png b/.scratch/customer-demo-ref/demo/shots/s24-transfer.png new file mode 100644 index 0000000..d2816b3 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s24-transfer.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/s30-ledger.png b/.scratch/customer-demo-ref/demo/shots/s30-ledger.png new file mode 100644 index 0000000..d76f696 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s30-ledger.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/s40-final.png b/.scratch/customer-demo-ref/demo/shots/s40-final.png new file mode 100644 index 0000000..918078c Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/s40-final.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/t10-quick-pool.png b/.scratch/customer-demo-ref/demo/shots/t10-quick-pool.png new file mode 100644 index 0000000..ff2c40e Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/t10-quick-pool.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/t11-quick-detail.png b/.scratch/customer-demo-ref/demo/shots/t11-quick-detail.png new file mode 100644 index 0000000..980370e Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/t11-quick-detail.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/t12-quick-contacts.png b/.scratch/customer-demo-ref/demo/shots/t12-quick-contacts.png new file mode 100644 index 0000000..c97b27b Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/t12-quick-contacts.png differ diff --git a/.scratch/customer-demo-ref/demo/shots/t13-quick-settings.png b/.scratch/customer-demo-ref/demo/shots/t13-quick-settings.png new file mode 100644 index 0000000..f008527 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/shots/t13-quick-settings.png differ diff --git a/.scratch/customer-demo-ref/demo/smoke-report.json b/.scratch/customer-demo-ref/demo/smoke-report.json new file mode 100644 index 0000000..c1c7349 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/smoke-report.json @@ -0,0 +1,444 @@ +{ + "summary": { + "total": 40, + "passed": 40, + "failed": 0, + "passRate": "100%", + "startedAt": "2026-09-12 00:19:41", + "durationS": 176.4, + "verdict": "PASS", + "verdictRule": "全部步骤 ok 即 PASS,任一 FAIL 即 FAIL" + }, + "steps": [ + { + "step": "01 打开Demo+uid登录+首屏列表渲染", + "ok": true, + "note": "rows=10" + }, + { + "step": "02 三workspace切换;pool不发board+I-06注记[D]", + "ok": true, + "note": "overview请求OK=True;pool新请求3条;i06可见=True" + }, + { + "step": "03 内置视图下拉五值+切FOLLOW_UP_DUE", + "ok": true, + "note": "opts=['ASSIGNED', 'COLLABORATING', 'FOLLOW_UP_DUE', 'FOCUSED', 'RECENT']" + }, + { + "step": "04 列筛选阶段=已成交", + "ok": true, + "note": "请求参数 customerStage=3 已命中" + }, + { + "step": "05 归档态开关+e2c-已归档可见", + "ok": true, + "note": "archiveStatus=2命中=True;样例可见=True" + }, + { + "step": "06 saved-view 新建→选中查询→删除", + "ok": true, + "note": "save=True;选中带savedViewId=True;删后消失=True;body=POST /api/preference/view/save?scopeKey=customer.mine # {\"name\":\"e2c-dr-视图\",\"isDefault\":false,\"seqNo\":10,\"conditions\":[{\"field\":\"keyword\",\"operator\":\"" + }, + { + "step": "07 形态偏好overview切看板→渲染→还原list", + "ok": true, + "note": "看板列=3;cards请求=True;还原=True" + }, + { + "step": "08 工商联想(companyName)+NO_HIT现象+STUB-LOOKUP注记[D]", + "ok": true, + "note": "未查询到匹配企业(一期企查查 port 为 stub 恒 NO_HIT,如实呈现;可手工录入,真实源接入后自动激活)。" + }, + { + "step": "09 名称查重needConfirm+similarHits→confirmSimilar重发→创建成功", + "ok": true, + "note": "simbox=相似命中 1 条:e2c-dr-恒信达科技有限责任公司(负责人=罗伟健,潜在客户,有效)仍要创建? 确认创建(confirmSimilar=;toast=创建成功 id=753771843382411264;夹具A=753771843382411264" + }, + { + "step": "10 编辑客户回显+CAS保存(含相似确认重发)", + "ok": true, + "note": "回显名=e2c-dr-恒信达科技有限责任公司;simbox=命中;toast=保存成功;db=e2c-dr-恒信达科技有限责任公司-改 v1" + }, + { + "step": "11 详情头部渲染+4金额卡恒--[D]", + "ok": true, + "note": "cards=['--', '--', '--', '-- / --'];P3-6角标=1" + }, + { + "step": "12 8页签全遍历+联系人顶级菜单contact/page", + "ok": true, + "note": "subs=['info', 'contacts', 'follow', 'opps', 'projects', 'agreements', 'members', 'oplog'];contact/page行=10;新增errs=[]" + }, + { + "step": "13 信息栅格16字段+G4创建/更新人--[D]+creditCode明文", + "ok": true, + "note": "kv=18;创建人=--;信用代码=91440101E2CTEST001" + }, + { + "step": "14 商机7列(G2-D)+项目页签Noop空态+contact/search命中", + "ok": true, + "note": "商机列=['商机ID', '商机名称', '阶段', '预计金额', '负责人ID', '负责人', '最近更新'];Noop空态=True;search=姓名职务电话关键联系人来源所属客户客户编号张关键董事长138****0001是contact_source_01e2c-" + }, + { + "step": "15 成员加BUDDY→渲染→移除(G3-D无职务/加入时间列)", + "ok": true, + "note": "列头=['成员', '角色', '操作'];DB成员行=28;memberUserIds重复键=True" + }, + { + "step": "16 联系人quickAdd2行+G5无负责人列[D]+电话脱敏+reveal明文+DB埋点", + "ok": true, + "note": "脱敏=True;DB联系人=5;reveal_log=8;明文=True;列头=['', '#', '姓名', '职务', '联系电话', '关键', '内线', '来源', '礼品备注', '操作'];qaRet={\"successCount\":2,\"failedRows\":[]}" + }, + { + "step": "17 batchEdit空串=DB不改(D-G1)[D]+check-phone命中+删除双刷", + "ok": true, + "note": "DB phone=13812340001;D-G1角标=1;check-phone=客户编号--客户名称--客户类型--阶段--客户星级--关系星级--战略协议--;删后行=4(删前5,del_ok=True,errs+0);lid=753771972256595968;names=李冒烟,赵冒烟,李普通,王重复,张关键" + }, + { + "step": "18 写跟进+日期分组+followWay筛选", + "ok": true, + "note": "way选项=6(空+5);日期分组=5;筛选=True" + }, + { + "step": "19 关注/重点标记+oplog留痕+action筛选", + "ok": true, + "note": "action=CREATE筛选含新增客户=True;action=FOLLOW筛选=True;DB跟进=24" + }, + { + "step": "20 客户导入三段式(缺省份预检FAIL→DONE计数=预检→明细吻合)", + "ok": true, + "note": "预检 t=2 ins=1 fail=1;taskId=753772071518994432;result={'taskId': '753772071518994432', 'importMode': 'APPEND_ONLY', 'templateVersion': 'V1', 'status': 2, 'totalCount': 2, 'insertCount': 1, 'updateCount': 0, 'unchangedCount': 0, 'failCount': 1, 'suspectCount': 0, 'failReason': None, 'creatorName': None, 'createTime': '2026-09-12 00:21:06', 'finishTime': '2026-09-12 00:21:08'};明细=1行" + }, + { + "step": "21 导入任务列表+status/importMode过滤+P3-3注记[D]", + "ok": true, + "note": "status过滤=True;mode过滤=True;P3-3=1" + }, + { + "step": "22 联系人导入三段式+P3-3无校验复选框[D]", + "ok": true, + "note": "预检=预检完成(任务 753772113634000896 待确认):共 2 行,预计新增 2、更新 0、失败 0、疑似重复 ;result={'taskId': '753772113634000896', 'customerId': '753771843382411264', 'importMode': 'APPEND_ONLY', 'templateVersion': 'V1', 'status': 2, 'totalCount': 2, 'insertCount': 2, 'updateCount': 0, 'unchangedCount': 0, 'failCount': 0, 'suspectCount': 0, 'failReason': None, 'creatorName': None, 'createTime': '2026-09-12 00:21:16', 'finis" + }, + { + "step": "23 商机联动链(UI建商机→抛公海拦截→关商机→放行)", + "ok": true, + "note": "商机=753772150371909632;状态2→4;一次release拦截=True(toast=商机已创建 id=753772150371909632;客户详情「关联商机」页签可反查 || {\"total\":1,\"s);进公海=True" + }, + { + "step": "24 交割(preview圈定→initiate→page→detail→assignable→assign明细态变化;F-13清leftover=0)", + "ok": true, + "note": "单号=JG202609120001;圈定含夹具=True;明细=1→assign后变化=True(assign对象=99021002);UI行=10" + }, + { + "step": "25 归属动作族(release→claim→archive→restore→再archive+oplog+assign)", + "ok": true, + "note": "进公海=True(pool默认视图行=0,清视图后行=1);claim=True({\"total\":1,\"successCount\":1,\"failCount\":);archive=True({\"total\":1,\"successCount\":1,\"failCount\":);assign=True(success=1 fail=0);恢复1→再归档2;oplog=3" + }, + { + "step": "26 查重设置读→改90→save生效→还原(含匹配方式不被污染)", + "ok": true, + "note": "原=80→90→还原=80;mode=2(原2)" + }, + { + "step": "27 check-name命中e2c-恒信达+信用代码撞码67003(L3硬拦)+check-credit-code L1", + "ok": true, + "note": "check-name=check-name:[{\"customerId\":\"753771720497692672\",\"customerName;err=统一社会信用代码已被占用:系统已存在该企业 (code=67003);creditCode.exists=True" + }, + { + "step": "28 超期提醒save非法0→64023toast→还原30/7", + "ok": true, + "note": "64023=True;还原=30/7(原30/7)" + }, + { + "step": "29 公海池配置占位卡只读[D]", + "ok": true, + "note": "角标=1;禁用输入=2" + }, + { + "step": "30 缺陷台账面板(A≥14/B4/C14/D1+固定声明)", + "ok": true, + "note": "A=14 B=4 C=14 D=1;渲染行=33" + }, + { + "step": "31 data-defect角标≥12且关键类目齐全(多页签累计)", + "ok": true, + "note": "累计=87;类目=['D-G1', 'G1', 'G2', 'G3', 'G4', 'G5', 'I-06', 'P3-3', 'P3-6', 'POOL-CFG', 'STUB-LOOKUP']" + }, + { + "step": "32 I-06双现象(pool无board选项+注记含67001/记忆成功)", + "ok": true, + "note": "fForm选项=['list', 'split']" + }, + { + "step": "33 豁免入口不出现(换负责人/日志导出/完整金额开关/导入校验复选框)", + "ok": true, + "note": "命中=0" + }, + { + "step": "34 G系列合并复核(G1无操作人筛选/G2七列/G3两列缺/G4--[D]/G5无负责人列/G6空态)", + "ok": true, + "note": "G1=True G2=True G3=True G4=True G5=True G6=True" + }, + { + "step": "35 金额卡P3-6四卡--口径+关联项目Noop空态", + "ok": true, + "note": "cards=['--', '--', '--', '-- / --']" + }, + { + "step": "36 company-lookup NO_HIT+F6 stub文案", + "ok": true, + "note": "NO_HIT=True;F6stub=True" + }, + { + "step": "37 console/pageerror=0", + "ok": true, + "note": "无错误" + }, + { + "step": "38 零PUT/DELETE(ADR-0017)", + "ok": true, + "note": "违例=[]" + }, + { + "step": "39 端点覆盖广度(唯一路径≥50+矩阵清单50条)", + "ok": true, + "note": "唯一路径=91;缺失=[]" + }, + { + "step": "40 夹具正门清扫+规则/形态偏好还原核对", + "ok": true, + "note": "清扫=4行;残留=0;dedup=80(原80);reminder=30(原30);overview形态=list" + } + ], + "errors": [], + "http_fails": [], + "api_urls": [ + "GET /api/auth/debug/token?userId=739564171091247104", + "GET /api/dict/item/enabled-list?groupCode=customer_type", + "GET /api/dict/item/enabled-list?groupCode=industry", + "GET /api/dict/item/tree?groupCode=job_title", + "POST /api/customer/create", + "GET /api/rule/customer/dedup", + "GET /api/customer/check-name?name=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E8%B4%A3%E4%BB%BB%E5%85%AC%E5%8F%B8", + "GET /api/auth/debug/token?userId=739564171091247104", + "GET /api/auth/me", + "GET /api/preference/view/list?scopeKey=customer.mine", + "GET /api/preference/view-form/get?scopeKey=customer.mine", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&archiveStatus=1", + "GET /api/preference/view/list?scopeKey=customer.overview", + "GET /api/preference/view-form/get?scopeKey=customer.overview", + "POST /api/customer/workspace/page # workspace=overview¤t=1&size=10&viewType=ASSIGNED&archiveStatus=1", + "GET /api/preference/view/list?scopeKey=customer.pool", + "GET /api/preference/view-form/get?scopeKey=customer.pool", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&viewType=ASSIGNED&archiveStatus=1", + "GET /api/preference/view/list?scopeKey=customer.mine", + "GET /api/preference/view-form/get?scopeKey=customer.mine", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&archiveStatus=1", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=FOLLOW_UP_DUE&archiveStatus=1", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&archiveStatus=1", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&archiveStatus=1&customerStage=3", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&archiveStatus=1", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&archiveStatus=2", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c-%E5%B7%B2%E5%BD%92%E6%A1%A3&archiveStatus=2", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c-%E5%B7%B2%E5%BD%92%E6%A1%A3&archiveStatus=1", + "POST /api/preference/view/save?scopeKey=customer.mine # {\"name\":\"e2c-dr-视图\",\"isDefault\":false,\"seqNo\":10,\"conditions\":[{\"field\":\"keyword\",\"operator\":\"like\",\"value\":\"e2c\"}]}", + "GET /api/preference/view/list?scopeKey=customer.mine", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1&savedViewId=76ac031d780e41558ceaf438ffd0b163", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1&savedViewId=76ac031d780e41558ceaf438ffd0b163", + "POST /api/preference/view/delete?scopeKey=customer.mine&viewId=76ac031d780e41558ceaf438ffd0b163", + "GET /api/preference/view/list?scopeKey=customer.mine", + "GET /api/preference/view/list?scopeKey=customer.overview", + "GET /api/preference/view-form/get?scopeKey=customer.overview", + "POST /api/customer/workspace/page # workspace=overview¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1", + "POST /api/preference/view-form/save # scopeKey=customer.overview&viewForm=board", + "POST /api/customer/workspace/board/summary # workspace=overview&viewType=ASSIGNED&groupColumn=stage", + "POST /api/customer/workspace/board/cards # workspace=overview&viewType=ASSIGNED&groupColumn=stage&groupValue=1¤t=1&size=20", + "POST /api/customer/workspace/board/cards # workspace=overview&viewType=ASSIGNED&groupColumn=stage&groupValue=2¤t=1&size=20", + "POST /api/customer/workspace/board/cards # workspace=overview&viewType=ASSIGNED&groupColumn=stage&groupValue=3¤t=1&size=20", + "POST /api/preference/view-form/save # scopeKey=customer.overview&viewForm=list", + "GET /api/preference/view/list?scopeKey=customer.mine", + "GET /api/preference/view-form/get?scopeKey=customer.mine", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1", + "GET /api/customer/company-lookup?companyName=%E5%8D%8E%E5%85%B4%E6%99%BA%E9%80%A0%E7%A7%91%E6%8A%80", + "POST /api/customer/create # customerName=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E8%B4%A3%E4%BB%BB%E5%85%AC%E5%8F%B8&customerType=customer_type_01&provinceCode=440000&cityCode=440100&districtCode=440103&industryCode=gov_1&customerStarLevel=3&relationStarLevel=3&isBizNegotiated=0&isChild=0&ownerUserId=739564171091247104", + "POST /api/customer/create # customerName=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E8%B4%A3%E4%BB%BB%E5%85%AC%E5%8F%B8&customerType=customer_type_01&provinceCode=440000&cityCode=440100&districtCode=440103&industryCode=gov_1&customerStarLevel=3&relationStarLevel=3&isBizNegotiated=0&isChild=0&ownerUserId=739564171091247104&confirmSimilar=true", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1", + "GET /api/customer/detail-head?id=753771843382411264", + "GET /api/customer/detail?id=753771843382411264", + "GET /api/customer/detail?id=753771843382411264", + "POST /api/customer/edit?id=753771843382411264 # customerName=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E8%B4%A3%E4%BB%BB%E5%85%AC%E5%8F%B8-%E6%94%B9&customerType=customer_type_01&provinceCode=440000&cityCode=440100&districtCode=440103&industryCode=gov_1&customerStarLevel=3&relationStarLevel=3&version=0&isBizNegotiated=0&isChild=0", + "POST /api/customer/edit?id=753771843382411264 # customerName=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E8%B4%A3%E4%BB%BB%E5%85%AC%E5%8F%B8-%E6%94%B9&customerType=customer_type_01&provinceCode=440000&cityCode=440100&districtCode=440103&industryCode=gov_1&customerStarLevel=3&relationStarLevel=3&version=0&isBizNegotiated=0&isChild=0&confirmSimilar=true", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1", + "GET /api/customer/detail-head?id=753771843382411264", + "GET /api/customer/detail?id=753771843382411264", + "GET /api/customer/detail?id=753771843382411264", + "GET /api/dict/item/tree?groupCode=job_title", + "GET /api/dict/item/enabled-list?groupCode=contact_source", + "GET /api/dict/item/tree?groupCode=industry", + "GET /api/customer/contacts?customerId=753771843382411264", + "GET /api/customer/contact/graph/detail?customerId=753771843382411264", + "GET /api/customer/follow/page?id=753771843382411264¤t=1&size=50", + "GET /api/customer/opportunity/page?id=753771843382411264", + "GET /api/customer/project/page?id=753771843382411264¤t=1&size=50", + "GET /api/customer/agreement/list?customerId=753771843382411264", + "GET /api/customer/member/list?id=753771843382411264", + "GET /api/customer/oplog/page?id=753771843382411264¤t=1&size=50", + "GET /api/customer/contact/page?current=1&size=10&keyword=", + "GET /api/customer/detail?id=753771843382411264", + "GET /api/customer/detail-head?id=750844477165273088", + "GET /api/customer/detail?id=750844477165273088", + "GET /api/customer/detail?id=750844477165273088", + "GET /api/customer/opportunity/page?id=750844477165273088", + "GET /api/customer/project/page?id=750844477165273088¤t=1&size=50", + "GET /api/customer/contact/search?keyword=%E5%BC%A0%E5%85%B3%E9%94%AE&limit=20", + "GET /api/customer/member/list?id=750844477165273088", + "POST /api/customer/member/add?id=750844477165273088 # memberUserIds=744842318024015872", + "GET /api/customer/member/list?id=750844477165273088", + "POST /api/customer/member/remove?id=750844477165273088&memberUserId=744842318024015872", + "GET /api/customer/member/list?id=750844477165273088", + "GET /api/customer/contacts?customerId=750844477165273088", + "GET /api/customer/contact/graph/detail?customerId=750844477165273088", + "POST /api/customer/contact/quickAdd # customerId=750844477165273088&rows[0].name=李冒烟&rows[0].jobTitleCode=chairman&rows[0].phone=13800002222&rows[0].source=other&rows[0].isKeyContact=0&rows[1].name=赵冒烟&rows[1].jobTitleCode=chairman&rows[1].source=other", + "GET /api/customer/contacts?customerId=750844477165273088", + "GET /api/customer/contact/reveal?id=753771972256595968", + "GET /api/customer/contact/reveal?id=753771972432756736", + "GET /api/customer/contact/reveal?id=750844500779204608", + "GET /api/customer/contact/reveal?id=750844501387378688", + "GET /api/customer/contact/reveal?id=750844500171030528", + "POST /api/customer/contact/batchEdit # rows%5B0%5D.id=750844500171030528&rows%5B0%5D.name=%E5%BC%A0%E5%85%B3%E9%94%AE&rows%5B0%5D.jobTitleCode=chairman&rows%5B0%5D.phone=&rows%5B0%5D.source=contact_source_01&rows%5B0%5D.isKeyContact=1", + "GET /api/customer/contacts?customerId=750844477165273088", + "GET /api/customer/contact/graph/detail?customerId=750844477165273088", + "GET /api/customer/contact/check-phone?phone=13812340001", + "POST /api/customer/contact/delete?id=753771972256595968", + "GET /api/customer/contacts?customerId=750844477165273088", + "GET /api/customer/contact/graph/detail?customerId=750844477165273088", + "GET /api/customer/follow/page?id=750844477165273088¤t=1&size=50", + "POST /api/customer/follow/add?id=750844477165273088 # followWay=follow_way_01&followContent=%E5%86%92%E7%83%9F%E8%B7%9F%E8%BF%9B%E5%86%85%E5%AE%B9-%E7%94%B5%E8%AF%9D%E6%B2%9F%E9%80%9A", + "GET /api/customer/follow/page?id=750844477165273088¤t=1&size=50", + "GET /api/customer/detail-head?id=750844477165273088", + "GET /api/customer/follow/page?id=750844477165273088&followWay=follow_way_01¤t=1&size=50", + "POST /api/customer/focus?id=750844477165273088", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1", + "GET /api/customer/detail-head?id=750844477165273088", + "POST /api/customer/star?id=750844477165273088", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1", + "GET /api/customer/detail-head?id=750844477165273088", + "GET /api/customer/oplog/page?id=750844477165273088¤t=1&size=50", + "GET /api/customer/oplog/page?id=750844477165273088&action=FOLLOW¤t=1&size=50", + "GET /api/customer/oplog/page?id=750844477165273088&action=CREATE¤t=1&size=50", + "POST /api/customer/import/upload", + "GET /api/customer/import/page?current=1&size=20", + "POST /api/customer/import/confirm?taskId=753772071518994432", + "GET /api/customer/import/result?taskId=753772071518994432", + "GET /api/customer/import/failures?taskId=753772071518994432", + "GET /api/customer/import/page?current=1&size=20", + "GET /api/customer/import/page?current=1&size=20&status=2", + "GET /api/customer/import/page?current=1&size=20&status=2&importMode=UPSERT", + "GET /api/customer/detail-head?id=753771843382411264", + "GET /api/customer/detail?id=753771843382411264", + "GET /api/customer/contacts?customerId=753771843382411264", + "GET /api/customer/contact/graph/detail?customerId=753771843382411264", + "POST /api/customer/contact/import/upload", + "POST /api/customer/contact/import/confirm?taskId=753772113634000896", + "GET /api/customer/contact/import/result?taskId=753772113634000896", + "GET /api/customer/contact/import/result?taskId=753772113634000896", + "GET /api/customer/contact/import/failures?taskId=753772113634000896", + "GET /api/customer/contact/import/result?taskId=753772113634000896", + "GET /api/customer/contacts?customerId=753771843382411264", + "GET /api/customer/contact/graph/detail?customerId=753771843382411264", + "GET /api/preference/view/list?scopeKey=customer.mine", + "GET /api/preference/view-form/get?scopeKey=customer.mine", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c&archiveStatus=1", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE&archiveStatus=1", + "POST /api/opportunity # opportunityName=e2c-dr-%E6%BC%94%E7%A4%BA%E5%95%86%E6%9C%BA&oppSource=opp_source_02&bidForm=bid_form_01&localityType=locality_type_01&provinceCode=440000&cityCode=440100&customerId=753771843382411264&customerName=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E8%B4%A3%E4%BB%BB%E5%85%AC%E5%8F%B8-%E6%94%B9&isPrimaryIntended=1&customerRole=customer_role_01", + "POST /api/customer/release-pool-batch?ids=753771843382411264", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE&archiveStatus=1", + "GET /api/customer/detail-head?id=753771843382411264", + "POST /api/opportunity/assign?id=753772150371909632&userId=739564171091247104", + "POST /api/opportunity/close?id=753772150371909632&closeReason=%E5%86%92%E7%83%9F%E6%BC%94%E7%A4%BA%E5%85%B3%E9%97%AD", + "POST /api/customer/release-pool-batch?ids=753771843382411264", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&viewType=ASSIGNED&keyword=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE&archiveStatus=1", + "GET /api/customer/detail-head?id=753771843382411264", + "POST /api/customer/claim-batch?ids=753771843382411264", + "POST /api/customer/assign-batch?ids=753771843382411264&userId=744842318024015872", + "GET /api/auth/debug/token?userId=744842318024015872", + "GET /api/customer/transfer/preview", + "POST /api/customer/transfer/initiate", + "GET /api/customer/transfer/page?current=1&size=10", + "GET /api/customer/transfer/detail?id=753772181279735808", + "GET /api/customer/transfer/assignable?id=753772181279735808", + "POST /api/customer/transfer/assign?id=753772181279735808&customerIds=753771843382411264&assignUserId=99021002", + "GET /api/customer/transfer/detail?id=753772181279735808", + "GET /api/customer/transfer/page?current=1&size=10", + "POST /api/customer/release-pool-batch?ids=753772080058597376", + "GET /api/preference/view/list?scopeKey=customer.pool", + "GET /api/preference/view-form/get?scopeKey=customer.pool", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&viewType=ASSIGNED&keyword=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE&archiveStatus=1", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&viewType=ASSIGNED&keyword=e2c-dr-imp&archiveStatus=1", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "POST /api/customer/claim-batch?ids=753772080058597376", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "GET /api/customer/detail-head?id=753771843382411264", + "POST /api/customer/archive-batch?ids=753772080058597376", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "GET /api/customer/detail-head?id=753771843382411264", + "GET /api/customer/detail-head?id=753772080058597376", + "GET /api/customer/detail?id=753772080058597376", + "POST /api/customer/restore?id=753772080058597376", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "GET /api/customer/detail-head?id=753772080058597376", + "POST /api/customer/archive?id=753772080058597376", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "GET /api/customer/detail-head?id=753772080058597376", + "POST /api/customer/assign-batch?ids=753772080058597376&userId=744842318024015872", + "GET /api/rule/customer/dedup", + "GET /api/rule/customer/dedup", + "POST /api/rule/customer/dedup/save # masterEnabled=1&nameEnabled=1&nameMatchMode=2&similarityThreshold=90&phoneEnabled=1", + "GET /api/rule/customer/dedup", + "POST /api/rule/customer/dedup/save # masterEnabled=1&nameEnabled=1&nameMatchMode=2&similarityThreshold=80&phoneEnabled=1", + "GET /api/rule/customer/dedup", + "GET /api/rule/customer/dedup", + "GET /api/customer/check-name?name=e2c-dr-%E6%81%92%E4%BF%A1%E8%BE%BE%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E8%B4%A3%E4%BB%BB%E5%85%AC%E5%8F%B8", + "GET /api/customer/check-credit-code?creditCode=91440101E2CTEST001", + "POST /api/customer/create # customerName=e2c-dr-%E6%92%9E%E7%A0%81%E5%AE%A2%E6%88%B7&customerType=customer_type_01&provinceCode=440000&cityCode=440100&districtCode=440103&industryCode=gov_1&unifiedCreditCode=91440101E2CTEST001&customerStarLevel=3&relationStarLevel=3&isBizNegotiated=0&isChild=0", + "GET /api/rule/customer/reminder", + "POST /api/rule/customer/reminder/save # masterEnabled=1&firstTriggerEnabled=1&firstTriggerDays=0&secondIntervalEnabled=1&secondIntervalDays=0", + "POST /api/rule/customer/reminder/save # masterEnabled=1&firstTriggerEnabled=1&firstTriggerDays=30&secondIntervalEnabled=1&secondIntervalDays=7", + "GET /api/rule/customer/reminder", + "GET /api/preference/view/list?scopeKey=customer.pool", + "GET /api/preference/view-form/get?scopeKey=customer.pool", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "GET /api/preference/view/list?scopeKey=customer.mine", + "GET /api/preference/view-form/get?scopeKey=customer.mine", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "GET /api/customer/detail-head?id=753771843382411264", + "GET /api/customer/detail?id=753771843382411264", + "GET /api/customer/detail?id=753771843382411264", + "GET /api/customer/follow/page?id=753771843382411264¤t=1&size=50", + "GET /api/customer/opportunity/page?id=753771843382411264", + "GET /api/customer/member/list?id=753771843382411264", + "GET /api/customer/contacts?customerId=753771843382411264", + "GET /api/customer/contact/graph/detail?customerId=753771843382411264", + "GET /api/preference/view/list?scopeKey=customer.pool", + "GET /api/preference/view-form/get?scopeKey=customer.pool", + "POST /api/customer/workspace/page # workspace=pool¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "GET /api/preference/view/list?scopeKey=customer.mine", + "GET /api/preference/view-form/get?scopeKey=customer.mine", + "POST /api/customer/workspace/page # workspace=mine¤t=1&size=10&keyword=e2c-dr-imp&archiveStatus=1", + "GET /api/customer/detail-head?id=750844477165273088", + "GET /api/customer/detail?id=750844477165273088", + "GET /api/customer/follow/page?id=750844477165273088¤t=1&size=50", + "GET /api/customer/opportunity/page?id=750844477165273088", + "GET /api/customer/member/list?id=750844477165273088", + "GET /api/customer/detail?id=750844477165273088", + "GET /api/customer/contacts?customerId=750844477165273088", + "GET /api/customer/contact/graph/detail?customerId=750844477165273088", + "GET /api/customer/contact/detail?id=753771972432756736", + "GET /api/customer/project/page?id=750844477165273088¤t=1&size=50", + "GET /api/customer/company-lookup?companyName=%E6%B5%8B%E8%AF%95%E8%81%94%E6%83%B3%E8%AF%8D", + "GET /api/rule/customer/dedup", + "GET /api/rule/customer/reminder", + "GET /api/preference/view-form/get?scopeKey=customer.overview" + ] +} \ No newline at end of file diff --git a/.scratch/customer-demo-ref/demo/smoke.py b/.scratch/customer-demo-ref/demo/smoke.py new file mode 100644 index 0000000..14da713 --- /dev/null +++ b/.scratch/customer-demo-ref/demo/smoke.py @@ -0,0 +1,1099 @@ +# -*- coding: utf-8 -*- +"""customer-demo-ref 40 步冒烟(票 14;骨架照搬 t04 + contact-graph 冒烟) + +被测:demo/index.html?api=http://localhost:8080(本 effort fork) +前置:SPRING_PROFILES_ACTIVE=verify CRM_MINIO_AK=admin CRM_MINIO_SK=Itc@123456 java -jar crm-app/target/crm-app-1.0.0-SNAPSHOT.jar +运行:py -X utf8 .scratch/customer-demo-ref/demo/smoke.py +认证:page.route 反代 http://localhost:8080/**(剥 origin/host/authorization + 注 Bearer debug token + 补 CORS) +纪律:只测不修;写夹具 e2c-dr-* 用后正门硬删;偏好/规则写后 API 还原;零 PUT/DELETE。 +""" +import io, os, re, sys, json, time, urllib.request, urllib.parse, urllib.error +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', line_buffering=True) +import pymysql +from playwright.sync_api import sync_playwright + +ROOT = r"e:\code\crm-backend-matt\.scratch\customer-demo-ref" +DEMO = os.path.join(ROOT, "demo") +SHOTS = os.path.join(DEMO, "shots"); os.makedirs(SHOTS, exist_ok=True) +URL = 'file:///' + os.path.join(DEMO, 'index.html').replace('\\', '/') + '?api=http://localhost:8080' +BASE = "http://localhost:8080" +ADMIN = "739564171091247104" # 罗伟健 admin +BUDDY = "744842318024015872" # 曾偲青(协同样例) +PFX = "e2c-dr" +TS = time.strftime("%H%M%S") + +steps, api_urls, console_errors, http_fails = [], [], [], [] + +def step(name, ok, note=""): + steps.append({"step": name, "ok": bool(ok), "note": str(note)[:400]}) + print(("PASS " if ok else "FAIL ") + name + (" | " + str(note)[:300] if note else "")) + +def shot(pg, name): + try: pg.screenshot(path=os.path.join(SHOTS, name), full_page=False) + except Exception: pass + +# ---------------- HTTP 直调(夹具/取证不走浏览器;请求同样记入 api_urls 供步 39 端点矩阵覆盖) ---------------- +def post(url, data, token=None, raw=False): + api_urls.append("POST " + url.split(BASE)[-1]) + req = urllib.request.Request(url, data=urllib.parse.urlencode(data).encode(), method="POST") + req.add_header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8") + if token: req.add_header("Authorization", "Bearer " + token) + with urllib.request.urlopen(req, timeout=30) as r: + b = r.read().decode() + return b if raw else json.loads(b) + +def get_json(url, token=None, raw=False): + if url.startswith(BASE): + api_urls.append("GET " + url.split(BASE)[-1]) + req = urllib.request.Request(url) + if token: req.add_header("Authorization", "Bearer " + token) + with urllib.request.urlopen(req, timeout=30) as r: + b = r.read().decode() + return b if raw else json.loads(b) + +def get_token(uid, tries=8): + for _ in range(tries): + try: + d = get_json(f"{BASE}/api/auth/debug/token?userId={uid}").get("data") + if d: return d if isinstance(d, str) else d.get("token") + except Exception: pass + time.sleep(2) + raise RuntimeError("debug/token 重试后仍失败(服务未起?)") + +def db(): + return pymysql.connect(host='8.129.84.155', port=3306, user='root', password='Itc@123456', + database='crm', charset='utf8mb4', autocommit=True, + connect_timeout=10, cursorclass=pymysql.cursors.DictCursor) + +def dbq(sql, args=None): + with db() as conn, conn.cursor() as cur: + cur.execute(sql, args); return cur.fetchall() + +def dbx(sql, args=None): + with db() as conn, conn.cursor() as cur: + cur.execute(sql, args); return cur.rowcount + +def dict_one(group, token): + try: + d = get_json(f"{BASE}/api/dict/item/enabled-list?groupCode={group}", token).get("data") or [] + return (d[0] or {}).get("code") if d else None + except Exception: return None + +def mk_customer(name, token, ctype, gov, owner=ADMIN, credit=None): + form = {"customerName": name, "customerType": ctype, + "provinceCode": "440000", "cityCode": "440100", "districtCode": "440103", + "industryCode": gov, "customerStarLevel": 3, "relationStarLevel": 3, + "isBizNegotiated": 0, "isChild": 0, "ownerUserId": owner} + if credit: form["unifiedCreditCode"] = credit + r = post(f"{BASE}/api/customer/create", form, token) + d = r.get("data") or {} + if isinstance(d, dict) and d.get("needConfirm"): + r = post(f"{BASE}/api/customer/create", dict(form, confirmSimilar="true"), token) + d = r.get("data") or {} + if not (isinstance(d, dict) and d.get("id")): + raise RuntimeError(f"夹具客户创建失败 {name}: {str(r)[:160]}") + return str(d["id"]) + +def quick_add(cid, rows, token): + form = {"customerId": str(cid)} + for i, row in enumerate(rows): + for k, v in row.items(): + form[f"rows[{i}].{k}"] = str(v) + r = post(f"{BASE}/api/customer/contact/quickAdd", form, token) + d = r.get("data") or {} + if d.get("failedRows"): + print(" [warn] quickAdd 失败行:", json.dumps(d["failedRows"], ensure_ascii=False)[:200]) + return r + +def job_code_first(token): + """job_title 两级树(/api/dict/item/tree)取首个二级 code(quickAdd/导入模板行都吃字典编码)。""" + try: + tree = get_json(f"{BASE}/api/dict/item/tree?groupCode=job_title", token).get("data") or [] + for g in tree: + for c in (g.get("children") or []): + if c.get("code"): return c["code"] + except Exception: pass + return None + +# ---------------- seed 自举(共享库 e2c- 种子缺失时幂等补建;票 12 实测远程库无 e2c- seed) ---------------- +SEEDS = {} + +def ensure_seeds(tok, ctype, gov, jobc): + def find(name): + rows = dbq("SELECT id, archive_status FROM customer WHERE customer_name=%s AND deleted=0", (name,)) + return (str(rows[0]["id"]), rows[0]["archive_status"]) if rows else (None, None) + # 1) e2c-全字段-科技(详情/图谱/日志样例,owner=ADMIN,带信用代码) + sid, _ = find("e2c-全字段-科技") + if not sid: + sid = mk_customer("e2c-全字段-科技", tok, ctype, gov, credit="91440101E2CTEST001") + SEEDS["full"] = sid + # 2) e2c-dr-恒信达科技有限责任公司(查重相似源,步 9/27;带 e2c-dr 前缀便于 sweep 清扫) + hid, _ = find("e2c-dr-恒信达科技有限责任公司") + if not hid: + hid = mk_customer("e2c-dr-恒信达科技有限责任公司", tok, ctype, gov) + SEEDS["hxd"] = hid + # 2b) 旧版 seed(无 dr 前缀)改名进 sweep 射程,防跨轮残留 + old_hid = dbq("SELECT id FROM customer WHERE customer_name=%s AND deleted=0 AND id<>%s", + ("e2c-恒信达科技有限责任公司", int(hid))) + for r in old_hid: + dbx("UPDATE customer SET customer_name=%s WHERE id=%s", ("e2c-dr-旧seed-%s" % r["id"], r["id"])) + # 2c) 组织关系 seed:BUDDY 所在部门 leader 缺失 → initiate 67011(D22 总监推导走 sys_dept.leader_user_id) + try: + bd = dbq("SELECT dept_id FROM crm_auth_user WHERE id=%s", (int(BUDDY),)) + if bd and bd[0]["dept_id"]: + dbx("UPDATE sys_dept SET leader_user_id=%s WHERE id=%s AND leader_user_id IS NULL", + (int(ADMIN), bd[0]["dept_id"])) + except Exception as e: + print(" [warn] leader seed 跳过: %s" % e) + # 2d) 查重设置归位:出厂 FUZZY(2)(CustomerNameMatchMode javadoc「模糊=出厂默认」); + # 五跑步 26 save 硬编码 nameMatchMode=1 曾把共享库写成 EXACT,这里幂等归位 + try: + dd = get_json(f"{BASE}/api/rule/customer/dedup", tok).get("data") or {} + if dd.get("nameMatchMode") != 2: + post(f"{BASE}/api/rule/customer/dedup/save", + {"masterEnabled": dd.get("masterEnabled") or 1, "nameEnabled": dd.get("nameEnabled") or 1, + "nameMatchMode": 2, "similarityThreshold": dd.get("similarityThreshold") or 80, + "phoneEnabled": dd.get("phoneEnabled") or 1}, tok) + print(" [seed] 查重匹配方式归位 FUZZY(2)", flush=True) + except Exception as e: + print(" [warn] dedup 归位跳过: %s" % e) + # 2e) seed 客户冒烟联系人清扫(上轮步 16 的李冒烟/赵冒烟,保证步 16 幂等;「李普通」为共享 seed 预置不动) + dbx("DELETE FROM customer_contact WHERE customer_id=%s AND name IN (%s,%s) AND deleted=0", + (int(sid), "李冒烟", "赵冒烟")) + # 2f) 旧 seed 联系人职务修复:张关键/王重复(9/10 旧行)job_title_id 为 NULL 且 job_title_name + # 不在字典树(「采购总监(已更新)」)→ loadContacts 的 _jobCode 反查失败 → saveListAll + # 「职务必填」拦截 batchEdit(六跑步 17/39 实锤)。按 jobc 的 dict_item 归位。 + try: + drow = dbq("SELECT id, name FROM dict_item WHERE code=%s LIMIT 1", (jobc,)) + if drow: + for nm in ("张关键", "王重复"): + dbx("UPDATE customer_contact SET job_title_id=%s, job_title_name=%s " + "WHERE customer_id=%s AND name=%s AND job_title_id IS NULL AND deleted=0", + (drow[0]["id"], drow[0]["name"], int(sid), nm)) + except Exception as e: + print(" [warn] 联系人职务 seed 修复跳过: %s" % e) + # 3) e2c-已归档(步 5 只读消费) + aid, ast = find("e2c-已归档") + if not aid: + aid = mk_customer("e2c-已归档", tok, ctype, gov) + post(f"{BASE}/api/customer/archive?id={aid}", {}, tok) + elif ast != 2: + post(f"{BASE}/api/customer/archive?id={aid}", {}, tok) + SEEDS["archived"] = aid + # 4) 联系人样例:张关键 / 王重复(同号 13812340001,步 16/17);行字段=jobTitleCode(RowInput 契约,jobTitleName 不被绑定) + rows = dbq("SELECT name FROM customer_contact WHERE customer_id=%s AND deleted=0", (sid,)) + have = {r["name"] for r in rows} + todo = [] + if "张关键" not in have: todo.append({"name": "张关键", "jobTitleCode": jobc, "phone": "13812340001", "isKeyContact": 1}) + if "王重复" not in have: todo.append({"name": "王重复", "jobTitleCode": jobc, "phone": "13812340001"}) + if todo: quick_add(sid, todo, tok) + return SEEDS + +# ---------------- sweep(e2c-dr* 正门 DB 硬删,幂等重跑) ---------------- +def sweep(): + n = 0 + rows = dbq("SELECT id FROM customer WHERE customer_name LIKE %s", (PFX + "%",)) + for row in rows: + cid = str(row["id"]); n += 1 + # 商机关联行(步 23 建的商机):先删 opportunity_customer 再删商机主体+尽力清子表 + opps = [r["opportunity_id"] for r in dbq( + "SELECT opportunity_id FROM opportunity_customer WHERE customer_id=%s", (cid,))] + dbx("DELETE FROM opportunity_customer WHERE customer_id=%s", (cid,)) + for oid in opps: + for t in ("opportunity_dynamic", "opportunity_follow", "opportunity_oplog", "opportunity_member"): + try: dbx(f"DELETE FROM {t} WHERE opportunity_id=%s", (oid,)) + except Exception: pass + dbx("DELETE FROM opportunity WHERE id=%s", (oid,)) + for t in ("customer_contact_edge", "customer_contact_graph", "customer_contact_reveal_log", + "contact_import_fail", "contact_import_task", "customer_import_fail", "customer_import_task", + "customer_contact", "customer_oplog", "customer_focus", "customer_follow", + "customer_team_member", "customer_view_log", "customer_transfer_detail"): + try: dbx(f"DELETE FROM {t} WHERE customer_id=%s", (cid,)) + except Exception: pass + dbx("DELETE FROM customer WHERE id=%s", (cid,)) + # 交接单(发起人/接收人维度,e2c-dr 期间的 JG 单) + try: + bills = dbq("SELECT id FROM customer_transfer WHERE create_time > DATE_SUB(NOW(), INTERVAL 2 HOUR)") + for b in bills: + dbx("DELETE FROM customer_transfer_detail WHERE transfer_id=%s", (b["id"],)) + dbx("DELETE FROM customer_transfer WHERE id=%s", (b["id"],)) + n += 1 + except Exception: pass + return n + +# ---------------- multipart 分流(Chromium 不回传文件内容 → Python 重发完整 multipart) ---------------- +_CUP_RE = re.compile(r"/api/customer/import/upload") # 客户导入 +_CUP_C_RE = re.compile(r"/api/customer/contact/import/upload") # 联系人导入 +_FLD = {"importMode": re.compile(rb'name="importMode"\r?\n\r?\n([A-Z_]+)'), + "duplicateStrategy": re.compile(rb'name="duplicateStrategy"\r?\n\r?\n([A-Z_]+)'), + "customerId": re.compile(rb'name="customerId"\r?\n\r?\n(\d+)')} + +def _py_upload(path, xlsx, token, mode, strategy, cid=None): + boundary = "----smokeBoundaryDr009876543210" + parts = [] + kv = [("importMode", mode), ("duplicateStrategy", strategy)] + if cid: kv.insert(0, ("customerId", cid)) + for k, v in kv: + parts.append(f'--{boundary}\r\nContent-Disposition: form-data; name="{k}"\r\n\r\n{v}\r\n'.encode()) + with open(xlsx, "rb") as f: fb = f.read() + parts.append((f'--{boundary}\r\nContent-Disposition: form-data; name="file"; filename="{os.path.basename(xlsx)}"\r\n' + f'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\r\n\r\n').encode() + fb + b"\r\n") + parts.append(f"--{boundary}--\r\n".encode()) + req = urllib.request.Request(BASE + path, data=b"".join(parts), method="POST") + req.add_header("Content-Type", f"multipart/form-data; boundary={boundary}") + req.add_header("Authorization", "Bearer " + token) + with urllib.request.urlopen(req, timeout=60) as r: + return json.loads(r.read().decode()) + +def make_handle(route_token): + def handle_api(route): + req = route.request + cors = {"Access-Control-Allow-Origin": req.headers.get("origin") or "null", + "Access-Control-Allow-Credentials": "true"} + u = req.url + p = u.split("?")[0] + ct = (req.headers.get("content-type") or "") + # NET 断言载体:URL 带查询串;POST 文本体(urlencoded/JSON,multipart 已分流)附记在 # 之后 + tail = ("?" + u.split("?", 1)[1]) if "?" in u else "" + if req.method == "POST" and "multipart" not in ct: + bt = (req.post_data or "")[:400] + if bt: tail += " # " + bt.replace("\n", " ") + api_urls.append(req.method + " " + p.split(BASE)[-1] + tail) + if req.method == "POST" and (_CUP_RE.search(p) or _CUP_C_RE.search(p)): + buf = req.post_data_buffer or b"" + mode = (_FLD["importMode"].search(buf) or [b"", b"UPSERT"])[1].decode() + strat = (_FLD["duplicateStrategy"].search(buf) or [b"", b"SKIP"])[1].decode() + cid = (_FLD["customerId"].search(buf) or [b"", b""])[1].decode() or None + path = "/api/customer/import/upload" if _CUP_RE.search(p) else "/api/customer/contact/import/upload" + xlsx = XLSX_CUST if _CUP_RE.search(p) else XLSX_CONT + try: + env = _py_upload(path, xlsx, route_token, mode, strat, cid) + route.fulfill(status=200, body=json.dumps(env, ensure_ascii=False).encode(), + headers={"Content-Type": "application/json", **cors}) + except urllib.error.HTTPError as e: + route.fulfill(status=e.code, body=e.read(), headers={"Content-Type": "application/json", **cors}) + except Exception as e: + route.fulfill(status=502, headers={"Content-Type": "application/json", **cors}, + body=json.dumps({"code": -1, "success": False, "message": f"py-upload: {e}"})) + return + h = {k: v for k, v in req.headers.items() + if k.lower() not in ("origin", "authorization", "referer", "host", "content-length")} + h["Authorization"] = "Bearer " + route_token + try: + data = req.post_data_buffer if req.method not in ("GET", "HEAD") else None + r2 = urllib.request.Request(req.url, data=data, method=req.method) + for k, v in h.items(): r2.add_header(k, v) + with urllib.request.urlopen(r2, timeout=60) as resp: + body = resp.read(); ct = resp.headers.get("Content-Type") or "application/json"; status = resp.status + route.fulfill(status=status, body=body, headers={"Content-Type": ct, **cors}) + except urllib.error.HTTPError as e: + route.fulfill(status=e.code, body=e.read(), headers={ + "Content-Type": e.headers.get("Content-Type") or "application/json", **cors}) + except Exception as e: + route.fulfill(status=502, headers={"Content-Type": "application/json", **cors}, + body=json.dumps({"code": -1, "success": False, "message": f"bridge: {e}"})) + return handle_api + +def wait_api(pg, substr, timeout_ms=8000): + """轮询 api_urls 直到出现含 substr 的请求(或超时)。""" + t0 = time.time() + while time.time() - t0 < timeout_ms / 1000: + if any(substr in u for u in api_urls): return True + pg.wait_for_timeout(200) + return False + + +# ================= Part 2 · UI 主流程(步 1-19 A 核心域) ================= +def ev(pg, expr): + return pg.evaluate("() => " + expr) + +def read_toast(pg): + try: + return ev(pg, "[...document.querySelectorAll('#toast .toast-item')].map(x => x.textContent).join(' || ')") or "" + except Exception: + return "" + +def dlg_btn(pg, text): + """点击主 底栏指定文案按钮。""" + return pg.evaluate("(t) => { const b = [...document.querySelectorAll('#dlgFoot button')].find(x => x.textContent === t); if (b) { b.click(); return true; } return false; }", text) + +def get_bytes(url, token=None): + req = urllib.request.Request(url) + if token: req.add_header("Authorization", "Bearer " + token) + with urllib.request.urlopen(req, timeout=60) as r: + return r.read() + +def build_xlsx(token, ctype, gov, jobc): + """步 20/22 夹具:下载两个导入模板 → openpyxl 动态列头填行。客户=1 完整行+1 缺省份行;联系人=2 行。""" + global XLSX_CUST, XLSX_CONT + import openpyxl + d = os.path.join(DEMO, "tmp_xlsx"); os.makedirs(d, exist_ok=True) + tpl = get_bytes(f"{BASE}/api/customer/import/template", token) + src = os.path.join(d, "tpl_cust.xlsx"); open(src, "wb").write(tpl) + wb = openpyxl.load_workbook(src) + ws = wb[wb.sheetnames[0]] + heads = {} + for c in range(1, (ws.max_column or 1) + 1): + v = ws.cell(row=1, column=c).value + if v: heads[str(v).strip()] = c + def col(*kws): + for h, c in heads.items(): + if any(k in h for k in kws): return c + return None + c_name, c_type, c_prov = col("客户名称", "名称"), col("客户类型", "类型"), col("省") + for r, nm, prov in ((2, "e2c-dr-imp-全字段", "440000"), (3, "e2c-dr-imp-缺省份", None)): + if c_name: ws.cell(row=r, column=c_name, value=nm) + if c_type: ws.cell(row=r, column=c_type, value=ctype) + if c_prov and prov: ws.cell(row=r, column=c_prov, value=prov) + if r == 2: # 完整行尽量补齐城市/行业/星级 + for h, c in heads.items(): + if ("市" in h or "城市" in h) and "省" not in h: ws.cell(row=r, column=c, value="440100") + elif "行业" in h: ws.cell(row=r, column=c, value=gov) + elif "星级" in h and "客户" in h and "关系" not in h: ws.cell(row=r, column=c, value=3) + XLSX_CUST = os.path.join(d, "cust.xlsx"); wb.save(XLSX_CUST) + tpl2 = get_bytes(f"{BASE}/api/customer/contact/import/template", token) + wb2 = openpyxl.load_workbook(io.BytesIO(tpl2)) + ws2 = wb2[wb2.sheetnames[0]] + ws2.append(["李冒烟", jobc, "13812341122", "other", "否"]) + ws2.append(["赵冒烟", jobc, "13812341133", "other", "否"]) + XLSX_CONT = os.path.join(d, "cont.xlsx"); wb2.save(XLSX_CONT) + print(" xlsx 就绪: %s / %s" % (XLSX_CUST, XLSX_CONT), flush=True) + + +def main(): + t0 = time.time() + tok = get_token(ADMIN) + ctype = dict_one("customer_type", tok) or "customer_type_01" + gov = dict_one("industry", tok) or "I" + jobc = job_code_first(tok) + n = sweep() # sweep 必须先于 ensure_seeds:否则上轮 e2c-dr* seed 被 find 命中 → 不重建 → 随即被本 sweep 清掉(五跑步9/27 查重基线缺失根因) + print("sweep 清理残留 %s 行" % n, flush=True) + print("seed 自举(jobc=%s)..." % jobc, flush=True) + ensure_seeds(tok, ctype, gov, jobc) + chk = (get_json(f"{BASE}/api/customer/check-name?name={urllib.parse.quote('e2c-dr-恒信达科技有限责任公司')}", tok).get("data") or []) + print(" [seed] 查重基线命中数=%s" % len(chk), flush=True) + build_xlsx(tok, ctype, gov, jobc) + + with sync_playwright() as p: + browser = p.chromium.launch(headless=True) + ctx = browser.new_context(viewport={"width": 1720, "height": 980}) + pg = ctx.new_page() + pg.on("pageerror", lambda e: console_errors.append("pageerror: " + str(e)[:300])) + pg.on("console", lambda m: console_errors.append("console.error: " + m.text[:300]) if m.type == "error" else None) + def on_response(r): + try: + if r.status >= 400: http_fails.append("%s %s" % (r.status, r.url)) + except Exception: pass + pg.on("response", on_response) + def on_dialog(d): + try: + d.accept("e2c-dr-视图") if d.type == "prompt" else d.accept() + except Exception: pass + pg.on("dialog", on_dialog) + pg.route("http://localhost:8080/**", make_handle(tok)) + pg.goto(URL) + pg.wait_for_timeout(1200) + + # ---- 步 1 登录 + 首屏列表 ---- + pg.evaluate("() => { document.getElementById('uidInput').value = '%s'; loginByUid(); }" % ADMIN) + pg.wait_for_timeout(2500) + nrows = ev(pg, "document.querySelectorAll('#listBody tr').length") or 0 + ok1 = nrows > 0 and wait_api(pg, "workspace/page") + step("01 打开Demo+uid登录+首屏列表渲染", ok1, "rows=%s" % nrows) + shot(pg, "s01-list.png") + + # ---- 步 2 三 workspace 切换;pool 不发 board + I-06 注记〔D〕 ---- + n0 = len(api_urls) + pg.evaluate("() => switchWs('overview')"); pg.wait_for_timeout(1500) + ov_ok = any("workspace/page" in u for u in api_urls[n0:]) + n0 = len(api_urls) + pg.evaluate("() => switchWs('pool')"); pg.wait_for_timeout(1500) + reqp = api_urls[n0:] + i06 = ev(pg, "document.getElementById('i06Note').textContent") or "" + i06_vis = ev(pg, "document.getElementById('i06Note').style.display !== 'none'") + step("02 三workspace切换;pool不发board+I-06注记[D]", + ov_ok and not any(("board/summary" in u or "board/cards" in u) for u in reqp) and i06_vis and ("67001" in i06 and "记忆成功" in i06), + "overview请求OK=%s;pool新请求%d条;i06可见=%s" % (ov_ok, len(reqp), i06_vis)) + shot(pg, "s02-pool-i06.png") + + # ---- 步 3 内置视图五值 + FOLLOW_UP_DUE ---- + pg.evaluate("() => switchWs('mine')"); pg.wait_for_timeout(1200) + opts = ev(pg, "[...document.getElementById('fViewType').options].map(o => o.value)") or [] + pg.evaluate("() => { const s = document.getElementById('fViewType'); s.value = 'FOLLOW_UP_DUE'; s.onchange(); }") + wait_api(pg, "viewType=FOLLOW_UP_DUE") + step("03 内置视图下拉五值+切FOLLOW_UP_DUE", len(opts) == 5 and "RECENT" in opts, "opts=%s" % opts) + + # ---- 步 4 阶段筛选 customerStage=3 ---- + pg.evaluate("() => { const s = document.getElementById('fViewType'); s.value = 'ASSIGNED'; s.onchange(); }") + pg.wait_for_timeout(900) + pg.evaluate("() => { const s = document.getElementById('fStage'); s.value = '3'; s.onchange(); }") + ok4 = wait_api(pg, "customerStage=3") + pg.wait_for_timeout(600) + step("04 列筛选阶段=已成交", ok4, "请求参数 customerStage=3 已命中" if ok4 else "未见 customerStage=3") + + # ---- 步 5 归档态开关 ---- + pg.evaluate("() => { const s = document.getElementById('fStage'); s.value = ''; s.onchange(); }") + pg.wait_for_timeout(900) + pg.evaluate("() => { const s = document.getElementById('fArchive'); s.value = '2'; s.onchange(); }") + ok5 = wait_api(pg, "archiveStatus=2") + # 归档客户可能被分页挤出首页 → keyword 收窄到样例再断言 + pg.evaluate("() => { document.getElementById('fKeyword').value = 'e2c-已归档'; S.page = 1; loadList(); }") + pg.wait_for_timeout(1200) + body5 = ev(pg, "document.getElementById('listBody').textContent") or "" + step("05 归档态开关+e2c-已归档可见", ok5 and "e2c-已归档" in body5, + "archiveStatus=2命中=%s;样例可见=%s" % (ok5, "e2c-已归档" in body5)) + + # ---- 步 6 saved-view 全生命周期(JSON body 唯一例外 + prompt 取名) ---- + pg.evaluate("() => { const s = document.getElementById('fArchive'); s.value = '1'; s.onchange(); }") + pg.wait_for_timeout(900) + pg.evaluate("() => { document.getElementById('fKeyword').value = 'e2c'; }") + n0 = len(api_urls) + pg.evaluate("() => svNew()") + wait_api(pg, "view/save"); pg.wait_for_timeout(1000) + sv_opt = ev(pg, "[...document.getElementById('svSel').options].some(o => o.textContent.indexOf('e2c-dr-视图') >= 0)") + save_urls = [u for u in api_urls[n0:] if "view/save" in u] + pick_ok = del_ok = False + if sv_opt: + pg.evaluate("() => { const s = document.getElementById('svSel'); s.value = s.options[1].value; svPick(s.value); }") + pick_ok = wait_api(pg, "savedViewId=") + pg.wait_for_timeout(900) + if pick_ok: + pg.evaluate("() => svDelete()") + del_ok = wait_api(pg, "view/delete"); pg.wait_for_timeout(900) + gone = ev(pg, "![...document.getElementById('svSel').options].some(o => o.textContent.indexOf('e2c-dr-视图') >= 0)") + step("06 saved-view 新建→选中查询→删除", sv_opt and pick_ok and del_ok and gone and bool(save_urls), + "save=%s;选中带savedViewId=%s;删后消失=%s;body=%s" % (sv_opt, pick_ok, gone, (save_urls[0][:150] if save_urls else "无"))) + + # ---- 步 7 形态偏好 board→还原 list ---- + pg.evaluate("() => switchWs('overview')"); pg.wait_for_timeout(1200) + pg.evaluate("() => { const s = document.getElementById('fForm'); s.value = 'board'; saveForm('board'); }") + wait_api(pg, "view-form/save"); wait_api(pg, "board/summary") + pg.wait_for_timeout(1800) + bvis = ev(pg, "document.getElementById('boardBox').style.display !== 'none'") + bcols = ev(pg, "document.getElementById('boardRow').children.length") or 0 + cards_hit = wait_api(pg, "board/cards") + pg.evaluate("() => { const s = document.getElementById('fForm'); s.value = 'list'; saveForm('list'); }") + pg.wait_for_timeout(1100) + restored = ev(pg, "document.getElementById('listTable').style.display !== 'none'") + step("07 形态偏好overview切看板→渲染→还原list", bvis and cards_hit and bcols >= 2 and restored, + "看板列=%s;cards请求=%s;还原=%s" % (bcols, cards_hit, restored)) + shot(pg, "s07-board.png") + + # ---- 步 8 新建表单工商联想 NO_HIT〔D〕 ---- + pg.evaluate("() => switchWs('mine')"); pg.wait_for_timeout(1200) + pg.evaluate("() => dlgCreate()"); pg.wait_for_timeout(400) + pg.evaluate("() => { document.getElementById('cLk').value = '华兴智造科技'; doLookup(); }") + ok8 = wait_api(pg, "company-lookup") + pg.wait_for_timeout(800) + cout = ev(pg, "document.getElementById('cOut').textContent") or "" + stub_n = ev(pg, "document.querySelectorAll('#dlg [data-defect=\"STUB-LOOKUP\"]').length") or 0 + step("08 工商联想(companyName)+NO_HIT现象+STUB-LOOKUP注记[D]", + ok8 and "未查询到匹配企业" in cout and stub_n >= 1, cout[:90]) + + # ---- 步 9 名称查重 needConfirm → confirmSimilar 重发 ---- + pg.evaluate("() => { document.getElementById('cName').value='e2c-dr-恒信达科技有限责任公司';" + "document.getElementById('cType').value='%s'; document.getElementById('cProv').value='440000';" + "document.getElementById('cCity').value='440100'; document.getElementById('cDist').value='440103';" + "document.getElementById('cInd').value='%s'; document.getElementById('cOwner').value='%s'; }" + % (ctype, gov, ADMIN)) + n0 = len(api_urls) + pg.evaluate("() => doCreate('')") + wait_api(pg, "/api/customer/create"); pg.wait_for_timeout(1100) + simbox = ev(pg, "(document.querySelector('#cOut .simbox')||{}).textContent || ''") or "" + confirm_ok = False + if "相似命中" in simbox: + pg.evaluate("() => { const b = [...document.querySelectorAll('#cOut button')].find(x => x.textContent.indexOf('confirmSimilar') >= 0); if (b) b.click(); }") + confirm_ok = wait_api(pg, "confirmSimilar=true"); pg.wait_for_timeout(1300) + toasts9 = read_toast(pg) + row = dbq("SELECT id FROM customer WHERE customer_name LIKE %s AND deleted=0 ORDER BY id DESC LIMIT 1", ("e2c-dr-恒信达%",)) + cid_a = str(row[0]["id"]) if row else "" + step("09 名称查重needConfirm+similarHits→confirmSimilar重发→创建成功", + ("相似命中" in simbox) and confirm_ok and ("创建成功" in toasts9) and bool(cid_a), + "simbox=%s;toast=%s;夹具A=%s" % (simbox[:70].replace(chr(10), ' '), toasts9[:70], cid_a)) + pg.evaluate("() => dlgClose()"); pg.wait_for_timeout(400) + + # ---- 步 10 编辑客户(version CAS 回显;L2 相似命中→simbox→confirmSimilar 重发,六跑实链) ---- + pg.evaluate("() => openDetail('%s')" % cid_a); pg.wait_for_timeout(1600) + pg.evaluate("() => dlgEdit()"); pg.wait_for_timeout(1000) + old_name = ev(pg, "document.getElementById('eName').value") or "" + pg.evaluate("() => { document.getElementById('eName').value = document.getElementById('eName').value + '-改'; }") + dlg_btn(pg, "保存") + ok10 = wait_api(pg, "/api/customer/edit?id=") + pg.wait_for_timeout(1000) + sim10 = ev(pg, "(document.querySelector('#eOut .simbox')||{}).textContent || ''") + if sim10: # 后端 L2 查重命中(排除自身后仍有相似行)→ demo 确认重发 confirmSimilar=true + pg.evaluate("() => { const b = [...document.querySelectorAll('#eOut button')].find(x => x.textContent.indexOf('确认保存') >= 0); if (b) b.click(); }") + ok10 = wait_api(pg, "/api/customer/edit?id=") and ok10 + pg.wait_for_timeout(1400) + toasts10 = read_toast(pg) + row = dbq("SELECT customer_name, version FROM customer WHERE id=%s", (int(cid_a),)) if cid_a else [] + step("10 编辑客户回显+CAS保存(含相似确认重发)", ok10 and ("保存成功" in toasts10) and bool(row) and str(row[0]["customer_name"]).endswith("-改"), + "回显名=%s;simbox=%s;toast=%s;db=%s v%s" % (old_name, ("命中" if sim10 else "-"), toasts10[:40], row[0]["customer_name"] if row else "-", row[0]["version"] if row else "-")) + + # ---- 步 11 详情头部金额卡〔D〕 ---- + pg.wait_for_timeout(900) + cards = ev(pg, "[...document.querySelectorAll('#headBox .sumcards .card')].map(c => (c.querySelector('b')||{}).textContent)") or [] + p36 = ev(pg, "document.querySelectorAll('#headBox [data-defect=\"P3-6\"]').length") or 0 + head = ev(pg, "document.getElementById('headBox').textContent") or "" + step("11 详情头部渲染+4金额卡恒--[D]", len(cards) == 4 and all(c in ("--", "-- / --") for c in cards) and p36 >= 1 and "负责人" in head, + "cards=%s;P3-6角标=%s" % (cards, p36)) + shot(pg, "s11-head.png") + + # ---- 步 12 8 页签遍历 + 联系人顶级菜单 ---- + subs = ev(pg, "[...document.querySelectorAll('#detailPanel .subtabs button')].map(b => b.dataset.s)") or [] + errs0 = len(console_errors) + for s in ["info", "contacts", "follow", "opps", "projects", "agreements", "members", "oplog"]: + pg.evaluate("() => switchSub('%s')" % s); pg.wait_for_timeout(700) + pg.evaluate("() => { switchTab('contacts'); loadContactPage(); }") + ok12c = wait_api(pg, "contact/page"); pg.wait_for_timeout(1100) + ct_rows = ev(pg, "document.querySelectorAll('#ctPageBody tr').length") or 0 + pg.evaluate("() => { switchTab('detail'); switchSub('info'); }") + pg.wait_for_timeout(900) + step("12 8页签全遍历+联系人顶级菜单contact/page", len(subs) == 8 and ok12c and ct_rows > 0 and len(console_errors) == errs0, + "subs=%s;contact/page行=%s;新增errs=%s" % (subs, ct_rows, console_errors[errs0:][:2])) + + # ---- 步 13 页签1 信息栅格 + G4〔D〕 + creditCode 明文 ---- + pg.evaluate("() => openDetail('%s')" % SEEDS["full"]); pg.wait_for_timeout(1600) + pg.evaluate("() => switchSub('info')"); pg.wait_for_timeout(900) + kv = ev(pg, "{ const m = {}; document.querySelectorAll('#subBox .kv').forEach(k => { m[k.querySelector('b').textContent] = k.querySelector('span').textContent; }); return m; }") or {} + g4_ok = kv.get("创建人") == "--" and kv.get("更新人") == "--" and kv.get("创建时间", "--") not in ("--", None) and kv.get("更新时间", "--") not in ("--", None) + g4b = ev(pg, "document.querySelectorAll('#subBox [data-defect=\"G4\"]').length") or 0 + step("13 信息栅格16字段+G4创建/更新人--[D]+creditCode明文", + len(kv) >= 16 and g4_ok and g4b >= 1 and kv.get("信用代码") == "91440101E2CTEST001", + "kv=%d;创建人=%s;信用代码=%s" % (len(kv), kv.get("创建人"), kv.get("信用代码"))) + + # ---- 步 14 关联商机 7 列〔D〕+ 关联项目 Noop 空态 + contact/search ---- + pg.evaluate("() => switchSub('opps')"); pg.wait_for_timeout(1000) + opp_heads = ev(pg, "[...document.querySelectorAll('#subBox thead th')].map(t => t.textContent)") or [] + g2b = ev(pg, "document.querySelectorAll('#subBox [data-defect=\"G2\"]').length") or 0 + pg.evaluate("() => switchSub('projects')"); pg.wait_for_timeout(1000) + proj_hit = wait_api(pg, "customer/project/page") + sub14 = ev(pg, "document.getElementById('subBox').textContent") or "" + proj_noop = "Noop" in sub14 # 空态真容=表头+Noop hint(K2 口径非硬占位),非「无数据」文案 + pg.evaluate("() => dlgContactSearch()"); pg.wait_for_timeout(400) + pg.evaluate("() => { document.getElementById('csKw').value = '张关键'; }") + dlg_btn(pg, "搜索") + wait_api(pg, "contact/search"); pg.wait_for_timeout(900) + cs_out = ev(pg, "document.getElementById('csOut').textContent") or "" + pg.evaluate("() => dlgClose()"); pg.wait_for_timeout(400) + step("14 商机7列(G2-D)+项目页签Noop空态+contact/search命中", + len(opp_heads) == 7 and g2b >= 1 and proj_hit and proj_noop and "张关键" in cs_out, + "商机列=%s;Noop空态=%s;search=%s" % (opp_heads, proj_noop, cs_out[:60].replace(chr(10), ' '))) + + # ---- 步 15 团队成员:加 BUDDY → 渲染 → 移除(G3〔D〕) ---- + pg.evaluate("() => switchSub('members')"); pg.wait_for_timeout(1000) + mheads = ev(pg, "[...document.querySelectorAll('#subBox thead th')].map(t => t.textContent)") or [] + g3b = ev(pg, "document.querySelectorAll('#subBox [data-defect=\"G3\"]').length") or 0 + pg.evaluate("() => dlgMemberAdd()"); pg.wait_for_timeout(400) + pg.evaluate("() => { document.getElementById('mIds').value = '%s'; }" % BUDDY) + dlg_btn(pg, "添加") + ok15 = wait_api(pg, "member/add") + pg.wait_for_timeout(1000) + mbox = ev(pg, "document.getElementById('subBox').textContent") or "" + m_cnt = dbq("SELECT COUNT(*) AS n FROM customer_team_member WHERE customer_id=%s", (int(SEEDS["full"]),))[0]["n"] + removed = pg.evaluate("() => { const b = [...document.querySelectorAll('#subBox button')].find(x => x.textContent === '移除'); if (b) { b.click(); return true; } return false; }") + wait_api(pg, "member/remove"); pg.wait_for_timeout(1000) + step("15 成员加BUDDY→渲染→移除(G3-D无职务/加入时间列)", + ok15 and (BUDDY in mbox or "协同人" in mbox) and m_cnt >= 1 and removed and len(mheads) == 3 and g3b >= 1, + "列头=%s;DB成员行=%s;memberUserIds重复键=%s" % (mheads, m_cnt, ok15)) + + # ---- 步 16 联系人 quickAdd + G5〔D〕 + 脱敏 + reveal + DB 埋点 ---- + pg.evaluate("() => switchSub('contacts')"); pg.wait_for_timeout(1600) + heads_c = ev(pg, "[...document.querySelectorAll('#contactsShell thead th')].map(t => t.textContent)") or [] + g5b = ev(pg, "document.querySelectorAll('#contactsShell [data-defect=\"G5\"]').length") or 0 + tmask = ev(pg, "document.getElementById('contactTbody').textContent") or "" + masked_ok = "138****0001" in tmask + qa_js = ("fetch('http://localhost:8080/api/customer/contact/quickAdd', {method:'POST', " + "headers:{'Content-Type':'application/x-www-form-urlencoded;charset=UTF-8'}, " + "body:'customerId=%s&rows[0].name=李冒烟&rows[0].jobTitleCode=%s&rows[0].phone=13800002222&rows[0].source=other&rows[0].isKeyContact=0" + "&rows[1].name=赵冒烟&rows[1].jobTitleCode=%s&rows[1].source=other'}).then(r => r.json()).then(d => { window.__qaRet = d; })" + % (SEEDS["full"], jobc, jobc)) + pg.evaluate("() => %s" % qa_js) + wait_api(pg, "contact/quickAdd"); pg.wait_for_timeout(1400) + # quickAdd 是页面 fetch 直调,不触发 loadContacts → window._contacts 停留旧快照(六跑 lid=None 连锁)→ 显式重拉 + pg.evaluate("() => loadContacts()"); pg.wait_for_timeout(1300) + qa_ret = ev(pg, "JSON.stringify((window.__qaRet||{}).data||{})") or "" + rows2 = dbq("SELECT COUNT(*) AS n FROM customer_contact WHERE customer_id=%s AND deleted=0", (int(SEEDS["full"]),))[0]["n"] + pg.evaluate("() => toggleRevealAll()") + wait_api(pg, "contact/reveal"); pg.wait_for_timeout(1300) + treveal = ev(pg, "document.getElementById('contactTbody').textContent") or "" + zid = ev(pg, "(window._contacts.find(c => c.name === '张关键') || {}).id") + rl = dbq("SELECT COUNT(*) AS n FROM customer_contact_reveal_log WHERE contact_id=%s", (int(zid),))[0]["n"] if zid else 0 + step("16 联系人quickAdd2行+G5无负责人列[D]+电话脱敏+reveal明文+DB埋点", + masked_ok and rows2 >= 4 and rl >= 1 and g5b >= 1 and "13812340001" in treveal and not any(h == "负责人" for h in heads_c), + "脱敏=%s;DB联系人=%s;reveal_log=%s;明文=%s;列头=%s;qaRet=%s" % (masked_ok, rows2, rl, "13812340001" in treveal, heads_c, qa_ret[:80])) + + # ---- 步 17 batchEdit 空串提交〔D-G1〕 + check-phone + 删除双刷 ---- + pg.evaluate("() => editListToggle()"); pg.wait_for_timeout(700) + pg.evaluate("() => { const c = window._contacts.find(x => x.name === '张关键'); c.phone = ''; C.dirtyRows[String(c.id)] = true; renderContactsList(); }") + pg.evaluate("() => saveListAll()") + ok17 = wait_api(pg, "contact/batchEdit"); pg.wait_for_timeout(1100) + ph = dbq("SELECT phone FROM customer_contact WHERE id=%s", (int(zid),))[0]["phone"] if zid else "" + dg1 = ev(pg, "document.querySelectorAll('#contactsShell [data-defect=\"D-G1\"]').length") or 0 + pg.evaluate("() => { if (C.editing) editListToggle(); }"); pg.wait_for_timeout(500) + # check-phone 命中王重复(同号 13812340001) + pg.evaluate("() => dlgCheckPhone('13812340001')"); pg.wait_for_timeout(400) + dlg_btn(pg, "查重") + wait_api(pg, "check-phone"); pg.wait_for_timeout(900) + cp = ev(pg, "document.getElementById('cpOut').textContent") or "" + pg.evaluate("() => dlgClose()"); pg.wait_for_timeout(400) + # 删除李冒烟(gConfirm 自绘确认 → contact/delete → 列表+图谱双刷) + lid = ev(pg, "(window._contacts.find(c => c.name === '李冒烟') || {}).id") + names16 = ev(pg, "(window._contacts || []).map(c => c.name).join(',')") or "" + errs0 = len(console_errors) + del_ok = False + if lid: + pg.evaluate("() => delContact('%s')" % lid); pg.wait_for_timeout(600) + del_ok = dlg_btn(pg, "确认") or dlg_btn(pg, "确定") + wait_api(pg, "contact/delete"); pg.wait_for_timeout(1600) + rows3 = dbq("SELECT COUNT(*) AS n FROM customer_contact WHERE customer_id=%s AND deleted=0", (int(SEEDS["full"]),))[0]["n"] + step("17 batchEdit空串=DB不改(D-G1)[D]+check-phone命中+删除双刷", + ok17 and ph == "13812340001" and dg1 >= 1 and bool(cp) and del_ok and rows3 == rows2 - 1 and len(console_errors) == errs0, + "DB phone=%s;D-G1角标=%s;check-phone=%s;删后行=%s(删前%s,del_ok=%s,errs+%s);lid=%s;names=%s" % (ph, dg1, cp[:40].replace(chr(10), ' '), rows3, rows2, del_ok, len(console_errors) - errs0, lid, names16[:60])) + + # ---- 步 18 跟进:写 + 日期分组 + followWay 筛选 ---- + pg.evaluate("() => switchSub('follow')"); pg.wait_for_timeout(1000) + fopts = ev(pg, "[...document.getElementById('fFollowWay').options].map(o => o.value)") or [] + pg.evaluate("() => dlgFollow()"); pg.wait_for_timeout(400) + pg.evaluate("() => { document.getElementById('fContent').value = '冒烟跟进内容-电话沟通'; }") + dlg_btn(pg, "保存") + ok18 = wait_api(pg, "follow/add") + pg.wait_for_timeout(1300) + days = ev(pg, "document.querySelectorAll('#followBox .logday').length") or 0 + pg.evaluate("() => { const s = document.getElementById('fFollowWay'); s.value = 'follow_way_01'; s.onchange(); }") + flt18 = wait_api(pg, "followWay=follow_way_01"); pg.wait_for_timeout(700) + step("18 写跟进+日期分组+followWay筛选", ok18 and len(fopts) == 6 and days >= 1 and flt18, + "way选项=%s(空+5);日期分组=%s;筛选=%s" % (len(fopts), days, flt18)) + + # ---- 步 19 focus/star + oplog 留痕 ---- + pg.evaluate("() => oneBy('focus')"); wait_api(pg, "/focus?id="); pg.wait_for_timeout(700) + pg.evaluate("() => oneBy('star')"); wait_api(pg, "/star?id="); pg.wait_for_timeout(700) + pg.evaluate("() => switchSub('oplog')"); pg.wait_for_timeout(1100) + obox = ev(pg, "document.getElementById('oplogBox').textContent") or "" + pg.evaluate("() => { const s = document.getElementById('fOpAction'); s.value = 'FOLLOW'; s.onchange(); }") + flt19 = wait_api(pg, "action=FOLLOW"); pg.wait_for_timeout(700) + # 创建留痕不在首页(oplog 时间倒序被本轮操作挤掉)→ 用 action=CREATE 筛选强断言 + pg.evaluate("() => { const s = document.getElementById('fOpAction'); s.value = 'CREATE'; s.onchange(); }") + wait_api(pg, "action=CREATE"); pg.wait_for_timeout(800) + obox2 = ev(pg, "document.getElementById('oplogBox').textContent") or "" + f_cnt = dbq("SELECT COUNT(*) AS n FROM customer_follow WHERE customer_id=%s", (int(SEEDS["full"]),))[0]["n"] + step("19 关注/重点标记+oplog留痕+action筛选", + ("新增客户" in obox2) and flt19 and f_cnt >= 1, + "action=CREATE筛选含新增客户=%s;action=FOLLOW筛选=%s;DB跟进=%s" % ("新增客户" in obox2, flt19, f_cnt)) + shot(pg, "s19-oplog.png") + + # ================= B · 重流程(步 20-25) ================= + # ---- 步 20 客户导入三段式(模板已在 build_xlsx 下载改制;UI 上传 → route 分流 → 确认 → 轮询 → 失败明细) ---- + pg.evaluate("() => switchTab('import')"); pg.wait_for_timeout(900) + pg.set_input_files("#impFile", XLSX_CUST) + pg.evaluate("() => { document.getElementById('impMode').value = 'APPEND_ONLY'; document.getElementById('impStrategy').value = 'SKIP'; }") + pg.evaluate("() => impUpload()") + ok20 = wait_api(pg, "customer/import/upload") + pg.wait_for_timeout(1600) + toasts20 = read_toast(pg) + m = re.search(r"t=(\d+) insert=(\d+) update=(\d+) fail=(\d+)", toasts20) + t_total, t_ins, t_fail = (int(m.group(1)), int(m.group(2)), int(m.group(4))) if m else (0, 0, 0) + tid = ev(pg, "{ const b = [...document.querySelectorAll('#impBody button')].find(x => x.textContent === '确认执行');" + "if (!b) return ''; const mm = (b.getAttribute('onclick') || '').match(/'([^']+)'/); return mm ? mm[1] : ''; }") + if tid: pg.evaluate("() => impConfirm('%s')" % tid) + wait_api(pg, "import/confirm"); pg.wait_for_timeout(1500) + res = {} + for _ in range(30): + try: + res = get_json(f"{BASE}/api/customer/import/result?taskId={tid}", tok).get("data") or {} + if res.get("status") in (2, 3): break + except Exception: pass + time.sleep(1) + fails = [] + try: + fd = get_json(f"{BASE}/api/customer/import/failures?taskId={tid}", tok).get("data") + fails = fd if isinstance(fd, list) else ((fd or {}).get("content") or []) + except Exception: pass + step("20 客户导入三段式(缺省份预检FAIL→DONE计数=预检→明细吻合)", + ok20 and bool(tid) and t_ins >= 1 and t_fail >= 1 and res.get("status") == 2 + and int(res.get("insertCount") or 0) == t_ins and int(res.get("failCount") or 0) == t_fail and len(fails) == t_fail, + "预检 t=%s ins=%s fail=%s;taskId=%s;result=%s;明细=%s行" % (t_total, t_ins, t_fail, tid, res, len(fails))) + shot(pg, "s20-import.png") + + # ---- 步 21 任务列表 + status/importMode 过滤 + P3-3〔D〕 ---- + pg.evaluate("() => { const a = document.getElementById('impFStatus'); a.value = '2'; a.onchange(); }") + f21a = wait_api(pg, "import/page"); pg.wait_for_timeout(900) + pg.evaluate("() => { const a = document.getElementById('impFMode'); a.value = 'UPSERT'; a.onchange(); }") + f21b = wait_api(pg, "importMode=UPSERT"); pg.wait_for_timeout(900) + p33 = ev(pg, "document.querySelectorAll('#tab-import [data-defect=\"P3-3\"]').length") or 0 + step("21 导入任务列表+status/importMode过滤+P3-3注记[D]", f21a and f21b and p33 >= 1, + "status过滤=%s;mode过滤=%s;P3-3=%s" % (f21a, f21b, p33)) + + # ---- 步 22 联系人导入三段式(cimp 弹窗;P3-3 无校验复选框〔D〕) ---- + pg.evaluate("() => { switchTab('detail'); openDetail('%s'); }" % cid_a); pg.wait_for_timeout(1600) + pg.evaluate("() => switchSub('contacts')"); pg.wait_for_timeout(1300) + pg.evaluate("() => openCimp()"); pg.wait_for_timeout(700) + cimp_chk = ev(pg, "document.querySelectorAll('#cimpOverlay input[type=checkbox]').length") or 0 + pg.set_input_files("#cimpFile", XLSX_CONT) + pg.evaluate("() => { document.getElementById('cimpMode').value = 'APPEND_ONLY'; document.getElementById('cimpStrategy').value = 'SKIP'; }") + pg.evaluate("() => cimpUpload()") + ok22 = wait_api(pg, "contact/import/upload") + pg.wait_for_timeout(1600) + prev22 = ev(pg, "document.getElementById('cimpPreviewHead').textContent") or "" + pg.evaluate("() => cimpConfirmTask()") + wait_api(pg, "contact/import/confirm"); pg.wait_for_timeout(1500) + ctid = ev(pg, "cimpTaskId") or "" + cres = {} + for _ in range(30): + try: + cres = get_json(f"{BASE}/api/customer/contact/import/result?taskId={ctid}", tok).get("data") or {} + if cres.get("status") in (2, 3): break + except Exception: pass + time.sleep(1) + pg.wait_for_timeout(1200) # demo 自身 1s 轮询同步 + done22 = ev(pg, "document.getElementById('cimpResultHead').textContent") or "" + c_cnt = dbq("SELECT COUNT(*) AS n FROM customer_contact WHERE customer_id=%s AND deleted=0", (int(cid_a),))[0]["n"] if cid_a else 0 + pg.evaluate("() => cimpDone()") + step("22 联系人导入三段式+P3-3无校验复选框[D]", + ok22 and bool(ctid) and cres.get("status") == 2 and "已完成" in done22 and c_cnt >= 2 and cimp_chk == 0, + "预检=%s;result=%s;DB联系人=%s;弹窗checkbox=%s" % (prev22[:60].replace(chr(10), ' '), cres, c_cnt, cimp_chk)) + + # ---- 步 23 商机联动链:UI 建商机 → 抛公海 67007 → API 关商机 → 放行 ---- + pg.evaluate("() => { switchTab('list'); switchWs('mine'); }"); pg.wait_for_timeout(1500) + pg.evaluate("() => { document.getElementById('fKeyword').value = 'e2c-dr-恒信达'; S.page = 1; loadList(); }") + pg.wait_for_timeout(1600) + pg.evaluate("() => dlgOppCreate('%s')" % cid_a); pg.wait_for_timeout(600) + pg.evaluate("() => { document.getElementById('oName').value = 'e2c-dr-演示商机';" + "document.getElementById('oSource').value = 'opp_source_02';" + "document.getElementById('oBid').value = 'bid_form_01';" + "document.getElementById('oLoc').value = 'locality_type_01';" + "document.getElementById('oProv').value = '440000'; document.getElementById('oCity').value = '440100';" + "document.getElementById('oPrimary').value = '1'; document.getElementById('oRole').value = 'customer_role_01'; }") + n0 = len(api_urls) + pg.evaluate("() => { const b = [...document.querySelectorAll('#dlgFoot button')].find(x => x.textContent === '创建商机'); if (b) b.click(); }") + ok23 = wait_api(pg, "POST /api/opportunity") + pg.wait_for_timeout(1400) + toasts23 = read_toast(pg) + opp = dbq("SELECT opportunity_id FROM opportunity_customer WHERE customer_id=%s ORDER BY opportunity_id DESC LIMIT 1", + (int(cid_a),)) if cid_a else [] + opp_id = str(opp[0]["opportunity_id"]) if opp else "" + opp0 = dbq("SELECT opp_status FROM opportunity WHERE id=%s", (int(opp_id),))[0]["opp_status"] if opp_id else None + pg.evaluate("() => { S.picked.clear(); pick('%s'); }" % cid_a) + picked23 = ev(pg, "S.picked.size") or 0 + pg.evaluate("() => batchRelease()") + wait_api(pg, "release-pool-batch"); pg.wait_for_timeout(1300) + t67007 = read_toast(pg) + # 拦截生效的证明=客户仍在名下(批量部分成功语义:67007 映射 failures.POOL_BLOCKED,HTTP 200 无错误码 toast) + cust1 = dbq("SELECT owner_user_id FROM customer WHERE id=%s", (int(cid_a),)) if cid_a else [] + blocked = bool(cust1) and cust1[0]["owner_user_id"] is not None + if opp_id: + try: post(f"{BASE}/api/opportunity/assign?id={opp_id}&userId={ADMIN}", {}, tok) # 新建即推进中(设计),CAS 失败无碍 + except Exception: pass + post(f"{BASE}/api/opportunity/close?id={opp_id}&closeReason={urllib.parse.quote('冒烟演示关闭')}", {}, tok) + opp1 = dbq("SELECT opp_status FROM opportunity WHERE id=%s", (int(opp_id),))[0]["opp_status"] if opp_id else None + pg.evaluate("() => batchRelease()") + wait_api(pg, "release-pool-batch"); pg.wait_for_timeout(1600) + cust_db = dbq("SELECT owner_user_id, enter_pool_time FROM customer WHERE id=%s", (int(cid_a),)) if cid_a else [] + in_pool = bool(cust_db) and cust_db[0]["owner_user_id"] is None and cust_db[0]["enter_pool_time"] is not None + step("23 商机联动链(UI建商机→抛公海拦截→关商机→放行)", + ok23 and bool(opp_id) and picked23 >= 1 and blocked and str(opp1) != str(opp0) and in_pool, + "商机=%s;状态%s→%s;一次release拦截=%s(toast=%s);进公海=%s" % (opp_id, opp0, opp1, blocked, t67007[:60].replace(chr(10), ' '), in_pool)) + + # ---- 步 24 交割两段式(F-13 防线:initiate 圈定=发起人名下全量,先清 BUDDY leftover) ---- + leftovers = dbq("SELECT id, customer_name FROM customer WHERE owner_user_id=%s AND deleted=0 AND customer_name NOT LIKE %s", + (int(BUDDY), PFX + "%")) + moved = 0 + for lo in leftovers: + try: + d = post(f"{BASE}/api/customer/assign-batch?ids={lo['id']}&userId={ADMIN}", {}, tok).get("data") or {} + moved += int(d.get("successCount") or 0) + except Exception as e: + print(" [warn] leftover 回迁失败 %s: %s" % (lo["customer_name"], e)) + post(f"{BASE}/api/customer/claim-batch?ids={cid_a}", {}, tok) # 公海领回(owner=ADMIN) + post(f"{BASE}/api/customer/assign-batch?ids={cid_a}&userId={BUDDY}", {}, tok) # 夹具 A → BUDDY + btok = get_token(BUDDY) + prev24 = get_json(f"{BASE}/api/customer/transfer/preview", btok).get("data") + prev_rows = prev24 if isinstance(prev24, list) else ((prev24 or {}).get("customers") or (prev24 or {}).get("content") or []) + prev_has = any("e2c-dr" in str(c.get("customerName") or c.get("customer_name") or "") for c in prev_rows) + init = (post(f"{BASE}/api/customer/transfer/initiate", {"reason": "resign", "remark": "冒烟交割"}, btok) or {}) + init_d = init.get("data") or {} + if not init_d: + print(" [warn] initiate 完整响应: %s" % str(init)[:240]) + bill_no = str(init_d.get("transferNo") or "") + bill_id = str(init_d.get("id") or init_d.get("transferId") or "") + page24 = get_json(f"{BASE}/api/customer/transfer/page?current=1&size=10", btok).get("data") or {} + page_rows = page24.get("content") or [] + page_hit = any(str(r.get("transferNo")) == bill_no for r in page_rows) + if not bill_id: + for r in page_rows: + if str(r.get("transferNo")) == bill_no: bill_id = str(r.get("id")); break + det = get_json(f"{BASE}/api/customer/transfer/detail?id={bill_id}", btok).get("data") or {} if bill_id else {} + items = det.get("items") or det.get("details") or [] + asg = get_json(f"{BASE}/api/customer/transfer/assignable?id={bill_id}", btok).get("data") if bill_id else None + asg_rows = asg if isinstance(asg, list) else ((asg or {}).get("content") or (asg or {}).get("users") or []) + # 分配对象从 assignable 动态取:后端排除发起人与总监本人(CustomerTransferServiceImpl L132), + # 五跑硬编码 ADMIN=总监本人被拒 → assign_status 不变 + asg_uid = "" + if asg_rows: + asg_uid = str((asg_rows[0] or {}).get("userId") or (asg_rows[0] or {}).get("id") or "") + asg24 = {} + if bill_id and asg_uid: + asg24 = post(f"{BASE}/api/customer/transfer/assign?id={bill_id}&customerIds={cid_a}&assignUserId={asg_uid}", {}, btok) or {} + if asg24 and asg24.get("code") != 0: + print(" [warn] transfer/assign 响应: %s" % str(asg24)[:220], flush=True) + det2 = get_json(f"{BASE}/api/customer/transfer/detail?id={bill_id}", btok).get("data") or {} if bill_id else {} + items2 = det2.get("items") or det2.get("details") or [] + st_change = any(str(it.get("customerId")) == str(cid_a) and int(it.get("assignStatus") or 0) == 1 for it in items2) + db_bill = dbq("SELECT id, transfer_no, status FROM customer_transfer WHERE transfer_no=%s", (bill_no,)) if bill_no else [] + pg.evaluate("() => switchTab('transfer')"); pg.wait_for_timeout(300) + pg.evaluate("() => transferPage(0)") + wait_api(pg, "transfer/page"); pg.wait_for_timeout(1000) + tr_rows = ev(pg, "document.querySelectorAll('#trBody tr').length") or 0 + step("24 交割(preview圈定→initiate→page→detail→assignable→assign明细态变化;F-13清leftover=%s)" % moved, + prev_has and bool(bill_no) and page_hit and bool(items) and bool(asg_rows) and st_change and bool(db_bill), + "单号=%s;圈定含夹具=%s;明细=%s→assign后变化=%s(assign对象=%s);UI行=%s" % (bill_no, prev_has, len(items), st_change, asg_uid, tr_rows)) + shot(pg, "s24-transfer.png") + + # ---- 步 25 归属动作族:导入客户先抛公海 → pool 勾选 → claim → archive → restore → 再 archive + assign ---- + imp_ids = [str(r["id"]) for r in dbq("SELECT id FROM customer WHERE customer_name LIKE %s AND deleted=0", ("e2c-dr-imp%",))] + rel25 = {} + if imp_ids: + # 步 20 导入客户落在 ADMIN 名下 → pool 视图(owner IS NULL)搜不到(五跑「请先勾选客户行」根因)→ 先 release 进公海 + rel25 = post(f"{BASE}/api/customer/release-pool-batch?ids={','.join(imp_ids)}", {}, tok) or {} + if rel25.get("code") != 0: + print(" [warn] release 进公海响应: %s" % str(rel25)[:200], flush=True) + inpool25 = all(r["owner_user_id"] is None for r in dbq( + "SELECT owner_user_id FROM customer WHERE id IN (%s)" % ",".join(imp_ids))) if imp_ids else False + pg.evaluate("() => { switchTab('list'); switchWs('pool'); }"); pg.wait_for_timeout(1500) + # pool+ASSIGNED 组合语义冲突:视图「我负责的」(owner=me) 与公海 (owner IS NULL) 恒互斥 + # (CustomerMapper L83)→ 先按 UI 默认呈现空现象,再清 fViewType 走 pool 基础集(demo 视图条在 pool 页签仍显示) + pg.evaluate("() => { document.getElementById('fKeyword').value = 'e2c-dr-imp'; S.page = 1; loadList(); }") + pg.wait_for_timeout(1600) + rows_def25 = ev(pg, "S.rows.length") or 0 + pg.evaluate("() => { document.getElementById('fViewType').value = ''; S.page = 1; loadList(); }") + pg.wait_for_timeout(1600) + rows25 = ev(pg, "S.rows.length") or 0 + pg.evaluate("() => { S.picked.clear(); S.rows.forEach(r => pick(String(r.id))); }") + picked25 = ev(pg, "S.picked.size") or 0 + pg.evaluate("() => batchClaim()") + ok25a = wait_api(pg, "claim-batch"); pg.wait_for_timeout(1300) + t25a = read_toast(pg) + # batchClaim 内部清空 picked → UI dlgAssign(要求先行勾选)无法衔接 → assign 移到 archive 族后用 API 直调覆盖端点 + pg.evaluate("() => batchArchive()") + ok25c = wait_api(pg, "archive-batch"); pg.wait_for_timeout(1300) + t25c = read_toast(pg) + arch25 = all(str(r["archive_status"]) == "2" for r in dbq( + "SELECT archive_status FROM customer WHERE id IN (%s)" % ",".join(imp_ids))) if imp_ids else False + st1 = st2 = None + if imp_ids: + pg.evaluate("() => openDetail('%s')" % imp_ids[0]); pg.wait_for_timeout(1600) + pg.evaluate("() => oneBy('restore')"); wait_api(pg, "/restore?id="); pg.wait_for_timeout(1000) + st1 = dbq("SELECT archive_status FROM customer WHERE id=%s", (int(imp_ids[0]),))[0]["archive_status"] + pg.evaluate("() => oneBy('archive')"); wait_api(pg, "/archive?id="); pg.wait_for_timeout(1000) + st2 = dbq("SELECT archive_status FROM customer WHERE id=%s", (int(imp_ids[0]),))[0]["archive_status"] + oplog25 = dbq("SELECT COUNT(*) AS n FROM customer_oplog WHERE customer_id=%s AND action IN ('ARCHIVE','RESTORE')", + (int(imp_ids[0]),))[0]["n"] if imp_ids else 0 + asg25 = post(f"{BASE}/api/customer/assign-batch?ids={','.join(imp_ids)}&userId={BUDDY}", {}, tok) if imp_ids else {} + d25 = (asg25.get("data") or {}) if isinstance(asg25, dict) else {} + ok25b = isinstance(asg25, dict) and asg25.get("code") == 0 and int(d25.get("successCount") or 0) >= 1 + as_out = "success=%s fail=%s" % (d25.get("successCount"), d25.get("failCount")) + step("25 归属动作族(release→claim→archive→restore→再archive+oplog+assign)", + ok25a and ok25b and ok25c and picked25 >= 1 and arch25 and st1 == 1 and st2 == 2 and oplog25 >= 2 and inpool25 and rows25 >= 1, + "进公海=%s(pool默认视图行=%s,清视图后行=%s);claim=%s(%s);archive=%s(%s);assign=%s(%s);恢复%s→再归档%s;oplog=%s" % (inpool25, rows_def25, rows25, ok25a, t25a[:40], ok25c, t25c[:40], ok25b, as_out[:40], st1, st2, oplog25)) + + # ================= C · 规则族(步 26-29) ================= + d_orig = get_json(f"{BASE}/api/rule/customer/dedup", tok).get("data") or {} + thr0 = d_orig.get("similarityThreshold") + mode0 = d_orig.get("nameMatchMode") + pg.evaluate("() => switchTab('settings')"); pg.wait_for_timeout(1300) + # saveDedup 从 dpMode 下拉收集:未 loadDedup 时停留 HTML 默认 1 → save 写 1 污染共享库(六跑实锤)→ save 前显式填充 + pg.evaluate("() => loadDedup()"); wait_api(pg, "rule/customer/dedup"); pg.wait_for_timeout(600) + pg.evaluate("() => { document.getElementById('dpThreshold').value = '90'; saveDedup(); }") + wait_api(pg, "dedup/save"); pg.wait_for_timeout(900) + thr1 = (get_json(f"{BASE}/api/rule/customer/dedup", tok).get("data") or {}).get("similarityThreshold") + pg.evaluate("() => { document.getElementById('dpThreshold').value = '%s'; saveDedup(); }" % (thr0 if thr0 is not None else 80)) + wait_api(pg, "dedup/save"); pg.wait_for_timeout(900) + thr2 = (get_json(f"{BASE}/api/rule/customer/dedup", tok).get("data") or {}).get("similarityThreshold") + mode_end = (get_json(f"{BASE}/api/rule/customer/dedup", tok).get("data") or {}).get("nameMatchMode") + step("26 查重设置读→改90→save生效→还原(含匹配方式不被污染)", + thr1 == 90 and thr2 == thr0 and mode_end == mode0, "原=%s→90→还原=%s;mode=%s(原%s)" % (thr0, thr2, mode_end, mode0)) + + # ---- 步 27 check-name 命中 + 信用代码撞码 67003 ---- + pg.evaluate("() => { document.getElementById('ckName').value = 'e2c-dr-恒信达科技有限责任公司'; checkName(); }") + wait_api(pg, "check-name"); pg.wait_for_timeout(900) + ck27 = ev(pg, "document.getElementById('ckOut').textContent") or "" + # check-credit-code L1 直调(REQUIRED 端点矩阵覆盖;撞码占用者=e2c-全字段-科技 seed) + ckc27 = (get_json(f"{BASE}/api/customer/check-credit-code?creditCode=91440101E2CTEST001", tok).get("data") or {}) + pg.evaluate("() => { switchTab('list'); dlgCreate(); }"); pg.wait_for_timeout(600) + pg.evaluate("() => { document.getElementById('cName').value = 'e2c-dr-撞码客户';" + "document.getElementById('cType').value = '%s'; document.getElementById('cProv').value = '440000';" + "document.getElementById('cCity').value = '440100'; document.getElementById('cDist').value = '440103';" + "document.getElementById('cInd').value = '%s'; document.getElementById('cCredit').value = '91440101E2CTEST001'; }" + % (ctype, gov)) + pg.evaluate("() => doCreate('')") + wait_api(pg, "/api/customer/create"); pg.wait_for_timeout(1100) + err27 = ev(pg, "(document.querySelector('#cOut .errbox')||{}).textContent || ''") or "" + pg.evaluate("() => dlgClose()"); pg.wait_for_timeout(300) + step("27 check-name命中e2c-恒信达+信用代码撞码67003(L3硬拦)+check-credit-code L1", + "恒信达" in ck27 and "67003" in err27 and bool(ckc27.get("exists")), + "check-name=%s;err=%s;creditCode.exists=%s" % (ck27[:60].replace(chr(10), ' '), err27[:90], ckc27.get("exists"))) + + # ---- 步 28 超期提醒:save 非法 0 → 64023 → 还原 ---- + r_orig = get_json(f"{BASE}/api/rule/customer/reminder", tok).get("data") or {} + f0 = r_orig.get("firstTriggerDays"); s0 = r_orig.get("secondIntervalDays") + pg.evaluate("() => switchTab('settings')"); pg.wait_for_timeout(1300) + pg.evaluate("() => { document.getElementById('rFirstDays').value = '0'; saveReminder(); }") + wait_api(pg, "reminder/save"); pg.wait_for_timeout(900) + got64023 = "64023" in read_toast(pg) + pg.evaluate("() => { document.getElementById('rFirstDays').value = '%s'; document.getElementById('rSecondDays').value = '%s'; saveReminder(); }" + % (f0 if f0 else 30, s0 if s0 else 7)) + wait_api(pg, "reminder/save"); pg.wait_for_timeout(900) + r_end0 = get_json(f"{BASE}/api/rule/customer/reminder", tok).get("data") or {} + step("28 超期提醒save非法0→64023toast→还原30/7", + got64023 and r_end0.get("firstTriggerDays") == f0 and r_end0.get("secondIntervalDays") == s0, + "64023=%s;还原=%s/%s(原%s/%s)" % (got64023, r_end0.get("firstTriggerDays"), r_end0.get("secondIntervalDays"), f0, s0)) + + # ---- 步 29 POOL-CFG 占位卡只读〔D〕 ---- + pool29 = ev(pg, "document.querySelectorAll('#tab-settings [data-defect=\"POOL-CFG\"]').length") or 0 + dis29 = ev(pg, "document.querySelectorAll('#tab-settings input[disabled]').length") or 0 + step("29 公海池配置占位卡只读[D]", pool29 >= 1 and dis29 >= 2, "角标=%s;禁用输入=%s" % (pool29, dis29)) + + # ================= D · 缺陷现象(步 30-36) ================= + pg.evaluate("() => defectPanel()"); pg.wait_for_timeout(800) + decl = ev(pg, "document.querySelectorAll('#dlg [data-defect-decl]').length") or 0 + cnts = ev(pg, "({ a: DEFECT_LEDGER.open.length, b: DEFECT_LEDGER.fixed.length, c: DEFECT_LEDGER.exempt.length, d: DEFECT_LEDGER.env.length })") or {} + rows30 = ev(pg, "document.querySelectorAll('#dlg [data-defect-row]').length") or 0 + pg.evaluate("() => dlgClose()"); pg.wait_for_timeout(300) + step("30 缺陷台账面板(A≥14/B4/C14/D1+固定声明)", + decl >= 1 and cnts.get("a", 0) >= 14 and cnts.get("b") == 4 and cnts.get("c") == 14 and cnts.get("d") == 1, + "A=%s B=%s C=%s D=%s;渲染行=%s" % (cnts.get("a"), cnts.get("b"), cnts.get("c"), cnts.get("d"), rows30)) + shot(pg, "s30-ledger.png") + + # 角标互斥分布于各页签/弹窗(G1=follow子页签、G2=opps、G3=members、G5/D-G1=contactsShell、 + # P3-3=import、POOL-CFG=settings、I-06=list、STUB-LOOKUP=建客户弹窗、P3-6/G4=info)—— + # 单页签瞬时统计必然缺类目(五跑 9<12 教训)→ 多页签采样累计 + kinds31, badges31 = set(), 0 + for jmp in ["() => switchTab('settings')", "() => switchTab('import')", + "() => { switchTab('list'); switchWs('pool'); }"]: + pg.evaluate(jmp); pg.wait_for_timeout(1100) + kinds31 |= set(ev(pg, "[...document.querySelectorAll('[data-defect]')].map(x => x.dataset.defect)") or []) + badges31 += ev(pg, "document.querySelectorAll('[data-defect]').length") or 0 + pg.evaluate("() => dlgCreate()"); pg.wait_for_timeout(600) + kinds31 |= set(ev(pg, "[...document.querySelectorAll('[data-defect]')].map(x => x.dataset.defect)") or []) + badges31 += ev(pg, "document.querySelectorAll('[data-defect]').length") or 0 + pg.evaluate("() => dlgClose()"); pg.wait_for_timeout(300) + pg.evaluate("() => { switchWs('mine'); switchTab('detail'); openDetail('%s'); }" % cid_a); pg.wait_for_timeout(1600) + for sub in ["info", "follow", "opps", "members", "contacts"]: + pg.evaluate("() => switchSub('%s')" % sub); pg.wait_for_timeout(900) + kinds31 |= set(ev(pg, "[...document.querySelectorAll('[data-defect]')].map(x => x.dataset.defect)") or []) + badges31 += ev(pg, "document.querySelectorAll('[data-defect]').length") or 0 + step("31 data-defect角标≥12且关键类目齐全(多页签累计)", + badges31 >= 12 and all(x in kinds31 for x in ["G1", "G5", "P3-3", "D-G1", "I-06", "POOL-CFG", "STUB-LOOKUP"]), + "累计=%s;类目=%s" % (badges31, sorted(kinds31))) + + pg.evaluate("() => { switchTab('list'); switchWs('pool'); }"); pg.wait_for_timeout(1500) + fopts32 = ev(pg, "[...document.getElementById('fForm').options].map(o => o.value)") or [] + i06v = ev(pg, "document.getElementById('i06Note').textContent") or "" + step("32 I-06双现象(pool无board选项+注记含67001/记忆成功)", + "board" not in fopts32 and "67001" in i06v and "记忆成功" in i06v, "fForm选项=%s" % fopts32) + pg.evaluate("() => switchWs('mine')"); pg.wait_for_timeout(1200) + + exempt_hit = ev(pg, "{ const bad = ['换负责人', '日志导出']; let n = 0; " + "document.querySelectorAll('button').forEach(b => { if (bad.some(x => b.textContent.indexOf(x) >= 0)) n++; }); " + "document.querySelectorAll('input[type=checkbox], input[type=radio]').forEach(c => { " + "const t = (c.previousElementSibling ? c.previousElementSibling.textContent : '') + (c.parentElement ? c.parentElement.textContent : ''); " + "if (t.indexOf('完整金额') >= 0 || t.indexOf('触发校验规则') >= 0) n++; }); return n; }") + step("33 豁免入口不出现(换负责人/日志导出/完整金额开关/导入校验复选框)", exempt_hit == 0, "命中=%s" % exempt_hit) + + pg.evaluate("() => openDetail('%s')" % SEEDS["full"]); pg.wait_for_timeout(1600) + pg.evaluate("() => switchSub('follow')"); pg.wait_for_timeout(1100) + g1_ok = ev(pg, "document.querySelectorAll('#subBox [data-defect=\"G1\"]').length") >= 1 and ev(pg, "document.querySelectorAll('#subBox select').length") == 1 + pg.evaluate("() => switchSub('opps')"); pg.wait_for_timeout(1100) + g2_ok = ev(pg, "document.querySelectorAll('#subBox thead th').length") == 7 + pg.evaluate("() => switchSub('members')"); pg.wait_for_timeout(1100) + g3_ok = ev(pg, "document.querySelectorAll('#subBox thead th').length") == 3 and ev(pg, "document.querySelectorAll('#subBox [data-defect=\"G3\"]').length") >= 1 + pg.evaluate("() => switchSub('info')"); pg.wait_for_timeout(1100) + kv34 = ev(pg, "{ const m = {}; document.querySelectorAll('#subBox .kv').forEach(k => { m[k.querySelector('b').textContent] = k.querySelector('span').textContent; }); return m; }") or {} + g4_ok = kv34.get("创建人") == "--" and kv34.get("更新人") == "--" + pg.evaluate("() => switchSub('contacts')"); pg.wait_for_timeout(1500) + g5_ok = (not ev(pg, "[...document.querySelectorAll('#contactsShell thead th')].some(t => t.textContent === '负责人')") + and ev(pg, "document.querySelectorAll('#contactsShell [data-defect=\"G5\"]').length") >= 1) + zid2 = ev(pg, "(window._contacts[0] || {}).id") + g6_ok = False + if zid2: + pg.evaluate("() => dlgContactDetail('%s')" % zid2); pg.wait_for_timeout(1000) + pg.evaluate("() => ctSubTab(1)"); pg.wait_for_timeout(400) + g6_ok = ev(pg, "document.getElementById('ctPaneLog').style.display !== 'none' && document.getElementById('ctPaneLog').textContent.indexOf('无数据源') >= 0") + pg.evaluate("() => dlgClose()"); pg.wait_for_timeout(300) + step("34 G系列合并复核(G1无操作人筛选/G2七列/G3两列缺/G4--[D]/G5无负责人列/G6空态)", + g1_ok and g2_ok and g3_ok and g4_ok and g5_ok and g6_ok, + "G1=%s G2=%s G3=%s G4=%s G5=%s G6=%s" % (g1_ok, g2_ok, g3_ok, g4_ok, g5_ok, g6_ok)) + + cards35 = ev(pg, "[...document.querySelectorAll('#headBox .sumcards .card b')].map(b => b.textContent)") or [] + pg.evaluate("() => switchSub('projects')"); pg.wait_for_timeout(1100) + pr35 = "Noop" in (ev(pg, "document.getElementById('subBox').textContent") or "") + step("35 金额卡P3-6四卡--口径+关联项目Noop空态", + len(cards35) == 4 and all(c in ("--", "-- / --") for c in cards35) and pr35, "cards=%s" % cards35) + + f6_ok = ev(pg, "[...document.querySelectorAll('#tab-list button')].some(b => b.textContent.indexOf('F6 stub') >= 0)") + pg.evaluate("() => dlgCreate()"); pg.wait_for_timeout(500) + pg.evaluate("() => { document.getElementById('cLk').value = '测试联想词'; doLookup(); }") + wait_api(pg, "company-lookup"); pg.wait_for_timeout(900) + nohit36 = "未查询到匹配企业" in (ev(pg, "document.getElementById('cOut').textContent") or "") + pg.evaluate("() => dlgClose()"); pg.wait_for_timeout(300) + step("36 company-lookup NO_HIT+F6 stub文案", nohit36 and f6_ok, "NO_HIT=%s;F6stub=%s" % (nohit36, f6_ok)) + + # ================= E · 网络层全局 + 清理(步 37-40) ================= + step("37 console/pageerror=0", len(console_errors) == 0, + ("; ".join(console_errors[:2]) + " | HTTP4xx: " + "; ".join(http_fails[:3])) if (console_errors or http_fails) else "无错误") + bad_m = [u for u in api_urls if u.startswith("PUT ") or u.startswith("DELETE ")] + step("38 零PUT/DELETE(ADR-0017)", len(bad_m) == 0, "违例=%s" % bad_m[:3]) + + REQUIRED = ["workspace/page", "preference/view/list", "preference/view/save", "preference/view/delete", + "view-form/get", "view-form/save", "board/summary", "board/cards", + "company-lookup", "customer/create", "customer/edit?id=", "customer/detail-head", "customer/detail?id=", + "customer/opportunity/page", "customer/project/page", "contact/page", "contact/detail?id=", "contact/search", + "contact/quickAdd", "contact/reveal", "contact/batchEdit", "contact/check-phone", "contact/delete", + "member/add", "member/remove", "follow/add", "oplog/page", + "import/upload", "import/confirm", "import/page", "contact/import/upload", "contact/import/confirm", + "POST /api/opportunity", "opportunity/assign", "opportunity/close", "release-pool-batch", + "claim-batch", "assign-batch", "archive-batch", "customer/restore?id=", + "transfer/preview", "transfer/initiate", "transfer/page", "transfer/detail", "transfer/assignable", "transfer/assign", + "rule/customer/dedup", "rule/customer/reminder", "check-name", "check-credit-code"] + uniq = len({u.split(" ", 1)[1].split("?")[0] for u in api_urls if " " in u}) + missing = [e for e in REQUIRED if not any(e in u for u in api_urls)] + step("39 端点覆盖广度(唯一路径≥50+矩阵清单%d条)" % len(REQUIRED), uniq >= 50 and not missing, + "唯一路径=%s;缺失=%s" % (uniq, missing)) + + swept = sweep() + left = dbq("SELECT COUNT(*) AS n FROM customer WHERE customer_name LIKE %s AND deleted=0", (PFX + "%",))[0]["n"] + d_end = get_json(f"{BASE}/api/rule/customer/dedup", tok).get("data") or {} + r_end = get_json(f"{BASE}/api/rule/customer/reminder", tok).get("data") or {} + form_end = (get_json(f"{BASE}/api/preference/view-form/get?scopeKey=customer.overview", tok) or {}).get("data") + step("40 夹具正门清扫+规则/形态偏好还原核对", + left == 0 and d_end.get("similarityThreshold") == thr0 and r_end.get("firstTriggerDays") == f0 and form_end in ("list", None, ""), + "清扫=%s行;残留=%s;dedup=%s(原%s);reminder=%s(原%s);overview形态=%s" % + (swept, left, d_end.get("similarityThreshold"), thr0, r_end.get("firstTriggerDays"), f0, form_end)) + shot(pg, "s40-final.png") + + browser.close() + + # ================= 报告落盘 ================= + passed = sum(1 for s in steps if s["ok"]) + failed = len(steps) - passed + dur = round(time.time() - t0, 1) + report = { + "summary": {"total": len(steps), "passed": passed, "failed": failed, + "passRate": ("%d%%" % round(passed * 100 / len(steps))) if steps else "0%", + "startedAt": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(t0)), + "durationS": dur, "verdict": "PASS" if failed == 0 else "FAIL", + "verdictRule": "全部步骤 ok 即 PASS,任一 FAIL 即 FAIL"}, + "steps": steps, "errors": console_errors, "http_fails": http_fails, "api_urls": api_urls} + rp = os.path.join(DEMO, "smoke-report.json") + with open(rp, "w", encoding="utf-8") as f: + json.dump(report, f, ensure_ascii=False, indent=1) + print("\n==== summary ==== %d steps, %d failed (%.1fs) → %s" % (len(steps), failed, dur, rp)) + for s in steps: + if not s["ok"]: + print(" FAIL %s | %s" % (s["step"], s["note"][:200])) + print("ALL_PASS: %s" % (failed == 0)) + + +if __name__ == "__main__": + main() + diff --git a/.scratch/customer-demo-ref/demo/tmp_xlsx/cont.xlsx b/.scratch/customer-demo-ref/demo/tmp_xlsx/cont.xlsx new file mode 100644 index 0000000..58c4ed4 Binary files /dev/null and b/.scratch/customer-demo-ref/demo/tmp_xlsx/cont.xlsx differ diff --git a/.scratch/customer-demo-ref/demo/tmp_xlsx/cust.xlsx b/.scratch/customer-demo-ref/demo/tmp_xlsx/cust.xlsx new file mode 100644 index 0000000..ec30d3d Binary files /dev/null and b/.scratch/customer-demo-ref/demo/tmp_xlsx/cust.xlsx differ diff --git a/.scratch/customer-demo-ref/demo/tmp_xlsx/tpl_cust.xlsx b/.scratch/customer-demo-ref/demo/tmp_xlsx/tpl_cust.xlsx new file mode 100644 index 0000000..54a17fd Binary files /dev/null and b/.scratch/customer-demo-ref/demo/tmp_xlsx/tpl_cust.xlsx differ diff --git a/.scratch/customer-demo-ref/issues/07-field-alignment-checklist.md b/.scratch/customer-demo-ref/issues/07-field-alignment-checklist.md index 902394b..af43c00 100644 --- a/.scratch/customer-demo-ref/issues/07-field-alignment-checklist.md +++ b/.scratch/customer-demo-ref/issues/07-field-alignment-checklist.md @@ -1,7 +1,7 @@ # 07 逐入口字段对齐验收清单 Type: research -Status: open +Status: resolved Blocked by: 01 ## Question @@ -20,3 +20,31 @@ Blocked by: 01 - Bruno 文档仓 `D:\code\crm-api-docs`(按菜单分组的 .bru);`.scratch/customer-module/API-SUMMARY.md`。 - DTO 源码:`crm-customer/src/main/java/com/crm/customer/` 下 dto/vo 包。 - 现有 demo 的渲染口径("--"、脱敏 reveal 按钮)可直接对照。 + +## Answer + +(2026-09-11,AFK 决断。产出:`assets/field-alignment.md`(1091 行)+ 中间分片 `_fa-core.md`/`_fa-flow.md`(已并入正文,收口时删除)。两个抽取代理分工:核心域(矩阵 #1-#49)/ 联系人族+重流程+规则族(#31-#69),逐入口产出请求参数表、出参字段表(路径/类型/文案口径/脱敏)、空值"--"与枚举字典口径,每表附权威出处(.bru 相对路径 + DTO/Param 源码缩写,缩写表见文件头)。) + +### 结构 + +- **头部「跨票校准注记 K1-K11」**:两代理交叉发现统一收敛,**实施/冒烟必须遵守、覆盖矩阵与 AS 旧口径**。 +- **第一部分 · 核心域**(#1-#49):通用口径(BaseParam 分页/Long→str 序列化/时间格式/"--"口径/脱敏总述/seed id)+ 逐入口表 + 字典与枚举专节 + 来源清单。 +- **第二部分 · 联系人族+重流程+规则族**(#31-#69):12 节(联系人菜单/列表/图谱/增强/导入六端点/CRUD/交割五端点/客户导入/规则族/字典/脱敏专节/来源清单)。 + +### K1-K11 校准要点(已回写落地) + +- **K1** G4 收窄为「两件」:detail 实测 `createTime/updateTime` 经 BaseDTO 有值,仅 `creatorId/updaterId` 不暴露 → demo DEFECT_LEDGER G4 条目 + 冒烟步 13/34 已同步改(本票收口动作)。 +- **K2** 关联项目页签有真端点(`CustomerProjectQueryPort`,当前 Noop → 数据空态显"--")→ 票 11 scope 已修(矩阵 #42「无端点」过时),冒烟步 14 同步。 +- **K3** 看板 summary 字段 = `cnt`/`groupValue`(demo 旧读 count/name/key 必显"--");cards 必传 groupValue → 票 10。 +- **K4** oplog action 权威值域 **18 种**(含 GRAPH_EDIT;AS §3「17 种」未同步)→ 票 11 筛选下拉。 +- **K5** projectCount 三方漂移(AS 恒 null / SQL 恒 0 / E2E 序列化 "0"):渲染按实返回,"--"兜底。 +- **K6** contact_source 真值 = group_meeting/group_activity/referral/other(crm-dict DictDataInitializer);demo 硬编码 contact_source_01..04 系字典改版前遗留 → 票 12/13 改字典驱动。 +- **K7** reminder save 控制器实为**表单绑定**(.bru 自称 JSON 例外不实)→ demo form 提交正确,不改。 +- **K8** focus-batch 返回 **Void**(其余批量端点 BatchResult)→ 票 10 toast 自算条数。 +- **K9** quick-create `.bru` 漏 `confirmSimilar`、误标星级选填(DTO 全 7 必填)→ 票 12 以 DTO 为准。 +- **K10** 联系人电话全读路径脱敏 `138****1234`(短号全遮、导出同口径、明文唯一通道 reveal);similarHits/check-phone 行级 masked;核心域 V1 明文(creditCode 明文回显)→ 冒烟脱敏断言。 +- **K11** transfer status 权威 0/1(.bru 示例 2 超值域);reminder 64023 精确条件 = 两天数均非空且 >0 → 冒烟断言。 + +### 验收用法 + +- 冒烟断言与人工验收双用;实施票 10-13 的字段名/枚举/端点路径一律以本清单为准,与矩阵/AS 旧口径冲突时**以 K 注记与本清单覆盖**。 diff --git a/.scratch/customer-demo-ref/issues/10-core-list.md b/.scratch/customer-demo-ref/issues/10-core-list.md index 7ca46ed..4a54d90 100644 --- a/.scratch/customer-demo-ref/issues/10-core-list.md +++ b/.scratch/customer-demo-ref/issues/10-core-list.md @@ -1,7 +1,7 @@ # 10 核心域·列表层改造 Type: task -Status: open +Status: resolved Blocked by: 07, 09 ## Scope @@ -20,3 +20,21 @@ Blocked by: 07, 09 smoke-plan A 段步 2-7/归属动作可过;新增/改造 UI 不引入 console error。 +## Answer + +(2026-09-11,AFK 实施。demo/index.html fork 基线 2350 行 → 2492 行(+142)。字段口径全部按 field-alignment.md K 注记与 #1/#7/#8/#9/#13-19 表。) + +1. **视图下拉五值齐全**(矩阵 #2):补 FOLLOW_UP_DUE/RECENT;pool 越界视图不做禁用特判(SQL 自然空集);RECENT 选中时 svSel 禁用(saved-view 不接 RECENT)。 +2. **列筛选器六参数 + 归档态开关**(#5/#6):第二行 viewbar 增加 archiveStatus(有效/已归档)+ customerStage/customerType(六种字典静态值)/customerStarLevel/relationStarLevel(1-5)/industryCode/provinceCode(code 输入框),loadList 全量携带 + 重置筛选按钮。 +3. **saved-view 四端点接线**(#7,P3-2 翻正):list 载入下拉、存为视图(**save 发 @RequestBody JSON**——唯一例外端点,conditions 本期只提交 1 组 keyword like)、选中→page 带 `savedViewId`、设默认、删除;scopeKey=`customer.mine/overview/pool`。 +4. **形态偏好 + 看板视图**(#8/#9,P3-1 翻正 + K3 落地):view-form/get 载入持久形态、save 发出;list/split/board 三态;**看板=board/summary(显式 groupColumn,字段 `cnt`/`groupValue` 渲染,空列骨架前端补全)+ board/cards(groupValue 必传,卡片=列表行子集,不接 saved-view)**,分组列 stage/star/relation 可切;**汇总卡面板整体移除**(矩阵 #12 二选一取移除:A4 原型列表页无独立统计卡,board/summary 不再被挪用)。 +5. **pool 边界**:形态下拉不给 board 选项;pool workspace 显示 I-06 静态注记(`data-defect="I-06"`,文本含「67001」+「记忆成功」双现象,不实调保 console 干净)。 +6. **分屏占位**(#10):split=列表保留 + 行卡片预览面板(点击客户名称出该行子集卡片,不跳详情页)。 +7. **列表补列**(#11):类型(字典文案)/行业(industry 树字典翻译,ensureDicts 增拉 `tree?groupCode=industry`)/协议等级/VIP 等级(null 显 "--");**pool 列组切换**:无负责人/部门列、加进入公海时间(原型差异口径);表头改 JS 动态渲染(listCols/paintHead)并补勾选列空表头(修复基线 11 th vs 12 td 错位);项目数按 K5 口径改按实返回 "--" 兜底(原硬编码 "--")。 +8. **分配整批化**(#15/#16):dlgAssign 改取全部勾选 ids 走 `assign-batch`,BatchResult 三计数+失败明细表呈现;目标人员校验失败=整批拒绝(顶层非 0 落 errbox+提示预检语义)。 + +### 证据 + +- Playwright 快验(`_quickcheck.py`,无 token 冷载):**pageerror=0**;新表头 15 列渲染;mine 形态下拉 3 选项;切 pool 后 I-06 注记可见、形态下拉仅 list/split。截图 `demo/shots/t10-quick-pool.png`。console 2 条=file:// 直连默认 API 的网络失败(冒烟经 route 反代后为 0,非本次 UI 缺陷)。 +- 完整 40 步冒烟归票 14(A 段步 2-7 断言本票行为)。 + diff --git a/.scratch/customer-demo-ref/issues/11-core-detail.md b/.scratch/customer-demo-ref/issues/11-core-detail.md index d899e25..8d0e044 100644 --- a/.scratch/customer-demo-ref/issues/11-core-detail.md +++ b/.scratch/customer-demo-ref/issues/11-core-detail.md @@ -1,7 +1,7 @@ # 11 核心域·详情层改造 Type: task -Status: open +Status: resolved Blocked by: 07, 09 ## Scope @@ -9,7 +9,7 @@ Blocked by: 07, 09 矩阵 #29/30/40/41/42/44/45: - 详情头部 4 张金额卡(恒"--"+P3-6 角标)。 -- 页签补齐 8 个:页签5 关联项目占位(恒"--")。 +- 页签补齐 8 个:页签5 关联项目接线真端点(`CustomerProjectQueryPort`,当前 Noop 实现 → 数据空态显"--",不做硬占位);端点路径查 `assets/field-alignment.md` 第二部分。 - 关联商机 7 列真名(G2 角标;列名以 field-alignment/opp-deps 为准)。 - 信息页签系统信息区(G4 角标);成员列表(G3 角标)。 - 跟进筛选器(followWay/时间范围);oplog 筛选器(action 17 值/keyword/时间)。 @@ -19,3 +19,22 @@ Blocked by: 07, 09 smoke-plan 步 11-19 可过;8 页签全遍历。 +## Answer + +(2026-09-11,AFK 实施。demo/index.html → 2597 行(票 11 净增约 +105)。契约全部按 field-alignment #29/#30/#40/#41/#42/#44/#45 + K1/K2/K4/K5/K10。) + +1. **详情头部 4 张金额卡**(#29/P3-6):金额汇总区 4 卡(已中标项目总额/跟进中方案预估/进行中商机总额/合同·回款)按契约恒 null 显 "--" 不显 0,挂 P3-6 dbadge;头部「项目计数」去掉旧「(契约恒 null 显 --)」文案改按实返回。 +2. **页签补齐 8 个**:subtabs = 信息/联系人/跟进/关联商机/**关联项目(新)**/战略协议/团队成员/操作日志。 +3. **页签5 关联项目接真端点**(K2):`GET /api/customer/project/page?id=`(CustomerProjectQueryPort 反查,当前 Noop 实现 → 数据空态显 "--",非硬占位);列=ProjectItem 真名 9 字段子集(项目名称/阶段/状态/报备状态/项目金额/负责人/最近更新)。 +4. **关联商机 7 列真名**(#41/G2):修复旧 5 列三处字段名漂移(opportunityName/statusName/ownerUserName 系幻影字段)→ 契约 7 字段列头(商机ID/商机名称/阶段/预计金额/负责人ID/负责人/最近更新),G2 dbadge+缺列说明。 +5. **信息页签**(#30/G4/K1/K10):grid 补「创建人/更新人」两行(creatorId/updaterId 不在 DTO → 恒 "--")+ G4 dbadge 与口径提示(创建/更新时间经 BaseDTO 有值,如实渲染);**修复信用代码字段名漂移 creditCode→unifiedCreditCode**(K10 明文回显,否则冒烟步 13 明文断言必 FAIL)。 +6. **跟进筛选器**(#40/G1):followWay 五值下拉 + 起止日期(补 00:00:00/23:59:59 含端)+ 查询;G1 dbadge 明示操作人筛选豁免(FollowPageParam 无参数);写跟进按钮挪入筛选条;行渲染修正 followWay 字典名(后端不回名→前端 FOLLOW_WAYS 翻译)与 followByName 快照(旧读 createByName 系幻影字段)。 +7. **oplog 筛选器**(#45/K4):action 下拉按**权威 18 种**渲染(含 GRAPH_EDIT,映射中文文案)+ 叙事 keyword + 起止日期;日志行 action 翻译文案。 +8. **成员列表 G3**(#44):添加协同人旁挂 G3 dbadge + 「职务/加入时间两列 DTO 未暴露,缺列不补」提示。 +9. **G5 角标**:联系人页签列表视图条挂静态 `data-defect="G5"`(ContactDTO 未暴露负责人快照)。G6 归票 12 联系人独立菜单。 + +### 证据 + +- Playwright 快验(`_quickcheck.py`):**pageerror=0**;subtabs=8(projects 就位);G5 静态角标存在;缺陷面板 33 行不受影响。截图 `demo/shots/t11-quick-detail.png`。 +- 金额卡/7 列/筛选器/项目页签的**带数据断言**归票 14 冒烟步 11-19(需起服)。 + diff --git a/.scratch/customer-demo-ref/issues/12-contacts-opp-entry.md b/.scratch/customer-demo-ref/issues/12-contacts-opp-entry.md index a8c244e..4917951 100644 --- a/.scratch/customer-demo-ref/issues/12-contacts-opp-entry.md +++ b/.scratch/customer-demo-ref/issues/12-contacts-opp-entry.md @@ -1,7 +1,7 @@ # 12 联系人独立菜单 + 商机侧演示入口 Type: task -Status: open +Status: resolved Blocked by: 07, 09 ## Scope @@ -15,3 +15,18 @@ Blocked by: 07, 09 smoke-plan 步 23(商机联动链)与联系人菜单相关步可过。 +## Answer + +**全部落地,Playwright 快验 pageerror=0(登录态走远程 debug token,真数据)。demo/index.html 2620→2852 行。** + +1. **新页签「联系人」**(nav 第 3 位,`tab-contacts`):contact/page 真端点列表(GET,BaseParam+keyword 匹配姓名/电话/所属客户名)——真数据 10 行/共 22 条;表头=姓名(固定列)+7 可隐藏列(职务/电话/关键联系人/内线/来源/礼品备注/所属客户)+操作;分页。工具栏摆 **G5 dbadge**(ContactDTO 无 owner 字段,07 票定稿口径)。 +2. **K10 脱敏直显**:列表/详情电话列服务端已脱敏(真值实测 `138****0001`),前端直显不做二次加工。 +3. **K6 字典驱动**:来源列经 `sourceName()`(SOURCE_DICT=enabled-list contact_source)翻译;新数据正常翻名。 +4. **contact.list 偏好接线**:形态偏好 view-form/get|save(联系人菜单仅 list 单项,读写闭环);列偏好 preference/get|save(visibleKeys 重复键,`dlgCpEdit()` 勾选保存后 ctVisibleKeys 即时生效,姓名列固定不参与隐显)。 +5. **行点开 contact/detail 弹窗回显**(#51:明细行级最新值;phone 脱敏形态提交=不改号提示):12 个 kv(姓名/职务三件/电话/关键/内线/来源/礼品/所属客户三件)+ 子页签「操作日志」**空态+G6 dbadge**(#53:后端无联系人级 oplog 端点,07 票豁免记档)。 +6. **全局搜索演示入口**(#52):`dlgContactSearch()` GET keyword=&limit=(默认 20),场景文案=商机表单「关键联系人」数据源;真名回查 n=1 ✅。 +7. **商机侧三入口**(按 opp-deps §4):客户列表新增「商机侧演示入口」panel——①快建客户 `dlgQuickCreate()`(POST /api/customer/quick-create,**K9:DTO 全 7 必填**+confirmSimilar 默认 false、needConfirm→similarHits 列表→确认后 true 重发链);②候选客户三维搜索 `dlgCustSearch()`(POST /api/customer/search:keyword 三维模糊+customerType+archiveStatus+excludeCustomerIds 重复键,9 字段出参);③「从客户发起建商机」行操作 `dlgOppCreate(id)`(POST /api/opportunity 预填 customerId/customerName+isPrimaryIntended+customerRole;核心 6 必填 D-14、66001 提示;**写操作留冒烟步 23 真跑**)。 +8. **K6 顺手修正**:详情页签 dlgContact 的 source 下拉由硬编码 contact_source_01..04(字典改版前遗留)改为 SOURCE_DICT 动态渲染(dlgContact 改 async+幂等 ensureDicts)。 +9. **快验结果**(_quickcheck12*.py):tabs=6、section 切换可见、G5=1、cform 渲染、未登录 hint「请先登录」→登录后真数据;详情弹窗 12kv+G6 空态;quick-create 7 控件齐;三搜索弹窗开合正常。**customer/search 三维真验证**:客户名「佛山季华铝业」total=1、联系人名「梁诗敏」命中其所属客户(三维模糊实证)、excludeCustomerIds 重复键 before "1"→after "0" ✅。 +10. **环境观察(票 14 冒烟注意)**:①共享库存量数据 source 仍是旧 code(contact_source_02/03)——字典改版后存量未迁移,demo sourceName() 回退显原 code(按实返回口径,非 demo 缺陷);②seed 张关键/e2c-* 不在远程共享库(现为佛山季华铝业等另一批 demo 数据),冒烟步 13/23 的 seed 断言须先重建 seed 夹具或改用库内真值。 + diff --git a/.scratch/customer-demo-ref/issues/13-flow-rules-tail.md b/.scratch/customer-demo-ref/issues/13-flow-rules-tail.md index 70d6628..a3032ed 100644 --- a/.scratch/customer-demo-ref/issues/13-flow-rules-tail.md +++ b/.scratch/customer-demo-ref/issues/13-flow-rules-tail.md @@ -1,7 +1,7 @@ # 13 重流程 + 规则族收尾 Type: task -Status: open +Status: resolved Blocked by: 07, 09 ## Scope @@ -17,3 +17,15 @@ Blocked by: 07, 09 smoke-plan B/C/D 段相应步可过。 +## Answer + +**五项全部落地(I-06 票 10 已覆盖跳过),Playwright 快验 pageerror=0(登录态真请求)。demo/index.html 2852→2925 行。** + +1. **工商联想接线(#24)**:dlgCreate 客户名称行下加「工商联想」控件(input cLk+联想按钮+`data-defect="STUB-LOOKUP"` 注记)——`doLookup()` GET `/api/customer/company-lookup?companyName=`(参数名 companyName 非 name);真请求实证**stub 恒空数组 `[]`** → UI 显「未查询到匹配企业(一期 stub 恒 NO_HIT,可手工录入)」+ 注记(①+②双呈现)。有结果时(真实源接入后自动激活)候选 9 字段渲染、`applyLookup(i)` **只回填当前为空的字段**(bizName→cName、unifiedCreditCode→cCredit,已填不覆盖)且回填后立即调 check-credit-code(#24 前端职责三项)。无结果/失败均不阻断手工提交。 +2. **F6 按钮明示文案**:`批量工商更新` 按钮文字改「F6 stub」+ 按钮挂 `data-defect="STUB-LOOKUP"` 冒烟钩子 + title 补豁免口径;结果弹窗尾部 stub hint 原已有(票 05 遗产)。 +3. **导入任务列表过滤(#63)**:任务 panel 加 status(0 待确认/1 处理中/2 已完成/3 已失败)与 importMode(APPEND_ONLY/UPDATE_ONLY/UPSERT)两下拉(id=impFStatus/impFMode,避开上传工具栏已有 impMode),`loadImportPage()` 拼接查询参数(空值不传)。真请求验证:全量 1 条 → status=2 过滤 allDone ✅、importMode=UPSERT 过滤 allUpsert ✅。 +4. **POOL-CFG 只读禁用占位卡(#69)**:tab-settings 查重设置 panel 后新增 panel——准入/回收两 input 均 `readonly disabled`(灰底),dbadge 文案引决策票 02 结论(后端无端点、v29 原型无此页、客户公海=固定准入规则虚拟池、线索域 /api/rule/pool 不得混入)。快验 panel inputs 全部 disabled+readOnly ✅。 +5. **注记类**:导入 panel 尾部 **P3-3** dbadge(「触发校验规则后确认执行」=原型幻影控件,实现语义=确认即执行,矩阵 #64 豁免);详情页签联系人工具栏 **D-G1** dbadge(batchEdit 空串绑定 null=不修改,清空语义豁免)。 +6. **快验汇总**(_quickcheck13.py):lookup_raw=[]、lookup_no_hit=true、stub_note=1、P3-3=1、POOL-CFG=1+disabled、D-G1=1、F6 钩子≥1、pageerror=[]。 + + diff --git a/.scratch/customer-demo-ref/issues/14-smoke-script.md b/.scratch/customer-demo-ref/issues/14-smoke-script.md index fe0ffc5..0ec1f63 100644 --- a/.scratch/customer-demo-ref/issues/14-smoke-script.md +++ b/.scratch/customer-demo-ref/issues/14-smoke-script.md @@ -1,7 +1,7 @@ # 14 Playwright 冒烟脚本 Type: task -Status: open +Status: resolved Blocked by: 10, 11, 12, 13 ## Scope @@ -16,3 +16,23 @@ Blocked by: 10, 11, 12, 13 40 步 ALL_PASS=true,console error=0,零 PUT/DELETE。 +## Answer + +**达成**:第八跑 `40 steps, 0 failed (176.4s)`,ALL_PASS=true;GET 147 + POST 79(零 PUT/DELETE);console_errors=0、http_fails=0;唯一路径 91≥50。报告 `demo/smoke-report.json`,截图 `demo/shots/`。 + +**八轮迭代轨迹**(崩溃轮 1-4 → 全量轮 5-8): + +- 第 1-4 轮:delete_key 崩溃 / 输出缓冲卡死 / 步 23 中文 URL 未 quote 崩(两次同因)/ 步 30 对象字面量缺括号崩。 +- 第 5 轮(首次全量 29/11):定位出李普通撞号(seed 预置联系人 13812340002 与步 16 夹具撞号→failedRows 未落库连锁)、`ensure_seeds 在 sweep 之前`(上轮 seed 被 find 命中不重建→随即被 sweep 清掉→整轮查重基线缺失)、transfer 明细列=assign_status 非 status、assignableUsers 排除发起人与总监本人(assign 目标改动态取 assignable[0])。 +- 第 6 轮(31/9):新增 http_fails 捕获(page.on response status≥400)→ 定位 404 project/page = 运行 jar 旧于源码(票 07 后源码加了端点);步 26 save 从 dpMode 收集把共享库 nameMatchMode 写成 1(EXACT 污染,出厂 FUZZY=2)。 +- 第 7 轮(39/1):jar 重建重启(project/page 200);seed 2f 修旧联系人职务(张关键 job_title_id=NULL+名字不在字典→loadContacts 的 _jobCode 反查空→saveListAll「职务必填」拦截 batchEdit,六跑步 17/39 缺失实锤);quickAdd 后显式 loadContacts() 重拉(fetch 直调不刷新 _contacts→lid=None 连锁);步 26 save 前显式 loadDedup() 填充;pool+ASSIGNED 组合互斥呈现(Mapper L83 owner=me 与公海 owner IS NULL 恒冲突→先呈现默认视图空现象再清 fViewType 走基础集)。 +- 第 8 轮(40/0 全绿):最后一项步 10 实锤 **demo onclick 陷阱**——`dlgOpen` 把 fn 直接挂 `btn.onclick`(浏览器传 PointerEvent 作首参),doEdit 首次带 confirmSimilar 形参后序列化出 `confirmSimilar=[object PointerEvent]`→后端 400;且 doEdit 原不处理 edit 的 L2 needConfirm 响应(六跑「toast 保存成功但 DB 没变」假成功实锤)。修复:doEdit/doCreate 首参防御(非显式 'true' 一律 undefined,qs 跳过)+ doEdit 增加 needConfirm simbox 分支(同 doCreate 契约)。第八跑步 10 全链 PASS:simbox=命中→确认保存→db v0→v1 名字-改。 + +**demo 侧修复**(demo 为本 effort fork,属票 11 详情层范畴的缺陷修复):doEdit needConfirm 分支+confirmSimilar 参数防御、doCreate 同防御(onclick 陷阱消除)、loadContacts 由 quickAdd 冒烟后显式重拉(demo 本身行为未改)。 + +**seed/环境修复**(纪律允许范围):main 调序 sweep 先于 ensure_seeds+查重基线自检行;ensure_seeds 2d 查重模式幂等归位 FUZZY(2)/2e 冒烟联系人清扫/2f 旧 seed 联系人职务按 dict_item 归位;sweep 覆盖 e2c-dr 客户+联系人+导入任务+交割单(2 小时窗);重建 fat jar(corretto-17+IDEA bundled mvn,先杀 8080 旧进程解文件锁)并重启 verify+MinIO。 + +**后端行为甄别(只测不修,均如实呈现)**:edit L2 相似命中返回 needConfirm 不落库(demo 已补确认分支后通过);pool 工作台带 ASSIGNED 视图恒空(视图条件与公海口径互斥,冒烟 note 记录默认视图行=0 现象);步 26 断言「匹配方式不被污染」作共享库保护。 + +取证:`demo/_t14d7.py`(DB 联系人职务+pool 复现+edit CAS 复现)、`demo/_run7.log`/`_run8.log`、`demo/_jarbuild.log`。 + diff --git a/.scratch/customer-demo-ref/issues/15-report-handover.md b/.scratch/customer-demo-ref/issues/15-report-handover.md index ecc7bd3..5e11d95 100644 --- a/.scratch/customer-demo-ref/issues/15-report-handover.md +++ b/.scratch/customer-demo-ref/issues/15-report-handover.md @@ -1,7 +1,7 @@ # 15 报告 + 双仓未提交变更清单 + 交付收尾 Type: task -Status: open +Status: resolved Blocked by: 14 ## Scope @@ -14,3 +14,11 @@ Blocked by: 14 四标准自检表 + 双仓清单落盘,map 可关。 +## Answer + +**全部达成,map 已关(Status: done)**。 + +1. **四标准自检表**:`assets/acceptance-selfcheck.md`——功能覆盖(69 入口对账零缺口+冒烟唯一路径 91)/ 字段对齐(field-alignment #1-#69+K1-K11 全落)/ 流程闭环(冒烟步 9-25 全链+商机联动 67007 阻断链+oplog 留痕+规则族还原)/ 齐备(demo+smoke.py+report+4 assets+shots 9 张)——四项全达标,证据均落盘。 +2. **双仓清单**:`assets/uncommitted-changes.md`——backend 51 行全部属本 effort(M 10 + ?? 37:交付物/诊断脚本/日志,前序 java 变更已不在工作区=用户已提交);**文档仓实测在 `E:\code\crm-api-docs`(票面 D:\ 为换机前旧路径,清单已勘误)**,仅 2 个 untracked 目录(战略协议/、联系人导入/=前序 frontend-handover 迁移遗留,本 effort 未动文档仓)。agent 未提交 git。 +3. **map 收口**:Status→done;Destination 增验收对照块(四标准 ✓);Not yet specified 三条全部收口划线。 + diff --git a/.scratch/customer-demo-ref/map.md b/.scratch/customer-demo-ref/map.md index 3a609e2..795a33b 100644 --- a/.scratch/customer-demo-ref/map.md +++ b/.scratch/customer-demo-ref/map.md @@ -1,13 +1,22 @@ # 客户模块全功能单文件 Demo「正确传参照」— wayfinder map Labels: wayfinder:map -Status: open +Status: done Created: 2026-09-11 ## Destination 交付一个零构建的单文件静态前端 Demo(HTML+JS,纯 fetch 直连后端),覆盖客户模块全功能(核心域 + 重流程 + 规则族),作为联调与用户验收的「正确传参照」;随附 Playwright UI 冒烟脚本(≥30 步)与 PASS/FAIL 报告。验收四标准:功能覆盖(原型可见入口全部可点且触发对应端点)、字段对齐(与 Bruno 出参一致,含脱敏与 "--" 口径)、流程闭环(新增→归档/抛公海全链路 + 操作日志留痕)、交付物齐备。已知 P1/P2 缺陷只展示现象不修代码;双仓未提交变更清单留待用户审查。 +**验收对照(2026-09-12,票 15;详见 assets/acceptance-selfcheck.md)**: + +- ✅ 功能覆盖:69 入口对账零缺口(33+9 新增+16 改造+14 豁免全落地);冒烟唯一路径 91。 +- ✅ 字段对齐:field-alignment.md #1-#69 + K1-K11 校准全落 demo;40 步 note 字段级实证。 +- ✅ 流程闭环:冒烟步 9-25 全链 PASS(含商机 67007 阻断链、交割 assignStatus、oplog 留痕、规则族还原)。 +- ✅ 齐备:demo/index.html + smoke.py + smoke-report.json(40/0 ALL_PASS,176.4s)+ 5 assets + shots 9 张。 +- 纪律达成:GET 147+POST 79 零 PUT/DELETE;console error=0;http_fails=0;缺陷只呈现不修(14 现象三档呈现+冒烟断言)。 +- 遗留移交:双仓未提交变更清单 assets/uncommitted-changes.md(agent 不提交 git,待用户审查)。 + ## Notes - **第一依据**:蓝湖 v29 原型 A4 页族(`.scratch/api-docs-reorg/lanhu-tree-v29.md`)决定功能逻辑与字段回显;不追求样式高保真。 @@ -36,13 +45,28 @@ Created: 2026-09-11 - [06 缺陷展示设计](issues/06-defect-phenomenon-design.md) — 三档呈现全用:**①渲染即现象**(默认,缺列/恒 null/空态如实渲染)+ **②角标** `data-defect=""` 原生 title 悬浮(只加在易误读处)+ **③顶栏「已知缺陷」面板**(DEFECT_LEDGER 常量纯静态渲染,零网络请求)。面板四分区:A 开放现象 14 条(G1-G6/P3-3/4/5/6/D-G1/I-06 双现象静态注记/公海池只读占位卡 POOL-CFG/工商 stub STUB-LOOKUP)、B 已修复与本次接线 4 条、C 豁免清单 14 项、D 环境观察(F-15)。文案中性纪律(漂移/未实现/环境观察,不写 bug);全部带 data-defect 断言钩子供冒烟。 +- [07 逐入口字段对齐清单](issues/07-field-alignment-checklist.md) — 产出 `assets/field-alignment.md`(1091 行两部分:核心域 #1-#49 / 联系人族+重流程+规则族 #31-#69),逐入口请求参数/出参字段/空值"--"与枚举字典口径三表 + .bru/DTO 权威出处;**头部 K1-K11 校准注记覆盖矩阵与 AS 旧口径**(G4 收窄两件、关联项目真端点 CustomerProjectQueryPort·Noop、看板 summary=cnt/groupValue、oplog action 18 种、contact_source 字典真值、focus-batch Void、quick-create DTO 七必填、联系人电话全读路径脱敏 138****1234、transfer status 0/1 等)。收口回写:demo G4 条目文案、冒烟步 13/14/34、票 11 scope 均已按 K 口径校准。 + - [08 冒烟步骤表](issues/08-smoke-step-plan.md) — **40 步**(assets/smoke-plan.md):A 核心域 19 + B 重流程 6(含商机联动链 67007 阻断→关闭→放行、交割两段式)+ C 规则族 4 + D 缺陷现象 7(data-defect 钩子断言,FAIL=Demo 缺陷非后端缺陷)+ E 全局 4(console=0/零 PUT-DELETE/端点广度≥50/清扫还原)。4xx 弹窗通道用真实业务拒绝三处验证(67007/67003/64023)。seed:写夹具 e2c-dr-* 用后正门硬删、e2c- 只读、偏好/规则写后 API 正门还原、交割只动夹具无 F-13 负担。报告=demo/smoke-report.json(t04 形态+summary.verdict,全 ok 即 PASS)。 +- [12 联系人独立菜单+商机侧入口](issues/12-contacts-opp-entry.md) — nav 第 3 位顶级「联系人」页签:contact/page 真端点(姓名固定+7 可隐藏列,K10 服务端脱敏直显、K6 source 字典驱动)+ contact.list 形态/列偏好双接线(列偏好 preference/get|save visibleKeys 重复键)+ 行点开 contact/detail 弹窗回显(子页签日志空态 G6)+ contact/search 演示入口;商机侧三入口 panel:quick-create(K9 七必填+needConfirm→confirmSimilar=true 重发)、customer/search(三维模糊+excludeCustomerIds 重复键,真请求实证三维度+排除生效)、「从客户发起建商机」dlgOppCreate(POST /api/opportunity 预填 customerId,写操作留冒烟步 23);K6 顺手修正 dlgContact source 硬编码→字典驱动。**环境观察**:共享库存量 source=旧 code 未迁移(sourceName 回退显 code);张关键/e2c seed 不在共享库,冒烟须重建 seed(票 14)。 + +- [13 重流程+规则族收尾](issues/13-flow-rules-tail.md) — #24 工商联想接线(companyName 参数;stub 恒 `[]` 实证→NO_HIT 现象+STUB-LOOKUP 注记;applyLookup 只回填空字段+回填即 check-credit-code);F6 按钮明示「F6 stub」+钩子;#63 导入任务列表 status/importMode 过滤(真请求过滤命中);#69 POOL-CFG 只读禁用占位卡(readonly+disabled,文案引票 02);P3-3 导入注记+D-G1 批量编辑注记落 UI。至此矩阵改造/新增入口全部出票完成,I-06 由票 10 覆盖。 + +- [09 缺陷呈现基建](issues/09-defect-infra.md) — DEFECT_LEDGER 常量 + 顶栏「已知缺陷」面板四分区(A 开放现象/B 已修复/C 豁免/D 环境观察)+ `data-defect` 角标钩子落 demo;面板纯静态渲染零网络请求,文案中性(漂移/未实现/环境观察),全部钩子供冒烟断言(票 14 步 31 采样累计 11 类目 87 角标)。 + +- [10 核心域·列表层](issues/10-core-list.md) — fork 基线 2350→2492 行:workspace/page POST 全参数接线(五视图+savedViewId+pool 无负责人列+进入公海时间列)、列形态/字段口径全按 field-alignment K 注记(星级--口径、枚举字典翻译、脱敏直显)、I-06 双现象静态注记、claim/release/archive/restore/assign 扁平动作接线;快验 pageerror=0。 + +- [11 核心域·详情层](issues/11-core-detail.md) — demo/index.html → 2597 行:详情头部 4 金额卡恒 "--"〔P3-6〕+ 8 页签(补关联项目 project/page 真端点恒空 Noop)、联系人列表/图谱双视图(编辑态 batchEdit 原子批+quickAdd 查重确认)、跟进/商机/项目/协议/成员/oplog 子页签接线;K1/K2/K4/K5/K10 校准全落;快验 pageerror=0。 + +- [14 Playwright 冒烟](issues/14-smoke-script.md) — demo/smoke.py 40 步八轮迭代全绿:**第八跑 40/0(176.4s)ALL_PASS=true,GET 147+POST 79 零 PUT/DELETE,console=0,http_fails=0,唯一路径 91**。关键根因与修法:ensure_seeds 必须先 sweep 后自举(否则查重基线被 sweep 清掉);共享库查重模式被步 26 写成 EXACT→2d 幂等归位 FUZZY(2)+save 前 loadDedup 填充 dpMode;旧 seed 联系人职务不在字典→saveListAll「职务必填」拦截 batchEdit→2f 按 dict_item 归位;quickAdd 后显式 loadContacts 重拉;pool+ASSIGNED 视图与公海口径恒互斥(Mapper L83)→冒烟呈现默认视图空现象后清 fViewType;404 project/page=jar 旧于源码→重建 fat jar 重启;**demo onclick 陷阱**(dlgOpen 把 fn 挂 btn.onclick,事件对象作首参)→doEdit/doCreate 首参防御+doEdit 补 L2 needConfirm simbox 分支(六跑「toast 保存成功 DB 没变」假成功实锤)。后端行为只呈现不修。 + ## Not yet specified -- ~~构建实施拆票~~ **已落票(09-15)**:09 缺陷呈现基建(DEFECT_LEDGER/面板/角标)→ 10 核心域·列表层 → 11 核心域·详情层 → 12 联系人菜单+商机侧入口 → 13 重流程+规则族收尾 → 14 冒烟脚本(40 步)→ 15 报告+双仓清单+收尾。依赖链:10/11/12/13 blocked by 07+09;14 blocked by 10-13;15 blocked by 14。fork 基线已复制(demo/index.html,2268 行含 4 行头注,原行号 +4 平移)。 -- ~~双仓未提交变更清单~~ 随 15 号票(格式已定:assets/uncommitted-changes.md,分「本 effort / 前序遗留」两区;摸底:backend 20 java 改+若干 untracked、api-docs 大量 .bru 改,均前序遗留)。 -- ~~PASS/FAIL 报告~~ 已随 08 定(demo/smoke-report.json,summary.verdict)。 +- ~~构建实施拆票~~ **已落票(09-15)并全部 resolved**:09 缺陷呈现基建 → 10 核心域·列表层 → 11 核心域·详情层 → 12 联系人菜单+商机侧入口 → 13 重流程+规则族收尾 → 14 冒烟脚本(40 步,八轮迭代全绿 40/0)→ 15 报告+双仓清单+收尾。 +- ~~双仓未提交变更清单~~ 已随 15 号票落盘:assets/uncommitted-changes.md(backend 全属本 effort;文档仓 E:\code\crm-api-docs 仅 2 个前序迁移遗留目录)。 +- ~~PASS/FAIL 报告~~ 已交付:demo/smoke-report.json(第八跑 40/0 ALL_PASS=true)。 +- ~~四标准自检~~ 已交付:assets/acceptance-selfcheck.md(四项全达标,map 已关)。 ## Out of scope diff --git a/logs/crm-app.log b/logs/crm-app.log index c8c6342..de1f171 100644 --- a/logs/crm-app.log +++ b/logs/crm-app.log @@ -1,6132 +1,4 @@ -2026-09-11T00:00:06.188+08:00 INFO 32332 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T00:00:06.600+08:00 WARN 32332 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:00:06.600+08:00 WARN 32332 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T00:00:06.601+08:00 WARN 32332 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T00:00:06.601+08:00 WARN 32332 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T00:00:06.601+08:00 WARN 32332 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:00:08.973+08:00 INFO 32332 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T00:00:08.976+08:00 INFO 32332 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T00:00:09.295+08:00 INFO 32332 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T00:00:09.790+08:00 INFO 32332 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op Ĭʵװ䣨A5 Ŀģδowner ͬ -2026-09-11T00:00:09.877+08:00 INFO 32332 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T00:00:09.878+08:00 INFO 32332 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T00:00:10.214+08:00 WARN 32332 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: f095df80-2e23-4a7e-8e7f-f431b542b4ae - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T00:00:10.232+08:00 INFO 32332 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T00:00:11.372+08:00 INFO 32332 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T00:00:11.402+08:00 INFO 32332 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T00:00:11.429+08:00 INFO 32332 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 32.323 seconds (process running for 32.901) -2026-09-11T00:00:11.434+08:00 INFO 32332 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T00:00:11.601+08:00 INFO 32332 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T00:00:11.602+08:00 INFO 32332 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T00:00:11.604+08:00 INFO 32332 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms -2026-09-11T00:00:12.153+08:00 INFO 32332 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T00:00:12.154+08:00 INFO 32332 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T00:00:12.548+08:00 INFO 32332 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T00:00:12.548+08:00 INFO 32332 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T00:00:12.583+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T00:00:12.653+08:00 INFO 32332 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T00:00:12.653+08:00 INFO 32332 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T00:00:13.067+08:00 INFO 32332 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T00:00:13.067+08:00 INFO 32332 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T00:00:13.965+08:00 INFO 32332 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T00:00:13.966+08:00 INFO 32332 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T00:00:14.067+08:00 INFO 32332 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T00:00:14.067+08:00 INFO 32332 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T00:00:14.166+08:00 INFO 32332 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T00:00:14.166+08:00 INFO 32332 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T00:00:14.265+08:00 INFO 32332 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T00:00:14.265+08:00 INFO 32332 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T00:00:14.279+08:00 INFO 32332 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T00:00:14.295+08:00 INFO 32332 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T00:00:14.296+08:00 INFO 32332 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T00:00:14.398+08:00 INFO 32332 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T00:00:14.412+08:00 INFO 32332 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T00:00:14.425+08:00 INFO 32332 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T00:00:14.425+08:00 INFO 32332 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T00:00:14.523+08:00 INFO 32332 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T00:00:14.535+08:00 INFO 32332 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T00:00:14.535+08:00 INFO 32332 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T00:00:14.637+08:00 INFO 32332 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T00:00:14.637+08:00 INFO 32332 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T00:00:14.736+08:00 INFO 32332 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T00:00:14.749+08:00 INFO 32332 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T00:00:14.749+08:00 INFO 32332 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T00:00:14.849+08:00 INFO 32332 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T00:00:14.849+08:00 INFO 32332 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T00:00:14.947+08:00 INFO 32332 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T00:00:14.947+08:00 INFO 32332 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T00:00:15.045+08:00 INFO 32332 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T00:00:15.129+08:00 INFO 32332 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 3 -2026-09-11T00:00:15.147+08:00 INFO 32332 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T00:00:15.159+08:00 INFO 32332 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T00:00:15.354+08:00 INFO 32332 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T00:00:26.187+08:00 INFO 32332 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T00:00:41.804+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T00:00:41.858+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T00:00:50.033+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ -2026-09-11T00:00:50.454+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67005, msg=ȱֹ汾 -2026-09-11T00:00:51.155+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ -2026-09-11T00:00:51.333+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ϵ绰ΪֻŸʽ -2026-09-11T00:00:51.508+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻȨ -2026-09-11T00:00:54.218+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻѱɾ -2026-09-11T00:00:54.627+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=ʽݱ -2026-09-11T00:00:54.836+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=´θʱ䲻ڵǰʱ -2026-09-11T00:00:55.866+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=ظύͬĸ -2026-09-11T00:01:00.713+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=ԱΪ -2026-09-11T00:01:00.929+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=۸˲ͬʱΪЭͬˣ739564171091247104 -2026-09-11T00:01:01.521+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=ûЭͬˣ744842318024015872 -2026-09-11T00:01:03.511+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=ͻѱȡڹ -2026-09-11T00:01:03.686+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=ͻѱȡڹ -2026-09-11T00:01:03.900+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67012, msg=ܷǰ -2026-09-11T00:01:04.682+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67007, msg=ͻڽ̻빫 -2026-09-11T00:01:05.769+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67006, msg=ͻڽ̻ɹ鵵 -2026-09-11T00:01:05.978+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67006, msg=ͻڽ̻ɹ鵵 -2026-09-11T00:02:50.087+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T00:02:59.218+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T00:02:59.246+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T00:03:07.051+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ -2026-09-11T00:03:07.449+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67005, msg=ȱֹ汾 -2026-09-11T00:03:08.131+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ -2026-09-11T00:03:08.304+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ϵ绰ΪֻŸʽ -2026-09-11T00:03:08.458+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻȨ -2026-09-11T00:03:11.051+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻѱɾ -2026-09-11T00:03:11.409+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=ʽݱ -2026-09-11T00:03:11.613+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=´θʱ䲻ڵǰʱ -2026-09-11T00:03:12.619+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=ظύͬĸ -2026-09-11T00:03:17.416+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=ԱΪ -2026-09-11T00:03:17.606+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=۸˲ͬʱΪЭͬˣ739564171091247104 -2026-09-11T00:03:18.219+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=ûЭͬˣ744842318024015872 -2026-09-11T00:03:20.171+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=ͻѱȡڹ -2026-09-11T00:03:20.323+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=ͻѱȡڹ -2026-09-11T00:03:20.538+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67012, msg=ܷǰ -2026-09-11T00:03:21.355+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67007, msg=ͻڽ̻빫 -2026-09-11T00:03:22.404+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67006, msg=ͻڽ̻ɹ鵵 -2026-09-11T00:03:22.612+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67006, msg=ͻڽ̻ɹ鵵 -2026-09-11T00:08:31.084+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T00:08:31.129+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T00:08:33.130+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67011, msg=ԭ -2026-09-11T00:08:33.326+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67011, msg=ܼ಻ڿɽӷΧ -2026-09-11T00:08:34.280+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67010, msg=δɵĽӵظ -2026-09-11T00:08:36.546+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67012, msg=󲻴ڡͣûְ -2026-09-11T00:08:40.907+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=뷽ʽǷ//£ -2026-09-11T00:08:41.286+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=ģ汾ƥ䣬µģ壨 2 бͷ -2026-09-11T00:08:41.505+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=ļ -2026-09-11T00:08:42.001+08:00 ERROR 32332 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753406561438662656, thumbKey=thumbnails/753406561438662656.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:499) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T00:08:42.312+08:00 ERROR 32332 --- [crm-app] [task-2] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753406562957000704, thumbKey=thumbnails/753406562957000704.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:499) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T00:08:42.703+08:00 ERROR 32332 --- [crm-app] [task-3] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753406564605362176, thumbKey=thumbnails/753406564605362176.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:499) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T00:08:43.096+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67014, msg=ȷϣظύ -2026-09-11T00:08:43.413+08:00 INFO 32332 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753406561740652544, insert=2, update=0, unchanged=0, fail=7, suspect=1 -2026-09-11T00:08:44.911+08:00 INFO 32332 --- [crm-app] [task-5] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753406563141550080, insert=0, update=2, unchanged=1, fail=7, suspect=0 -2026-09-11T00:08:46.393+08:00 INFO 32332 --- [crm-app] [http-nio-8080-exec-1] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/1, secondInterval=1/1 -2026-09-11T00:08:46.600+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ -2026-09-11T00:08:46.761+08:00 WARN 32332 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ -2026-09-11T00:08:47.019+08:00 INFO 32332 --- [crm-app] [http-nio-8080-exec-5] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=0, firstTrigger=0/2, secondInterval=0/2 -2026-09-11T00:08:47.217+08:00 INFO 32332 --- [crm-app] [http-nio-8080-exec-6] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/1, secondInterval=1/1 -2026-09-11T00:08:50.114+08:00 INFO 19872 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 21.0.7 with PID 19872 (E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by Administrator in e:\code\crm-backend-matt) -2026-09-11T00:08:50.116+08:00 INFO 19872 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T00:08:51.687+08:00 INFO 19872 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:08:51.688+08:00 INFO 19872 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T00:08:51.717+08:00 INFO 19872 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 21 ms. Found 0 JPA repository interfaces. -2026-09-11T00:08:51.739+08:00 INFO 19872 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:08:51.740+08:00 INFO 19872 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T00:08:51.754+08:00 INFO 19872 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 4 ms. Found 0 Redis repository interfaces. -2026-09-11T00:08:51.980+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.981+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.982+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.983+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.984+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.985+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.986+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.987+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.988+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:08:51.995+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.995+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.995+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.996+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.997+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.998+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:51.999+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.000+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.001+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.002+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:08:52.002+08:00 WARN 19872 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:08:53.286+08:00 INFO 19872 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T00:08:53.309+08:00 INFO 19872 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T00:08:53.310+08:00 INFO 19872 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T00:08:53.367+08:00 INFO 19872 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T00:08:53.368+08:00 INFO 19872 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3189 ms -2026-09-11T00:08:54.029+08:00 INFO 19872 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : 数据权限受控表扫描完成:0 张 -2026-09-11T00:08:54.191+08:00 INFO 19872 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : 雪花ID生成器初始化完成,workerId=0, datacenterId=0 -2026-09-11T00:08:55.310+08:00 INFO 19872 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T00:08:55.380+08:00 INFO 19872 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T00:08:55.428+08:00 INFO 19872 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T00:08:55.818+08:00 INFO 19872 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T00:08:55.848+08:00 INFO 19872 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T00:08:56.335+08:00 INFO 19872 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@670199c5 -2026-09-11T00:08:56.337+08:00 INFO 19872 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T00:08:56.402+08:00 WARN 19872 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T00:08:57.980+08:00 INFO 19872 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T00:09:15.073+08:00 INFO 19872 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T00:09:15.677+08:00 WARN 19872 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:09:15.677+08:00 WARN 19872 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 调试 token 接口 /api/auth/debug/token 已启用(verify profile) -2026-09-11T00:09:15.677+08:00 WARN 19872 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 严禁用于生产环境!任何知道 userId 的人可冒充该用户。 -2026-09-11T00:09:15.677+08:00 WARN 19872 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 参见 docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T00:09:15.677+08:00 WARN 19872 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:09:18.785+08:00 INFO 19872 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort 一期实现就绪(预筛模式:FULLTEXT ngram) -2026-09-11T00:09:18.788+08:00 INFO 19872 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort 一期 stub 已装配(企查查未接入,工商候选返回空) -2026-09-11T00:09:19.304+08:00 INFO 19872 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort 桩已装配(A5 项目模块未接线,PROJECT 归属方案卡保存拒绝) -2026-09-11T00:09:19.930+08:00 INFO 19872 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op 默认实现已装配(A5 项目模块未建,owner 同步跳过) -2026-09-11T00:09:20.037+08:00 INFO 19872 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op 默认实现已装配(票 11 接商机真源后替换) -2026-09-11T00:09:20.038+08:00 INFO 19872 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector 桩已装配(冲突检测留桩恒无冲突,spec §8/grill#7 选甲) -2026-09-11T00:09:20.341+08:00 WARN 19872 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: 1dab9af5-03c0-4b98-9a0c-2efa968ce849 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T00:09:20.357+08:00 INFO 19872 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T00:09:21.671+08:00 INFO 19872 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : 数据权限模块校验通过:0 张受控表,4 个注册模块 -2026-09-11T00:09:21.707+08:00 INFO 19872 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T00:09:21.779+08:00 INFO 19872 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T00:09:21.779+08:00 INFO 19872 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T00:09:21.780+08:00 INFO 19872 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 32.09 seconds (process running for 33.032) -2026-09-11T00:09:21.780+08:00 INFO 19872 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2026-09-11T00:09:21.784+08:00 INFO 19872 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 执行权限数据初始化检查... -2026-09-11T00:09:22.498+08:00 INFO 19872 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 权限数据初始化检查完成 -2026-09-11T00:09:22.498+08:00 INFO 19872 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 执行数据字典权限种子化检查... -2026-09-11T00:09:22.867+08:00 INFO 19872 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 数据字典权限种子化检查完成:10 个权限点 -2026-09-11T00:09:22.868+08:00 INFO 19872 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 执行线索规则权限种子化检查(仅菜单)... -2026-09-11T00:09:22.957+08:00 INFO 19872 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 线索规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:22.958+08:00 INFO 19872 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 执行行政区划全量种子导入检查... -2026-09-11T00:09:23.798+08:00 INFO 19872 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 行政区划种子导入完成:对账 3432 行(省 34 / 市 342 / 区 3056),存量 3432 行,新增 0 行 -2026-09-11T00:09:23.799+08:00 INFO 19872 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 执行线索管理权限种子化检查(仅菜单)... -2026-09-11T00:09:24.147+08:00 INFO 19872 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 线索管理权限种子化检查完成:4 个菜单(0 个 button) -2026-09-11T00:09:24.147+08:00 INFO 19872 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 执行商机规则权限种子化检查(仅菜单)... -2026-09-11T00:09:24.234+08:00 INFO 19872 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 商机规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.234+08:00 INFO 19872 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 执行商机阶段模板权限种子化检查(仅菜单)... -2026-09-11T00:09:24.320+08:00 INFO 19872 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 商机阶段模板权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.320+08:00 INFO 19872 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 执行客户提醒规则权限种子化检查(仅菜单)... -2026-09-11T00:09:24.410+08:00 INFO 19872 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 客户提醒规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.410+08:00 INFO 19872 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 执行方案卡系统字段库种子化检查... -2026-09-11T00:09:24.423+08:00 INFO 19872 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡系统字段库种子化检查完成:现存 16 个,新增 0 个 -2026-09-11T00:09:24.437+08:00 INFO 19872 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡兜底模板已存在(code=OPP_SCHEME_TPL_01,含已停用),跳过种子化 -2026-09-11T00:09:24.437+08:00 INFO 19872 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 执行方案卡模板权限种子化检查(仅菜单)... -2026-09-11T00:09:24.520+08:00 INFO 19872 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 方案卡模板权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.533+08:00 INFO 19872 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : 默认阶段模板已存在(code=OPP_STAGE_TPL_01,含已停用),跳过种子化 -2026-09-11T00:09:24.545+08:00 INFO 19872 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : 客户提醒规则单例已存在(id=1),跳过种子化 -2026-09-11T00:09:24.545+08:00 INFO 19872 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : 执行客户查重设置权限种子化检查(仅菜单)... -2026-09-11T00:09:24.631+08:00 INFO 19872 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : 客户查重设置权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.643+08:00 INFO 19872 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : 客户查重设置单例已存在(id=1),跳过种子化 -2026-09-11T00:09:24.643+08:00 INFO 19872 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : 执行方案推送规则权限种子化检查(仅菜单)... -2026-09-11T00:09:24.727+08:00 INFO 19872 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : 方案推送规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.727+08:00 INFO 19872 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : 执行项目查重规则权限种子化检查(仅菜单)... -2026-09-11T00:09:24.811+08:00 INFO 19872 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : 项目查重规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.823+08:00 INFO 19872 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : 项目规则单例已存在(id=1),跳过种子化 -2026-09-11T00:09:24.823+08:00 INFO 19872 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : 执行项目规则权限种子化检查(仅菜单)... -2026-09-11T00:09:24.904+08:00 INFO 19872 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : 项目规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.904+08:00 INFO 19872 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : 执行同步任务权限种子化检查(仅菜单)... -2026-09-11T00:09:24.984+08:00 INFO 19872 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : 同步任务权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:24.985+08:00 INFO 19872 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : 执行日志管理权限种子化检查(仅菜单)... -2026-09-11T00:09:25.068+08:00 INFO 19872 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : 日志管理权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:09:25.146+08:00 INFO 19872 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] 存量方案卡回填商机归属 0 行 -2026-09-11T00:09:25.156+08:00 INFO 19872 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] 完成(ADR-0041) -2026-09-11T00:09:25.156+08:00 INFO 19872 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 执行内置字典幂等初始化检查... -2026-09-11T00:09:30.019+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-11T00:09:30.019211 -2026-09-11T00:09:31.058+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 34 条,旧锚点失效 0 条 -2026-09-11T00:09:33.995+08:00 INFO 19872 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 内置字典幂等初始化检查完成:27 个分组 -2026-09-11T00:09:34.191+08:00 INFO 19872 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT 索引 idx_name_fulltext 已存在,跳过 -2026-09-11T00:10:00.039+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-11T00:10:00.039339900 -2026-09-11T00:10:01.047+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 34 条,旧锚点失效 0 条 -2026-09-11T00:10:30.015+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-11T00:10:30.015431700 -2026-09-11T00:10:31.038+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 34 条,旧锚点失效 0 条 -2026-09-11T00:11:00.004+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-11T00:11:00.004643100 -2026-09-11T00:11:01.029+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 34 条,旧锚点失效 0 条 -2026-09-11T00:11:30.009+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-11T00:11:30.009619300 -2026-09-11T00:11:31.058+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 34 条,旧锚点失效 0 条 -2026-09-11T00:12:00.011+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-11T00:12:00.011232700 -2026-09-11T00:12:00.117+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 5 条 -2026-09-11T00:12:30.008+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-11T00:12:30.008160100 -2026-09-11T00:12:30.085+08:00 INFO 19872 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条 -2026-09-11T00:12:54.551+08:00 INFO 19872 --- [crm-app] [http-nio-8080-exec-5] .c.r.s.i.CustomerReminderRuleServiceImpl : [客户提醒规则] 全量覆盖保存:operator=739564171091247104, masterEnabled=1, firstTrigger=1/30天, secondInterval=1/7天 -2026-09-11T00:12:56.715+08:00 INFO 17316 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 21.0.7 with PID 17316 (E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by Administrator in e:\code\crm-backend-matt) -2026-09-11T00:12:56.718+08:00 INFO 17316 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T00:12:57.972+08:00 INFO 17316 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:12:57.974+08:00 INFO 17316 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T00:12:58.001+08:00 INFO 17316 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 21 ms. Found 0 JPA repository interfaces. -2026-09-11T00:12:58.022+08:00 INFO 17316 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:12:58.023+08:00 INFO 17316 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T00:12:58.036+08:00 INFO 17316 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 4 ms. Found 0 Redis repository interfaces. -2026-09-11T00:12:58.196+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.196+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.196+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.196+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.196+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.196+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.196+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.196+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.197+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.198+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.199+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.200+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:12:58.204+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.205+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.206+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.207+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:12:58.208+08:00 WARN 17316 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:12:59.041+08:00 INFO 17316 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T00:12:59.058+08:00 INFO 17316 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T00:12:59.058+08:00 INFO 17316 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T00:12:59.106+08:00 INFO 17316 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T00:12:59.107+08:00 INFO 17316 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2345 ms -2026-09-11T00:12:59.687+08:00 INFO 17316 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : 数据权限受控表扫描完成:0 张 -2026-09-11T00:12:59.848+08:00 INFO 17316 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : 雪花ID生成器初始化完成,workerId=0, datacenterId=0 -2026-09-11T00:13:00.804+08:00 INFO 17316 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T00:13:00.875+08:00 INFO 17316 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T00:13:00.930+08:00 INFO 17316 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T00:13:01.321+08:00 INFO 17316 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T00:13:01.356+08:00 INFO 17316 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T00:13:01.935+08:00 INFO 17316 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@29aa29f5 -2026-09-11T00:13:01.937+08:00 INFO 17316 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T00:13:02.013+08:00 WARN 17316 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T00:13:04.064+08:00 INFO 17316 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T00:13:24.718+08:00 INFO 17316 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T00:13:25.323+08:00 WARN 17316 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:13:25.324+08:00 WARN 17316 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 调试 token 接口 /api/auth/debug/token 已启用(verify profile) -2026-09-11T00:13:25.325+08:00 WARN 17316 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 严禁用于生产环境!任何知道 userId 的人可冒充该用户。 -2026-09-11T00:13:25.325+08:00 WARN 17316 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 参见 docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T00:13:25.325+08:00 WARN 17316 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:13:28.226+08:00 INFO 17316 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort 一期实现就绪(预筛模式:FULLTEXT ngram) -2026-09-11T00:13:28.229+08:00 INFO 17316 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort 一期 stub 已装配(企查查未接入,工商候选返回空) -2026-09-11T00:13:28.557+08:00 INFO 17316 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort 桩已装配(A5 项目模块未接线,PROJECT 归属方案卡保存拒绝) -2026-09-11T00:13:29.012+08:00 INFO 17316 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op 默认实现已装配(A5 项目模块未建,owner 同步跳过) -2026-09-11T00:13:29.097+08:00 INFO 17316 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op 默认实现已装配(票 11 接商机真源后替换) -2026-09-11T00:13:29.098+08:00 INFO 17316 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector 桩已装配(冲突检测留桩恒无冲突,spec §8/grill#7 选甲) -2026-09-11T00:13:29.366+08:00 WARN 17316 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: c0807f54-75ee-4743-ab25-4647330bbc07 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T00:13:29.381+08:00 INFO 17316 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T00:13:30.275+08:00 INFO 17316 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : 数据权限模块校验通过:0 张受控表,4 个注册模块 -2026-09-11T00:13:30.292+08:00 INFO 17316 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T00:13:30.309+08:00 INFO 17316 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 33.989 seconds (process running for 34.453) -2026-09-11T00:13:30.312+08:00 INFO 17316 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 执行权限数据初始化检查... -2026-09-11T00:13:30.606+08:00 INFO 17316 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T00:13:30.606+08:00 INFO 17316 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T00:13:30.607+08:00 INFO 17316 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2026-09-11T00:13:31.015+08:00 INFO 17316 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 权限数据初始化检查完成 -2026-09-11T00:13:31.016+08:00 INFO 17316 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 执行数据字典权限种子化检查... -2026-09-11T00:13:31.437+08:00 INFO 17316 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 数据字典权限种子化检查完成:10 个权限点 -2026-09-11T00:13:31.437+08:00 INFO 17316 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 执行线索规则权限种子化检查(仅菜单)... -2026-09-11T00:13:31.553+08:00 INFO 17316 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 线索规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:31.553+08:00 INFO 17316 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 执行线索管理权限种子化检查(仅菜单)... -2026-09-11T00:13:31.970+08:00 INFO 17316 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 线索管理权限种子化检查完成:4 个菜单(0 个 button) -2026-09-11T00:13:31.971+08:00 INFO 17316 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 执行行政区划全量种子导入检查... -2026-09-11T00:13:32.477+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67003, msg=统一社会信用代码已被占用:系统已存在该企业 -2026-09-11T00:13:32.771+08:00 INFO 17316 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 行政区划种子导入完成:对账 3432 行(省 34 / 市 342 / 区 3056),存量 3432 行,新增 0 行 -2026-09-11T00:13:32.771+08:00 INFO 17316 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 执行商机规则权限种子化检查(仅菜单)... -2026-09-11T00:13:32.875+08:00 INFO 17316 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 商机规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:32.875+08:00 INFO 17316 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 执行商机阶段模板权限种子化检查(仅菜单)... -2026-09-11T00:13:32.976+08:00 INFO 17316 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 商机阶段模板权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:32.976+08:00 INFO 17316 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 执行客户提醒规则权限种子化检查(仅菜单)... -2026-09-11T00:13:33.079+08:00 INFO 17316 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 客户提醒规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:33.079+08:00 INFO 17316 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 执行方案卡系统字段库种子化检查... -2026-09-11T00:13:33.093+08:00 INFO 17316 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡系统字段库种子化检查完成:现存 16 个,新增 0 个 -2026-09-11T00:13:33.108+08:00 INFO 17316 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡兜底模板已存在(code=OPP_SCHEME_TPL_01,含已停用),跳过种子化 -2026-09-11T00:13:33.108+08:00 INFO 17316 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 执行方案卡模板权限种子化检查(仅菜单)... -2026-09-11T00:13:33.211+08:00 INFO 17316 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 方案卡模板权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:33.226+08:00 INFO 17316 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : 默认阶段模板已存在(code=OPP_STAGE_TPL_01,含已停用),跳过种子化 -2026-09-11T00:13:33.239+08:00 INFO 17316 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : 客户提醒规则单例已存在(id=1),跳过种子化 -2026-09-11T00:13:33.239+08:00 INFO 17316 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : 执行客户查重设置权限种子化检查(仅菜单)... -2026-09-11T00:13:33.341+08:00 INFO 17316 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : 客户查重设置权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:33.355+08:00 INFO 17316 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : 客户查重设置单例已存在(id=1),跳过种子化 -2026-09-11T00:13:33.355+08:00 INFO 17316 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : 执行方案推送规则权限种子化检查(仅菜单)... -2026-09-11T00:13:33.460+08:00 INFO 17316 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : 方案推送规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:33.460+08:00 INFO 17316 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : 执行项目查重规则权限种子化检查(仅菜单)... -2026-09-11T00:13:33.562+08:00 INFO 17316 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : 项目查重规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:33.575+08:00 INFO 17316 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : 项目规则单例已存在(id=1),跳过种子化 -2026-09-11T00:13:33.575+08:00 INFO 17316 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : 执行项目规则权限种子化检查(仅菜单)... -2026-09-11T00:13:33.680+08:00 INFO 17316 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : 项目规则权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:33.680+08:00 INFO 17316 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : 执行同步任务权限种子化检查(仅菜单)... -2026-09-11T00:13:33.784+08:00 INFO 17316 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : 同步任务权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:33.784+08:00 INFO 17316 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : 执行日志管理权限种子化检查(仅菜单)... -2026-09-11T00:13:33.887+08:00 INFO 17316 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : 日志管理权限种子化检查完成:仅菜单(0 个 button) -2026-09-11T00:13:33.965+08:00 INFO 17316 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] 存量方案卡回填商机归属 0 行 -2026-09-11T00:13:33.978+08:00 INFO 17316 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] 完成(ADR-0041) -2026-09-11T00:13:34.169+08:00 INFO 17316 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT 索引 idx_name_fulltext 已存在,跳过 -2026-09-11T00:13:34.169+08:00 INFO 17316 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 执行内置字典幂等初始化检查... -2026-09-11T00:13:45.652+08:00 INFO 17316 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 内置字典幂等初始化检查完成:27 个分组 -2026-09-11T00:15:15.437+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:15:25.510+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:15:25.536+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] 为 userId=744842318024015872 签发调试 token -2026-09-11T00:15:27.384+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67001, msg=所属客户必填 -2026-09-11T00:15:27.543+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67002, msg=客户不存在或无权访问 -2026-09-11T00:15:27.687+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67017, msg=战略协议等级必填且为 1~3 -2026-09-11T00:15:27.832+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67017, msg=战略协议等级必填且为 1~3 -2026-09-11T00:15:29.818+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67017, msg=签订金额超长 -2026-09-11T00:15:29.925+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67017, msg=协议不存在或无权访问 -2026-09-11T00:15:30.066+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67017, msg=协议不存在或无权访问 -2026-09-11T00:15:30.213+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67017, msg=协议不存在或无权访问 -2026-09-11T00:15:32.340+08:00 INFO 17316 --- [crm-app] [http-nio-8080-exec-3] c.c.r.s.i.CustomerDedupRuleServiceImpl : [客户查重设置] 全量覆盖保存:operator=739564171091247104, master=1, name=1/1模式阈值60%, phone=1 -2026-09-11T00:15:32.617+08:00 INFO 17316 --- [crm-app] [http-nio-8080-exec-5] c.c.r.s.i.CustomerDedupRuleServiceImpl : [客户查重设置] 全量覆盖保存:operator=739564171091247104, master=0, name=0/2模式阈值90%, phone=0 -2026-09-11T00:15:32.778+08:00 INFO 17316 --- [crm-app] [http-nio-8080-exec-6] c.c.r.s.i.CustomerDedupRuleServiceImpl : [客户查重设置] 全量覆盖保存:operator=739564171091247104, master=0, name=0/1模式阈值80%, phone=0 -2026-09-11T00:15:32.954+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=64023, msg=名称匹配方式必须为 1(精确)/2(模糊),相似度阈值必须为 0~100 的整数 -2026-09-11T00:15:33.133+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=64023, msg=名称匹配方式必须为 1(精确)/2(模糊),相似度阈值必须为 0~100 的整数 -2026-09-11T00:15:33.302+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=64023, msg=名称匹配方式必须为 1(精确)/2(模糊),相似度阈值必须为 0~100 的整数 -2026-09-11T00:15:33.539+08:00 INFO 17316 --- [crm-app] [http-nio-8080-exec-1] c.c.r.s.i.CustomerDedupRuleServiceImpl : [客户查重设置] 全量覆盖保存:operator=739564171091247104, master=1, name=1/2模式阈值80%, phone=1 -2026-09-11T00:15:34.487+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : 缺少请求参数:ids -2026-09-11T00:15:34.641+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67001, msg=单次最多批量更新 100 个客户 -2026-09-11T00:15:37.945+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=68001, msg=视图形态非法,仅支持 list/split/board -2026-09-11T00:15:39.717+08:00 ERROR 17316 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=753408313512689664, thumbKey=thumbnails/753408313512689664.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:506) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ~[na:na] - ... 17 common frames omitted - -2026-09-11T00:15:39.942+08:00 ERROR 17316 --- [crm-app] [task-2] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=753408314653540352, thumbKey=thumbnails/753408314653540352.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:506) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ~[na:na] - ... 17 common frames omitted - -2026-09-11T00:15:40.090+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67013, msg=重复策略非法(数据重复时覆盖导入/不导入) -2026-09-11T00:15:40.425+08:00 INFO 17316 --- [crm-app] [task-3] c.c.c.task.CustomerImportExecutor : 客户导入任务完成:taskId=753408313772736512, insert=0, update=0, unchanged=0, fail=2, suspect=0 -2026-09-11T00:15:41.914+08:00 INFO 17316 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : 客户导入任务完成:taskId=753408314808729600, insert=0, update=1, unchanged=0, fail=1, suspect=0 -2026-09-11T00:18:57.446+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:18:57.494+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] 为 userId=744842318024015872 签发调试 token -2026-09-11T00:19:01.178+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67019, msg=边不允许自连:753409150666407936 -2026-09-11T00:19:01.701+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67019, msg=快照内边重复:753409150540578816 → 753409150666407936 -2026-09-11T00:19:02.167+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67019, msg=等级倒挂:上级等级须严格高于下级(3 ≤ 10) -2026-09-11T00:19:02.589+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67019, msg=未定级节点不得作为边端点(先拖格子定级):753409150540578816/753409150918066176 -2026-09-11T00:19:03.074+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67019, msg=边端点不在快照节点集内 -2026-09-11T00:19:03.577+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67020, msg=单父违反:下级 753409150792237056 出现多条上级边 -2026-09-11T00:19:04.388+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67018, msg=图谱已被他人修改(版本冲突),请刷新后重试 -2026-09-11T00:19:06.989+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67021, msg=快速添加行集为空 -2026-09-11T00:19:09.966+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67022, msg=批量编辑行集为空 -2026-09-11T00:19:11.778+08:00 ERROR 17316 --- [crm-app] [task-5] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=753409203044876288, thumbKey=thumbnails/753409203044876288.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:506) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ~[na:na] - ... 17 common frames omitted - -2026-09-11T00:19:13.081+08:00 ERROR 17316 --- [crm-app] [task-6] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=753409208564580352, thumbKey=thumbnails/753409208564580352.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:506) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ~[na:na] - ... 17 common frames omitted - -2026-09-11T00:19:13.258+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67023, msg=模板版本不匹配,请下载最新导入模板(第 1 列表头不符) -2026-09-11T00:19:13.727+08:00 INFO 17316 --- [crm-app] [task-7] c.c.customer.task.ContactImportExecutor : 联系人导入任务完成:taskId=753409208732352512, insert=3, update=0, unchanged=0, fail=2, suspect=0 -2026-09-11T00:19:15.104+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67024, msg=任务已确认,请勿重复提交 -2026-09-11T00:19:15.127+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:19:16.196+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67018, msg=图谱已被他人修改(版本冲突),请刷新后重试 -2026-09-11T00:19:52.593+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:24:04.430+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:26:46.506+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:31:16.113+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:31:45.740+08:00 ERROR 17316 --- [crm-app] [task-8] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=753412365411680256, thumbKey=thumbnails/753412365411680256.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:506) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ~[na:na] - ... 17 common frames omitted - -2026-09-11T00:31:47.608+08:00 INFO 17316 --- [crm-app] [task-9] c.c.customer.task.ContactImportExecutor : 联系人导入任务完成:taskId=753412365617201152, insert=1, update=0, unchanged=0, fail=1, suspect=0 -2026-09-11T00:31:49.196+08:00 ERROR 17316 --- [crm-app] [task-10] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=753412379957526528, thumbKey=thumbnails/753412379957526528.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:506) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ~[na:na] - ... 17 common frames omitted - -2026-09-11T00:31:49.209+08:00 WARN 17316 --- [crm-app] [task-10] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@25a2ba22 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T00:34:22.954+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token -2026-09-11T00:34:49.386+08:00 ERROR 17316 --- [crm-app] [task-11] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=753413135695609856, thumbKey=thumbnails/753413135695609856.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:506) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ~[na:na] - ... 17 common frames omitted - -2026-09-11T00:34:51.282+08:00 INFO 17316 --- [crm-app] [task-12] c.c.customer.task.ContactImportExecutor : 联系人导入任务完成:taskId=753413135917907968, insert=1, update=0, unchanged=0, fail=1, suspect=0 -2026-09-11T00:34:53.615+08:00 ERROR 17316 --- [crm-app] [task-13] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=753413153462681600, thumbKey=thumbnails/753413153462681600.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。 - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:506) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126) ~[na:na] - ... 17 common frames omitted - -2026-09-11T00:34:53.629+08:00 WARN 17316 --- [crm-app] [http-nio-8080-exec-8] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1ff5c9f5 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T00:35:54.710+08:00 INFO 13908 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.13 with PID 13908 (E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by Administrator in E:\code\crm-backend-matt) -2026-09-11T00:35:54.713+08:00 INFO 13908 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T00:35:56.299+08:00 INFO 13908 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:35:56.301+08:00 INFO 13908 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T00:35:56.332+08:00 INFO 13908 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 21 ms. Found 0 JPA repository interfaces. -2026-09-11T00:35:56.358+08:00 INFO 13908 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:35:56.360+08:00 INFO 13908 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T00:35:56.373+08:00 INFO 13908 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 2 ms. Found 0 Redis repository interfaces. -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.535+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.536+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.537+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.538+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.539+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.540+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.540+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.540+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.540+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.540+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.540+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:35:56.544+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.544+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.544+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.544+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.544+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.544+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.545+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.546+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.547+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.548+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.549+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.549+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.549+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.549+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.549+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.549+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:35:56.549+08:00 WARN 13908 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:35:57.594+08:00 INFO 13908 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T00:35:57.615+08:00 INFO 13908 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T00:35:57.615+08:00 INFO 13908 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T00:35:57.663+08:00 INFO 13908 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T00:35:57.664+08:00 INFO 13908 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2896 ms -2026-09-11T00:35:58.223+08:00 INFO 13908 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T00:35:58.365+08:00 INFO 13908 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T00:35:59.182+08:00 INFO 13908 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T00:35:59.258+08:00 INFO 13908 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T00:35:59.301+08:00 INFO 13908 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T00:35:59.645+08:00 INFO 13908 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T00:35:59.681+08:00 INFO 13908 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T00:36:00.292+08:00 INFO 13908 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@213a2fe3 -2026-09-11T00:36:00.294+08:00 INFO 13908 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T00:36:00.375+08:00 WARN 13908 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T00:36:02.150+08:00 INFO 13908 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T00:36:22.961+08:00 INFO 13908 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T00:36:23.520+08:00 WARN 13908 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:36:23.521+08:00 WARN 13908 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T00:36:23.521+08:00 WARN 13908 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T00:36:23.521+08:00 WARN 13908 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T00:36:23.522+08:00 WARN 13908 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:36:26.354+08:00 INFO 13908 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T00:36:26.356+08:00 INFO 13908 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T00:36:26.739+08:00 INFO 13908 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T00:36:27.301+08:00 INFO 13908 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op Ĭʵװ䣨A5 Ŀģδowner ͬ -2026-09-11T00:36:27.414+08:00 INFO 13908 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T00:36:27.415+08:00 INFO 13908 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T00:36:27.706+08:00 WARN 13908 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: c6635880-6c8e-4317-8ae1-f7fac5075c7b - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T00:36:27.727+08:00 INFO 13908 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T00:36:29.044+08:00 INFO 13908 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T00:36:29.078+08:00 INFO 13908 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T00:36:29.117+08:00 INFO 13908 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 34.909 seconds (process running for 35.487) -2026-09-11T00:36:29.121+08:00 INFO 13908 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T00:36:29.900+08:00 INFO 13908 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T00:36:29.901+08:00 INFO 13908 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T00:36:30.320+08:00 INFO 13908 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T00:36:30.320+08:00 INFO 13908 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T00:36:30.429+08:00 INFO 13908 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T00:36:30.429+08:00 INFO 13908 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T00:36:31.314+08:00 INFO 13908 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T00:36:31.314+08:00 INFO 13908 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T00:36:31.741+08:00 INFO 13908 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T00:36:31.741+08:00 INFO 13908 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T00:36:31.850+08:00 INFO 13908 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T00:36:31.850+08:00 INFO 13908 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T00:36:31.954+08:00 INFO 13908 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T00:36:31.955+08:00 INFO 13908 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T00:36:32.058+08:00 INFO 13908 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T00:36:32.059+08:00 INFO 13908 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T00:36:32.074+08:00 INFO 13908 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T00:36:32.089+08:00 INFO 13908 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T00:36:32.089+08:00 INFO 13908 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T00:36:32.196+08:00 INFO 13908 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T00:36:32.211+08:00 INFO 13908 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T00:36:32.225+08:00 INFO 13908 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T00:36:32.225+08:00 INFO 13908 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T00:36:32.332+08:00 INFO 13908 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T00:36:32.347+08:00 INFO 13908 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T00:36:32.347+08:00 INFO 13908 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T00:36:32.455+08:00 INFO 13908 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T00:36:32.455+08:00 INFO 13908 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T00:36:32.561+08:00 INFO 13908 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T00:36:32.574+08:00 INFO 13908 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T00:36:32.574+08:00 INFO 13908 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T00:36:32.678+08:00 INFO 13908 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T00:36:32.679+08:00 INFO 13908 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T00:36:32.784+08:00 INFO 13908 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T00:36:32.784+08:00 INFO 13908 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T00:36:32.892+08:00 INFO 13908 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T00:36:32.979+08:00 INFO 13908 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T00:36:32.992+08:00 INFO 13908 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T00:36:32.992+08:00 INFO 13908 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T00:36:44.680+08:00 INFO 13908 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T00:36:44.693+08:00 INFO 13908 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T00:37:18.361+08:00 INFO 13908 --- [crm-app] [http-nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T00:37:18.362+08:00 INFO 13908 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T00:37:18.363+08:00 INFO 13908 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2026-09-11T00:37:18.459+08:00 WARN 13908 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : Դڣcode=40401, msg=Դ[99021002]ڻѱɾ -2026-09-11T00:42:22.478+08:00 INFO 7348 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.13 with PID 7348 (E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by Administrator in E:\code\crm-backend-matt) -2026-09-11T00:42:22.480+08:00 INFO 7348 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T00:42:23.864+08:00 INFO 7348 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:42:23.866+08:00 INFO 7348 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T00:42:23.904+08:00 INFO 7348 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 30 ms. Found 0 JPA repository interfaces. -2026-09-11T00:42:23.921+08:00 INFO 7348 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:42:23.923+08:00 INFO 7348 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T00:42:23.934+08:00 INFO 7348 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 2 ms. Found 0 Redis repository interfaces. -2026-09-11T00:42:24.077+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.078+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.079+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.080+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.081+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.082+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.083+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.084+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.085+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:42:24.089+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.089+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.090+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.091+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.092+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.093+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.094+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.095+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.096+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.096+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:42:24.096+08:00 WARN 7348 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:42:25.024+08:00 INFO 7348 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T00:42:25.041+08:00 INFO 7348 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T00:42:25.042+08:00 INFO 7348 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T00:42:25.090+08:00 INFO 7348 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T00:42:25.091+08:00 INFO 7348 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2560 ms -2026-09-11T00:42:25.598+08:00 INFO 7348 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T00:42:25.734+08:00 INFO 7348 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T00:42:26.409+08:00 INFO 7348 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T00:42:26.466+08:00 INFO 7348 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T00:42:26.505+08:00 INFO 7348 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T00:42:26.784+08:00 INFO 7348 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T00:42:26.814+08:00 INFO 7348 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T00:42:27.252+08:00 INFO 7348 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@7b57587e -2026-09-11T00:42:27.253+08:00 INFO 7348 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T00:42:27.330+08:00 WARN 7348 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T00:42:28.995+08:00 INFO 7348 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T00:42:49.321+08:00 INFO 7348 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T00:42:49.712+08:00 WARN 7348 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:42:49.712+08:00 WARN 7348 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T00:42:49.712+08:00 WARN 7348 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T00:42:49.712+08:00 WARN 7348 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T00:42:49.712+08:00 WARN 7348 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:42:52.212+08:00 INFO 7348 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T00:42:52.214+08:00 INFO 7348 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T00:42:52.537+08:00 INFO 7348 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T00:42:53.036+08:00 INFO 7348 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op Ĭʵװ䣨A5 Ŀģδowner ͬ -2026-09-11T00:42:53.139+08:00 INFO 7348 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T00:42:53.141+08:00 INFO 7348 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T00:42:53.422+08:00 WARN 7348 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: 9c6d8d1a-865e-4c85-a36e-c3b07a9dda34 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T00:42:53.439+08:00 INFO 7348 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T00:42:54.526+08:00 INFO 7348 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T00:42:54.550+08:00 INFO 7348 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T00:42:54.575+08:00 INFO 7348 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 32.584 seconds (process running for 33.131) -2026-09-11T00:42:54.580+08:00 INFO 7348 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T00:42:55.314+08:00 INFO 7348 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T00:42:55.314+08:00 INFO 7348 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T00:42:55.707+08:00 INFO 7348 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T00:42:55.707+08:00 INFO 7348 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T00:42:55.809+08:00 INFO 7348 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T00:42:55.809+08:00 INFO 7348 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T00:42:56.219+08:00 INFO 7348 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T00:42:56.219+08:00 INFO 7348 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T00:42:57.215+08:00 INFO 7348 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T00:42:57.215+08:00 INFO 7348 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T00:42:57.321+08:00 INFO 7348 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T00:42:57.321+08:00 INFO 7348 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T00:42:57.422+08:00 INFO 7348 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T00:42:57.422+08:00 INFO 7348 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T00:42:57.522+08:00 INFO 7348 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T00:42:57.522+08:00 INFO 7348 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T00:42:57.537+08:00 INFO 7348 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T00:42:57.551+08:00 INFO 7348 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T00:42:57.552+08:00 INFO 7348 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T00:42:57.652+08:00 INFO 7348 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T00:42:57.667+08:00 INFO 7348 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T00:42:57.681+08:00 INFO 7348 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T00:42:57.681+08:00 INFO 7348 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T00:42:57.782+08:00 INFO 7348 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T00:42:57.795+08:00 INFO 7348 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T00:42:57.795+08:00 INFO 7348 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T00:42:57.898+08:00 INFO 7348 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T00:42:57.898+08:00 INFO 7348 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T00:42:57.999+08:00 INFO 7348 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T00:42:58.013+08:00 INFO 7348 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T00:42:58.013+08:00 INFO 7348 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T00:42:58.113+08:00 INFO 7348 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T00:42:58.113+08:00 INFO 7348 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T00:42:58.212+08:00 INFO 7348 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T00:42:58.212+08:00 INFO 7348 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T00:42:58.310+08:00 INFO 7348 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T00:42:58.388+08:00 INFO 7348 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T00:42:58.401+08:00 INFO 7348 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T00:42:58.414+08:00 INFO 7348 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T00:42:58.584+08:00 INFO 7348 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T00:43:09.653+08:00 INFO 7348 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T00:43:40.778+08:00 INFO 7348 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T00:43:40.779+08:00 INFO 7348 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T00:43:40.780+08:00 INFO 7348 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2026-09-11T00:43:41.653+08:00 WARN 7348 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T00:48:09.494+08:00 WARN 7348 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T00:48:26.086+08:00 WARN 7348 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T00:48:31.145+08:00 WARN 7348 --- [crm-app] [http-nio-8080-exec-5] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@76e4201d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T00:48:31.158+08:00 WARN 7348 --- [crm-app] [http-nio-8080-exec-5] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5a07e195 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T00:49:03.529+08:00 WARN 7348 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T00:49:16.235+08:00 WARN 7348 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T00:51:18.620+08:00 WARN 7348 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T00:58:33.678+08:00 INFO 22464 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.13 with PID 22464 (E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by Administrator in E:\code\crm-backend-matt) -2026-09-11T00:58:33.680+08:00 INFO 22464 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T00:58:35.117+08:00 INFO 22464 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:58:35.119+08:00 INFO 22464 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T00:58:35.154+08:00 INFO 22464 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 28 ms. Found 0 JPA repository interfaces. -2026-09-11T00:58:35.173+08:00 INFO 22464 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T00:58:35.175+08:00 INFO 22464 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T00:58:35.187+08:00 INFO 22464 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3 ms. Found 0 Redis repository interfaces. -2026-09-11T00:58:35.353+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.354+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.354+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.354+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.354+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.354+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.354+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.354+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.355+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.355+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.355+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.355+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.355+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.355+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.355+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.356+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.357+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.358+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.359+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.360+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.361+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.362+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:58:35.366+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.366+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.366+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.366+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.366+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.366+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.366+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.366+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.367+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.368+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.369+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.370+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.371+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T00:58:35.372+08:00 WARN 22464 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T00:58:36.376+08:00 INFO 22464 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T00:58:36.396+08:00 INFO 22464 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T00:58:36.397+08:00 INFO 22464 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T00:58:36.444+08:00 INFO 22464 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T00:58:36.444+08:00 INFO 22464 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2710 ms -2026-09-11T00:58:36.965+08:00 INFO 22464 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T00:58:37.117+08:00 INFO 22464 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T00:58:37.874+08:00 INFO 22464 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T00:58:37.933+08:00 INFO 22464 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T00:58:37.966+08:00 INFO 22464 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T00:58:38.272+08:00 INFO 22464 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T00:58:38.304+08:00 INFO 22464 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T00:58:38.899+08:00 INFO 22464 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2c78771b -2026-09-11T00:58:38.901+08:00 INFO 22464 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T00:58:38.977+08:00 WARN 22464 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T00:58:40.661+08:00 INFO 22464 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T00:59:01.831+08:00 INFO 22464 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T00:59:02.302+08:00 WARN 22464 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:59:02.303+08:00 WARN 22464 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T00:59:02.303+08:00 WARN 22464 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T00:59:02.303+08:00 WARN 22464 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T00:59:02.303+08:00 WARN 22464 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T00:59:04.850+08:00 INFO 22464 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T00:59:04.852+08:00 INFO 22464 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T00:59:05.188+08:00 INFO 22464 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T00:59:05.823+08:00 INFO 22464 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T00:59:05.825+08:00 INFO 22464 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T00:59:06.209+08:00 WARN 22464 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: f20daa28-7b7a-445e-904f-ba5d33bc8410 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T00:59:06.228+08:00 INFO 22464 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T00:59:07.385+08:00 INFO 22464 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T00:59:07.421+08:00 INFO 22464 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T00:59:07.447+08:00 INFO 22464 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 34.231 seconds (process running for 34.848) -2026-09-11T00:59:07.452+08:00 INFO 22464 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T00:59:08.195+08:00 INFO 22464 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T00:59:08.195+08:00 INFO 22464 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T00:59:08.606+08:00 INFO 22464 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T00:59:08.606+08:00 INFO 22464 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T00:59:08.712+08:00 INFO 22464 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T00:59:08.713+08:00 INFO 22464 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T00:59:09.150+08:00 INFO 22464 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T00:59:09.151+08:00 INFO 22464 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T00:59:10.004+08:00 INFO 22464 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T00:59:10.004+08:00 INFO 22464 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T00:59:10.112+08:00 INFO 22464 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T00:59:10.112+08:00 INFO 22464 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T00:59:10.221+08:00 INFO 22464 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T00:59:10.221+08:00 INFO 22464 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T00:59:10.328+08:00 INFO 22464 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T00:59:10.328+08:00 INFO 22464 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T00:59:10.343+08:00 INFO 22464 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T00:59:10.358+08:00 INFO 22464 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T00:59:10.358+08:00 INFO 22464 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T00:59:10.465+08:00 INFO 22464 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T00:59:10.480+08:00 INFO 22464 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T00:59:10.495+08:00 INFO 22464 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T00:59:10.495+08:00 INFO 22464 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T00:59:10.600+08:00 INFO 22464 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T00:59:10.615+08:00 INFO 22464 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T00:59:10.615+08:00 INFO 22464 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T00:59:10.720+08:00 INFO 22464 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T00:59:10.721+08:00 INFO 22464 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T00:59:10.828+08:00 INFO 22464 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T00:59:10.842+08:00 INFO 22464 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T00:59:10.843+08:00 INFO 22464 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T00:59:10.950+08:00 INFO 22464 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T00:59:10.950+08:00 INFO 22464 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T00:59:11.057+08:00 INFO 22464 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T00:59:11.057+08:00 INFO 22464 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T00:59:11.163+08:00 INFO 22464 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T00:59:11.249+08:00 INFO 22464 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T00:59:11.263+08:00 INFO 22464 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T00:59:11.446+08:00 INFO 22464 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T00:59:11.446+08:00 INFO 22464 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T00:59:23.210+08:00 INFO 22464 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T00:59:48.061+08:00 INFO 22464 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T00:59:48.061+08:00 INFO 22464 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T00:59:48.062+08:00 INFO 22464 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2026-09-11T00:59:48.852+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:00:00.971+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:00:14.392+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T01:00:39.669+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:00:40.508+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T01:09:05.489+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2fdcc34 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:09:05.525+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:09:05.604+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:09:05.687+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3c37f65d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:11:03.269+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:11:03.321+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:11:03.741+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ĿƱ -2026-09-11T01:11:03.912+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ͻӿͻĿ¼ѡ񣬲ֳ֧½ -2026-09-11T01:11:04.084+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ѡÿͻķ -2026-09-11T01:11:04.268+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ͻãͻ: 99999001 -2026-09-11T01:11:04.459+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ͻãͻ: 88888888 -2026-09-11T01:11:04.654+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68007, msg=ڻѱɾ -2026-09-11T01:11:05.574+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ʽRequest method 'PUT' is not supported -2026-09-11T01:11:05.648+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ʽRequest method 'DELETE' is not supported -2026-09-11T01:11:06.586+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=Ŀ׶ɸѡǷ 7 ֵ 0~6״̬öɸѡ filingStatus -2026-09-11T01:11:07.800+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68002, msg=Ŀڻѱɾ -2026-09-11T01:11:10.092+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68006, msg=ĿΪǰѾĽڵҲڷƣstage1ɻ˵ǰδڵ -2026-09-11T01:11:10.290+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T01:11:10.464+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68009, msg=bidResult Ϊ 1Ӯ 2䵥 -2026-09-11T01:11:11.021+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T01:11:11.200+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68009, msg=ĿѱӮ/䵥ظ -2026-09-11T01:11:13.212+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɻ -2026-09-11T01:11:13.400+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѽ̬ɹر -2026-09-11T01:11:13.927+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=Ŀ idݡʱ -2026-09-11T01:13:42.850+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:13:42.878+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:13:43.629+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68008, msg=ͻ׶Σstage0ɽͻ/˽ -2026-09-11T01:13:46.930+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68004, msg=Ӯ/䵥׶ʹáӮ/䵥ֱƽ -2026-09-11T01:13:47.617+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T01:13:48.371+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=رͷǷMANUAL/CUSTOMER_CANCEL/LOST_CONTACT/OTHER -2026-09-11T01:13:48.826+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹرգظر -2026-09-11T01:13:48.988+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ƽ -2026-09-11T01:13:49.163+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɱӮ/䵥 -2026-09-11T01:13:49.229+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ȱscope -2026-09-11T01:13:49.312+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=scope Ϊ manage mine -2026-09-11T01:13:49.390+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T01:13:49.486+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68002, msg=Ŀڻѱɾ -2026-09-11T01:14:07.635+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:14:07.674+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:14:08.434+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68008, msg=ͻ׶Σstage0ɽͻ/˽ -2026-09-11T01:14:11.853+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68004, msg=Ӯ/䵥׶ʹáӮ/䵥ֱƽ -2026-09-11T01:14:12.536+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T01:14:13.287+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=رͷǷMANUAL/CUSTOMER_CANCEL/LOST_CONTACT/OTHER -2026-09-11T01:14:13.729+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹرգظر -2026-09-11T01:14:13.909+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ƽ -2026-09-11T01:14:14.095+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɱӮ/䵥 -2026-09-11T01:14:14.183+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ȱscope -2026-09-11T01:14:14.260+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=scope Ϊ manage mine -2026-09-11T01:14:14.336+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T01:14:14.429+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68002, msg=Ŀڻѱɾ -2026-09-11T01:14:28.318+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:14:28.345+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:14:29.108+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68008, msg=ͻ׶Σstage0ɽͻ/˽ -2026-09-11T01:14:32.712+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68004, msg=Ӯ/䵥׶ʹáӮ/䵥ֱƽ -2026-09-11T01:14:33.353+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T01:14:34.046+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=رͷǷMANUAL/CUSTOMER_CANCEL/LOST_CONTACT/OTHER -2026-09-11T01:14:34.490+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹرգظر -2026-09-11T01:14:34.679+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ƽ -2026-09-11T01:14:34.864+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɱӮ/䵥 -2026-09-11T01:14:34.937+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ȱscope -2026-09-11T01:14:35.014+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=scope Ϊ manage mine -2026-09-11T01:14:35.091+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T01:14:35.182+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68002, msg=Ŀڻѱɾ -2026-09-11T01:14:42.619+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:14:42.668+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:14:43.413+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68008, msg=ͻ׶Σstage0ɽͻ/˽ -2026-09-11T01:14:47.217+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68004, msg=Ӯ/䵥׶ʹáӮ/䵥ֱƽ -2026-09-11T01:14:47.876+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T01:14:48.600+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=رͷǷMANUAL/CUSTOMER_CANCEL/LOST_CONTACT/OTHER -2026-09-11T01:14:49.052+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹرգظر -2026-09-11T01:14:49.216+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ƽ -2026-09-11T01:14:49.395+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɱӮ/䵥 -2026-09-11T01:14:49.483+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ȱscope -2026-09-11T01:14:49.546+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=scope Ϊ manage mine -2026-09-11T01:14:49.622+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T01:14:49.712+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68002, msg=Ŀڻѱɾ -2026-09-11T01:14:50.205+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : УʧܣfollowTime: Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDateTime' for property 'followTime'; Failed to convert from type [java.lang.String] to type [@io.swagger.v3.oas.annotations.media.Schema @org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] for value [ʱ] -2026-09-11T01:18:57.596+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:18:57.749+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@4c7225e5 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:18:57.760+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3e89cf2a (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:18:57.773+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@4beea4ff (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:18:57.782+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@16eefd6a (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:18:57.793+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6bc81044 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:18:57.802+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1b486288 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:18:57.811+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@25bfe442 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:18:57.820+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@44db5832 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:18:57.829+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6f3a3add (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:19:02.933+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ĿƱ -2026-09-11T01:19:03.781+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ͻӿͻĿ¼ѡ񣬲ֳ֧½ -2026-09-11T01:19:04.544+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ͻãͻ: 99999001 -2026-09-11T01:19:41.819+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:22:02.219+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:22:08.097+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:23:00.680+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:24:08.365+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:25:12.886+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:25:58.877+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:26:04.215+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ĿƱ -2026-09-11T01:26:05.015+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ͻӿͻĿ¼ѡ񣬲ֳ֧½ -2026-09-11T01:26:05.763+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ͻãͻ: 99999001 -2026-09-11T01:26:42.906+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:27:45.433+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:27:48.637+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T01:28:03.218+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:28:04.290+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:28:07.377+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T01:28:58.805+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T01:29:41.655+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68007, msg=ͻĿͻһ£һĿһͻһ -2026-09-11T01:29:41.851+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68007, msg=ͻĿͻһ£һĿһͻһ -2026-09-11T01:29:42.045+08:00 WARN 22464 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68007, msg=ͻĿͻһ£һĿһͻһ -2026-09-11T01:47:38.670+08:00 INFO 15484 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.13 with PID 15484 (E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by Administrator in E:\code\crm-backend-matt) -2026-09-11T01:47:38.673+08:00 INFO 15484 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T01:47:40.075+08:00 INFO 15484 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T01:47:40.077+08:00 INFO 15484 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T01:47:40.103+08:00 INFO 15484 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 20 ms. Found 0 JPA repository interfaces. -2026-09-11T01:47:40.124+08:00 INFO 15484 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T01:47:40.125+08:00 INFO 15484 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T01:47:40.136+08:00 INFO 15484 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3 ms. Found 0 Redis repository interfaces. -2026-09-11T01:47:40.289+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.289+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.289+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.289+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.289+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.289+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.289+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.290+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.291+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.292+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.293+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.294+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.295+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.296+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.296+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.296+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.296+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.296+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.296+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.296+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.300+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.301+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.302+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.303+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.304+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.305+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.306+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.306+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.306+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.306+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.306+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.306+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.306+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T01:47:40.306+08:00 WARN 15484 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T01:47:41.198+08:00 INFO 15484 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T01:47:41.216+08:00 INFO 15484 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T01:47:41.217+08:00 INFO 15484 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T01:47:41.260+08:00 INFO 15484 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T01:47:41.260+08:00 INFO 15484 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2535 ms -2026-09-11T01:47:41.759+08:00 INFO 15484 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T01:47:41.899+08:00 INFO 15484 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T01:47:42.606+08:00 INFO 15484 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T01:47:42.665+08:00 INFO 15484 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T01:47:42.699+08:00 INFO 15484 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T01:47:43.004+08:00 INFO 15484 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T01:47:43.041+08:00 INFO 15484 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T01:47:43.570+08:00 INFO 15484 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@33224703 -2026-09-11T01:47:43.572+08:00 INFO 15484 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T01:47:43.638+08:00 WARN 15484 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T01:47:45.377+08:00 INFO 15484 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T01:48:04.949+08:00 INFO 15484 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T01:48:05.348+08:00 WARN 15484 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T01:48:05.348+08:00 WARN 15484 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T01:48:05.348+08:00 WARN 15484 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T01:48:05.348+08:00 WARN 15484 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T01:48:05.348+08:00 WARN 15484 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T01:48:07.620+08:00 INFO 15484 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T01:48:07.622+08:00 INFO 15484 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T01:48:07.923+08:00 INFO 15484 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T01:48:08.501+08:00 INFO 15484 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T01:48:08.503+08:00 INFO 15484 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T01:48:08.865+08:00 WARN 15484 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: 868ea272-75d8-4353-ab0e-e0f4dfd4c771 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T01:48:08.883+08:00 INFO 15484 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T01:48:09.938+08:00 INFO 15484 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T01:48:09.971+08:00 INFO 15484 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T01:48:09.991+08:00 INFO 15484 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 31.789 seconds (process running for 32.228) -2026-09-11T01:48:09.996+08:00 INFO 15484 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T01:48:10.665+08:00 INFO 15484 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T01:48:10.665+08:00 INFO 15484 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T01:48:11.033+08:00 INFO 15484 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T01:48:11.033+08:00 INFO 15484 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T01:48:11.130+08:00 INFO 15484 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T01:48:11.130+08:00 INFO 15484 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T01:48:11.934+08:00 INFO 15484 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T01:48:11.935+08:00 INFO 15484 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T01:48:12.319+08:00 INFO 15484 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T01:48:12.319+08:00 INFO 15484 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T01:48:12.413+08:00 INFO 15484 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T01:48:12.413+08:00 INFO 15484 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T01:48:12.510+08:00 INFO 15484 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T01:48:12.510+08:00 INFO 15484 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T01:48:12.602+08:00 INFO 15484 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T01:48:12.602+08:00 INFO 15484 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T01:48:12.616+08:00 INFO 15484 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T01:48:12.629+08:00 INFO 15484 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T01:48:12.629+08:00 INFO 15484 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T01:48:12.722+08:00 INFO 15484 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T01:48:12.736+08:00 INFO 15484 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T01:48:12.749+08:00 INFO 15484 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T01:48:12.749+08:00 INFO 15484 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T01:48:12.845+08:00 INFO 15484 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T01:48:12.858+08:00 INFO 15484 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T01:48:12.858+08:00 INFO 15484 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T01:48:12.954+08:00 INFO 15484 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T01:48:12.954+08:00 INFO 15484 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T01:48:13.050+08:00 INFO 15484 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T01:48:13.063+08:00 INFO 15484 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T01:48:13.063+08:00 INFO 15484 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T01:48:13.156+08:00 INFO 15484 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T01:48:13.156+08:00 INFO 15484 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T01:48:13.250+08:00 INFO 15484 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T01:48:13.251+08:00 INFO 15484 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T01:48:13.345+08:00 INFO 15484 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T01:48:13.418+08:00 INFO 15484 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T01:48:13.448+08:00 INFO 15484 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] opp_id ѷſΪɿ -2026-09-11T01:48:13.460+08:00 INFO 15484 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T01:48:13.460+08:00 INFO 15484 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T01:48:23.848+08:00 INFO 15484 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T01:48:24.028+08:00 INFO 15484 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T01:49:00.771+08:00 INFO 15484 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T01:49:00.771+08:00 INFO 15484 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T01:49:00.772+08:00 INFO 15484 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2026-09-11T01:49:01.579+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:49:12.927+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:49:27.105+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T01:50:34.345+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:50:48.058+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T01:51:59.100+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:52:12.616+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T01:52:36.789+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:52:37.636+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T01:52:37.696+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:52:38.340+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T01:52:38.500+08:00 ERROR 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣 - -org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: еֹһѽӡ - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:415) ~[spring-web-6.1.14.jar!/:6.1.14] - at java.base/java.io.FilterOutputStream.flush(FilterOutputStream.java:153) ~[na:na] - at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1207) ~[jackson-core-2.17.2.jar!/:2.17.2] - at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1063) ~[jackson-databind-2.17.2.jar!/:2.17.2] - at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:483) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:114) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:297) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:192) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at com.crm.auth.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) ~[spring-security-config-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at com.crm.base.filter.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39) ~[crm-base-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: еֹһѽӡ - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:303) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:265) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:136) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:524) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:412) ~[spring-web-6.1.14.jar!/:6.1.14] - ... 106 common frames omitted -Caused by: java.io.IOException: еֹһѽӡ - at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:na] - at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) ~[na:na] - at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) ~[na:na] - at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na] - at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:122) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1378) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:728) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:712) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:574) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:156) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:216) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1252) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:408) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.Response.action(Response.java:208) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:299) ~[tomcat-embed-core-10.1.31.jar!/:na] - ... 110 common frames omitted - -2026-09-11T01:54:34.656+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T01:54:48.170+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T01:55:00.022+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@28efda9f (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T01:55:12.124+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:55:12.943+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T01:55:13.008+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T01:55:13.660+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:00:00.111+08:00 INFO 15484 --- [crm-app] [scheduling-1] com.crm.auth.job.DtSyncScheduleJob : [ԶͬJob] Ѱͬ÷Զͬ -2026-09-11T02:00:00.111+08:00 INFO 15484 --- [crm-app] [scheduling-1] com.crm.lead.job.LeadMaintenanceJob : [άJob] ʼֹʱ=2026-09-11T02:00:00.111076300 -2026-09-11T02:00:00.154+08:00 INFO 15484 --- [crm-app] [scheduling-1] com.crm.lead.job.LeadMaintenanceJob : [άJob] ʧЧɣ0 ʧЧ -2026-09-11T02:00:00.187+08:00 INFO 15484 --- [crm-app] [scheduling-1] com.crm.lead.job.LeadMaintenanceJob : [άJob] ɣ0 ѻ -2026-09-11T02:00:00.187+08:00 INFO 15484 --- [crm-app] [scheduling-1] com.crm.lead.job.LeadMaintenanceJob : [άJob] ȫ -2026-09-11T02:00:01.876+08:00 ERROR 15484 --- [crm-app] [dt-sync-task] c.c.a.service.client.DingTalkOrgSource : ֯ͬȡûʧܣdeptId=641717583, body={"errcode":88,"sub_code":"90002","sub_msg":"ǰжӦõøýӿڴ࣬˸ýӿڳܵqpsʱˣʱ̵øýӿ, apiPath(dingtalk.oapi.v2.user.list), 2026-09-11 02:00:00 2026-09-11 02:00:00 ܴ 1000 , ƽ 2026-09-11 02:00:01 .","errmsg":"ding talk error[subcode=90002,submsg=ǰжӦõøýӿڴ࣬˸ýӿڳܵqpsʱˣʱ̵øýӿ, apiPath(dingtalk.oapi.v2.user.list), 2026-09-11 02:00:00 2026-09-11 02:00:00 ܴ 1000 , ƽ 2026-09-11 02:00:01 .]","request_id":"15rt5pk5aqqo5"} -2026-09-11T02:00:01.929+08:00 ERROR 15484 --- [crm-app] [dt-sync-task] c.c.a.s.impl.DtSyncTaskServiceImpl : ͬ SYNC-0911-01 ִʧܣ֯ͬʧܣȡûʧܣerrcode=88 - -com.crm.base.domain.exception.BusinessErrorException: ֯ͬʧܣȡûʧܣerrcode=88 - at com.crm.auth.service.client.DingTalkOrgSource.fetchDeptUsersPage(DingTalkOrgSource.java:120) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.auth.service.client.DingTalkOrgSource.fetchDeptUsers(DingTalkOrgSource.java:88) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.auth.service.impl.DtOrgSyncServiceImpl.syncUsers(DtOrgSyncServiceImpl.java:231) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.auth.service.impl.DtOrgSyncServiceImpl.syncOrg(DtOrgSyncServiceImpl.java:89) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) ~[spring-tx-6.1.14.jar!/:6.1.14] - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) ~[spring-aop-6.1.14.jar!/:6.1.14] - at com.crm.auth.service.impl.DtOrgSyncServiceImpl$$SpringCGLIB$$0.syncOrg() ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.auth.service.impl.DtSyncTaskServiceImpl.runTask(DtSyncTaskServiceImpl.java:126) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.auth.service.impl.DtSyncTaskServiceImpl.lambda$launch$1(DtSyncTaskServiceImpl.java:107) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] - -2026-09-11T02:01:05.952+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:01:05.975+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:01:08.786+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:01:14.194+08:00 ERROR 15484 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣 - -org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: еֹһѽӡ - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:415) ~[spring-web-6.1.14.jar!/:6.1.14] - at java.base/java.io.FilterOutputStream.flush(FilterOutputStream.java:153) ~[na:na] - at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1207) ~[jackson-core-2.17.2.jar!/:2.17.2] - at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1063) ~[jackson-databind-2.17.2.jar!/:2.17.2] - at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:483) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:114) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:297) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:192) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at com.crm.auth.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) ~[spring-security-config-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at com.crm.base.filter.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39) ~[crm-base-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: еֹһѽӡ - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:303) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:265) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:136) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:524) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:412) ~[spring-web-6.1.14.jar!/:6.1.14] - ... 106 common frames omitted -Caused by: java.io.IOException: еֹһѽӡ - at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:na] - at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) ~[na:na] - at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) ~[na:na] - at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na] - at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:122) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1378) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:728) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:712) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:574) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:156) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:216) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1252) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:408) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.Response.action(Response.java:208) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:299) ~[tomcat-embed-core-10.1.31.jar!/:na] - ... 110 common frames omitted - -2026-09-11T02:01:14.696+08:00 ERROR 15484 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣 - -org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: еֹһѽӡ - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:415) ~[spring-web-6.1.14.jar!/:6.1.14] - at java.base/java.io.FilterOutputStream.flush(FilterOutputStream.java:153) ~[na:na] - at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1207) ~[jackson-core-2.17.2.jar!/:2.17.2] - at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1063) ~[jackson-databind-2.17.2.jar!/:2.17.2] - at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:483) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:114) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:297) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:192) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at com.crm.auth.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) ~[spring-security-config-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at com.crm.base.filter.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39) ~[crm-base-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: еֹһѽӡ - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:303) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:265) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:136) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:524) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:412) ~[spring-web-6.1.14.jar!/:6.1.14] - ... 106 common frames omitted -Caused by: java.io.IOException: еֹһѽӡ - at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:na] - at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) ~[na:na] - at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) ~[na:na] - at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na] - at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:122) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1378) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:728) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:712) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:574) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:156) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:216) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1252) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:408) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.Response.action(Response.java:208) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:299) ~[tomcat-embed-core-10.1.31.jar!/:na] - ... 110 common frames omitted - -2026-09-11T02:01:48.623+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:01:48.669+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:01:49.316+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:02:54.991+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:02:55.051+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:02:55.699+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:03:06.333+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T02:03:13.333+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ȱprojectId -2026-09-11T02:03:13.368+08:00 ERROR 15484 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣 - -org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: еֹһѽӡ - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:415) ~[spring-web-6.1.14.jar!/:6.1.14] - at java.base/java.io.FilterOutputStream.flush(FilterOutputStream.java:153) ~[na:na] - at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1207) ~[jackson-core-2.17.2.jar!/:2.17.2] - at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1063) ~[jackson-databind-2.17.2.jar!/:2.17.2] - at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:483) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:114) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:297) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:192) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at com.crm.auth.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) ~[spring-security-config-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at com.crm.base.filter.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39) ~[crm-base-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: еֹһѽӡ - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:303) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:265) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:136) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:524) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:412) ~[spring-web-6.1.14.jar!/:6.1.14] - ... 106 common frames omitted -Caused by: java.io.IOException: еֹһѽӡ - at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:na] - at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) ~[na:na] - at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) ~[na:na] - at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na] - at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:122) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1378) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:728) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:712) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:574) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:156) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:216) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1252) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:408) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.Response.action(Response.java:208) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:299) ~[tomcat-embed-core-10.1.31.jar!/:na] - ... 110 common frames omitted - -2026-09-11T02:03:28.803+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:03:28.906+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ȱprojectId -2026-09-11T02:03:38.716+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:03:38.750+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:03:39.380+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:03:50.145+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T02:04:05.286+08:00 ERROR 15484 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣 - -org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: еֹһѽӡ - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:415) ~[spring-web-6.1.14.jar!/:6.1.14] - at java.base/java.io.FilterOutputStream.flush(FilterOutputStream.java:153) ~[na:na] - at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1207) ~[jackson-core-2.17.2.jar!/:2.17.2] - at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1063) ~[jackson-databind-2.17.2.jar!/:2.17.2] - at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:483) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:114) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:297) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:192) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at com.crm.auth.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) ~[spring-security-config-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at com.crm.base.filter.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39) ~[crm-base-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: еֹһѽӡ - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:303) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:265) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:136) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:524) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:412) ~[spring-web-6.1.14.jar!/:6.1.14] - ... 106 common frames omitted -Caused by: java.io.IOException: еֹһѽӡ - at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:na] - at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) ~[na:na] - at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) ~[na:na] - at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na] - at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:122) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1378) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:728) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:712) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:574) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:156) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:216) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1252) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:408) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.Response.action(Response.java:208) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:299) ~[tomcat-embed-core-10.1.31.jar!/:na] - ... 110 common frames omitted - -2026-09-11T02:04:05.791+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:05.983+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:06.180+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:06.373+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:07.517+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:24.438+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:04:24.486+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:04:25.144+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:04:35.999+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T02:04:50.624+08:00 ERROR 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣 - -org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: еֹһѽӡ - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:415) ~[spring-web-6.1.14.jar!/:6.1.14] - at java.base/java.io.FilterOutputStream.flush(FilterOutputStream.java:153) ~[na:na] - at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1207) ~[jackson-core-2.17.2.jar!/:2.17.2] - at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1063) ~[jackson-databind-2.17.2.jar!/:2.17.2] - at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:483) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:114) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:297) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:192) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at com.crm.auth.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) ~[spring-security-config-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at com.crm.base.filter.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39) ~[crm-base-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: еֹһѽӡ - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:303) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:265) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:136) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:524) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:412) ~[spring-web-6.1.14.jar!/:6.1.14] - ... 106 common frames omitted -Caused by: java.io.IOException: еֹһѽӡ - at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:na] - at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) ~[na:na] - at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) ~[na:na] - at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na] - at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:122) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1378) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:728) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:712) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:574) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:156) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:216) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1252) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:408) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.Response.action(Response.java:208) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:299) ~[tomcat-embed-core-10.1.31.jar!/:na] - ... 110 common frames omitted - -2026-09-11T02:04:51.251+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:51.437+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:51.588+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:51.741+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:04:52.923+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:08:22.438+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:08:22.497+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:08:25.858+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : УʧܣfollowTime: Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDateTime' for property 'followTime'; Failed to convert from type [java.lang.String] to type [@io.swagger.v3.oas.annotations.media.Schema @org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] for value [ʱ] -2026-09-11T02:08:26.668+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:08:33.797+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:08:35.540+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T02:09:03.928+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:09:03.979+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:09:07.577+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : УʧܣfollowTime: Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDateTime' for property 'followTime'; Failed to convert from type [java.lang.String] to type [@io.swagger.v3.oas.annotations.media.Schema @org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] for value [ʱ] -2026-09-11T02:09:08.354+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:09:15.284+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:09:16.931+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T02:10:04.952+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:10:08.010+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T02:10:08.169+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջƽ -2026-09-11T02:10:08.514+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɱӮ/䵥 -2026-09-11T02:10:08.685+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɳͻ˻ -2026-09-11T02:13:18.960+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:13:21.950+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T02:13:22.121+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջƽ -2026-09-11T02:13:22.243+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68009, msg=ĿѱӮ/䵥ظ -2026-09-11T02:13:22.386+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68008, msg=ͻ׶Σstage0ɽͻ/˽ -2026-09-11T02:13:22.899+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ƽ -2026-09-11T02:13:23.060+08:00 WARN 15484 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=Ŀѹر/ѽ̬ɱӮ/䵥 -2026-09-11T02:18:00.013+08:00 WARN 15484 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@4fd7089d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T02:47:00.012+08:00 WARN 15484 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@30f73d40 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T02:47:00.024+08:00 WARN 15484 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5bf00501 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T02:47:00.033+08:00 WARN 15484 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@42f827f2 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T02:47:00.042+08:00 WARN 15484 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@553d568c (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T02:47:00.055+08:00 WARN 15484 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5ca97c56 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T02:47:00.066+08:00 WARN 15484 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@72ab2cf (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T02:50:51.605+08:00 INFO 27784 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.13 with PID 27784 (E:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by Administrator in E:\code\crm-backend-matt) -2026-09-11T02:50:51.607+08:00 INFO 27784 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T02:50:53.071+08:00 INFO 27784 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T02:50:53.075+08:00 INFO 27784 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T02:50:53.110+08:00 INFO 27784 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 27 ms. Found 0 JPA repository interfaces. -2026-09-11T02:50:53.130+08:00 INFO 27784 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T02:50:53.131+08:00 INFO 27784 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T02:50:53.142+08:00 INFO 27784 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3 ms. Found 0 Redis repository interfaces. -2026-09-11T02:50:53.304+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.304+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.304+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.304+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.304+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.305+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.306+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.307+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.308+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.309+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.310+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.316+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.316+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.317+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.318+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T02:50:53.321+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.322+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.323+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.324+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.325+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.326+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.327+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.328+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.328+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.328+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.328+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.328+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T02:50:53.328+08:00 WARN 27784 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T02:50:54.214+08:00 INFO 27784 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T02:50:54.231+08:00 INFO 27784 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T02:50:54.231+08:00 INFO 27784 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T02:50:54.274+08:00 INFO 27784 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T02:50:54.275+08:00 INFO 27784 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2616 ms -2026-09-11T02:50:54.773+08:00 INFO 27784 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T02:50:54.897+08:00 INFO 27784 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T02:50:55.612+08:00 INFO 27784 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T02:50:55.668+08:00 INFO 27784 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T02:50:55.701+08:00 INFO 27784 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T02:50:55.977+08:00 INFO 27784 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T02:50:56.009+08:00 INFO 27784 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T02:50:56.403+08:00 INFO 27784 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@7720334e -2026-09-11T02:50:56.405+08:00 INFO 27784 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T02:50:56.474+08:00 WARN 27784 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T02:50:58.151+08:00 INFO 27784 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T02:51:16.074+08:00 INFO 27784 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T02:51:16.467+08:00 WARN 27784 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T02:51:16.467+08:00 WARN 27784 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T02:51:16.467+08:00 WARN 27784 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T02:51:16.467+08:00 WARN 27784 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T02:51:16.467+08:00 WARN 27784 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T02:51:18.796+08:00 INFO 27784 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T02:51:18.798+08:00 INFO 27784 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T02:51:19.142+08:00 INFO 27784 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T02:51:19.758+08:00 INFO 27784 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T02:51:19.760+08:00 INFO 27784 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T02:51:20.098+08:00 WARN 27784 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: e24f24d1-7936-4432-b2c3-414a74dd9821 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T02:51:20.115+08:00 INFO 27784 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T02:51:21.222+08:00 INFO 27784 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T02:51:21.243+08:00 INFO 27784 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T02:51:21.263+08:00 INFO 27784 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 30.113 seconds (process running for 30.562) -2026-09-11T02:51:21.267+08:00 INFO 27784 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T02:51:21.908+08:00 INFO 27784 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T02:51:21.908+08:00 INFO 27784 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T02:51:22.241+08:00 INFO 27784 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T02:51:22.241+08:00 INFO 27784 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T02:51:22.324+08:00 INFO 27784 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T02:51:22.324+08:00 INFO 27784 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T02:51:22.660+08:00 INFO 27784 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T02:51:22.660+08:00 INFO 27784 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T02:51:23.406+08:00 INFO 27784 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T02:51:23.406+08:00 INFO 27784 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T02:51:23.489+08:00 INFO 27784 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T02:51:23.489+08:00 INFO 27784 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T02:51:23.568+08:00 INFO 27784 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T02:51:23.569+08:00 INFO 27784 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T02:51:23.649+08:00 INFO 27784 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T02:51:23.649+08:00 INFO 27784 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T02:51:23.661+08:00 INFO 27784 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T02:51:23.674+08:00 INFO 27784 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T02:51:23.674+08:00 INFO 27784 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T02:51:23.756+08:00 INFO 27784 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T02:51:23.768+08:00 INFO 27784 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T02:51:23.780+08:00 INFO 27784 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T02:51:23.780+08:00 INFO 27784 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T02:51:23.861+08:00 INFO 27784 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T02:51:23.872+08:00 INFO 27784 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T02:51:23.872+08:00 INFO 27784 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T02:51:23.954+08:00 INFO 27784 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T02:51:23.955+08:00 INFO 27784 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T02:51:24.035+08:00 INFO 27784 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T02:51:24.046+08:00 INFO 27784 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T02:51:24.046+08:00 INFO 27784 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T02:51:24.127+08:00 INFO 27784 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T02:51:24.127+08:00 INFO 27784 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T02:51:24.208+08:00 INFO 27784 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T02:51:24.208+08:00 INFO 27784 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T02:51:24.289+08:00 INFO 27784 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T02:51:24.359+08:00 INFO 27784 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T02:51:24.382+08:00 INFO 27784 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T02:51:24.553+08:00 INFO 27784 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T02:51:33.417+08:00 INFO 27784 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T02:51:33.428+08:00 INFO 27784 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T02:52:17.401+08:00 INFO 27784 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T02:52:17.401+08:00 INFO 27784 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T02:52:17.402+08:00 INFO 27784 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2026-09-11T02:52:18.141+08:00 WARN 27784 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:52:21.695+08:00 WARN 27784 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021002 ǩ token -2026-09-11T02:52:35.186+08:00 WARN 27784 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68003, msg=ӮĿstage5 ջ״̬ɻ -2026-09-11T02:52:58.693+08:00 WARN 27784 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:52:59.511+08:00 WARN 27784 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68005, msg=׶λ˽Աܼɲ -2026-09-11T02:52:59.567+08:00 WARN 27784 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=99021003 ǩ token -2026-09-11T02:53:00.198+08:00 WARN 27784 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68010, msg=ĿˡԱִܼи״̬ -2026-09-11T02:53:00.281+08:00 ERROR 27784 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣 - -org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: java.io.IOException: еֹһѽӡ - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:343) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:401) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.util.StreamUtils$NonClosingOutputStream.write(StreamUtils.java:261) ~[spring-core-6.1.14.jar!/:6.1.14] - at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2210) ~[jackson-core-2.17.2.jar!/:2.17.2] - at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1204) ~[jackson-core-2.17.2.jar!/:2.17.2] - at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1063) ~[jackson-databind-2.17.2.jar!/:2.17.2] - at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:483) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:114) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:297) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:192) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:136) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at com.crm.auth.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) ~[spring-security-config-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at com.crm.base.filter.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39) ~[crm-base-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: еֹһѽӡ - at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:341) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:776) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:673) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:376) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:354) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:103) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:639) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:398) ~[spring-web-6.1.14.jar!/:6.1.14] - ... 107 common frames omitted -Caused by: java.io.IOException: еֹһѽӡ - at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:na] - at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) ~[na:na] - at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) ~[na:na] - at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) ~[na:na] - at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na] - at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:122) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1378) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:764) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:589) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:533) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:548) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:111) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:193) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.Response.doWrite(Response.java:633) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:329) ~[tomcat-embed-core-10.1.31.jar!/:na] - ... 114 common frames omitted - -2026-09-11T03:00:00.048+08:00 INFO 27784 --- [crm-app] [scheduling-1] c.crm.file.task.OrphanChunkCleanupTask : ¶ʱƬɣɾ 0 -2026-09-11T03:00:00.048+08:00 INFO 27784 --- [crm-app] [scheduling-1] c.c.o.job.OpportunityMaintenanceJob : [̻άJob] ʼnow=2026-09-11T03:00:00.048295200 -2026-09-11T03:00:00.091+08:00 INFO 27784 --- [crm-app] [scheduling-1] c.c.o.job.OpportunityMaintenanceJob : [̻άJob] ɣ0 ¼ -2026-09-11T03:00:00.091+08:00 INFO 27784 --- [crm-app] [scheduling-1] c.c.o.job.OpportunityMaintenanceJob : [̻άJob] ɣ0 ̻ -2026-09-11T03:00:00.091+08:00 INFO 27784 --- [crm-app] [scheduling-1] c.c.o.job.OpportunityMaintenanceJob : [̻άJob] ȫ -2026-09-11T03:30:00.037+08:00 INFO 27784 --- [crm-app] [scheduling-1] com.crm.log.task.LogFileCleanupTask : ־ļɣ 0 -2026-09-11T03:50:00.024+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3c5d5487 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T03:50:00.037+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@53e3d233 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T03:50:00.048+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@43ef9071 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T03:50:00.058+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@523f4cd1 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T03:50:00.069+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@490c37d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T03:50:00.078+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@492feb96 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T03:50:00.087+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@767c96da (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T04:00:00.027+08:00 INFO 27784 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-11T04:00:00.027052700 -2026-09-11T04:00:00.105+08:00 INFO 27784 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 0 êʧЧ 0 -2026-09-11T04:49:00.010+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@4ff18469 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T04:49:00.023+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@677a6b46 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T04:49:00.035+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2494f26f (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T04:49:00.047+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@18b7ad4e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T04:49:00.059+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5b26a0fd (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T04:49:00.067+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6f32c084 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T04:49:00.079+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6c365087 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:18:00.021+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1c79eeeb (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:18:00.033+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3d56463 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:18:47.776+08:00 ERROR 27784 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣 - -org.springframework.data.redis.RedisSystemException: Redis exception - at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:72) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.lettuce.LettuceStringCommands.setEx(LettuceStringCommands.java:134) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.DefaultedRedisConnection.setEx(DefaultedRedisConnection.java:340) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.connection.DefaultStringRedisConnection.setEx(DefaultStringRedisConnection.java:785) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.core.DefaultValueOperations$8.potentiallyUsePsetEx(DefaultValueOperations.java:265) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.core.DefaultValueOperations$8.doInRedis(DefaultValueOperations.java:258) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:253) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - at com.crm.auth.security.impl.SessionStoreImpl.openSession(SessionStoreImpl.java:38) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.auth.controller.DebugTokenController.token(DebugTokenController.java:67) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) ~[spring-aop-6.1.14.jar!/:6.1.14] - at com.crm.auth.controller.DebugTokenController$$SpringCGLIB$$0.token() ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at com.crm.auth.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:60) ~[crm-auth-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) ~[spring-security-web-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) ~[spring-webmvc-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) ~[spring-security-config-6.3.4.jar!/:6.3.4] - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at com.crm.base.filter.TraceIdFilter.doFilterInternal(TraceIdFilter.java:39) ~[crm-base-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.14.jar!/:6.1.14] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.31.jar!/:na] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.31.jar!/:na] - at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] -Caused by: io.lettuce.core.RedisException: java.net.SocketException: Connection reset - at io.lettuce.core.internal.Exceptions.bubble(Exceptions.java:83) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] - at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:250) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] - at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] - at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1010) ~[spring-data-redis-3.3.5.jar!/:3.3.5] - ... 137 common frames omitted -Caused by: java.net.SocketException: Connection reset - at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:394) ~[na:na] - at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:426) ~[na:na] - at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) ~[netty-buffer-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) ~[netty-buffer-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:356) ~[netty-transport-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) ~[netty-transport-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.114.Final.jar!/:4.1.114.Final] - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.114.Final.jar!/:4.1.114.Final] - ... 1 common frames omitted - -2026-09-11T06:18:47.838+08:00 INFO 27784 --- [crm-app] [lettuce-eventExecutorLoop-1-1] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was /8.129.84.155:6379 -2026-09-11T06:18:47.882+08:00 INFO 27784 --- [crm-app] [lettuce-nioEventLoop-4-2] i.l.core.protocol.ReconnectionHandler : Reconnected to 8.129.84.155/:6379 -2026-09-11T06:47:00.015+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@255ac93 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:47:00.027+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@245edac2 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:47:00.037+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@56eda5af (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:47:00.048+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5669e076 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:47:00.060+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7977ff1c (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:47:00.069+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2bada23a (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:47:00.078+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@10d6aa3d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T06:47:00.086+08:00 WARN 27784 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@9259201 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T11:42:28.620+08:00 INFO 10452 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 10452 (D:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by luowj in D:\code\crm-backend-matt) -2026-09-11T11:42:28.647+08:00 INFO 10452 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T11:42:31.162+08:00 INFO 10452 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T11:42:31.165+08:00 INFO 10452 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T11:42:31.219+08:00 INFO 10452 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 38 ms. Found 0 JPA repository interfaces. -2026-09-11T11:42:31.255+08:00 INFO 10452 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T11:42:31.259+08:00 INFO 10452 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T11:42:31.280+08:00 INFO 10452 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 8 ms. Found 0 Redis repository interfaces. -2026-09-11T11:42:31.570+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.571+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.571+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.571+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.572+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.572+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.572+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.572+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.572+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.572+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.573+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.573+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.573+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.574+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.575+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.576+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.576+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.577+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.577+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.577+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.577+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.577+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.577+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.578+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.578+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.578+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.578+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.578+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.578+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.578+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.579+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.579+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.579+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.579+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.579+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.579+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.579+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.580+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.580+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.580+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.580+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.580+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.580+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.580+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.581+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.581+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.581+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.581+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.581+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.581+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.582+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.582+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.582+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.582+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.582+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.583+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.583+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.583+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.583+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.583+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.583+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.584+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.584+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.584+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.584+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.584+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.584+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.584+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.584+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.585+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.585+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.585+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.585+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.585+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.585+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.585+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.585+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.586+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.586+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.586+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.586+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.586+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.586+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.586+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.586+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.587+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.587+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T11:42:31.592+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.593+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.593+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.593+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.593+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.593+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.594+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.595+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.596+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.596+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.596+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.596+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.596+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.596+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.597+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.597+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.597+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.597+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.597+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.597+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.598+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.598+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.598+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.598+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.598+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.598+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.598+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.599+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.600+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.601+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.602+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.603+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.603+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:42:31.603+08:00 WARN 10452 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T11:42:33.237+08:00 INFO 10452 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T11:42:33.265+08:00 INFO 10452 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T11:42:33.266+08:00 INFO 10452 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T11:42:33.352+08:00 INFO 10452 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T11:42:33.353+08:00 INFO 10452 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4613 ms -2026-09-11T11:42:34.237+08:00 INFO 10452 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T11:42:34.459+08:00 INFO 10452 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T11:42:35.602+08:00 INFO 10452 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T11:42:35.700+08:00 INFO 10452 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T11:42:35.750+08:00 INFO 10452 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T11:42:36.302+08:00 INFO 10452 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T11:42:36.355+08:00 INFO 10452 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T11:42:37.282+08:00 INFO 10452 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@46977829 -2026-09-11T11:42:37.284+08:00 INFO 10452 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T11:42:37.442+08:00 WARN 10452 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T11:42:39.935+08:00 INFO 10452 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T11:43:00.191+08:00 INFO 10452 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T11:43:00.949+08:00 WARN 10452 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T11:43:00.949+08:00 WARN 10452 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T11:43:00.950+08:00 WARN 10452 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T11:43:00.950+08:00 WARN 10452 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T11:43:00.950+08:00 WARN 10452 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T11:43:05.896+08:00 INFO 10452 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T11:43:05.899+08:00 INFO 10452 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T11:43:06.866+08:00 INFO 10452 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T11:43:08.335+08:00 INFO 10452 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T11:43:08.338+08:00 INFO 10452 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T11:43:09.027+08:00 WARN 10452 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: 601d8d53-38d6-445d-b5a1-2033227ee02f - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T11:43:09.076+08:00 INFO 10452 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T11:43:11.724+08:00 INFO 10452 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T11:43:11.799+08:00 INFO 10452 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T11:43:11.847+08:00 INFO 10452 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 44.184 seconds (process running for 45.144) -2026-09-11T11:43:11.853+08:00 INFO 10452 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T11:43:12.159+08:00 INFO 10452 --- [crm-app] [http-nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T11:43:12.159+08:00 INFO 10452 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T11:43:12.163+08:00 INFO 10452 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms -2026-09-11T11:43:12.843+08:00 INFO 10452 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T11:43:12.843+08:00 INFO 10452 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T11:43:13.435+08:00 INFO 10452 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T11:43:13.436+08:00 INFO 10452 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T11:43:13.539+08:00 INFO 10452 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T11:43:13.539+08:00 INFO 10452 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T11:43:13.930+08:00 INFO 10452 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T11:43:13.931+08:00 INFO 10452 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T11:43:14.804+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T11:43:15.399+08:00 INFO 10452 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T11:43:15.399+08:00 INFO 10452 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T11:43:15.498+08:00 INFO 10452 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T11:43:15.498+08:00 INFO 10452 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T11:43:15.605+08:00 INFO 10452 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T11:43:15.605+08:00 INFO 10452 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T11:43:15.702+08:00 INFO 10452 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T11:43:15.702+08:00 INFO 10452 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T11:43:15.715+08:00 INFO 10452 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T11:43:15.729+08:00 INFO 10452 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T11:43:15.729+08:00 INFO 10452 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T11:43:15.822+08:00 INFO 10452 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T11:43:15.836+08:00 INFO 10452 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T11:43:15.858+08:00 INFO 10452 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T11:43:15.858+08:00 INFO 10452 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T11:43:15.946+08:00 INFO 10452 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T11:43:15.958+08:00 INFO 10452 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T11:43:15.958+08:00 INFO 10452 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T11:43:16.049+08:00 INFO 10452 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T11:43:16.049+08:00 INFO 10452 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T11:43:16.137+08:00 INFO 10452 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T11:43:16.149+08:00 INFO 10452 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T11:43:16.149+08:00 INFO 10452 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T11:43:16.250+08:00 INFO 10452 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T11:43:16.250+08:00 INFO 10452 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T11:43:16.337+08:00 INFO 10452 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T11:43:16.338+08:00 INFO 10452 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T11:43:16.428+08:00 INFO 10452 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T11:43:16.508+08:00 INFO 10452 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T11:43:16.533+08:00 INFO 10452 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T11:43:16.534+08:00 INFO 10452 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T11:43:27.215+08:00 INFO 10452 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T11:43:27.689+08:00 INFO 10452 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T11:45:18.206+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T11:45:18.249+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T11:45:28.531+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ -2026-09-11T11:45:28.980+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67005, msg=ȱֹ汾 -2026-09-11T11:45:29.646+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ -2026-09-11T11:45:29.811+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ϵ绰ΪֻŸʽ -2026-09-11T11:45:29.986+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻȨ -2026-09-11T11:45:32.630+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻѱɾ -2026-09-11T11:45:33.181+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=ʽݱ -2026-09-11T11:45:33.405+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=´θʱ䲻ڵǰʱ -2026-09-11T11:45:34.623+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67009, msg=ظύͬĸ -2026-09-11T11:45:40.902+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=ԱΪ -2026-09-11T11:45:41.092+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=۸˲ͬʱΪЭͬˣ739564171091247104 -2026-09-11T11:45:41.800+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67016, msg=ûЭͬˣ744842318024015872 -2026-09-11T11:45:44.303+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=ͻѱȡڹ -2026-09-11T11:45:44.473+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=ͻѱȡڹ -2026-09-11T11:45:44.667+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67012, msg=ܷǰ -2026-09-11T11:45:45.709+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67007, msg=ͻڽ̻빫 -2026-09-11T11:45:46.817+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67006, msg=ͻڽ̻ɹ鵵 -2026-09-11T11:45:47.015+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67006, msg=ͻڽ̻ɹ鵵 -2026-09-11T11:46:35.241+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T11:46:35.302+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T11:46:39.698+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67011, msg=ԭ -2026-09-11T11:46:39.877+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67011, msg=ܼ಻ڿɽӷΧ -2026-09-11T11:46:41.585+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67010, msg=δɵĽӵظ -2026-09-11T11:46:45.821+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67012, msg=󲻴ڡͣûְ -2026-09-11T11:46:52.661+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=뷽ʽǷ//£ -2026-09-11T11:46:53.224+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=ģ汾ƥ䣬µģ壨 2 бͷ -2026-09-11T11:46:53.469+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=ļ -2026-09-11T11:46:55.337+08:00 ERROR 10452 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753582269339271168, thumbKey=thumbnails/753582269339271168.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:46:55.852+08:00 ERROR 10452 --- [crm-app] [task-2] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753582271583223808, thumbKey=thumbnails/753582271583223808.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:46:55.904+08:00 ERROR 10452 --- [crm-app] [task-3] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753582275588784128, thumbKey=thumbnails/753582275588784128.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:46:55.945+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67014, msg=ȷϣظύ -2026-09-11T11:46:56.775+08:00 INFO 10452 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753582270069080064, insert=2, update=0, unchanged=0, fail=7, suspect=1 -2026-09-11T11:46:58.425+08:00 INFO 10452 --- [crm-app] [task-5] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753582271830687744, insert=0, update=2, unchanged=1, fail=7, suspect=0 -2026-09-11T11:47:00.369+08:00 INFO 10452 --- [crm-app] [http-nio-8080-exec-1] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/1, secondInterval=1/1 -2026-09-11T11:47:00.560+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ -2026-09-11T11:47:00.699+08:00 WARN 10452 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ -2026-09-11T11:47:00.953+08:00 INFO 10452 --- [crm-app] [http-nio-8080-exec-9] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=0, firstTrigger=0/2, secondInterval=0/2 -2026-09-11T11:47:01.130+08:00 INFO 10452 --- [crm-app] [http-nio-8080-exec-10] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/1, secondInterval=1/1 -2026-09-11T11:47:07.854+08:00 INFO 33060 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 33060 (D:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by luowj in D:\code\crm-backend-matt) -2026-09-11T11:47:07.857+08:00 INFO 33060 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T11:47:10.940+08:00 INFO 33060 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T11:47:10.955+08:00 INFO 33060 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T11:47:10.992+08:00 INFO 33060 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 28 ms. Found 0 JPA repository interfaces. -2026-09-11T11:47:11.018+08:00 INFO 33060 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T11:47:11.020+08:00 INFO 33060 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T11:47:11.039+08:00 INFO 33060 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 4 ms. Found 0 Redis repository interfaces. -2026-09-11T11:47:11.328+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.328+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.328+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.329+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.329+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.329+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.329+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.329+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.329+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.331+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.331+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.332+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.332+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.332+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.332+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.332+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.332+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.332+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.333+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.333+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.333+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.333+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.333+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.333+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.333+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.334+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.334+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.334+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.334+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.334+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.334+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.334+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.334+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.335+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.336+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.337+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.338+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.339+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.339+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.339+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.339+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.339+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.339+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.339+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.340+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.340+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.340+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.340+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.342+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T11:47:11.349+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.349+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.349+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.349+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.349+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.350+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.351+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.352+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.352+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.352+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.352+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.352+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.352+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.352+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.353+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.353+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.353+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.353+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.353+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.353+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.353+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.353+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.354+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.355+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.355+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.355+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.355+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.355+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.355+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.356+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.357+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.358+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.358+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.358+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.359+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.360+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.360+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.360+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.360+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.360+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.360+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.360+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.360+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:47:11.361+08:00 WARN 33060 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T11:47:13.169+08:00 INFO 33060 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T11:47:13.196+08:00 INFO 33060 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T11:47:13.196+08:00 INFO 33060 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T11:47:13.309+08:00 INFO 33060 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T11:47:13.309+08:00 INFO 33060 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5357 ms -2026-09-11T11:47:14.243+08:00 INFO 33060 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T11:47:14.455+08:00 INFO 33060 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T11:47:15.658+08:00 INFO 33060 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T11:47:15.809+08:00 INFO 33060 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T11:47:15.895+08:00 INFO 33060 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T11:47:16.588+08:00 INFO 33060 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T11:47:16.698+08:00 INFO 33060 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T11:47:17.346+08:00 INFO 33060 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1a56cb99 -2026-09-11T11:47:17.347+08:00 INFO 33060 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T11:47:17.448+08:00 WARN 33060 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T11:47:21.071+08:00 INFO 33060 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T11:47:40.298+08:00 INFO 33060 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T11:47:41.119+08:00 WARN 33060 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T11:47:41.119+08:00 WARN 33060 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T11:47:41.119+08:00 WARN 33060 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T11:47:41.119+08:00 WARN 33060 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T11:47:41.119+08:00 WARN 33060 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T11:47:45.218+08:00 INFO 33060 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T11:47:45.221+08:00 INFO 33060 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T11:47:45.710+08:00 INFO 33060 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T11:47:46.733+08:00 INFO 33060 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T11:47:46.736+08:00 INFO 33060 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T11:47:47.377+08:00 WARN 33060 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: 8604c057-3c81-4928-a405-d5309043ef95 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T11:47:47.419+08:00 INFO 33060 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T11:47:49.184+08:00 INFO 33060 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T11:47:49.230+08:00 INFO 33060 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T11:47:49.265+08:00 INFO 33060 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 42.393 seconds (process running for 43.915) -2026-09-11T11:47:49.278+08:00 INFO 33060 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T11:47:49.651+08:00 INFO 33060 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T11:47:49.652+08:00 INFO 33060 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T11:47:49.653+08:00 INFO 33060 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms -2026-09-11T11:47:49.950+08:00 INFO 33060 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T11:47:49.951+08:00 INFO 33060 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T11:47:50.313+08:00 INFO 33060 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T11:47:50.314+08:00 INFO 33060 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T11:47:50.405+08:00 INFO 33060 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T11:47:50.405+08:00 INFO 33060 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T11:47:51.470+08:00 INFO 33060 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T11:47:51.470+08:00 INFO 33060 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T11:47:51.831+08:00 INFO 33060 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T11:47:51.831+08:00 INFO 33060 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T11:47:51.922+08:00 INFO 33060 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T11:47:51.922+08:00 INFO 33060 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T11:47:52.007+08:00 INFO 33060 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T11:47:52.007+08:00 INFO 33060 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T11:47:52.101+08:00 INFO 33060 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T11:47:52.102+08:00 INFO 33060 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T11:47:52.116+08:00 INFO 33060 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T11:47:52.129+08:00 INFO 33060 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T11:47:52.130+08:00 INFO 33060 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T11:47:52.223+08:00 INFO 33060 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T11:47:52.236+08:00 INFO 33060 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T11:47:52.254+08:00 INFO 33060 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T11:47:52.254+08:00 INFO 33060 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T11:47:52.337+08:00 INFO 33060 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T11:47:52.346+08:00 INFO 33060 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T11:47:52.347+08:00 INFO 33060 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T11:47:52.436+08:00 INFO 33060 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T11:47:52.437+08:00 INFO 33060 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T11:47:52.525+08:00 INFO 33060 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T11:47:52.537+08:00 INFO 33060 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T11:47:52.538+08:00 INFO 33060 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T11:47:52.623+08:00 INFO 33060 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T11:47:52.624+08:00 INFO 33060 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T11:47:52.715+08:00 INFO 33060 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T11:47:52.716+08:00 INFO 33060 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T11:47:52.796+08:00 INFO 33060 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T11:47:52.859+08:00 INFO 33060 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T11:47:52.883+08:00 INFO 33060 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T11:47:52.883+08:00 INFO 33060 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T11:48:00.018+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-11T11:48:00.018209400 -2026-09-11T11:48:00.183+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 3 êʧЧ 0 -2026-09-11T11:48:02.280+08:00 INFO 33060 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T11:48:02.507+08:00 INFO 33060 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T11:48:30.010+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-11T11:48:30.010889800 -2026-09-11T11:48:30.181+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 0 êʧЧ 0 -2026-09-11T11:49:00.055+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-11T11:49:00.055965200 -2026-09-11T11:49:00.153+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 0 êʧЧ 0 -2026-09-11T11:49:30.004+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-11T11:49:30.004078300 -2026-09-11T11:49:30.137+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 0 êʧЧ 0 -2026-09-11T11:50:00.057+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-11T11:50:00.057743600 -2026-09-11T11:50:00.133+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 0 êʧЧ 0 -2026-09-11T11:50:30.002+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-11T11:50:30.002966 -2026-09-11T11:50:30.083+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 0 êʧЧ 0 -2026-09-11T11:51:00.001+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-11T11:51:00.001704100 -2026-09-11T11:51:00.071+08:00 INFO 33060 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 0 êʧЧ 0 -2026-09-11T11:51:24.578+08:00 INFO 33060 --- [crm-app] [http-nio-8080-exec-5] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/30, secondInterval=1/7 -2026-09-11T11:51:29.150+08:00 INFO 8720 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 8720 (D:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by luowj in D:\code\crm-backend-matt) -2026-09-11T11:51:29.153+08:00 INFO 8720 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T11:51:31.729+08:00 INFO 8720 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T11:51:31.730+08:00 INFO 8720 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T11:51:31.775+08:00 INFO 8720 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 34 ms. Found 0 JPA repository interfaces. -2026-09-11T11:51:31.799+08:00 INFO 8720 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T11:51:31.800+08:00 INFO 8720 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T11:51:31.817+08:00 INFO 8720 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces. -2026-09-11T11:51:32.073+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.073+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.073+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.073+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.073+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.073+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.073+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.074+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.074+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.074+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.074+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.074+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.074+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.074+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.075+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.075+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.075+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.075+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.075+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.075+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.075+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.076+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.076+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.076+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.076+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.076+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.076+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.077+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.078+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.079+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.080+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.080+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.080+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.080+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.080+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.080+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.081+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.082+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.082+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.082+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.082+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.082+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.082+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.083+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.083+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.083+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.084+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T11:51:32.089+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.089+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.089+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.090+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.090+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.090+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.090+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.090+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.090+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.090+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.091+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.092+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.093+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.094+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.095+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.096+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.097+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T11:51:32.097+08:00 WARN 8720 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T11:51:33.819+08:00 INFO 8720 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T11:51:33.842+08:00 INFO 8720 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T11:51:33.842+08:00 INFO 8720 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T11:51:33.943+08:00 INFO 8720 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T11:51:33.944+08:00 INFO 8720 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4697 ms -2026-09-11T11:51:34.677+08:00 INFO 8720 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T11:51:34.845+08:00 INFO 8720 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T11:51:35.881+08:00 INFO 8720 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T11:51:35.961+08:00 INFO 8720 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T11:51:36.008+08:00 INFO 8720 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T11:51:36.458+08:00 INFO 8720 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T11:51:36.505+08:00 INFO 8720 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T11:51:37.111+08:00 INFO 8720 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@262ea940 -2026-09-11T11:51:37.115+08:00 INFO 8720 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T11:51:37.232+08:00 WARN 8720 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T11:51:39.942+08:00 INFO 8720 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T11:52:02.450+08:00 INFO 8720 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T11:52:03.100+08:00 WARN 8720 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T11:52:03.100+08:00 WARN 8720 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T11:52:03.100+08:00 WARN 8720 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T11:52:03.101+08:00 WARN 8720 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T11:52:03.101+08:00 WARN 8720 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T11:52:06.760+08:00 INFO 8720 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T11:52:06.763+08:00 INFO 8720 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T11:52:07.370+08:00 INFO 8720 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T11:52:08.652+08:00 INFO 8720 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T11:52:08.655+08:00 INFO 8720 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T11:52:09.285+08:00 WARN 8720 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: 1a232a23-4d59-4cf9-b51e-c95bc3b749b9 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T11:52:09.332+08:00 INFO 8720 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T11:52:11.011+08:00 INFO 8720 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T11:52:11.045+08:00 INFO 8720 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T11:52:11.075+08:00 INFO 8720 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 42.76 seconds (process running for 43.993) -2026-09-11T11:52:11.079+08:00 INFO 8720 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T11:52:11.490+08:00 INFO 8720 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-09-11T11:52:11.491+08:00 INFO 8720 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T11:52:11.495+08:00 INFO 8720 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms -2026-09-11T11:52:11.921+08:00 INFO 8720 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T11:52:11.922+08:00 INFO 8720 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T11:52:12.343+08:00 INFO 8720 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T11:52:12.343+08:00 INFO 8720 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T11:52:12.448+08:00 INFO 8720 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T11:52:12.449+08:00 INFO 8720 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T11:52:13.205+08:00 INFO 8720 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T11:52:13.206+08:00 INFO 8720 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T11:52:14.954+08:00 INFO 8720 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T11:52:14.955+08:00 INFO 8720 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T11:52:15.293+08:00 INFO 8720 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T11:52:15.293+08:00 INFO 8720 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T11:52:15.391+08:00 INFO 8720 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T11:52:15.392+08:00 INFO 8720 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T11:52:15.393+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ -2026-09-11T11:52:15.525+08:00 INFO 8720 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T11:52:15.525+08:00 INFO 8720 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T11:52:15.542+08:00 INFO 8720 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T11:52:15.559+08:00 INFO 8720 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T11:52:15.559+08:00 INFO 8720 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T11:52:15.674+08:00 INFO 8720 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T11:52:15.695+08:00 INFO 8720 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T11:52:15.712+08:00 INFO 8720 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T11:52:15.712+08:00 INFO 8720 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T11:52:15.848+08:00 INFO 8720 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T11:52:15.861+08:00 INFO 8720 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T11:52:15.861+08:00 INFO 8720 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T11:52:15.962+08:00 INFO 8720 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T11:52:15.962+08:00 INFO 8720 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T11:52:16.056+08:00 INFO 8720 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T11:52:16.070+08:00 INFO 8720 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T11:52:16.070+08:00 INFO 8720 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T11:52:16.160+08:00 INFO 8720 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T11:52:16.161+08:00 INFO 8720 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T11:52:16.274+08:00 INFO 8720 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T11:52:16.274+08:00 INFO 8720 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T11:52:16.399+08:00 INFO 8720 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T11:52:16.485+08:00 INFO 8720 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T11:52:16.523+08:00 INFO 8720 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T11:52:16.523+08:00 INFO 8720 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T11:52:29.754+08:00 INFO 8720 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T11:52:29.768+08:00 INFO 8720 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T11:53:42.825+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T11:53:42.869+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T11:53:45.853+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻ -2026-09-11T11:53:46.040+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻȨ -2026-09-11T11:53:46.230+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67017, msg=սЭȼΪ 1~3 -2026-09-11T11:53:46.406+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67017, msg=սЭȼΪ 1~3 -2026-09-11T11:53:50.191+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67017, msg=ǩ -2026-09-11T11:53:50.319+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67017, msg=Э鲻ڻȨ -2026-09-11T11:53:50.536+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67017, msg=Э鲻ڻȨ -2026-09-11T11:53:50.689+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67017, msg=Э鲻ڻȨ -2026-09-11T11:53:53.950+08:00 INFO 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.r.s.i.CustomerDedupRuleServiceImpl : [ͻ] ȫDZ棺operator=739564171091247104, master=1, name=1/1ģʽֵ60%, phone=1 -2026-09-11T11:53:54.244+08:00 INFO 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.r.s.i.CustomerDedupRuleServiceImpl : [ͻ] ȫDZ棺operator=739564171091247104, master=0, name=0/2ģʽֵ90%, phone=0 -2026-09-11T11:53:54.419+08:00 INFO 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.r.s.i.CustomerDedupRuleServiceImpl : [ͻ] ȫDZ棺operator=739564171091247104, master=0, name=0/1ģʽֵ80%, phone=0 -2026-09-11T11:53:54.638+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=ƥ䷽ʽΪ 1(ȷ)/2(ģ)ƶֵΪ 0~100 -2026-09-11T11:53:54.791+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=ƥ䷽ʽΪ 1(ȷ)/2(ģ)ƶֵΪ 0~100 -2026-09-11T11:53:54.935+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=ƥ䷽ʽΪ 1(ȷ)/2(ģ)ƶֵΪ 0~100 -2026-09-11T11:53:55.194+08:00 INFO 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.r.s.i.CustomerDedupRuleServiceImpl : [ͻ] ȫDZ棺operator=739564171091247104, master=1, name=1/2ģʽֵ80%, phone=1 -2026-09-11T11:53:56.685+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ȱids -2026-09-11T11:53:56.869+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg= 100 ͻ -2026-09-11T11:54:00.880+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=68001, msg=ͼ̬Ƿ֧ list/split/board -2026-09-11T11:54:08.153+08:00 ERROR 8720 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753584089071616000, thumbKey=thumbnails/753584089071616000.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:54:08.497+08:00 ERROR 8720 --- [crm-app] [task-2] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753584091172962304, thumbKey=thumbnails/753584091172962304.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:54:08.609+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=ظԷǷظʱǵ/룩 -2026-09-11T11:54:09.012+08:00 INFO 8720 --- [crm-app] [task-3] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753584089704955904, insert=0, update=0, unchanged=0, fail=2, suspect=0 -2026-09-11T11:54:10.862+08:00 INFO 8720 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753584091592392704, insert=0, update=1, unchanged=0, fail=1, suspect=0 -2026-09-11T11:55:33.024+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T11:55:33.062+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T11:55:37.892+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=߲753584456966602752 -2026-09-11T11:55:38.376+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=ڱظ753584456819802112 753584456966602752 -2026-09-11T11:55:38.876+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=ȼңϼȼϸ¼3 10 -2026-09-11T11:55:39.359+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=δڵ㲻Ϊ߶˵㣨ϸӶ753584456819802112/753584457247621120 -2026-09-11T11:55:39.858+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=߶˵㲻ڿսڵ㼯 -2026-09-11T11:55:40.337+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67020, msg=Υ¼ 753584457100820480 ֶϼ -2026-09-11T11:55:41.279+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67018, msg=ͼѱ޸ģ汾ͻˢº -2026-09-11T11:55:44.530+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67021, msg=мΪ -2026-09-11T11:55:48.416+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67022, msg=༭мΪ -2026-09-11T11:55:49.659+08:00 ERROR 8720 --- [crm-app] [task-5] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753584515766550528, thumbKey=thumbnails/753584515766550528.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:55:50.888+08:00 ERROR 8720 --- [crm-app] [task-6] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753584521118482432, thumbKey=thumbnails/753584521118482432.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:55:51.106+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67023, msg=ģ汾ƥ䣬µģ壨 1 бͷ -2026-09-11T11:55:51.550+08:00 INFO 8720 --- [crm-app] [task-7] c.c.customer.task.ContactImportExecutor : ϵ˵ɣtaskId=753584521315614720, insert=3, update=0, unchanged=0, fail=2, suspect=0 -2026-09-11T11:55:53.061+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67024, msg=ȷϣظύ -2026-09-11T11:55:53.088+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T11:55:54.208+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67018, msg=ͼѱ޸ģ汾ͻˢº -2026-09-11T11:57:25.583+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T11:57:49.600+08:00 ERROR 8720 --- [crm-app] [task-8] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753585018948812800, thumbKey=thumbnails/753585018948812800.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:57:51.371+08:00 ERROR 8720 --- [crm-app] [task-9] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753585025911357440, thumbKey=thumbnails/753585025911357440.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T11:57:51.848+08:00 INFO 8720 --- [crm-app] [task-10] c.c.customer.task.ContactImportExecutor : ϵ˵ɣtaskId=753585026179792896, insert=1, update=0, unchanged=0, fail=1, suspect=0 -2026-09-11T11:59:14.790+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T11:59:17.313+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:01:06.827+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:03:17.595+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:03:49.022+08:00 ERROR 8720 --- [crm-app] [task-11] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753586526318755840, thumbKey=thumbnails/753586526318755840.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T12:03:51.088+08:00 INFO 8720 --- [crm-app] [task-12] c.c.customer.task.ContactImportExecutor : ϵ˵ɣtaskId=753586526553636864, insert=1, update=0, unchanged=0, fail=1, suspect=0 -2026-09-11T12:03:53.646+08:00 ERROR 8720 --- [crm-app] [task-13] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753586545948098560, thumbKey=thumbnails/753586545948098560.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T12:21:21.278+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:21:21.900+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:22:50.074+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:22:50.503+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:19.938+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:20.294+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:20.716+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:20.880+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:21.044+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:21.398+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:21.580+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:22.046+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:22.341+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:22.508+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:22.699+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67008, msg=ϵ˲ڻȨ -2026-09-11T12:23:23.422+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:23.530+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ȱimportMode -2026-09-11T12:23:52.319+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:52.714+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:53.277+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:53.475+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:53.645+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:54.039+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:54.213+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:54.366+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:54.665+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:54.816+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:55.713+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:23:55.914+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=ģ汾ƥ䣬µģ壨 1 бͷ -2026-09-11T12:25:12.495+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:12.834+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:13.235+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:13.402+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:13.560+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:13.932+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:14.086+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:14.232+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:14.556+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:14.955+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:15.862+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:16.323+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:16.372+08:00 ERROR 8720 --- [crm-app] [task-14] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753591925629517824, thumbKey=thumbnails/753591925629517824.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T12:25:16.525+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:16.957+08:00 INFO 8720 --- [crm-app] [task-15] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753591926048948224, insert=1, update=0, unchanged=0, fail=1, suspect=1 -2026-09-11T12:25:40.200+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:40.566+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:41.110+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:41.275+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:41.440+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:41.827+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:42.001+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:42.151+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:42.461+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:42.646+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:43.509+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:43.948+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:43.957+08:00 ERROR 8720 --- [crm-app] [task-16] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753592041438445568, thumbKey=thumbnails/753592041438445568.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T12:25:44.166+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:44.452+08:00 INFO 8720 --- [crm-app] [task-17] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753592041887236096, insert=1, update=0, unchanged=0, fail=1, suspect=1 -2026-09-11T12:25:45.302+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:45.440+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:45.584+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:45.737+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:45.903+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:46.244+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:46.271+08:00 ERROR 8720 --- [crm-app] [task-18] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753592051244728320, thumbKey=thumbnails/753592051244728320.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T12:25:46.453+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:46.558+08:00 INFO 8720 --- [crm-app] [task-19] c.c.customer.task.ContactImportExecutor : ϵ˵ɣtaskId=753592051546718208, insert=1, update=0, unchanged=0, fail=1, suspect=0 -2026-09-11T12:25:46.612+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:46.811+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:46.943+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:25:47.135+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:13.059+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:13.410+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:13.850+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:14.035+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:14.193+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:14.555+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:14.733+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:14.910+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:15.211+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:15.378+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:16.208+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:16.603+08:00 ERROR 8720 --- [crm-app] [task-20] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753592178625740800, thumbKey=thumbnails/753592178625740800.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T12:26:16.608+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:16.818+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:17.117+08:00 INFO 8720 --- [crm-app] [task-21] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753592178873204736, insert=1, update=0, unchanged=0, fail=1, suspect=1 -2026-09-11T12:26:17.967+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:18.095+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:18.247+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:18.414+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:18.838+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:19.157+08:00 ERROR 8720 --- [crm-app] [task-22] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753592189392519168, thumbKey=thumbnails/753592189392519168.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T12:26:19.161+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:19.373+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:19.483+08:00 INFO 8720 --- [crm-app] [task-23] c.c.customer.task.ContactImportExecutor : ϵ˵ɣtaskId=753592189585457152, insert=1, update=0, unchanged=0, fail=1, suspect=0 -2026-09-11T12:26:19.518+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:19.723+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:19.878+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:20.090+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:20.216+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:20.421+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:20.804+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:21.022+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:21.344+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:21.566+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:21.905+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:22.403+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:22.794+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:23.139+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T12:26:23.223+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T12:26:23.380+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67011, msg=δҵõֱܼ࣬ϵԱά֯ϵ -2026-09-11T12:26:23.403+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:26:23.565+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻͲΪ -2026-09-11T12:27:10.910+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:27:11.506+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ʡݲΪ -2026-09-11T12:27:11.537+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:27:11.737+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ʡݲΪ -2026-09-11T12:27:11.759+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:27:11.888+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ʽRequest method 'GET' is not supported -2026-09-11T12:28:04.830+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T12:28:05.100+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T12:28:05.260+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67011, msg=δҵõֱܼ࣬ϵԱά֯ϵ -2026-09-11T13:37:42.344+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:23.453+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:23.877+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:24.349+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:24.545+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:24.719+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:25.105+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:25.272+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:25.441+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:25.761+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:25.920+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:27.401+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:28.041+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:28.205+08:00 ERROR 8720 --- [crm-app] [task-24] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753611351905009664, thumbKey=thumbnails/753611351905009664.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T13:42:28.286+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:28.701+08:00 INFO 8720 --- [crm-app] [task-25] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753611352894865408, insert=1, update=0, unchanged=0, fail=1, suspect=1 -2026-09-11T13:42:29.459+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:29.622+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:29.773+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:29.927+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:30.132+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:30.482+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:30.534+08:00 ERROR 8720 --- [crm-app] [task-26] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753611362755674112, thumbKey=thumbnails/753611362755674112.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T13:42:30.672+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:30.808+08:00 INFO 8720 --- [crm-app] [task-27] c.c.customer.task.ContactImportExecutor : ϵ˵ɣtaskId=753611363099607040, insert=1, update=0, unchanged=0, fail=1, suspect=0 -2026-09-11T13:42:30.841+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:31.029+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:31.172+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:31.371+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:31.501+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:31.689+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:32.055+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:32.275+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:32.630+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:32.890+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:33.236+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:33.710+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:34.077+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:35.566+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T13:42:35.659+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T13:42:36.261+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T13:42:36.688+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T13:42:37.546+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:42:37.732+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻͲΪ -2026-09-11T13:45:42.835+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:43.221+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:43.652+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:43.814+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:44.001+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:44.386+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:44.568+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:44.756+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:45.082+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:45.251+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:46.456+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:46.901+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:46.916+08:00 ERROR 8720 --- [crm-app] [task-28] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753612186726694912, thumbKey=thumbnails/753612186726694912.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T13:45:47.089+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:47.451+08:00 INFO 8720 --- [crm-app] [task-29] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=753612186940604416, insert=1, update=0, unchanged=0, fail=1, suspect=1 -2026-09-11T13:45:48.248+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:48.391+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:48.544+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:48.708+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:48.890+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:49.214+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:49.240+08:00 ERROR 8720 --- [crm-app] [task-30] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753612196398759936, thumbKey=thumbnails/753612196398759936.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at jdk.internal.reflect.GeneratedMethodAccessor731.invoke(Unknown Source) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 18 common frames omitted - -2026-09-11T13:45:49.417+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:49.541+08:00 INFO 8720 --- [crm-app] [task-31] c.c.customer.task.ContactImportExecutor : ϵ˵ɣtaskId=753612196587503616, insert=1, update=0, unchanged=0, fail=1, suspect=0 -2026-09-11T13:45:49.587+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:49.810+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:49.943+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:50.185+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:50.490+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:50.909+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:51.277+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:51.521+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:51.911+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:52.146+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:52.498+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:53.142+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:53.529+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:55.074+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T13:45:55.170+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T13:45:55.874+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T13:45:56.382+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T13:45:57.872+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T13:45:58.035+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻͲΪ -2026-09-11T14:19:32.799+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T14:19:33.254+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T14:19:33.477+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T14:19:33.704+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ʡݲΪ -2026-09-11T14:19:33.753+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T14:19:33.990+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ʡݲΪ -2026-09-11T14:20:17.234+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T14:20:17.678+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T14:20:17.908+08:00 WARN 8720 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:14:41.643+08:00 INFO 9156 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 9156 (D:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by luowj in D:\code\crm-backend-matt) -2026-09-11T15:14:41.657+08:00 INFO 9156 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T15:14:44.814+08:00 INFO 9156 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T15:14:44.816+08:00 INFO 9156 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T15:14:44.864+08:00 INFO 9156 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 36 ms. Found 0 JPA repository interfaces. -2026-09-11T15:14:44.894+08:00 INFO 9156 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T15:14:44.896+08:00 INFO 9156 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T15:14:44.921+08:00 INFO 9156 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 7 ms. Found 0 Redis repository interfaces. -2026-09-11T15:14:45.230+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.230+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.231+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.231+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.231+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.231+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.231+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.231+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.232+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.232+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.232+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.232+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.232+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.232+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.232+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.233+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.233+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.233+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.233+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.233+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.233+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.234+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.234+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.234+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.234+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.234+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.235+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.235+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.235+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.235+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.235+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.235+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.235+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.236+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.236+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.236+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.236+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.236+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.236+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.236+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.237+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.238+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.239+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.240+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.241+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.242+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.243+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.244+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.245+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.246+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.247+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.248+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.249+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.249+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.250+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.251+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.251+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.251+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.251+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.251+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.251+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.251+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.252+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.252+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.252+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.252+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.252+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.252+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.252+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.252+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.253+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.253+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.253+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.253+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.253+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.253+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.253+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.254+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.255+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T15:14:45.261+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.262+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.262+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.262+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.262+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.262+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.263+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.263+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.263+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.263+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.263+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.263+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.263+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.263+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.264+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.265+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.266+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.266+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.266+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.266+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.266+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.266+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.266+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.267+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.267+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.297+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.297+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.297+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.297+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.297+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.297+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.297+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.297+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.298+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.299+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.299+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.299+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.299+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.299+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.299+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.299+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.300+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.301+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.301+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.301+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.301+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.301+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.301+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.301+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:14:45.301+08:00 WARN 9156 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T15:14:47.045+08:00 INFO 9156 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T15:14:47.092+08:00 INFO 9156 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T15:14:47.093+08:00 INFO 9156 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T15:14:47.209+08:00 INFO 9156 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T15:14:47.209+08:00 INFO 9156 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5468 ms -2026-09-11T15:14:48.112+08:00 INFO 9156 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T15:14:48.356+08:00 INFO 9156 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T15:14:50.017+08:00 INFO 9156 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T15:14:50.179+08:00 INFO 9156 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T15:14:50.252+08:00 INFO 9156 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T15:14:50.941+08:00 INFO 9156 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T15:14:50.995+08:00 INFO 9156 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T15:14:53.810+08:00 INFO 9156 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@16750a5e -2026-09-11T15:14:53.827+08:00 INFO 9156 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T15:14:54.204+08:00 WARN 9156 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T15:14:59.233+08:00 INFO 9156 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T15:15:23.034+08:00 INFO 9156 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T15:15:24.272+08:00 WARN 9156 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T15:15:24.273+08:00 WARN 9156 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T15:15:24.273+08:00 WARN 9156 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T15:15:24.273+08:00 WARN 9156 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T15:15:24.273+08:00 WARN 9156 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T15:15:28.666+08:00 INFO 9156 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T15:15:28.670+08:00 INFO 9156 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T15:15:29.625+08:00 INFO 9156 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T15:15:30.985+08:00 INFO 9156 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T15:15:30.994+08:00 INFO 9156 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T15:15:32.904+08:00 WARN 9156 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: 36a36403-b0d4-4b2c-a271-70665a11bb56 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T15:15:33.041+08:00 INFO 9156 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T15:15:37.536+08:00 INFO 9156 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T15:15:37.864+08:00 INFO 9156 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T15:15:37.998+08:00 INFO 9156 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 57.647 seconds (process running for 58.813) -2026-09-11T15:15:38.018+08:00 INFO 9156 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T15:15:40.769+08:00 INFO 9156 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T15:15:40.769+08:00 INFO 9156 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T15:15:41.139+08:00 INFO 9156 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T15:15:41.140+08:00 INFO 9156 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T15:15:41.228+08:00 INFO 9156 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T15:15:41.228+08:00 INFO 9156 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T15:15:41.616+08:00 INFO 9156 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T15:15:41.616+08:00 INFO 9156 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T15:15:43.966+08:00 INFO 9156 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T15:15:43.966+08:00 INFO 9156 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T15:15:44.061+08:00 INFO 9156 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T15:15:44.062+08:00 INFO 9156 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T15:15:44.155+08:00 INFO 9156 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T15:15:44.156+08:00 INFO 9156 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T15:15:44.247+08:00 INFO 9156 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T15:15:44.247+08:00 INFO 9156 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T15:15:44.266+08:00 INFO 9156 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T15:15:44.282+08:00 INFO 9156 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T15:15:44.282+08:00 INFO 9156 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T15:15:44.394+08:00 INFO 9156 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T15:15:44.414+08:00 INFO 9156 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T15:15:44.434+08:00 INFO 9156 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T15:15:44.434+08:00 INFO 9156 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T15:15:44.573+08:00 INFO 9156 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T15:15:44.589+08:00 INFO 9156 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T15:15:44.589+08:00 INFO 9156 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T15:15:44.685+08:00 INFO 9156 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T15:15:44.685+08:00 INFO 9156 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T15:15:44.777+08:00 INFO 9156 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T15:15:44.789+08:00 INFO 9156 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T15:15:44.789+08:00 INFO 9156 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T15:15:44.886+08:00 INFO 9156 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T15:15:44.886+08:00 INFO 9156 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T15:15:44.976+08:00 INFO 9156 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T15:15:44.976+08:00 INFO 9156 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T15:15:45.088+08:00 INFO 9156 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T15:15:45.236+08:00 INFO 9156 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T15:15:45.260+08:00 INFO 9156 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T15:15:45.260+08:00 INFO 9156 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T15:15:55.581+08:00 INFO 9156 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T15:15:55.592+08:00 INFO 9156 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T15:16:18.832+08:00 INFO 9156 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T15:16:18.847+08:00 INFO 9156 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 15 ms -2026-09-11T15:16:22.928+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:16:31.711+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:17:04.443+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:17:05.133+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:17:05.736+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:18:06.294+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:18:06.335+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token -2026-09-11T15:18:13.905+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=߲753635437741867008 -2026-09-11T15:18:14.632+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=ڱظ753635437586677760 753635437741867008 -2026-09-11T15:18:15.361+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=ȼңϼȼϸ¼3 10 -2026-09-11T15:18:15.974+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=δڵ㲻Ϊ߶˵㣨ϸӶ753635437586677760/753635438148714496 -2026-09-11T15:18:16.609+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=߶˵㲻ڿսڵ㼯 -2026-09-11T15:18:17.176+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67020, msg=Υ¼ 753635437930610688 ֶϼ -2026-09-11T15:18:18.299+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67018, msg=ͼѱ޸ģ汾ͻˢº -2026-09-11T15:18:22.107+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67021, msg=мΪ -2026-09-11T15:18:26.871+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67022, msg=༭мΪ -2026-09-11T15:18:31.198+08:00 ERROR 9156 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753635521460174848, thumbKey=thumbnails/753635521460174848.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T15:18:34.191+08:00 ERROR 9156 --- [crm-app] [task-2] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=753635537494999040, thumbKey=thumbnails/753635537494999040.jpg - -java.io.IOException: Cannot run program "soffice": CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[na:na] - at com.crm.file.service.impl.OfficeThumbnailRenderer.runConversion(OfficeThumbnailRenderer.java:110) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.service.impl.OfficeThumbnailRenderer.render(OfficeThumbnailRenderer.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateSync(ThumbnailGenerationTask.java:140) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generateWithLock(ThumbnailGenerationTask.java:102) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at com.crm.file.task.ThumbnailGenerationTask.generate(ThumbnailGenerationTask.java:70) ~[crm-file-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] - at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.14.jar!/:6.1.14] - at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.14.jar!/:6.1.14] - at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] - at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] - at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] -Caused by: java.io.IOException: CreateProcess error=2, ϵͳҲָļ - at java.base/java.lang.ProcessImpl.create(Native Method) ~[na:na] - at java.base/java.lang.ProcessImpl.(ProcessImpl.java:505) ~[na:na] - at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) ~[na:na] - at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ~[na:na] - ... 19 common frames omitted - -2026-09-11T15:18:34.523+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67023, msg=ģ汾ƥ䣬µģ壨 1 бͷ -2026-09-11T15:18:35.021+08:00 INFO 9156 --- [crm-app] [task-3] c.c.customer.task.ContactImportExecutor : ϵ˵ɣtaskId=753635537729880064, insert=3, update=0, unchanged=0, fail=2, suspect=0 -2026-09-11T15:18:36.631+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67024, msg=ȷϣظύ -2026-09-11T15:18:36.677+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:18:37.929+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67018, msg=ͼѱ޸ģ汾ͻˢº -2026-09-11T15:19:56.285+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:19:56.799+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:19:57.278+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:19:57.460+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻ -2026-09-11T15:20:21.768+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:20:22.224+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:20:22.607+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:20:44.571+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:20:45.081+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:20:45.442+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:20:46.221+08:00 WARN 9156 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T15:58:48.747+08:00 INFO 32576 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 32576 (D:\code\crm-backend-matt\crm-app\target\crm-app-1.0.0-SNAPSHOT.jar started by luowj in D:\code\crm-backend-matt) -2026-09-11T15:58:48.749+08:00 INFO 32576 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify" -2026-09-11T15:58:51.394+08:00 INFO 32576 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T15:58:51.398+08:00 INFO 32576 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-09-11T15:58:51.445+08:00 INFO 32576 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 34 ms. Found 0 JPA repository interfaces. -2026-09-11T15:58:51.476+08:00 INFO 32576 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode -2026-09-11T15:58:51.479+08:00 INFO 32576 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. -2026-09-11T15:58:51.496+08:00 INFO 32576 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces. -2026-09-11T15:58:51.777+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.779+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.780+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.780+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.780+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.780+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.781+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.781+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.782+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.783+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.784+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.784+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.784+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.784+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.784+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.784+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.785+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.785+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.785+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.785+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.785+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.786+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.786+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.787+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.787+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.788+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.789+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.790+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.790+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.790+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.790+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.790+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.790+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.791+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.791+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.791+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.791+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.791+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.791+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.791+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.792+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.792+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.792+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.792+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.792+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.792+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.792+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.793+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.793+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.794+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.795+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.795+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.796+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.796+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.797+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.797+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.797+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.798+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.798+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.799+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.800+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.800+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.801+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.801+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.801+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.801+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.801+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.802+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.802+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.802+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.803+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.804+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.804+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.805+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.805+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.805+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.805+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.805+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.805+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.805+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.805+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.806+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.806+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.806+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.806+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.806+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.807+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T15:58:51.816+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmBaseMapper' and 'com.crm.base.mapper.CrmBaseMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.816+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authIdentityMapper' and 'com.crm.auth.mapper.AuthIdentityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.816+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'authUserMapper' and 'com.crm.auth.mapper.AuthUserMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.816+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncSettingsMapper' and 'com.crm.auth.mapper.DtSyncSettingsMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.816+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dtSyncTaskMapper' and 'com.crm.auth.mapper.DtSyncTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.817+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDataScopeModuleMapper' and 'com.crm.auth.mapper.SysDataScopeModuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.817+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysDeptMapper' and 'com.crm.auth.mapper.SysDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.817+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysMenuMapper' and 'com.crm.auth.mapper.SysMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.817+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleDataScopeMapper' and 'com.crm.auth.mapper.SysRoleDataScopeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.818+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMapper' and 'com.crm.auth.mapper.SysRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.818+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRoleMenuMapper' and 'com.crm.auth.mapper.SysRoleMenuMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.818+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserDeptMapper' and 'com.crm.auth.mapper.SysUserDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.819+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserRoleMapper' and 'com.crm.auth.mapper.SysUserRoleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.819+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysUserTransferLogMapper' and 'com.crm.auth.mapper.SysUserTransferLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.819+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'fileInfoMapper' and 'com.crm.file.mapper.FileInfoMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.820+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupDefaultMapper' and 'com.crm.dict.mapper.DictGroupDefaultMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.820+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictGroupMapper' and 'com.crm.dict.mapper.DictGroupMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.821+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictItemMapper' and 'com.crm.dict.mapper.DictItemMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.821+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'dictRefCountMapper' and 'com.crm.dict.mapper.DictRefCountMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.822+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerDedupRuleMapper' and 'com.crm.rule.mapper.CustomerDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.822+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerReminderRuleMapper' and 'com.crm.rule.mapper.CustomerReminderRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.822+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMapper' and 'com.crm.rule.mapper.LeadPoolMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.822+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolMemberMapper' and 'com.crm.rule.mapper.LeadPoolMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.823+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolProvinceMapper' and 'com.crm.rule.mapper.LeadPoolProvinceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.823+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadPoolRegionMapper' and 'com.crm.rule.mapper.LeadPoolRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.823+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityDedupRuleMapper' and 'com.crm.rule.mapper.OpportunityDedupRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.823+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleDeptMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.824+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPoolRuleMapper' and 'com.crm.rule.mapper.OpportunityPoolRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.824+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPushRuleMapper' and 'com.crm.rule.mapper.OpportunityPushRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.826+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardFieldMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardFieldMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.826+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.826+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardTemplateMapper' and 'com.crm.rule.mapper.OpportunitySchemeCardTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.827+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeFieldDefMapper' and 'com.crm.rule.mapper.OpportunitySchemeFieldDefMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.827+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageNodeMapper' and 'com.crm.rule.mapper.OpportunityStageNodeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.828+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateDeptMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateDeptMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.828+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageTemplateMapper' and 'com.crm.rule.mapper.OpportunityStageTemplateMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.828+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectRuleMapper' and 'com.crm.rule.mapper.ProjectRuleMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.828+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'sysRegionMapper' and 'com.crm.rule.mapper.SysRegionMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.829+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userColumnPreferenceMapper' and 'com.crm.preference.mapper.UserColumnPreferenceMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.829+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userSavedViewMapper' and 'com.crm.preference.mapper.UserSavedViewMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.830+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'userViewFormMapper' and 'com.crm.preference.mapper.UserViewFormMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.830+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadAttachmentMapper' and 'com.crm.lead.mapper.LeadAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.830+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFeedbackMapper' and 'com.crm.lead.mapper.LeadFeedbackMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.830+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadFollowMapper' and 'com.crm.lead.mapper.LeadFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.830+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadHistoryMapper' and 'com.crm.lead.mapper.LeadHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.831+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'leadMapper' and 'com.crm.lead.mapper.LeadMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.831+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityAttachmentMapper' and 'com.crm.opportunity.mapper.OpportunityAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.831+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityCustomerMapper' and 'com.crm.opportunity.mapper.OpportunityCustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.831+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFocusMapper' and 'com.crm.opportunity.mapper.OpportunityFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.831+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityFollowMapper' and 'com.crm.opportunity.mapper.OpportunityFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.831+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityMapper' and 'com.crm.opportunity.mapper.OpportunityMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.832+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityOplogMapper' and 'com.crm.opportunity.mapper.OpportunityOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.832+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityPendingNoticeMapper' and 'com.crm.opportunity.mapper.OpportunityPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.832+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.832+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySchemeCardValueMapper' and 'com.crm.opportunity.mapper.OpportunitySchemeCardValueMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.832+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunitySiteSurveyMapper' and 'com.crm.opportunity.mapper.OpportunitySiteSurveyMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.832+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStageHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStageHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.832+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityStatusHistoryMapper' and 'com.crm.opportunity.mapper.OpportunityStatusHistoryMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.832+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityTeamMapper' and 'com.crm.opportunity.mapper.OpportunityTeamMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.833+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityViewLogMapper' and 'com.crm.opportunity.mapper.OpportunityViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.833+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'opportunityWorkPlanMapper' and 'com.crm.opportunity.mapper.OpportunityWorkPlanMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.833+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportFailMapper' and 'com.crm.customer.mapper.ContactImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.833+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'contactImportTaskMapper' and 'com.crm.customer.mapper.ContactImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.833+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerAgreementMapper' and 'com.crm.customer.mapper.CustomerAgreementMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.833+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactEdgeMapper' and 'com.crm.customer.mapper.CustomerContactEdgeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.833+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactGraphMapper' and 'com.crm.customer.mapper.CustomerContactGraphMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactMapper' and 'com.crm.customer.mapper.CustomerContactMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerContactRevealLogMapper' and 'com.crm.customer.mapper.CustomerContactRevealLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFocusMapper' and 'com.crm.customer.mapper.CustomerFocusMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerFollowMapper' and 'com.crm.customer.mapper.CustomerFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportFailMapper' and 'com.crm.customer.mapper.CustomerImportFailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerImportTaskMapper' and 'com.crm.customer.mapper.CustomerImportTaskMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerMapper' and 'com.crm.customer.mapper.CustomerMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerOplogMapper' and 'com.crm.customer.mapper.CustomerOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerPendingNoticeMapper' and 'com.crm.customer.mapper.CustomerPendingNoticeMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTeamMemberMapper' and 'com.crm.customer.mapper.CustomerTeamMemberMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferDetailMapper' and 'com.crm.customer.mapper.CustomerTransferDetailMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerTransferMapper' and 'com.crm.customer.mapper.CustomerTransferMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'customerViewLogMapper' and 'com.crm.customer.mapper.CustomerViewLogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'crmProjectMapper' and 'com.crm.project.mapper.CrmProjectMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectAttachmentMapper' and 'com.crm.project.mapper.ProjectAttachmentMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectFollowMapper' and 'com.crm.project.mapper.ProjectFollowMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'projectOplogMapper' and 'com.crm.project.mapper.ProjectOplogMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.834+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logBatchMapper' and 'com.crm.log.mapper.LogBatchMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.835+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logLoginMapper' and 'com.crm.log.mapper.LogLoginMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.835+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : Skipping MapperFactoryBean with name 'logOperationMapper' and 'com.crm.log.mapper.LogOperationMapper' mapperInterface. Bean already defined with the same name! -2026-09-11T15:58:51.835+08:00 WARN 32576 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration. -2026-09-11T15:58:53.525+08:00 INFO 32576 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) -2026-09-11T15:58:53.556+08:00 INFO 32576 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] -2026-09-11T15:58:53.556+08:00 INFO 32576 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31] -2026-09-11T15:58:53.640+08:00 INFO 32576 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext -2026-09-11T15:58:53.641+08:00 INFO 32576 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4810 ms -2026-09-11T15:58:54.573+08:00 INFO 32576 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0 -2026-09-11T15:58:54.809+08:00 INFO 32576 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0 -2026-09-11T15:58:56.069+08:00 INFO 32576 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2026-09-11T15:58:56.196+08:00 INFO 32576 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final -2026-09-11T15:58:56.255+08:00 INFO 32576 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled -2026-09-11T15:58:56.790+08:00 INFO 32576 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer -2026-09-11T15:58:56.851+08:00 INFO 32576 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2026-09-11T15:58:57.618+08:00 INFO 32576 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6fc9c0cc -2026-09-11T15:58:57.621+08:00 INFO 32576 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2026-09-11T15:58:57.718+08:00 WARN 32576 --- [crm-app] [main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) -2026-09-11T15:59:00.828+08:00 INFO 32576 --- [crm-app] [main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-09-11T15:59:21.292+08:00 INFO 32576 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-09-11T15:59:21.967+08:00 WARN 32576 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T15:59:21.967+08:00 WARN 32576 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile -2026-09-11T15:59:21.967+08:00 WARN 32576 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû -2026-09-11T15:59:21.967+08:00 WARN 32576 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md -2026-09-11T15:59:21.967+08:00 WARN 32576 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================ -2026-09-11T15:59:26.502+08:00 INFO 32576 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram -2026-09-11T15:59:26.507+08:00 INFO 32576 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ -2026-09-11T15:59:27.147+08:00 INFO 32576 --- [crm-app] [main] c.c.o.s.i.NoopSchemeCardProjectPortImpl : SchemeCardProjectPort ׮װ䣨A5 ĿģδߣPROJECT ܾ -2026-09-11T15:59:28.345+08:00 INFO 32576 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻 -2026-09-11T15:59:28.348+08:00 INFO 32576 --- [crm-app] [main] c.c.p.c.i.StubProjectConflictDetector : ProjectConflictDetector ׮װ䣨ͻ׮޳ͻspec 8/grill#7 ѡף -2026-09-11T15:59:29.214+08:00 WARN 32576 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration : - -Using generated security password: 8fd6bcf6-c3ac-4c94-a3c5-f4bcbef35b06 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2026-09-11T15:59:29.253+08:00 INFO 32576 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager -2026-09-11T15:59:31.209+08:00 INFO 32576 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ -2026-09-11T15:59:31.268+08:00 INFO 32576 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' -2026-09-11T15:59:31.313+08:00 INFO 32576 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 43.302 seconds (process running for 44.058) -2026-09-11T15:59:31.321+08:00 INFO 32576 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ... -2026-09-11T15:59:32.205+08:00 INFO 32576 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ -2026-09-11T15:59:32.206+08:00 INFO 32576 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ... -2026-09-11T15:59:32.654+08:00 INFO 32576 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ޵ -2026-09-11T15:59:32.655+08:00 INFO 32576 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵... -2026-09-11T15:59:32.762+08:00 INFO 32576 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button -2026-09-11T15:59:32.763+08:00 INFO 32576 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵... -2026-09-11T15:59:33.197+08:00 INFO 32576 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button -2026-09-11T15:59:33.197+08:00 INFO 32576 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ... -2026-09-11T15:59:34.279+08:00 INFO 32576 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0 -2026-09-11T15:59:34.279+08:00 INFO 32576 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵... -2026-09-11T15:59:34.376+08:00 INFO 32576 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button -2026-09-11T15:59:34.376+08:00 INFO 32576 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻׶ģȨӻ飨˵... -2026-09-11T15:59:34.467+08:00 INFO 32576 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻׶ģȨӻɣ˵0 button -2026-09-11T15:59:34.468+08:00 INFO 32576 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵... -2026-09-11T15:59:34.563+08:00 INFO 32576 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button -2026-09-11T15:59:34.564+08:00 INFO 32576 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ... -2026-09-11T15:59:34.579+08:00 INFO 32576 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0 -2026-09-11T15:59:34.593+08:00 INFO 32576 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ -2026-09-11T15:59:34.593+08:00 INFO 32576 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵... -2026-09-11T15:59:34.698+08:00 INFO 32576 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button -2026-09-11T15:59:34.712+08:00 INFO 32576 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽ׶ģѴڣcode=OPP_STAGE_TPL_01ͣãӻ -2026-09-11T15:59:34.726+08:00 INFO 32576 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ -2026-09-11T15:59:34.726+08:00 INFO 32576 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵... -2026-09-11T15:59:34.831+08:00 INFO 32576 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button -2026-09-11T15:59:34.844+08:00 INFO 32576 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ͻõѴڣid=1ӻ -2026-09-11T15:59:34.844+08:00 INFO 32576 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ִз͹Ȩӻ飨˵... -2026-09-11T15:59:34.934+08:00 INFO 32576 --- [crm-app] [main] OpportunityPushRulePermissionInitializer : ͹Ȩӻɣ˵0 button -2026-09-11T15:59:34.935+08:00 INFO 32576 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ִĿعȨӻ飨˵... -2026-09-11T15:59:35.040+08:00 INFO 32576 --- [crm-app] [main] pportunityDedupRulePermissionInitializer : ĿعȨӻɣ˵0 button -2026-09-11T15:59:35.087+08:00 INFO 32576 --- [crm-app] [main] c.c.rule.config.ProjectRuleInitializer : ĿѴڣid=1ӻ -2026-09-11T15:59:35.087+08:00 INFO 32576 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ִĿȨӻ飨˵... -2026-09-11T15:59:35.244+08:00 INFO 32576 --- [crm-app] [main] c.c.r.c.ProjectRulePermissionInitializer : ĿȨӻɣ˵0 button -2026-09-11T15:59:35.244+08:00 INFO 32576 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ִͬȨӻ飨˵... -2026-09-11T15:59:35.366+08:00 INFO 32576 --- [crm-app] [main] c.c.a.c.SyncTaskPermissionInitializer : ͬȨӻɣ˵0 button -2026-09-11T15:59:35.367+08:00 INFO 32576 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ִ־Ȩӻ飨˵... -2026-09-11T15:59:35.458+08:00 INFO 32576 --- [crm-app] [main] c.c.log.config.LogPermissionInitializer : ־Ȩӻɣ˵0 button -2026-09-11T15:59:35.534+08:00 INFO 32576 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ̻ 0 -2026-09-11T15:59:35.565+08:00 INFO 32576 --- [crm-app] [main] c.c.o.c.SchemeCardOwnerMigrationRunner : [scheme-card-owner-migration] ɣADR-0041 -2026-09-11T15:59:35.577+08:00 INFO 32576 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ -2026-09-11T15:59:35.878+08:00 INFO 32576 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ... -2026-09-11T15:59:46.419+08:00 INFO 32576 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ27 -2026-09-11T16:00:41.790+08:00 INFO 32576 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' -2026-09-11T16:00:41.818+08:00 INFO 32576 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 26 ms -2026-09-11T16:00:46.999+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:00:58.006+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:01:16.099+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:01:45.601+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:10:10.038+08:00 WARN 32576 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6fc9c0cc (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T16:11:10.028+08:00 WARN 32576 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@54bd2fa9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T16:11:20.047+08:00 WARN 32576 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@68707f91 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -2026-09-11T16:25:56.769+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:25:57.310+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ҵһΪ -2026-09-11T16:25:57.484+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T16:25:57.845+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T16:25:58.198+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T16:25:58.419+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻ -2026-09-11T16:25:58.603+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻ -2026-09-11T16:25:59.025+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T16:25:59.158+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ȱcustomerId -2026-09-11T16:25:59.382+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=customerId version -2026-09-11T16:25:59.560+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T16:25:59.762+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=customerId version -2026-09-11T16:26:00.979+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ȱcustomerId -2026-09-11T16:26:01.381+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T16:26:01.539+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T16:30:52.600+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:30:53.394+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ҵһΪ -2026-09-11T16:30:53.606+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ҵһΪ -2026-09-11T16:30:53.786+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ϵ绰ΪֻŸʽ -2026-09-11T16:30:53.955+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ϵ绰ΪֻŸʽ -2026-09-11T16:30:54.227+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid -2026-09-11T16:30:54.636+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=ڵ㲻ڸÿͻѱɾnull -2026-09-11T16:30:55.138+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=ڵ㲻ڸÿͻѱɾnull -2026-09-11T16:32:00.214+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:32:01.602+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻǼȡֵΪ 1~5 -2026-09-11T16:32:01.808+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻǼȡֵΪ 1~5 -2026-09-11T16:32:47.388+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:32:48.631+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67005, msg=ͻѱ޸ģˢº -2026-09-11T16:32:49.845+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=ȼңϼȼϸ¼1 2 -2026-09-11T16:32:50.331+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67019, msg=ȼңϼȼϸ¼1 2 -2026-09-11T16:34:53.648+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:34:58.690+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67018, msg=ͼѱ޸ģ汾ͻˢº -2026-09-11T16:37:41.844+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:37:43.657+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67005, msg=ͻѱ޸ģˢº -2026-09-11T16:37:46.391+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67018, msg=ͼѱ޸ģ汾ͻˢº -2026-09-11T16:38:16.166+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:38:18.202+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:38:20.796+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67005, msg=ͻѱ޸ģˢº -2026-09-11T16:38:22.823+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67018, msg=ͼѱ޸ģ汾ͻˢº -2026-09-11T16:39:14.416+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:39:14.523+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻȨ -2026-09-11T16:39:27.083+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token -2026-09-11T16:39:27.613+08:00 WARN 32576 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻȨ +2026-09-12T00:03:26.636+08:00 WARN 35324 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token +2026-09-12T00:03:47.229+08:00 WARN 35324 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token +2026-09-12T00:04:09.523+08:00 WARN 35324 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token +2026-09-12T00:04:09.734+08:00 WARN 35324 --- [crm-app] [http-nio-8080-exec-9] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7f28f1fa (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. diff --git a/logs/crm-app.log.2026-09-11.0.gz b/logs/crm-app.log.2026-09-11.0.gz new file mode 100644 index 0000000..3dec9c9 Binary files /dev/null and b/logs/crm-app.log.2026-09-11.0.gz differ